W piątek badacze ujawnili odkrycie backdoora celowo wbudowanego w xz Utils, narzędzie do kompresji danych o otwartym kodzie źródłowym, dostępne w prawie wszystkich instalacjach Linuksa i innych systemów operacyjnych typu Unix. Osoba lub osoby stojące za tym projektem prawdopodobnie spędziły nad nim lata. Prawdopodobnie byli już blisko zintegrowania aktualizacji backdoora z Debianem i Red Hatem, dwiema największymi dystrybucjami Linuksa, gdy bystry twórca oprogramowania zauważył coś podejrzanego.
„To może być najlepiej przeprowadzony atak na łańcuch dostaw, jaki kiedykolwiek otwarcie opisaliśmy, i jest to koszmarny scenariusz: złośliwy, kompetentny, autoryzowany na początku w powszechnie używanej bibliotece” – powiedział inżynier oprogramowania i kryptografii Filippo Valsorda powiedział wysiłek, który był przerażająco bliski sukcesu.
Naukowcy spędzili weekend na zbieraniu wskazówek. Oto, co wiemy do tej pory.
Co to jest xz Utils?
xz Utils jest prawie wszechobecny w systemie Linux. Zapewnia bezstratną kompresję danych w praktycznie wszystkich systemach operacyjnych typu Unix, w tym w Linuksie. xz Utils zapewnia podstawowe funkcje do kompresji i dekompresji danych we wszystkich typach operacji. xz Utils obsługuje także stary format .lzma, co czyni ten komponent jeszcze ważniejszym.
Co się stało?
Przyjaciel Andre, programista i inżynier pracujący nad ofertą PostgreSQL firmy Microsoft, naprawił ostatnio problemy z wydajnością, które występowały w systemie Debian przy użyciu SSH, najczęściej używanego protokołu do zdalnego logowania się do urządzeń przez Internet. W szczególności logowanie SSH zużywało zbyt wiele cykli procesora i powodowało błędy w Valgrind, narzędziu do monitorowania pamięci komputera.
Dzięki połączeniu czystego szczęścia i bystrego oka Freunda w końcu odkrył, że problemy wynikają z aktualizacji wprowadzonych do xz Utils. W piątek Freund skontaktował się z Open Source Security List, aby ujawnić, że aktualizacje powstały w wyniku celowego wbudowania backdoora w oprogramowaniu kompresującym.
Do czego służą tylne drzwi?
Złośliwy kod dodany do xz Utils w wersjach 5.6.0 i 5.6.1 zmienił sposób działania oprogramowania podczas wykonywania operacji związanych z kompresją lub dekompresją lzma. Gdy funkcje te obejmowały SSH, umożliwiały wykonanie złośliwego kodu z uprawnieniami roota. Kod ten umożliwił osobie posiadającej ustalony z góry klucz szyfrujący zalogowanie się do systemu backdoora za pośrednictwem protokołu SSH. Od tego momentu osoba ta będzie miała taki sam poziom kontroli, jak każdy upoważniony administrator.
Jak doszło do powstania tego backdoora?
Wygląda na to, że tworzenie tylnych drzwi trwało lata. W 2021 roku jego konto utworzyła osoba o nazwie użytkownika JiaT575 pierwsze znane zatwierdzenie do projektu open source. Patrząc wstecz, to znaczy zmiana dotyczące projektu libarchive jest podejrzane, ponieważ zastąpiono funkcję „safe_fprint” wariantem, który od dawna był uważany za mniej bezpieczny. Nikt wówczas tego nie zauważył.
W następnym roku JiaT575 przesłał łatkę za pośrednictwem listy mailingowej xz Utils i niemal natychmiast nigdy wcześniej nie widziany uczestnik imieniem Jigar Kumar przyłączył się do dyskusji, argumentując, że Lasse Collin, wieloletni opiekun xz Utils, nie zrobił żadnego aktualizuje oprogramowanie często lub wystarczająco szybko. Dzięki wsparciu Dennisa Ensa i kilku innych osób, które nigdy nie znajdowały się na liście, Kumar naciskał na Collina, aby zatrudnił dodatkowego programistę do kontynuacji projektu.
W styczniu 2023 r. JiaT75 trafiła do niej pierwsze zatwierdzenie do xz Utils. W kolejnych miesiącach JiaT75, która używała nazwiska Jia Tan, coraz bardziej angażowała się w sprawy xz Utils. Na przykład Tan zastąpił dane kontaktowe Collinsa własnymi w oss-fuzz firmy Microsoft, projekcie skanującym oprogramowanie open source pod kątem oznak złośliwego oprogramowania. Tan zażądał również, aby oss-fuzz wyłączył funkcję ifunc podczas testowania, co uniemożliwiło mu wykrycie złośliwych zmian, które Tan wkrótce wprowadzi do xz Utils.
W lutym tego roku Tan wydał zmiany dla wersji 5.6.0 i 5.6.1 xz Utils. W aktualizacjach zastosowano backdoora. W kolejnych tygodniach Tan i inni zaapelowali do twórców Ubuntu, Red Hat i Debiana o włączenie aktualizacji do swoich systemów operacyjnych. Wreszcie jedna z dwóch aktualizacji doczekała się następujących wersji: odpowiednio Firma ochroniarska Tenable:
Czy możesz powiedzieć więcej o działaniu tego backdoora?
Krótko mówiąc, pozwala osobie posiadającej odpowiedni klucz prywatny przejąć kontrolę nad sshd, plikiem wykonywalnym odpowiedzialnym za nawiązywanie połączeń SSH, i wykonywać stamtąd złośliwe polecenia. Backdoor jest implementowany poprzez pięcioetapowy moduł ładujący, który wykorzystuje szereg prostych, ale sprytnych technik, aby się ukryć. Zapewnia także możliwość dostarczania nowych ładunków bez konieczności wprowadzania większych zmian.
Kilka osób, które dokonały inżynierii wstecznej aktualizacji, ma znacznie więcej do powiedzenia na temat backdoora.
Dostarczony programista Sam James ten przegląd:
Backdoor ten składa się z kilku komponentów. Na wysokim poziomie:
- Biblioteki tar z wydaniami nadrzędnymi nie mają tego samego kodu co GitHub. Jest to powszechne w projektach C, więc dalsi konsumenci nie muszą pamiętać, jak uruchamiać narzędzia automatyczne i autokonfigurację. Wersja pliku build-to-host.m4 w plikach tar z wydaniem bardzo różni się od wersji źródłowej w GitHub.
- W folderze testy/ w repozytorium Git znajdują się również pliki testowe ze stylami. Pliki te znajdują się w następujących zatwierdzeniach:
- Skrypt wywoływany z build-to-host.m4, który rozpakowuje te szkodliwe dane testowe i wykorzystuje je do modyfikowania procesu kompilacji.
- IFUNC, mechanizm w Glibc, który umożliwia pośrednie wywoływanie funkcji, służy do wykonywania przechwytywania/przekierowywania procedur uwierzytelniania OpenSSH w czasie wykonywania. IFUNC to narzędzie, które jest zwykle wykorzystywane do zgodnych z prawem celów, ale w tym przypadku jest wykorzystywane do tej ścieżki ataku.
Zazwyczaj Upstream publikuje wersje tar, które różnią się od tych automatycznie generowanych w GitHub. W tych zmodyfikowanych plikach tar znajduje się złośliwa wersja pliku build-to-host.m4, która umożliwia wykonanie skryptu podczas procesu kompilacji.
Skrypt ten (przynajmniej w wersjach 5.6.0 i 5.6.1) sprawdza różne warunki, takie jak architektura maszyny. Oto fragment złośliwego skryptu rozpakowanego przez build-to-Host.m4 wraz z wyjaśnieniem jego działania:
if ! (echo "$build" | grep -Eq "^x86_64" > /dev/null 2>&1) && (echo "$build" | grep -Eq "linux-gnu$" > /dev/null 2>&1);then
- Jeśli celem kompilacji jest amd64/x86_64
- A jeśli cel używa nazwy linux-gnu (głównie sprawdza użycie glibc)
Sprawdza również używany zestaw narzędzi:
if test "x$GCC" != 'xyes' > /dev/null 2>&1;then exit 0 fi if test "x$CC" != 'xgcc' > /dev/null 2>&1;then exit 0 fi LDv=$LD" -v" if ! $LDv 2>&1 | grep -qs 'GNU ld' > /dev/null 2>&1;then exit 0A jeśli próbujesz zbudować pakiet Debiana lub Red Hata:
if test -f "$srcdir/debian/rules" || test "x$RPM_ARCH" = "xx86_64";thenWydaje się zatem, że celem tego ataku są systemy AMD64 z systemem Glibc i dystrybucjami pochodzącymi z Debiana lub Red Hata. Inne systemy mogą być obecnie podatne na ataki, ale tego nie wiemy.
W wywiadzie internetowym programista i inżynier wsteczny HD Moore potwierdził podejrzenia Sama Jamesa, że celem backdoora były dystrybucje Debian lub Red Hat.
„Atak był podstępny, ponieważ wykonywał ostatnie kroki backdoora tylko wtedy, gdy zbudowano bibliotekę na platformie AMD64 (Intel x86 64-bit) i zbudowano pakiet Debian lub RPM (zamiast używać go do instalacji lokalnej)” – stwierdził. napisał.
Cytując obserwacje badaczy, którzy wspólnie spędzili weekend analizując aktualizacje Malicius, kontynuował:
Jeśli podczas weryfikacji klucza publicznego SSH odpowiada on określonej funkcji odcisku palca, zawartość klucza jest odszyfrowywana przy użyciu klucza wstępnego przed faktyczną weryfikacją klucza publicznego. Odszyfrowana treść jest następnie przekazywana bezpośrednio do systemu.
Jeśli odcisk palca nie pasuje lub odszyfrowana zawartość nie jest zgodna z określonym formatem, stosuje się regularną weryfikację klucza i nikt się o tym nie dowie.
Tylne drzwi są bardzo podstępne. Wykorzystuje mało znaną funkcję glibc, aby uwzględnić funkcję. Jest ono wyzwalane tylko wtedy, gdy biblioteka backdoora xz zostanie załadowana przez proces /usr/bin/sshd w jednej z dystrybucji, których dotyczy problem. Może istnieć wiele innych backdoorów, ale ten, o którym wszyscy mówią, wykorzystuje funkcję pośrednią, aby dodać hak. Ładunek został zakodowany w fałszywych plikach testowych xz i zasadniczo działa jako kod powłoki, modyfikując kod weryfikacyjny klucza SSH RSA w taki sposób, że magiczny klucz publiczny (wysłany podczas normalnego uwierzytelniania) umożliwia atakującemu dostęp
Ich wielki plan był taki:
1) Potajemnie otwórz pakiety tar z wydaniem przez backdoora, ale nie kod źródłowy
2) Użyj kont Sockpuppet, aby przekonać różne dystrybucje Linuksa do pobrania i spakowania najnowszej wersji
3) Po wysłaniu tego dystrybucje będą mogły przyjąć dowolny system dalszego użytkownika/firmy itp
Dalszą analizę techniczną można znaleźć w pliku powyżej Nić Bluesky od Valsorda, Badacz Kevin Beaumont I Odkrycie Freunda w piątek.
Co jeszcze wiemy o Jia Tan?
W tej chwili niezwykle mało, zwłaszcza dla kogoś, kto ma za zadanie zarządzać oprogramowaniem tak wszechobecnym i wrażliwym jak xz Utils. Ta osobowość programisty w ostatnich latach dotknęła dziesiątek innych programów typu open source. Obecnie nie wiadomo, czy za tą nazwą użytkownika kiedykolwiek kryła się prawdziwa osoba, czy też Jia Tan jest osobą całkowicie fikcyjną.