Luka w oprogramowaniu Log4j stanowi jedno z najpoważniejszych zagrożeń dla bezpieczeństwa współczesnych systemów informatycznych.
Rejestrowanie zdarzeń jest niezwykle istotną funkcją w dzisiejszych aplikacjach, a biblioteka Log4j jest wiodącym rozwiązaniem w tym zakresie.
Biblioteka ta znajduje zastosowanie w większości aplikacji, usług oraz systemów. W efekcie, wszystkie aplikacje korzystające z Log4j zostały dotknięte tą usterką, która ujawniła się w poprzednim roku.
W kontekście narastających globalnych obaw o cyberbezpieczeństwo, organizacje oraz osoby prywatne podejmują działania mające na celu ochronę swoich aplikacji, systemów i danych.
Odkrycie tej luki wywołało dodatkowy niepokój wśród specjalistów i firm.
Dlatego też, identyfikacja i naprawienie luki Log4j jest kluczowe dla ochrony danych, sieci, reputacji i zaufania klientów.
W niniejszym artykule omówię istotę podatności Log4j, a także kroki niezbędne do jej wykrycia i usunięcia.
Zacznijmy od zrozumienia, czym jest Log4j i dlaczego jest tak ważna.
Czym jest Log4j?
Log4j to oprogramowanie open source, napisane w języku Java, służące do rejestrowania, formatowania i publikowania dzienników zdarzeń generowanych przez aplikacje i systemy, a także do wykrywania błędów. Dzienniki mogą zawierać różnego rodzaju dane, od informacji o odwiedzanych stronach internetowych i przeglądarkach, po szczegóły techniczne dotyczące systemu, na którym działa Log4j.
Zamiast tworzyć kod od podstaw, programiści mogą wykorzystać gotową bibliotekę Log4j, integrując ją z własnymi aplikacjami.
Dzięki Log4j, programiści mają możliwość monitorowania wszystkich zdarzeń w swoich aplikacjach, dysponując precyzyjnymi informacjami z dzienników. Ułatwia to obserwację aplikacji, szybkie wykrywanie problemów i ich naprawę, zanim przerodzą się w poważne problemy dotyczące wydajności lub bezpieczeństwa.
Ta biblioteka, oparta na języku Java, została stworzona przez Ceki Gülcü i udostępniona w 2001 roku na licencji Apache License 2.0. Wykorzystuje usługi nazewnictwa i interfejsu katalogowego Java (JNDI), umożliwiając aplikacjom komunikację z innymi aplikacjami, takimi jak LDAP, DNS czy CORBA, oraz korzystanie z funkcji katalogowych i nazewniczych dla aplikacji opartych na Javie. Log4j posiada trzy główne komponenty:
- Rejestratory – do przechwytywania wpisów do dziennika.
- Układy – do formatowania wpisów dziennika w różnych stylach.
- Dołączacze – do publikowania wpisów dziennika w różnych miejscach docelowych.
Log4j jest jedną z najczęściej wykorzystywanych bibliotek do rejestrowania zdarzeń, stosowaną przez organizacje z różnych branż i krajów. Została zintegrowana z wieloma aplikacjami, w tym z popularnymi usługami chmurowymi Google, Microsoft, Apple, Cloudflare czy Twitter.
Apache Software Foundation, twórca Log4j, opracował Log4j 2, ulepszoną wersję, która ma na celu rozwiązanie problemów występujących we wcześniejszych wersjach. W poprzednim roku w Log4j wykryto lukę, która, jeśli nie zostanie wyeliminowana, może pozwolić atakującym na włamanie się do aplikacji i systemów, kradzież danych, infekowanie sieci oraz wykonywanie innych działań o charakterze złośliwym.
Przyjrzyjmy się temu bliżej.
Czym jest Log4Shell – luka w zabezpieczeniach Log4j?
Log4Shell to poważna luka w zabezpieczeniach biblioteki Log4j, która ma wpływ na jej podstawowe działanie. Umożliwia ona atakującemu przejęcie kontroli nad urządzeniem lub aplikacją podłączoną do Internetu poprzez zdalne wykonanie kodu. W przypadku powodzenia, atakujący może:
- Uruchomić dowolny kod na urządzeniu lub systemie.
- Uzyskać dostęp do całej sieci i danych.
- Modyfikować lub szyfrować dowolne pliki w zainfekowanej aplikacji lub urządzeniu.
Luka ta została po raz pierwszy zgłoszona 24 listopada 2021 roku przez Chen Zhaojun, badacza bezpieczeństwa z firmy Alibaba (chińskiego giganta e-commerce). Luka wpłynęła na ich serwery Minecraft, a zespół bezpieczeństwa chmury Alibaba odkrył ją 9 grudnia.
Następnie NIST (Narodowy Instytut Standaryzacji i Technologii) opublikował informacje o tej luce w National Vulnerability Database, nadając jej oznaczenie CVE-2021-44228. Apache Software Foundation oceniło ją na 10 w skali CVSS. Jest to rzadko przyznawana i bardzo wysoka ocena, ponieważ luka ta może być łatwo i szeroko wykorzystywana, co prowadzi do poważnych szkód dla organizacji i osób.
W odpowiedzi Apache udostępniło poprawkę, jednak niektóre aspekty pozostały niezabezpieczone, co doprowadziło do kolejnych luk:
- CVE-2021-45046, która umożliwiała ataki typu „odmowa usługi” (DoS) poprzez wyszukiwanie JNDI.
- CVE-2021-45105, pozwalająca hakerom na przejęcie kontroli nad informacjami dotyczącymi mapy kontekstowej wątków i wywoływanie ataków DoS poprzez manipulację ciągiem znaków.
- CVE-2021-44832, wpływająca na wszystkie wersje Log4j 2, umożliwiająca zdalne wstrzyknięcie kodu (RCE).
Jak działa Log4Shell?
Aby w pełni zrozumieć wagę i potencjalne szkody, jakie może wywołać Log4Shell, warto poznać mechanizm działania tej luki w Log4j.
Luka Log4Shell pozwala atakującemu na zdalne wstrzyknięcie dowolnego kodu do sieci i przejęcie nad nią pełnej kontroli.
Ten cyberatak rozpoczyna się w bibliotece rejestrującej, takiej jak Log4j, która zbiera i przechowuje informacje o logach. W przypadku braku biblioteki logów, dane z serwera byłyby archiwizowane natychmiast po ich zebraniu.
Jednak, aby przeanalizować te dane lub podjąć działania na podstawie określonych informacji z logów, potrzebna jest biblioteka rejestrująca, która przetworzy dane logów przed ich archiwizacją.
Z powodu luki Log4j, każdy system lub aplikacja korzystająca z Log4j jest narażona na cyberataki. Biblioteka rejestrująca wykonuje kod na podstawie otrzymanych danych wejściowych. Haker może manipulować tymi danymi, zmuszając bibliotekę do wykonania złośliwego kodu.
W tle ma miejsce szereg działań. Gdy do Log4j trafi specjalnie spreparowany ciąg znaków, biblioteka odwoła się do serwera LDAP i pobierze z jego katalogu kod do wykonania. Atakujący mogą w ten sposób utworzyć serwer LDAP przechowujący złośliwy kod, który pozwoli im kontrolować dowolny serwer, na którym kod ten zostanie wykonany. Następnie, wysyłając odpowiedni ciąg znaków, kierują złośliwy kod do docelowej aplikacji lub systemu, przejmując nad nim pełną kontrolę.
Wykorzystanie luki Log4j przebiega następująco:
- Atakujący identyfikuje serwer z podatną na ataki wersją Log4j.
- Wysyła do serwera żądanie pobrania zasobów z linkiem do swojego złośliwego serwera LDAP.
- Docelowy serwer, zamiast weryfikować żądanie, nawiązuje bezpośrednie połączenie z serwerem LDAP.
- Atakujący przesyła do docelowego serwera odpowiedź serwera LDAP zawierającą złośliwy kod. Z powodu podatności Log4j, która umożliwia odbiór kodu i jego wykonanie bez weryfikacji, haker może wykorzystać tę słabość do włamania na docelowy serwer i przejęcia kontroli nad podłączonymi systemami, sieciami i urządzeniami.
Jak luka w zabezpieczeniach Log4j może zaszkodzić użytkownikom?
Podatność Log4j jest niepokojąca ze względu na jej powszechne wykorzystanie w wielu aplikacjach i systemach.
Rejestrowanie jest kluczową funkcją większości aplikacji, a Log4j jest wiodącym rozwiązaniem w tej dziedzinie, dlatego znajduje zastosowanie w różnorodnych systemach.
Do popularnych usług i aplikacji korzystających z Log4j należą Minecraft, AWS, iCloud, Microsoft, Twitter, routery internetowe, narzędzia programistyczne, narzędzia bezpieczeństwa i wiele innych. W efekcie, atakujący mogą potencjalnie przeprowadzić ataki na szeroką gamę aplikacji, usług i systemów, zarówno użytkowników domowych, twórców kodu, dostawców usług, jak i innych profesjonalistów oraz osoby indywidualne.
Ponadto, luka Log4j jest stosunkowo łatwa do wykorzystania przez atakującego. Cały proces nie wymaga eksperckiej wiedzy, co zwiększa ryzyko ataków opartych na tej podatności.
Skutki wykorzystania luki Log4j mogą obejmować:
- Ataki DoS.
- Ataki na łańcuch dostaw.
- Wydobycie kryptowalut.
- Wstrzykiwanie złośliwego oprogramowania, takiego jak ransomware i konie trojańskie.
- Wstrzyknięcie dowolnego kodu.
- Zdalne wykonanie kodu.
I wiele innych.
W rezultacie tych ataków można stracić kontrolę nad swoimi aplikacjami, systemami i urządzeniami, a dane mogą stać się łupem atakujących, którzy mogą je sprzedać, manipulować nimi lub ujawnić publicznie. Firma może ponieść straty w zakresie prywatności danych klientów, zaufania, poufnych informacji, a nawet sprzedaży i przychodów, nie wspominając o ryzyku związanym z niezgodnością z przepisami.
Zgodnie z raportem, ponad 40% globalnych sieci korporacyjnych doświadczyło ataków z powodu tej luki.
Nawet jeśli w aplikacjach nie są używane podatne na ataki wersje Log4j, to ich integracje z innymi firmami mogą korzystać z tej biblioteki, narażając aplikację na niebezpieczeństwo.
Należy pamiętać, że wszystkie wersje Log4j sprzed Log4j 2.17.0 są dotknięte tą luką. W związku z tym, jeśli używasz Log4j, konieczna jest aktualizacja rejestratora. Znani dostawcy, których dotyczy ta luka, to m.in. Adobe, AWS, IBM, Cisco, VMware, Okta czy Fortinet. W przypadku korzystania z ich usług, należy stale monitorować aplikacje i korzystać z systemów bezpieczeństwa, aby jak najszybciej usunąć wszelkie pojawiające się problemy.
Jak wykryć programy dotknięte luką Log4j i naprawić problemy?
Luka Log4Shell ma 10 punktów w skali CVSS, co oznacza, że nie wszystkie problemy w Log4j zostały jeszcze załatane. Istnieje jednak możliwość, że ty lub twój zewnętrzny dostawca korzysta z Log4j w swojej aplikacji.
Dlatego, aby chronić swoje dane, systemy i sieć, konieczne jest podjęcie kilku kroków zaradczych.
#1. Zaktualizuj swoją wersję Log4j
Aktualizacja Log4j do wersji 2.17.1 to najskuteczniejsza metoda ochrony urządzeń i aplikacji przed atakami wynikającymi z luki Log4j.
Log4Shell jest atakiem typu zero-day, który potencjalnie zagraża całemu ekosystemowi oprogramowania. Apache naprawiło część luk w ostatnich wersjach, jednak jeśli system został naruszony przed aktualizacją, nadal istnieje zagrożenie.
W związku z tym, poza aktualizacją wersji, należy natychmiast wdrożyć procedury reagowania na incydenty, aby upewnić się, że w systemach i aplikacjach nie występują żadne luki w zabezpieczeniach oraz aby załagodzić ataki. Należy również przejrzeć wszystkie dzienniki serwera pod kątem oznak naruszenia bezpieczeństwa (IOC) i stale monitorować systemy i sieć.
#2. Korzystaj z najnowszych zapór sieciowych i systemów bezpieczeństwa
Zapory sieciowe, takie jak zapory aplikacji internetowych (WAF) i zapory nowej generacji, pomagają zabezpieczyć granicę sieci przed atakami, skanując przychodzące i wychodzące pakiety danych i blokując podejrzane transmisje. Należy używać najnowszych zapór sieciowych i ustawić restrykcyjne reguły na serwerach, aby zapobiec atakom związanym z luką Log4j.
Choć atakujący mogą ominąć zapory ogniowe, zapewniają one pewien poziom ochrony, blokując podejrzane żądania.
Ponadto należy zaktualizować systemy bezpieczeństwa, takie jak systemy wykrywania włamań (IDS), systemy zapobiegania włamaniom (IPS), o najnowsze sygnatury i reguły. Systemy te pomagają blokować lub filtrować ruch RMI i LDAP przed połączeniem się ze złośliwym serwerem LDAP.
#3. Wdrożenie MFA
Włączenie uwierzytelniania wieloskładnikowego (MFA) w aplikacjach i systemach zwiększa ochronę przed atakami. Nawet jeśli atakujący przełamie pierwszą warstwę zabezpieczeń, druga warstwa utrudni im działanie. Można to zrealizować za pomocą danych biometrycznych, takich jak odciski palców czy skanowanie tęczówki, poprzez ustawienie pytania zabezpieczającego lub włączenie kodu PIN.
MFA zwiększa trudność przeprowadzenia pełnego ataku. Może również natychmiastowo poinformować o incydencie, dając czas na podjęcie niezbędnych kroków naprawczych.
Należy również stosować surowe zasady VPN, aby ograniczyć naruszenia danych. Umożliwi to użytkownikom bezpieczny dostęp do systemów z dowolnego miejsca, bez obawy o ataki.
#4. Zmiana właściwości systemu
W przypadku braku możliwości aktualizacji biblioteki Log4j, należy niezwłocznie zmienić właściwości systemu Java, jeśli używana jest wersja z zakresu od Log4j 2.10 do Log4j 2.14.1.
Należy zmodyfikować ustawienia w taki sposób, aby uniemożliwić wyszukiwanie, które wykorzystują atakujący do wykrywania i wykorzystywania luk.
#5. Usunięcie JNDI
Przyczyną tej poważnej luki w zabezpieczeniach jest jej konstrukcja. Wtyczka JNDI Lookup posiada wadę projektową, która umożliwia atakującym przeprowadzenie ataku.
JNDI służy do wykonywania kodu na podstawie danych wejściowych w dzienniku, które są łatwe do zmanipulowania, ponieważ rejestrator akceptuje każde żądanie bez weryfikacji.
Specjaliści od bezpieczeństwa odkryli, że wtyczka ta od momentu jej wydania w 2013 roku zawsze zezwalała na nieprzetworzone dane, a następnie przekazywała je do biblioteki Log4j.
W konsekwencji, luka Log4j jest podatna na wykorzystanie za pomocą prostego wstrzyknięcia ciągu znaków. Po wstrzyknięciu ciągu, rejestrator akceptuje operację zadaną w ciągu i wykonuje ją natychmiast, bez weryfikacji.
Aby zabezpieczyć systemy i aplikacje, konieczne jest wyłączenie klasy JndiLookup. Uniemożliwi to rejestratorowi podejmowanie działań na podstawie danych z dziennika.
W rzeczywistości, wyszukiwanie JNDI jest już domyślnie wyłączone w Log4j 2.16.0 w celu ochrony aplikacji i systemów.
W przypadku korzystania z wersji Log4j starszej niż 2.16.0, należy upewnić się, że wyszukiwanie JNDI jest wyłączone.
#6. Porozmawiaj ze swoimi dostawcami
Nawet jeśli zapory i systemy bezpieczeństwa są zaktualizowane, wersja Log4j jest najnowsza, a wyszukiwanie JNDI wyłączone, nie można spocząć na laurach.
Nawet jeśli w swoich aplikacjach nie używasz podatnej na ataki wersji Log4j, mogą z niej korzystać twoi dostawcy zewnętrzni. Wówczas nie będzie wiadomo, w jaki sposób aplikacja lub system został zaatakowany, ponieważ problemem była integracja z firmą zewnętrzną.
Ważne jest, aby porozmawiać ze swoimi dostawcami i upewnić się, że oni również zaktualizowali Log4j do najnowszej wersji i wdrożyli opisane powyżej praktyki bezpieczeństwa.
7. Użyj skanera luk w zabezpieczeniach Log4j
Na rynku dostępne są liczne narzędzia do skanowania pod kątem podatności na lukę Log4j, które ułatwiają wykrywanie problemów w systemach i aplikacjach.
Przy wyborze narzędzia należy zwrócić uwagę na jego wskaźniki dokładności, ponieważ wiele z nich generuje fałszywe alarmy. Warto znaleźć narzędzie, które odpowiada potrzebom, ponieważ mogą one skupiać się na identyfikacji luki Log4j, raportowaniu narażenia lub usuwaniu luki.
Jeśli celem jest wykrycie, należy poszukać skanera podatności, który identyfikuje problem, lub narzędzia, które wykrywa i naprawia problem.
Przykłady popularnych narzędzi do skanowania to:
- Microsoft 365 Defender: Microsoft oferuje szereg narzędzi i rozwiązań, które pomagają wykrywać i zapobiegać wykorzystaniu luki Log4j w sieci. Umożliwia to wykrywanie prób zdalnego wykonania kodu i ochronę przed lukami Log4j na urządzeniach z systemami Windows i Linux.
- Amazon Inspector i AWS: Amazon stworzył narzędzie do skanowania w celu znalezienia luki Log4j w instancjach Amazon EC2 i Amazon ECR.
- CloudStrike Archive Scan Tool (CAST): CloudStrike stworzył skuteczne narzędzie do wykrywania luk w zabezpieczeniach Log4j, pomagające w szybkim rozwiązywaniu problemów.
- Wykrywanie Google Cloud Logging: rozwiązanie Google do wykrywania logów w chmurze umożliwia wykrywanie luk Log4j za pomocą eksploratora dzienników. Umożliwia tworzenie zapytań do dzienników i wyszukiwanie potencjalnych ciągów exploitów.
- Google udostępnił również log4jscanner, skaner systemu plików typu open source, służący do wykrywania luki Log4j.
- Skaner BurpSuite Log4j: Jest to wtyczka bezpieczeństwa, która pomaga profesjonalistom i firmom wykrywać podatność na Log4j.
- Tester luk w zabezpieczeniach Huntress Log4Shell: Narzędzie to generuje losowy unikalny identyfikator, który można wykorzystać podczas testowania pól wejściowych. Po znalezieniu luki w aplikacji lub polu wejściowym, bezpieczny serwer LDAP natychmiast przerywa złośliwe połączenie, zapewniając ochronę.
- WhiteSource Log4j Detect: Firma WhiteSource stworzyła bezpłatne narzędzie CLI, WhiteSource Log4j Detect, dostępne na GitHub, które pomaga wykrywać i naprawiać luki w Log4j – CVE-2021-445046 i CVE-2021-44228.
- Narzędzia JFrog Open-Source Scanning dla Log4j: JFrog stworzył różne rozwiązania i narzędzia typu open source do wykrywania luk Log4j w plikach binarnych i kodzie źródłowym.
Podsumowanie
Luka Log4j jest krytycznym zagrożeniem bezpieczeństwa. Ze względu na szerokie zastosowanie tej biblioteki w wielu aplikacjach i systemach, luka ta stała się powszechna, pozwalając atakującym na wykorzystywanie różnorodnych systemów i aplikacji.
Aby ochronić swoje systemy i aplikacje, należy zaktualizować bibliotekę Log4j do najnowszej wersji i wdrożyć opisane powyżej praktyki bezpieczeństwa.