Ruby, GitHub, AWS i chwila nieuwagi, która mogła bardzo drogo kosztować

dodał 3 stycznia 2015 o 14:11 w kategorii Wpadki  z tagami:
Ruby, GitHub, AWS i chwila nieuwagi, która mogła bardzo drogo kosztować

Czasem udostępnienie w sieci pewnych informacji może generować spore koszty. Co gorsza bywa tak, ze wystarczy umieścić je w internecie dosłownie na kilka sekund, by zostały przejęte i wykorzystane – tak jak w poniższej historii.

Pewien programista eksperymentując z nieznanym wcześniej językiem programowania przez nieuwagę wysłał na GitHuba klucze API usługi AWS. W ciągu 5 minut zorientował się, co zrobił, klucze usunął i poszedł spać. Gdy obudził się następnego dnia, saldo jego konta nie wyglądało wesoło.

Nowy język, nowe wyzwania

Ciekawą historią dzieli się z nami autor serwisu devfactor.net. Zaczęła się ona w święta, gdy programista postanowił spróbować swoich sił z Ruby oraz Rails. W ramach treningu próbował zbudować klon usługi recenzowania lokali gastronomicznych. Szło mu całkiem dobrze do momentu, gdy zauważył potrzebę umieszczenia w sieci plików graficznych. Nie mógł skorzystać z Heroku, gdzie umieścił samą aplikację, zatem założył sobie konto w usłudze AWS firmy Amazon i skonfigurował hosting plików w S3. Zdawał sobie sprawę z konieczności utrzymania kluczy API w tajemnicy, zatem pobrał i zainstalował gema Figaro, by wszystkie poufne dane trzymać poza repozytorium Git.

Serwis, który budował nasz bohater

Serwis, który budował nasz bohater

Kiedy był już przekonany, że wszystko gra, wrzucił kod na GitHuba. Następnie pobrał go z serwisu by sprawdzić, czy na pewno nie ma w nim kluczy API. Niestety z bliżej nieustalonego powodu coś nie zadziałało jak powinno, odpowiedni wpis nie znalazł się w .gitignore i klucze API zostały opublikowane na GitHubie razem z kodem aplikacji. Nasz bohater jednak nie stracił głowy, usunął klucze z GitHuba, skasował wszystkie ślady wskazujące na to, że kiedykolwiek się one tam znalazły i poszedł spać. Cała operacja od wrzucenia kluczy do ich usunięcia nie trwała dużej niż 5 minut.

Poranna niespodzianka

Następnego dnia rano znalazł 4 wiadomości poczty elektronicznej od Amazona, jedno nieodebrane połącznie telefoniczne oraz 140 serwerów pracowicie kopiących bitcoiny na jego koncie. Dowiedział się w ten sposób, że klucze API S3 wystarczają do uruchomienia instancji EC2 oraz że nocka kopania może kosztować 2375 dolarów. Amazon był taki miły, że uwierzył w jego tłumaczenie i anulował opłatę, jednak nauczka pozostała.

Jordan Wright przejrzyście tłumaczy na swoim blogu, dlaczego 5 minut wystarczyło by nieuprawnione osoby poznały klucze API. „Winne” temu jest API GitHuba, które w czasie rzeczywistym udostępnia informację o wszystkich operacjach w serwisie. Wystarczy obserwować przypadki dodania nowego kodu a następnie pobrać odpowiedni fragment pliku z serwisu i sprawdzić, czy nie zawiera interesujących danych. Nie ma znaczenia, czy kluczowe informacje zostały usunięte po 10 sekundach czy 5 minutach – i tak mogą zostać przechwycone za pomocą dość prostego skryptu.

Rozwiązanie problemu

Pierwszą metodą uniknięcia kłopotów jest nie wysyłanie do GitHuba (ani innych publicznych repozytoriów kodu) poufnych danych, których ujawnienie może przynieść jakiekolwiek straty. Gdy już jednak się to przez przypadek zdarzy, wtedy obowiązkową procedurą jest nie tylko usunięcie danych, ale przede wszystkich zmiana hasła lub reset klucza API. Jeśli dane były w sieci chociaż przez sekundę w formie dostępnej publicznie, należy uznać je za ujawnione i znajdujące się w rękach osób, które wiedzą, jak je wykorzystać.

Aktualizacja: Jak słusznie na Facebooku zauważył Wojtek w przypadku kluczy API Amazona można także korzystać z usługi Identity and Access Management i generować na wszelki wypadek klucze z ograniczonymi uprawnieniami.