Źródła podają, że w ostatnim czasie wykryto 17 zainfekowanych obrazów Dockera (jedno z bardziej popularnych rozwiązań dla programistów i administratorów do tworzenia, wdrażania i uruchamiania aplikacji rozproszonych z wykorzystaniem kontenerów). Obrazy te zostały opublikowane na Docker Hub i pobrane przez użytkowników więcej niż 5 milionów razy. W kontenerach znajdowało się między innymi oprogramowanie do wydobywania (tzw. mining) kryptowaluty Monero.
Zainfekowane obrazy zostały umieszczone rok temu na oficjalnych repozytoriach Docker Hub, gdzie można publikować, pobierać i zarządzać obrazami kontenerów aplikacyjnych. Pierwsze publikacje zainfekowanych obrazów rozpoczęto w maju 2017 r. i były one dostępne aż do maja 2018 r., kiedy to Docker zdecydował się je usunąć. Według dostępnych danych ofiary miningu wydobyły nieświadomie 544 kryptowaluty Monero.
Zainfekowane obrazy dostarczały takie usługi jak MySQL - popularny i wydajny serwer baz danych i Apache Tomcat - kontener aplikacji webowych umożliwiający uruchomienie aplikacji w technologii Java. Oprócz samego mechanizmu miningu, w obrazie znajdowały się także tzw. backdoors pozwalające otrzymać dostęp do powłoki systemu. W efekcie oznacza to, że jeśli nawet nieświadomy użytkownik przestał używać zainfekowanego obrazu i usunął go z własnych repozytoriów, to osoba atakująca mogła, odpowiednio wcześniej, za pomocą innych narzędzi przyznać sobie dostęp do tego systemu.
Dla osób odpowiedzialnych za środowiska informatyczne w organizacjach, gdzie uruchamiane są krytyczne aplikacje biznesowe, istotną jest informacja, że należy tworzyć własne repozytoria kontenerów (Docker Registry), a także samodzielnie tworzyć i budować obrazy w których uruchamiamy aplikacje i usługi, lub korzystać z tych oficjalnych. Malware w rozwiązaniach rozproszonych jest także zagrożeniem dla bezpieczeństwa systemów, gdzie niezawodność i bezpieczeństwo danych jest jednym z kluczowych parametrów.
Wdrożenie kontenerów, zgodnie z dobrym praktykami i wykorzystaniem odpowiednich narzędzi, dbając o bezpieczeństwo pozwala tworzyć w pełni niezależne infrastruktury skalujące się na żądanie wg konkretnej metryki, np. ilości użytkowników lub obciążenia systemu. Innymi korzyściami z używania w środowiskach produkcyjnych Dockera są między innym: ułatwiony i znacznie szybszy proces deployowania (uruchamiania) aplikacji na środowiskach wieloserwerowych, spójność konfiguracji i wersji oprogramowania, izolacja i bezpieczeństwo, hybrydowe infrastruktury: fizyczne serwery i rozwiązanią chmurowe, kompatybilność i zarządzanie środowiskiem uruchomieniowym dla konkretnej aplikacji. Rozważając aspekty techniczne, należy też wspomnieć o długofalowych oszczędnościach wynikających z bardziej efektywnego wykorzystania posiadanych zasobów sprzętowych.Dodatkowo mając wdrożone kontenery, można w prosty sposób migrować usługi pomiędzy centrami danych lub tworzyć rozwiązania hybrydowe.
Jak działają i czym są kontenery?
Kontenery zdobywają ogromną popularność dzięki swojej lekkości. W dużym uproszczeniu możemy je określić jako środowisko uruchomieniowe aplikacji zarówno na serwerach fizycznych kolokowanych w skrupulatnie strzeżonych serwerowniach jak i w środowiskach chmurowych (cloudowych). Ogromną zaletą kontenerów jest to, że nie ma konieczności emulowania warstwy sprzętowej i systemu operacyjnego (jest to wymagane w przypadku wirtualizacji), co pozwala zaoszczędzić zasoby lokalne jak i w chmurze .
Kontenery umożliwiają także tworzyć i uruchamiać oprogramowanie. Specjalnie przygotowana konfiguracja pozwala zbudować niezmienny obraz i uruchomić go na fizycznym serwerze lub klastrze zarządzanych przez dodatkowe oprogramowanie typu cluster management. Mówiąc ‘niezmienny obraz’ możemy o tym myśleć jak o snapshot’cie aplikacji, która jest gotowa do pracy i uruchomienia na serwerze.
Zgodnie z dobrymi praktykami w kontenerze uruchamiamy tylko jedną konkretną aplikację lub usługę. Kolejne aplikacje lub usługi stanowiące integralny w pełni działający system uruchamiany jest w kolejnych kontenerach. Kontenery mogą być uruchomione na jednym z serwerów lub rozproszone na logicznym klastrze, składającym się z wielu serwerów. Klaster może być zarządzane przez wspomniany wcześniej rozwiązanie cluster management takie jak Nomad, Apache Messos lub bardzo popularny Kubernetes.
Idąc dalej, podejście takie pozwala tworzyć skalowalne na żądanie systemy, w których uruchamiamy usługi. Cluster management zadba o to, aby uruchomić odpowiednią ilość kontenerów, gwarantując jednocześnie tzw.Service Level Agreement usług, a tym samym rozproszyć je na wszystkich serwerach stanowiących klaster (chyba, że inaczej zdecydujemy). Aplikacja lub usługa, którą zamierzamy uruchomić w kontenerze powinna być zaprojektowana zgodnie z architekturą mikroserwisów i być bezstanowa (stateless). Mając taką architekturą i wdrożoną kulturę DevOPS, pozwalającą w prosty sposób zarządzać repozytoriami kodu i obrazami kontenerów wpływamy znaczący na rozwój i bezpieczeństwo systemu.
Jakub Hajek @_jakubhajek