19% najlepszych obrazów platformy Docker nie ma hasła roota
W ostatnią sobotę, 18 maja, Jerry Gamblin z Kenna Security sprawdzony 1000 najpopularniejszych obrazów z Docker Hub na podstawie hasła root, którego używają. W 19% przypadków było ono puste.
Tło z alpejskim
Powodem mini-badania był raport o lukach w zabezpieczeniach Talos, który ukazał się na początku tego miesiąca (TALOS-2019-0782), którego autorzy – dzięki odkryciu Petera Adkinsa z Cisco Umbrella – podali, że obrazy Dockera z popularną dystrybucją kontenerów Alpine nie posiadają hasła roota:
„Oficjalne wersje obrazów Dockera Alpine Linux (od wersji 3.3) zawierają hasło NULL dla użytkownika root. Luka ta wynika z regresji wprowadzonej w grudniu 2015 roku. Istotą tego jest to, że systemy wdrożone z problematycznymi wersjami Alpine Linux w kontenerze i korzystające z Linux PAM lub innego mechanizmu korzystającego z systemowego pliku cienia jako bazy danych uwierzytelniającej, mogą akceptować hasło NULL dla użytkownika root.
Wersje obrazów Docker z Alpine przetestowane pod kątem problemu to 3.3–3.9 włącznie, a także najnowsza wersja Edge.
Autorzy przedstawili następujące zalecenia dla użytkowników, których to dotyczy:
„Konto root musi zostać wyraźnie wyłączone w obrazach Docker zbudowanych z problematycznych wersji Alpine. Prawdopodobne wykorzystanie luki zależy od środowiska, ponieważ jego powodzenie wymaga przesłanej zewnętrznie usługi lub aplikacji korzystającej z Linux PAM lub innego podobnego mechanizmu.
Problem był wyłączony w wersjach Alpine 3.6.5, 3.7.3, 3.8.4, 3.9.2 i Edge (migawka 20190228), a właściciele obrazów, których dotyczy problem, zostali poproszeni o skomentowanie linii z rootem w /etc/shadow lub upewnij się, że brakuje paczki linux-pam.
Kontynuacja z Docker Hub
Jerry Gamblin postanowił zainteresować się „jak powszechną może być praktyka używania haseł zerowych w kontenerach”. W tym celu napisał mały Skrypt Basha, którego istota jest bardzo prosta:
poprzez żądanie zwijania do interfejsu API w Docker Hub żądana jest lista hostowanych tam obrazów Docker;
przez jq jest sortowane według pól popularity, a z uzyskanych wyników pozostaje pierwszy tysiąc;
dla każdego z nich jest to spełnione docker pull;
dla każdego obrazu otrzymanego z Docker Hub docker run z odczytaniem pierwszej linii z pliku /etc/shadow;
jeśli wartość ciągu jest równa root:::0:::::, nazwa obrazu zostanie zapisana w osobnym pliku.
Co się stało? W ten plik Były 194 linie z nazwami popularnych obrazów Dockera z systemami Linux, w których użytkownik root nie ma ustawionego hasła:
„Wśród najbardziej znanych nazw na tej liście znalazły się govuk/governmentpaas, hashicorp, Microsoft, monsanto i mesosfera. A kylemanna/openvpn to najpopularniejszy kontener na liście, jego statystyki obejmują ponad 10 milionów pobrań.”
Warto jednak przypomnieć, że zjawisko to samo w sobie nie oznacza bezpośredniej luki w bezpieczeństwie systemów, które je wykorzystują: wszystko zależy od tego, jak dokładnie są one wykorzystywane (patrz komentarz do sprawy Alpine powyżej). Jednak wielokrotnie widzieliśmy „morał z tej historii”: pozorna prostota często ma wadę, o której zawsze należy pamiętać i której konsekwencje należy brać pod uwagę w scenariuszach zastosowań technologii.