10:19
2/9/2015

Wraz z instalką Visual Studio 2015 dystrybuowana jest wtyczka do GitHuba. Wtyczka ta została stworzona przez programistów GitHuba wspólnie z programistami Microsoftu (obecnie MS jej już nie rozwija). Niestety, wtyczka posiada poważny błąd, który w pewnych okolicznościach może spowodować dotkliwe straty po stronie developerów (lub firm) z niej korzystających.

Rachunek za incydent

Rachunek powstały w wyniku błędu we wtyczce Visual Studio do GitHuba

Carlo, to developer, który tworzy oprogramowanie za pomocą Visual Studio 2015 i korzysta z GitHuba. Jeden z jego projektów (do którego dostęp powinien być ściśle ograniczony) został ujawniony w publicznym repozytorium. Efekt? Po kilku godzinach Carlo otrzymał rachunek od Amazona za usługę AWS na 6 500 dolarów…

A wszystko zaczęło się od aktualizacji Visual Studio do wersji 2015. Developer zachwycony integracją VS z GitHubem (możliwość prostego “commitowania” kodu do lokalnego repozytorium git i jego synchronizacji z GitHubem) zaczął z tej funkcji aktywnie korzystać. Przy czym zaznaczyć należy, że Carlo jest płatnym użytkownikiem GitHuba, a więc ma możliwość tworzenia tzw. “prywatnych repozytoriów”, do których dostęp jest ograniczony.

Tworzenie repozytorium prywatnego na GitHubie za pomocą Visual Studio

Tworzenie repozytorium prywatnego na GitHubie za pomocą Visual Studio

Ponieważ VS 2015, jak widać powyżej, wspierał tworzenie prywatnych repozytoriów, Carlo postanowił przesiąść się z narzędzia gita pracującego w wierszu poleceń na wygodniejszy interfejs zarządzania repozytorium poprzez Visual Studio. Problem w tym, że checkbox “Private Repository” w rzeczywistości nie działa, a wiec cały commitowany do GitHuba kod, który miał być dostępny tylko dla wybranych par oczu jest momentalnie widzialny dla każdego…

Mail od Amazonu po 10 minutach

Złośliwe wykorzystanie wgranego do GitHuba i upublicznionego prywatnego repozytorium nastąpiło już po 10 minutach. Wtedy właśnie nadszedł pierwszy e-mail z Amazonu o temacie Twoje konto AWS zostało przejęte. Z wiadomości Carlo dowiedział się, że jego klucz (a dokładnie IAM key) został ujawniony na GitHubie.

Na marginesie, automatyczny e-mail od Amazonu zapewne jest związany z monitoringiem commitów, jakie ta firma stale prowadzi w poszukiwaniu kluczy swoich klietnów. Postawa godna pochwały.

Ratujemy świat

Pierwsze co zrobił Carlo, to sprawdzenie, czy na AWS powiększył mu się rachunek. Na szczęście nic nie wskazywało na to, że ktoś aktywnie korzysta z jego konta, gdyż żadne dodatkowe opłaty nie zastały naliczone. Carlo zmienił więc hasło roota i unieważnił wszystkie klucze dostępowe, z których korzystał. Przed wylogowaniem się z AWS jeszcze raz sprawdził saldo — dalej w normie.

Po kilku minutach od “sprzątania” otrzymał od Amazonu informacje potwierdzającą, że ujawniony klucz został skasowany. Ponieważ była już 1 w nocy, Carlo poszedł spać. Niestety, jego pobudka nie należała do najmilszych… O 7 rano odebrał e-maila od Amazonu, w którym firma dziękowała mu za zapisanie się do usługi Amazon EC2. Kiedy Carlo spojrzał na saldo, jego oczom ukazało się dodatkowe 1 700 USD na rachunku…

Carlo, który nie korzystał do tej pory z EC2 zaczął kasować instancje ze swojego regionu, ale te powracały. Developer nie był świadomy, że posiadał co najmniej 20 instancji w każdym regionie… Skontaktował się z supportem Amazonu, który kazał mu zmienić hasło roota, unieważnić klucze i zabić wszystkie instancje, co — jak wydawało się Carlowi — zrobił pomyślnie. Niestety, patrząc na rachunek, kwota dalej rosła. Na liczniku było już 3 000 USD.

