2.06.20233 min
Maxime Topolov

Maxime Topolov

O tym, jak deweloper obniżył koszty AWS o 90%, a potem zniknął

Poznaj historię znikającego Developera, który pomógł i... no właśnie.

O tym, jak deweloper obniżył koszty AWS o 90%, a potem zniknął

Właśnie zakończyłem ostatni audyt klienta SaaS. Jego historia jest warta opowiedzenia. To opowieść o chciwości, kłamstwach i pięknie hakowania.

O tym, jak klient obniżył swój miesięczny rachunek AWS o 90 tys. dolarów z pomocą tajemniczego dewelopera, który zniknął po zakończeniu pracy.

Kiedy 6 miesięcy później koszty AWS ponownie wzrosły do około 120 tys. dolarów miesięcznie, klient zadzwonił do mnie, abym pomógł mu zrozumieć, co tak naprawdę się wydarzyło. Wyrwało mnie to całkowicie z butów!

Sytuacja

Ze względu na umowę poufności nie mogę podać nazwy ani branży klienta.

Jest to jednak firma SaaS, dostarczająca produkt na bardzo niszowym rynku przemysłowym. Ich produkt można opisać jako model sztucznej inteligencji wykorzystujący dane z różnych aplikacji innych firm i zapewniający pewne cenne prognozy.

Są dwa ważne punkty, które odegrają dużą rolę w tej historii.

Dane są rozproszone w różnych aplikacjach innych firm, bez interfejsów API (maszyny przemysłowe), dlatego mój klient stworzył rozszerzenie Chrome, które je zbiera (jak RPA) i wysyła z powrotem do instancji AWS w celu pozyskania.

Model sztucznej inteligencji jest dość kosztowny w wykonaniu, co skutkuje wysokimi kosztami obliczeniowymi wynoszącymi średnio około 100 tys. dolarów miesięcznie.

Złoczyńca

Prawie rok temu niezależny programista skontaktował się z dyrektorem IT mojego klienta, mówiąc, że może pomóc mu obniżyć rachunki za chmurę o 90%. Jego oferta została odrzucona.

Ale kiedy kilka miesięcy później pracę przejął nowy dyrektor IT, musiał pokazać zarządowi kilka sukcesów. W międzyczasie deweloper nalegał, a nawet złożył ofertę nie do odrzucenia: weźmie pojedynczą wypłatę w wysokości 50 tys. dolarów, jeśli mu się uda, a jeśli nie, nie weźmie nic.

Był to tani zakład dla nowego dyrektora IT, który chciał zabłysnąć przed zarządem. Dał deweloperowi zielone światło.

Sztuczka

Tutaj zaczyna się moje dochodzenie. Pierwszą rzeczą, jaką zobaczyłem, było to, że nie wykonano żadnych commitów, poza rozszerzeniem Chrome. To było całkiem proste, scraping interfejsów różnych aplikacji, wyodrębnianie danych, wysyłanie ich do chmury i uruchamianie przetwarzania.

Nowa wersja, po tym jak deweloper nad nią pracował, podwoiła swoją bazę kodu. Pojawiły się setki nowych plików. Moją uwagę zwrócił szczególnie jeden, duży plik „accounts.yaml” zawierający około 1 miliona kont Google.

Co to do cholery tam robiło? Wszystkie konta wyglądały na fałszywe, prawdopodobnie nabyte w darknecie za sto dolarów.

Ten plik pozwolił mi dojść po nitce do kłębka.

Deweloper nie przesyłał już danych do chmury klienta. Utworzył próbne konta GCP przy użyciu jednego z miliona kont Google, a następnie przesłał tam model, dane, wykonał go i zamknął po zakończeniu zadania.

Było to możliwe tylko przy użyciu... rozszerzenia Chrome, aby zapobiec uruchomieniu kontroli bezpieczeństwa Google i odrzuceniu utworzenia konta.

Klient polegał głównie na zewnętrznych partnerach przy tworzeniu swojego oprogramowania, więc nie było żadnego strażnika, który sprawdzałby pracę dewelopera. Raportował bezpośrednio do dyrektora IT, więc nikt nie kwestionował jego pracy, ani nawet nie sprawdzał jego kodu.

Zgodnie z obietnicą koszty spadły o 90%. Zapłacono mu 50 tysięcy dolarów. Potem zniknął. Na dobre.

Zadowolony dyrektor IT chciał dać temu geniuszowi więcej zadań. Ale zniknął. Nie odpowiadał na e-maile, na telefonie odpowiadała poczta głosowa, zniknęło konto na LinkedInie. Po prostu się rozpłynął.

Upadek

Kilka miesięcy później koszty ponownie zaczęły rosnąć. Za każdym razem, gdy konto GCP free-tier nie działało, dane były wysyłane z powrotem do starego systemu AWS. Wyglądało na to, że w kodzie zabrakło prawidłowych kont Google i/lub Google zaczęło lepiej wyłapywać automatyczne tworzenie kont.

I tak to było ze znikającym developerem. Wnioski wyciągnijcie sami :)



Oryginał tekstu w języku angielskim przeczytasz tutaj.

<p>Loading...</p>