Po kilkudziesięciu minutach Carlo dowiedział się od supportu, że musi ubić nie tylko instancje, ale także tzw. “spot instances“. Do momentu uporania się z poprawnym skasowaniem instancji, rachunek podskoczył do 6 500 USD.

Szczegółowa rozpiska kosztów

Szczegółowa rozpiska kosztów

Jeśli zastanawiacie się, jakim cudem ktoś tak szybko wykradł i wykorzystał klucze Carlo, oto odpowiedź:

Bitcoinowi kopacze stale skanują źródła na GitHubie w poszukiwaniu kluczy Amazonu, a kiedy je zdobywają zakładają za ich pomocą potężne instancje, które wykorzystują do kopania wirtualnej waluty na czyjś rachunek.

Mam korzystam z Visual Studio — co robić, jak żyć?

Na opisane powyżej problemy z githubową wtyczką do VS2015 dostępna jest już łatka.

Na marginesie, warto wspomnieć o tym, aby wrażliwe dane w plikach konfiguracyjnych szyfrować. Oczywiście “zaszyfrowane” klucze muszą przez oprogramowanie zostać odszyfrowane zanim zostaną wykorzystane, ale takie zaciemnienie kodu (tzw. security by obscurity) choć długofalowo nie podnosi bezpieczeństwa, bo da się łatwo obejść, przynajmniej spowoduje, że unikniemy wyłapania przez parser szukający konkretnych struktur w kodzie (tj. np. kluczy Amazonu). Klucze można też składować w osobnym pliku, który zostanie wyłączony z repozytorium poprzez mechanizm .gitignore. Kilka innych pomysłow na ochronę “sekretów” w kodzie znajdziecie tutaj.

I na koniec — pamiętajce, aby przy pierwszym wykorzystaniu jakiejś nowej funkcji w zaktualizowanym oprogramowaniu (nie tylko w Visual Studio 2015) warto sprawdzić, czy funkcja ta rzeczywiście działa.

Przy okazji, Amazon mógłby ułatwiać procedurę odzyskiwania konta, generują jeden “panic button” lub wprowadzając ograniczenie na rachunek (przyrost nie więcej niż X USD na godzinę). Jeśli korzystacie z Amazona, warto zapoznać się z tymi 3 artykułami, które opisują popularne problemy z “bezpieczeństwem” konta.

Jeśli nie jesteś developerem, a bezpiecznikiem, polecamy przygotować sobie w miarę jasne instrukcje przeznaczone dla developerów na skutek problemów (przejęcia) konta Amazonowego (dla każdej z usług). Interfejs i mechanika usług Amazonu nie należy do najprostszych, a na pewno nie będzie łatwo nauczyć się jej w trakcie stresu spowodowanego przejęciem konta. Programiści powinni wiec mieć proste instrukcje — co zrobić: gdzie kliknąć i w jakiej kolejności.

Carlo, z całego incydentu wyciągnął jeden wniosek:

“Jeśli nie chcesz, aby twoje prywatne dane narażone były na upublicznienie, nie umieszczaj ich w chmurze”

Za informację o problemach Carlo dziękujemy Jakubowi z Polakpotrafi.pl

PS. Jeśli jesteś programistą i interesuje Cię nie tylko bezpieczeństwo “operacyjne” tworzenia oprogramowania, ale także błędy, jakie można popełnić w kodzie podczas tworzenia webaplikacji, to zapraszamy na nasze warsztaty z Ataku i Ochrony Webaplikacji. Właśnie udostępniliśmy termin tego bestsellerowego i do bólu praktycznego szkolenia w Warszawie. W szkoleniu wzięło już udział ponad 3000 programistów z Polski i zagranicy, i patrząc po ocenach (średnia to 9,4/10) bardzo im się podobało :-)

Przeczytaj także:

53 komentarzy

Dodaj komentarz
  1. Sam się prosił o problemy. Wszelkie poufne dane dostępowe powinny być poza repozytorium, w plikach konfiguracyjnych. A wszelkie example z danymi nie powinny mieć danych, których upublicznienia się boimy.

  2. Ja piernicze. Kto synchronizuje z repo produkcyjne pliki konfiguracyjne?

  3. Jak widać Microsoft poczynił kolejny krok naprzód po domyślnym udostępnianiu sieciowym całego katalogu Users/Użytkownicy w systemach Windows… :)

  4. To M$ kiedyś coś zrobił co nie było sp*&^%$^&ne?
    Ich cały VSS – koszmar każdego zespołu programistów …tym razem postanowili “ułatwić” ludziom życie, w taki sposób aby zatęsknili jeszcze za tym potworem.
    A jeszcze jeden morał: klikanie zamiast linii poleceń zawsze na dłuższą metę było kosztowniejsze ;)

    • Bawi mnie ilość hejtu w stronę MS w twoim komentarzu, bo to nie oni zawinili. Bug nie znajdował się w VS, tylko w dodatku “GitHub Extension for Visual Studio”, który jest open source i zarządza nim sam GitHub.

    • Aha, @Daniel czytasz ze zrozumieniem i ze źródeł jak widzę.
      1. M$ rozpowszechnił wadliwe rozszerzenie razem z najnowszą wersją VS (i dalej rozpowszechnia bo instalujesz stare [już zablokowano tworzenie repo przy jej pomocy] a potem dopiero instalujesz łatkę – WTF?!).
      2. Wtyczka jest na GitHubie i niby zarządzana przez “użytkownika” GitHub ale programistami, którzy ją tworzą są ludzie M$ i w zasadzie jako jedyni biorą aktywny udział w tworzeniu tej wtyczki.
      3. Nie wiesz co to hejt, ale jak popracujesz narzędziami M$ przez jakieś 20 lat, to być może otrzesz się o “mastering” :P

    • A powiedz mi @Wentylator gdzie tu widzisz ludzi z Microsoft: https://github.com/github/VisualStudio/graphs/contributors ? Powiesz mi konkretnie jacy to ludzie – “programistami, którzy ją tworzą są ludzie M$ i w zasadzie jako jedyni biorą aktywny udział w tworzeniu tej wtyczki.” dwie osoby aktywne to shana i haacked, którzy oboje to pracują w GitHub.

    • > A jeszcze jeden morał: klikanie zamiast linii poleceń zawsze na dłuższą metę było kosztowniejsze ;)
      – Tu się zgadzam.

      > To M$ kiedyś coś zrobił co nie było sp*&^%$^&ne?
      – Pakiet Office, cała seria narzędzi deweloperskich (chyba, że znasz realnie lepsze – lepsze z punktu widzenia dewelopera – IDE od VS do stacku C#/.NET, to bardzo chętnie posłucham, tylko zależałoby mi na opinii podpartej przynajmniej kilkudziesięcioma godzinami pracy w tymże). Co do reszty, to nie będę się wdawał w dyskusję, ale skoro zarabiają na swoim sofcie niemałe pieniądze to najwyraźniej jest wystarczająco dobre.

      > Nie wiesz co to hejt, ale jak popracujesz narzędziami M$ przez jakieś 20 lat, to być może otrzesz się o “mastering” :P
      – Jeśli dobrze zrozumiałem Twoją sytuację, to niespecjalnie przepadasz za narzędziami MS (sorry, M$), a mimo to pracujesz z nimi od 20 lat… Albo zrozumiałem źle, albo trochę to smutne jest, bo nie znam w tej branży chyba nikogo, kto nie potrafiłby sobie w takim czasie zmienić technologii na inną (np. taką, która nie ma dolarów w nazwie).
      Z drugiej strony przyznam, że już dawno oswoiłem się z motywem ogólnego narzekania na produkty MS ponieważ bo tak i już (może to modne kiedyś było, nie wiem, nie znam się na trendach narzekania).

    • Czy ktoś ma jakieś doświadczenia z programowaniem aplikacji klient-serwer w czymś innym niż MS SQL+ jakieś IDE od MS i mógłby to porównać. Czy to właśnie rozwiązanie MS SQL + VS jest najwygodniejszym/najwydajniejszym rozwiązaniem?

    • @Tim: Mono, kurwa, develop: https://pbs.twimg.com/media/CLc8-SsW8AAcLO9.png

    • tfu, tmr, nie tim (ten komentarz będzie miał sens po akceptacji poprzedniego).

  5. Gość wypycha do repo hasła? Serio?

  6. Chmury to zło.

    • Powtarzam to nieprzerwanie do 10 lat

    • Jedynie w przypadku upału przynoszą ulgę.

  7. “Oczywiście “zaszyfrowane” klucze muszą przez oprogramowanie zostać odszyfrowane zanim zostaną wykorzystane, ale takie zaciemnienie kodu (tzw. security by obscurity) choć długofalowo nie podnosi bezpieczeństwa, bo da się łatwo obejść, przynajmniej spowoduje, że unikniemy wyłapania przez parser szukający konkretnych struktur w kodzie (tj. np. kluczy Amazonu).”

    Właśnie dlatego np. ja w swoich aplikacjach szyfruję wszystkie hasła w plikach konfiguracyjnych, w tym hasło do bazy danych :)

    • Najbezpieczniej jest po prostu używać zmiennych środowiskowych, dzięki czemu w naszym kodzie nie ma żadnych haseł.

  8. Rewelacyjny pomysł, żeby wrzucać hasła na repozytorium, jeszcze pewnie plain textem :)
    public string HELLO_WORLD_THIS_IS_THE_PASSWORD_YOURE_WELCOME = “qwerty”;

    • Ja rozumiem, że to nie jest zbyt mądre, ale za diabła nie mogę zrozumieć tego bezgranicznego hejtu na bohatera artykułu. W zamyśle on ZAWSZE wrzucał pliki na repo PRYWATNE.

      Sami swoje hasła składujecie zbiorczo w jakichś aplikacjach, czy wręcz na jakichś serwisach on-line z opcją synchronizacji na 65535+ urządzeń i wierzycie, że niby też są zawsze prywatne… ;>

    • @Adam nie wrzuca się do repo takich rzeczy po prostu. Właśnie z takich powodów.

      A menadżery haseł teraz też już są bardziej złożone.

      A jak jesteś zalogowany na urządzeniu to ono nie przechowuje hasła.

      Poza tym jest różnica między hasłem do mojego maila, którym co najwyżej mi w życiu nabruździsz, spowodujesz niewysokie straty, a kluczami do amazona, gdzie można nabić rachunek na tysiące dolców :P

      A jakby poszedł na imprezę i się zorientował kolejnego dnia wieczorem?

      Jest różnica trochę.

    • @Adam
      Pierwsza zasada internetu: prywatność nie istnieje. W najlepszym wypadku dostaniesz tymczasową ułudę prywatności o bliżej nieokreślonej dacie ujawnienia. Zawsze wrzucając cokolwiek do sieci trzeba zakładać, że najbardziej niekorzystne wykorzystanie tych informacji to tylko kwestia czasu.

    • @takwlasnie, @Cyrk
      Rozumiem.
      Z meilem też można trochę namieszać, bo dużo rzeczy opiera się właśnie o skrzynkę e-mail.

      Najgorsze, że nawet składowanie wyłącznie na fizycznym dysku nie zawsze jest 100%. gwarancją prywatności.
      O bystrych fonach z fabrycznym softem i bardzo wygodną chmurą już nie wspominam nawet.

      No ale cóż, taki znak czasów.

      Pozdrawiam.

  9. Wywalcie tę kropkę z tytułu, bo nie powinno jej tam być.

    • To. Kropka. Nienawiści.

    • To bardzo ważna kropka DNS ;)

    • Raczej kropka niewiedzy. Postanowiłeś WZIĄŚĆ przykład z pewnej posłanki?

  10. Kolejna lekcja: korzystać z amazonowego IAM i tworzyć użytkowników z ograniczonymi prawami a praw tych jest dosyć sporo.

  11. .env
    i wyjątki w git…

  12. Nihil novi.

    Podobna akcja była rok temu, tyle, że z developerem Ruby. Też wrzucił na publiczne repo na githubie klucze i hasła dostępu do swojego konta na chmurze obliczeniowej amazonu i ktoś na jego koszt zrobił sobie kopanię bitcoinów.

    Po za tym. Bez jaj. Kto używa do Git’a pluginów w VS?
    Toż to już od dawna, wszelkie “gwiazdy” programistycznego świata się z tego śmiały.

    Generalnie, ten dev popełnił co najmniej 3 poważne błędy i M$ nie ma sobie tutaj nic do zarzucenia.

    p.s. i pisze to jako wieloletni .net dev pracujący na co dzień zarówno z Visual Studio, jak i z Git-em (konto na githubie też posiadam).

    • “M$ nie ma sobie tutaj nic do zarzucenia”
      Nie.

  13. bitcoinowy kopacz, w artykule to brzmi jakby każdy kto kopie bitcoiny był złym hackerem. Trochę to mylące

  14. Tytuł artykułu jest więc zły i mylący, przez mam wrażenie, że ktoś chce podbić sobie wyświetlenia przez czarny pijar.

    Błąd we wtyczce spowodował straty na 25k. Czy jeżeli w aplikacji na dowolny system mobilny byłby błąd to nagłówek brzmiałby: “Błąd w spowodował straty” lub gdyby coś podobnego stało się z wtyczką do przeglądarki to tytuł brzmiałby: “Błąd w spowodował straty”?

    “Wtyczka ta została stworzona przez programistów GitHuba wspólnie z programistami Microsoftu.”

    Wtyczka jest tak dobra jak osoby, które ją wykonały. Zgodnie z opisem w artykule błąd był związany z komunikacją z GitHub-em (przesłanie danych do ‘złego’ repozytorium) za co zapewne odpowiadali jego programiści oraz oni jako główny wydawca są odpowiedzialni za to co trafia do kodu produkcyjnego.

    Ja wiem że dziennikarstwo w Polsce umie działać tylko przy wykorzystaniu sensacji ale niebezpiecznik.pl przynajmniej jeszcze do niedawna starał się trzymać poziom.

    • W przykładowych tytułach chodziło mi oczywiście o “Błąd w OS spowodował straty” i “Błąd w PRZEGLĄDARCE spowodował starty” użyłem nieopatrznie znaków mniejszy i większy przez co tekst został potraktowany jako html.

  15. Sam błąd we wtyczce może i jest, ale na pewno nie jest to przyczyna problemów tego pana. Lokalne repo, publiczne, prywatne, nieważne… Nie trzymamy tam konfiguracji, haseł, kluczy.

  16. [troll mode on]
    bo prawilny programista kodzi w Vi a nie jakimś szajsie
    [troll mode off]

    • Tylko Emacs ! -_-

    • Emacs będzie bezpieczny tylko wtedy, jak na tej samej maszynie Sendmaila odinstaluje… :>

  17. Ale bzdury Panowie piszecie w komentarzach…
    Niektórzy pracują tak, że dwóch ludzi nad kodem jest w dwóch róznych lokalizacjach… Czas reakcji jest liczony w godzinach, a klucz do publikacji update’ów jest jeden – musi być w chmurze, bo inaczej całą “redundancję” osób pracujących nad kodem szlag trafia…

    Trochę zrozumienia dla ludzi pracujących grupowo nad stosunkowo niewielkimi projektami…

  18. 1. wrzucanie do repo konfiguracji
    2. a jakby założyć repo na stronie i dopiero do niego commitować a nie zakładać z vs?
    to by już normalnie działało
    3. czyli vs nie miał obsługi gita wcześniej? a teraz zamiast normalnego gita wcisnęli niesprawną integrację z githubem?
    ehh, chyba netbeans nie jest taki zły…

    • ad3: VS miał integracje z Gitem już od ponad roku. Właśnie znalazłem post na moim blogu z 2 sierpnia 2014 roku, w którym powołałem się na jeszcze wcześniejszy wpis z twittera Roy Osherove:

      If you’re using git from the vs menus, you’re not getting out of your comfort zone and not really learning a new skill.

      Ogólnie, do używania git’a powinno się korzystać z odpowiednio zmodyfikowanej konsoli Pod windowsem osobiście preferuję “console2”. Projekt powinno się tworzyć za pomocą wiersza poleceń, później dodać do niego pliki “readme” oraz “.gitignore”, zrobić kontrolnego pusha i posprawdzać co poszło, że o nie umieszczaniu prywatnych haseł w kodzie (i innych tego typu rzeczy, jak np. prywatne klucze pgp), który commitujemy już chyba wspominać nie muszę.

  19. Wydali człowiekowi 25k , a pewnie nie zarobili nawet paru złotych … po co to komu

    • Bo wydali nieswoje, a zarobili swoje ;)

    • Bo wiedza kosztuje – w tym przypadku $25k. :P

  20. Bo to programista ruby… Nie oczekuj zbyt wiele.

  21. Po czym odróżnić teretyka bezpieczeństwa od praktyka? Ten z doświadczeniem wie, że SbO jest niezbędnym ELEMENTEM zabezpieczeń, gdyż skrajnie niskim nakładem pracy znacząco wydłuża czas niezbędny do skutecznego ataku, czym może całkowicie zniechęcić bądź uczynić atak nieopłacalnym.

    PS. podkreślam słowo ‘element’, żeby zaraz jakiś funkcjonalny analfabeta nie zaczął ze mną dyskusji o czymś, czego nie napisałem.

    PPS. fajny jest ten link do RSS tak blisko przycisku “Dodaj”, to tak żeby pamięć trenować? :)

  22. Od paru lat nie używam już EC2, więc prośba o informację – nie ma w Amazon funkcji ograniczania wydatków miesięcznych? W Azure mozna zdefiniowac górny limit wydatków.
    http://azure.microsoft.com/en-us/pricing/spending-limits/

  23. Widać ktoś nie zapoznał się z http://12factor.net/

  24. ja się przyzwyczaiłem do cmdera, a w vs nie robiłem nic co bym chociaż próbował wrzucić do repo
    no i integracja tak z gitem jak mercurialem w nb ogranicza się do okienka w którym wpisujesz argumenty i wszystko chodzi jak marzenie

  25. Jest w AWS możliwość ustawienia alertów i określonych akcji dla nich, łącznie z notyfikacjami. Generalnie wszystko sie da, zależy od poziomu świadomości. Pozatym jednego nie rozumiem, czemu nie włączył 2FA, AWS wspiera trzy modele, w tym jeden darmowy i software’owy z Google Authenticator. Wtedy nawet gdyby stracił hasło, bez pin code’u nikt by mu sie na konto nie zalogował. 2FA to minimum!

  26. Sorki za offtopic, ale od rana nie działa mi jabber.at(strona tez niedostępna), nie wie ktos cos na ten temat?

  27. Nie rozumiem, Amazon wykrył wyciek “IAM key” i nie zablokował konta i nie unieważnił tych kluczy automatycznie?
    To byłoby logiczne postępowanie. Jak już się monitoruje i wykrywa tak poważny problem, to należy chronić klienta.

    • A po co? Przecież dzięki temu sami mogą zarobić dodatkową kasę!

  28. Ostatnio stało się “modne” (taki trend) upublicznianie wszystkiego – teraz już nie tylko NSA może mieć wgląd w poufne rzeczy, ale każdy internauta. Albo sam pomoże ujrzeć światu te dane, albo ktoś mu “pomoże” (człowiek/hacker albo błąd oprogramowania).

Twój komentarz

Zamieszczając komentarz akceptujesz regulamin dodawania komentarzy. Przez moderację nie przejdą: wycieczki osobiste, komentarze nie na temat, wulgaryzmy.

RSS dla komentarzy: