Jak pół sekundy uratowało świat przed zagładą?

Mateusz Chrobok
7 Apr 202424:32

Summary

TLDRThe video script narrates a sophisticated attack on open-source software, specifically the xz compression tool, which led to a backdoor in SSH servers. It details the patient and methodical infiltration by a user named Jia Tan, who exploited the trust in the open-source community to insert malicious code. The script discusses the discovery of the vulnerability, its implications, and the response from the community, highlighting the importance of vigilance in software development and the potential risks of relying on unverified code.

Takeaways

  • 🌐 The script discusses the potential for taking over the world with patience, skills, and deep pockets, but emphasizes the importance of luck in preventing a catastrophe.
  • 💻 It highlights the reliance on servers for internet usage, many of which run on Linux and similar systems, and the use of SSH (Secure Shell) for secure remote access.
  • 🔍 The potential vulnerability of openSSH is mentioned, where malicious code could be inserted into its source code to gain unauthorized access to millions of devices.
  • 🕵️‍♂️ The script describes the difficulty of executing such an attack due to the scrutiny openSSH receives, with thousands of eyes checking what goes into production.
  • 📦 It introduces the concept of a supply chain attack, which can compromise systems without altering the source code of openSSH, as seen in the case of the xz compression tool.
  • 🗓️ The story of a vulnerability in openSSH related to the Debian user's discovery in 2015 is recounted, which led to a bug that wasn't visible during system startup.
  • 👨‍💻 The role of Lasse Collin as the primary maintainer of xz is discussed, along with the impact of his personal issues on the project and the subsequent involvement of Jia Tan.
  • 🐴 The script details a sophisticated attack involving the introduction of malicious code into the xz package, which was then stealthily included in the compilation process of Debian packages.
  • 🔑 The attack's mechanism is explained, where a specially crafted public key could trigger a backdoor in the SSH service, allowing unauthorized access if the key matched a specific pattern.
  • 🕊️ The aftermath of the attack includes the quick response from the community to isolate and remove the infected versions of xz, and the assignment of a CVE identifier CVE2024-3094.
  • 🕵️‍♀️ The script speculates on the identity of Jia Tan, suggesting that the level of sophistication points towards a state-sponsored operation rather than an individual actor.

Q & A

  • What is the main topic discussed in the script?

    -The script discusses a complex security breach involving the open-source project xz, which led to a backdoor being introduced into many Linux systems through a supply chain attack.

  • What is SSH and why is it important for internet servers?

    -SSH, or Secure Shell, is a protocol used for secure remote access to servers. It is important for internet servers because it allows administrators to manage servers remotely while ensuring the security of the connection.

  • What is the significance of openSSH in the context of this script?

    -OpenSSH is an implementation of the SSH protocol that is widely used on Linux and other servers. The script suggests that a vulnerability in openSSH could potentially be exploited to gain unauthorized access to millions of internet-connected devices.

  • What is a supply chain attack and how was it used in this case?

    -A supply chain attack is a type of cyber attack where the security of a system is compromised by manipulating the software supply chain. In this case, the attack involved introducing malicious code into the xz compression tool, which is used during the packaging process of openSSH, thereby affecting many Linux systems.

  • Who is Lasse Collin and what is his role in the xz project?

    -Lasse Collin is the primary maintainer of the xz compression tool, which is a popular open-source project. He has been largely responsible for its development and maintenance, making him a key figure in the security breach discussed in the script.

  • What role did Jia Tan play in the security breach?

    -Jia Tan, using the GitHub account JiaT75, infiltrated the xz project by gaining the trust of Lasse Collin and eventually becoming a co-maintainer. Jia is suspected of introducing the malicious code that led to the security breach.

  • What was the impact of the security breach on the open-source community?

    -The security breach highlighted the vulnerability of relying on a single maintainer for critical open-source projects and raised concerns about the security of the software supply chain. It also prompted a call for better support and vetting processes within the open-source community.

  • What is CVE2024-3094 and how was it related to the security breach?

    -CVE2024-3094 is the identifier for the vulnerability that was exploited in the security breach. It was assigned to the specific flaw in the xz package that allowed the backdoor to be introduced.

  • What was the half-second delay observed by Andres Freund and how was it connected to the security breach?

    -Andres Freund, a Microsoft employee, noticed a half-second delay in SSH login attempts on his Debian Sid system. This unusual behavior led him to investigate and ultimately discover the backdoor in the xz package, which was actively delaying the SSH authentication process.

  • What actions were taken by the Linux distributions in response to the security breach?

    -In response to the security breach, most Linux distributions quickly removed the infected versions of xz from their repositories and enforced the installation of older, unaffected versions during system updates to protect their users.

  • What is the broader implication of this security breach for the use of open-source software in critical systems?

    -The breach underscores the need for robust security practices in open-source projects, especially those that are widely used in critical systems. It suggests that more rigorous vetting, community engagement, and possibly financial support are necessary to ensure the security and sustainability of such projects.

Outlines

00:00

😲 The Perils of OpenSSH and Supply Chain Attacks

This paragraph discusses the potential for taking over the world with patience, skills, and deep pockets, but also the importance of luck in avoiding disaster. It delves into the necessity of servers for internet usage and the common use of Linux and similar systems. The script explains the role of SSH (Secure Shell) for remote access and the prevalence of openSSH, which could be a tempting target for malicious actors. The paragraph highlights the difficulty of infiltrating such critical software due to the scrutiny it receives, but then introduces the concept of supply chain attacks, which can compromise software without altering its source code. The story of a vulnerability found in the Debian user's openSSH service is used to illustrate how such an attack could unfold, affecting thousands of security professionals and system administrators globally.

05:03

🕵️‍♂️ The Deceptive World of Open Source Software and Security

The narrative continues with the tale of the xz compression tool, widely used in open-source software, and its maintainer Lasse Collin. It describes how Jia Tan, a new contributor, gains trust and eventually takes over the project, introducing a subtle change that goes unnoticed. This change is later revealed to be a backdoor in the xz package, which could affect millions of devices. The paragraph details the gradual shift of control from Lasse to Jia, the introduction of a seemingly insignificant fix, and the eventual discovery of the backdoor by Andres Freund, a Microsoft employee, who noticed unusual behavior in his Debian Sid installation. The discovery sparks a crisis in the open-source community, with GitHub suspending accounts and blocking access to repositories, complicating the analysis and response to the security breach.

10:10

🔒 Unraveling the xz Backdoor: A Closer Look at the Attack

This section provides a deeper analysis of the xz backdoor attack, explaining the technical details of how the malicious code was introduced and operated. It describes the obfuscation techniques used to disguise the attack and how the build process for the xz package was manipulated to include the backdoor. The paragraph explains the use of test files that were secretly binary executables, which were transformed into a functioning part of the code during the package build process. It also details how the backdoor was integrated into the xz package without altering the openSSH source code, and how the attack was nearly successful had it not been for the vigilance of community members and the slight delay in SSH login times that tipped off researchers.

15:16

🕵️‍♀️ The Mysterious Jia Tan: Unmasking the Culprit Behind the Attack

The paragraph delves into the investigation surrounding Jia Tan, the individual behind the xz backdoor attack. It discusses the clues and evidence gathered by the community, including GitHub activity, IRC logs, and email addresses. The analysis suggests that Jia Tan operated with a high level of operational security, avoiding common mistakes that would typically reveal their identity. The paragraph also explores the possibility that Jia Tan may not be a single individual but rather a well-coordinated effort by a state-sponsored group, given the sophistication and duration of the operation. It highlights the challenges in attributing responsibility for such attacks and the complexities involved in tracing the activities of the perpetrator.

20:19

🌐 The Impact on Open Source and the Importance of Vigilance

The final paragraph reflects on the broader implications of the xz backdoor attack for the open-source community and the businesses that rely on it. It discusses the paradox of companies benefiting from open-source projects without providing financial support, and the potential risks of depending on small, specialized libraries maintained by individual enthusiasts. The paragraph also touches on the dangers of using experimental software in production environments and the increased awareness that such attacks can bring to the community. It concludes by highlighting the importance of careful code audits and the need for caution when integrating third-party libraries into software projects.

Mindmap

Keywords

💡OpenSSH

OpenSSH is an open-source version of the SSH connectivity protocol, which is widely used for secure remote access to servers. In the video's context, it is highlighted as a critical component of internet infrastructure that, if compromised, could have severe security implications. The script discusses the potential vulnerability in OpenSSH due to a supply chain attack on its dependencies.

💡Supply Chain Attack

A supply chain attack is a type of cyber attack where the security of a system is compromised by targeting the software supply chain. In the video, this concept is central to the narrative of how an attacker infiltrated the xz compression tool, which is a dependency for OpenSSH, to gain unauthorized access to numerous devices.

💡CVE2024-3094

CVE2024-3094 is a unique identifier for a specific security vulnerability. In the video, it is assigned to the vulnerability found in the xz compression tool that was exploited in the supply chain attack. This CVE number is used to track and manage information about the vulnerability.

💡Backdoor

A backdoor in computing is a method of bypassing the normal authentication process of a computer system. The video describes how the attacker inserted a backdoor into the xz compression tool, which was then used to gain unauthorized access to systems using the compromised OpenSSH.

💡Liblzma

Liblzma is a library that provides compression and decompression using the LZMA algorithm, which is part of the xz package. The script explains how a vulnerability in liblzma was exploited in the supply chain attack, affecting the functionality of OpenSSH.

💡Systemd

Systemd is a system and service manager for Linux operating systems. In the video, it is mentioned as the demon that OpenSSH communicates with to notify about its service status. The compromised liblzma library is loaded by OpenSSH because of its dependency on systemd, which in turn loads the vulnerable code.

💡SSH Key

An SSH key is a pair of cryptographic keys used for authenticating to an SSH server. The video explains how the attacker used a specially prepared SSH key to trigger the backdoor in the compromised OpenSSH, allowing unauthorized access to the system.

💡ED488

ED488 is a cryptographic algorithm mentioned in the video as being used to encrypt the SSH key in a different way than the standard RSA. The script describes how the attacker's SSH key, encrypted with ED488, was used to exploit the vulnerability in OpenSSH.

💡Honeypot

A honeypot in cybersecurity is a decoy system set up to attract and trap attackers. The video mentions the creation of a honeypot to detect attempts to exploit the discovered vulnerability, illustrating the proactive measures taken by the community to monitor and mitigate the attack.

💡Open Source

Open source refers to software whose source code is available for modification and enhancement by anyone. The video discusses the importance of supporting open-source projects, as they form the backbone of many critical systems, and the potential risks when they are not adequately maintained or funded.

💡Security Audit

A security audit is a systematic examination of a system's security measures and policies. The script mentions the upcoming security audit and cleanup of the GitHub repositories affected by the attack, emphasizing the importance of reviewing and verifying the integrity of the software supply chain.

Highlights

The concept of taking over the world with patience, skills, and deep pockets is humorously introduced.

The necessity of servers for internet usage and their frequent operation under Linux distributions is discussed.

SSH (Secure Shell) is highlighted as a crucial protocol for remote server access.

The potential vulnerability of openSSH to malicious actors seeking unauthorized access is considered.

The difficulty of infiltrating openSSH due to the scrutiny of thousands of eyes is noted.

A supply chain attack method is introduced as an alternative to directly tampering with openSSH's source code.

The story of a Debian user discovering a bug in openSSH's communication with systemd in 2015 is recounted.

The role of Lasse Collin and the xz compression tool in the openSSH package building process is explained.

The rise of Jia Tan as a contributor to the xz project and eventual maintainer is detailed.

Suspicions about Lasse's neglect of the xz project and the community's response are explored.

The discovery of a backdoor in the xz package through a subtle change in the oss-fuzz tool is revealed.

The impact of the backdoor on millions of devices and the response from the open-source community is discussed.

The technical details of how the backdoor operates and its integration into the xz package is explained.

The discovery of the half-second delay in SSH logins that led to the detection of the backdoor is highlighted.

The potential use of the backdoor for unauthorized access to systems is examined.

The broader implications for open-source projects and the need for community vigilance is emphasized.

The response of various Linux distributions to the vulnerability and the removal of infected xz versions is noted.

The investigation into Jia Tan's identity and the potential state-sponsored nature of the attack is presented.

The importance of not using production environments for testing and the risks associated with it are discussed.

Transcripts

play00:00

Cześć!

play00:00

Jak przejąć władzę nad światem?

play00:02

Cóż, być może wystarczą lata cierpliwości,

play00:05

olbrzymie umiejętności i bardzo głębokie kieszenie.

play00:09

Ale przede wszystkim trzeba nie mieć pecha.

play00:12

Bo to w sumie właśnie łut szczęścia uratował nas wszystkich przed katastrofą.

play00:16

O co chodzi?

play00:18

Aby korzystać z internetu, jaki znamy, potrzebujemy serwerów.

play00:22

Sporo serwerów.

play00:23

Te najczęściej działają pod kontrolą różnej maści Linuksów i im podobnych.

play00:28

A kiedy trzeba mieć do nich zdalny dostęp, bez czego ani rusz,

play00:31

wykorzystuje się protokół SSH, czyli secure shell.

play00:35

Jego implementacja, openSSH, działa na praktycznie każdym linuksowym i nie tylko serwerze.

play00:41

Nic dziwnego.

play00:42

Pozwala na zdalny, a zarazem naprawdę całkiem bezpieczny dostęp.

play00:47

Potencjalnie więc openSSH mogłoby być bardzo łakomym kąskiem dla kogoś o złych zamiarach,

play00:53

chcącego uzyskać nieautoryzowany dostęp do tysięcy czy nawet milionów urządzeń podłączonych do Internetu.

play01:00

Wystarczyłoby przecież w jakiś sprytny sposób

play01:04

dodać do kodu źródłowego openSSH kilka swoich linijek i tylko czekać,

play01:09

aż jakaś kolejna aktualizacja wypchnie je na urządzenia na całym świecie.

play01:14

Pomysł może i genialny, ale z wykonaniem zdecydowanie trudniej.

play01:19

No bo na tak istotne oprogramowanie patrzą tysiące oczu, pieczołowicie sprawdzając, co trafia na produkcję.

play01:26

Szansa, że uda się prześlizgnąć jest więc naprawdę bliska zeru.

play01:31

Jak się jednak okazuje,

play01:33

istnieją sposoby, aby solidnie namieszać, wcale nie dotykając kodu źródłowego openSSH,

play01:39

a stosując tak popularny ostatnimi czasy atak na supply chain.

play01:44

W jaki sposób zepsuto minioną Wielkanoc tysiącom bezpieczników i administratorów systemów na całym globie,

play01:50

mnie zresztą też?

play01:51

Usiądźcie wygodnie, czas na opowieść.

play01:54

Zapraszam!

play02:01

Dawno, dawno temu, czyli jakoś na początku 2015 roku, pewien użytkownik Debiana zauważył,

play02:09

że kiedy podczas uruchamiania systemu usługa openSSH nie wystartuje z powodu jakiegoś błędu,

play02:15

to wcale nie widać tego faktu i wygląda na to, że wszystko poszło zgodnie z planem.

play02:21

Problem leżał na linii komunikacji openSSH z demonem odpowiedzialnym

play02:25

m.in. za uruchomienie systemu operacyjnego, czyli systemd.

play02:30

Powstała więc łatka, która miała to zachowanie naprawić.

play02:34

Jednak okazało się to wcale nie tak trywialnym zadaniem, jak początkowo sądzono.

play02:38

Aby poprawka została dołączona w procesie budowania pakietu gotowego do instalacji,

play02:43

potrzebne było skorzystanie z jakiegoś programu do kompresji danych.

play02:47

Wybór padł na algorytm lzma będący częścią linuksowego pakietu xz.

play02:52

To dość popularne narzędzie stworzone i utrzymywane w dużej mierze przez jedną osobę, Lasse Collina.

play02:59

Popularność xz urosła z czasem do bardzo wysokiego poziomu,

play03:03

bo aż ciężko sobie wyobrazić, ile oprogramowania na całym świecie jest dziś od niego zależnych.

play03:09

Sprawiło to, że chcąc nie chcąc Lasse stał się poniekąd za działanie tego oprogramowania częściowo odpowiedzialny,

play03:16

bo cokolwiek popsutego w xz tak naprawdę może mieć wpływ na miliony urządzeń na całym świecie.

play03:24

Co warto jednak w tym miejscu podkreślić,

play03:27

serwer openSSH sam w sobie nie wymaga do instalacji pakietu xz,

play03:32

jednak sposób, w który jest on dostarczany na systemy użytkowników Debiana już tej paczki potrzebuje.

play03:39

W październiku 2021 roku, w sumie znikąd,

play03:43

do dziesiątek milionów użytkowników GitHuba dołącza Jia Tan, korzystając z loginu JiaT75.

play03:51

Sugeruje jakieś drobne poprawki w różnych projektach, aby po roku zainteresować się pakietem xz.

play03:58

Szybko zaczyna istotnie wspierać głównodowodzącego do tej pory projektem Lasse.

play04:03

Tworząc choćby testy, co jest żmudnym zadaniem, którego nikt nigdy nie chce się podjąć.

play04:10

Mija niecały rok, gdy w okolicach czerwca 2022 roku zaczynają pojawiać się w stosunku do Lasse zarzuty,

play04:17

że zaniedbuje tak istotny przecież projekt.

play04:20

Padają one z klawiatur kont, które w sumie nie za wiele innego na GitHubie zrobiły.

play04:26

Lasse w odpowiedzi informuje o swoich osobistych problemach, w tym mentalnych,

play04:31

które uniemożliwiają mu poświęcanie na rozwój xz więcej czasu.

play04:35

Zresztą warto pamiętać, że to projekt otwartoźródłowy, za który nikt mu nie płaci złamanego centa,

play04:43

a robi to tylko z własnej, nieprzymuszonej woli,

play04:46

więc jakiekolwiek wymagania w tej kwestii są dość niedorzeczne.

play04:50

Niestety, zamiast zrozumienia i wsparcia spotyka się głównie z dalszymi zarzutami

play04:56

i obwinianiem go o duszenie projektu oraz sugestiami, żeby przekazał go komuś innemu.

play05:02

Lasse odpowiada, że Jia ostatnio sporo mu pomaga i być może jest to jakieś rozwiązanie w przyszłości.

play05:10

Zresztą Jia w wątku broni Lasse tłumacząc, że jest to projekt hobbystyczny.

play05:15

Dokładnie jak w metodzie na dobrego i złego policjanta.

play05:19

W końcu po jakimś czasie następuje zmiana na stanowisku głównego lidera xz, bo rolę tę przejmuje Jia.

play05:27

Na początku 2023 roku konto JiaT75 zatwierdza samo po raz pierwszy zmiany w projekcie,

play05:35

a w marcu adres do kontaktu w sprawie repozytorium zostaje zmieniony z pierwotnego, należącego do Lasse na maila Jia.

play05:43

W tym miejscu pojawia się jeszcze jedno konto pod imieniem i nazwiskiem Hans Jansen,

play05:48

które wprowadza jedną poprawkę i nic więcej.

play05:51

Jia ją akceptuję.

play05:53

Mało znaczący fakt, który jednak będzie dość istotny później.

play05:57

W czerwcu Jia zgłasza bardzo drobną poprawkę do narzędzia oss-fuzz autorstwa Google,

play06:03

służącego do testowania otwartego oprogramowania.

play06:06

Rzekomym powodem są problemy z kompatybilnością, po wprowadzeniu wcześniejszych zmian w xz.

play06:11

Poprawka zostaje bez zastrzeżeń zaakceptowana.

play06:15

W lutym bieżącego roku Jia informuje utrzymujących oss-fuzz,

play06:19

że adres projektu xz uległ zmianie, bo doszła do niego dodatkowa subdomena.

play06:25

Adres nie prowadzi już jak dotychczas do hostingu w Finlandii, ale prosto do repozytorium na GitHubie.

play06:32

Osoba Lasse coraz bardziej znika ze świadomości, a Jia w międzyczasie rośnie w siłę w ramach xz.

play06:40

Pojawiają się kolejne poprawki oraz wypuszczane są kolejne wersje xz.

play06:45

Zaczyna się też sugerowanie utrzymującym paczki w poszczególnych dystrybucjach Linuksów,

play06:50

aby szybko, jak najprędzej wrzucali aktualizacje do swoich testowych gałęzi.

play06:55

Jednym z nalegających jest...Hans Jansen.

play06:59

Ten od jednej, jedynej poprawki.

play07:02

Wtórują mu inne konta, które w sumie nie robiły do tej pory nic innego, albo zostały dopiero co utworzone.

play07:12

Jest 29 marca.

play07:13

Wielkanocny piątek.

play07:15

Osobiście nie mogę się doczekać, kiedy moją krew zastąpi ekstrakt z sałatki jarzynowej,

play07:20

jednak okazuje się, że to tylko cisza przed burzą.

play07:23

Z samego rana na grupie dyskusyjnej oss-security na openwallu pojawia się wiadomość zaniepokojonego Andresa Freunda,

play07:30

pracownika Microsoftu rozwijającego PostgreSQLa.

play07:33

Twierdzi on, że w ostatnich tygodniach zaobserwował jakieś dziwne zachowania swojej instalacji Debiana Sid,

play07:39

czyli w wersji testowej.

play07:41

Zdalne logowanie poprzez serwer SSH zajmowało zdecydowanie więcej czasu niż zwykle i nie dawało mu to spokoju.

play07:49

Więcej o ile? – zapytacie.

play07:52

Ano jakieś 500 milisekund, czyli pół sekundy.

play07:56

Tak, pół sekundy opóźnienia spędzało Andresowi sen z powiek, tak bardzo,

play08:01

że postanowił poświęcić na rozwikłanie tej zagadki dobrych parę tygodni.

play08:06

Andres szybko zdementował jednak przypisywane mu nadludzkie zdolności,

play08:10

bo to nie jego chronograf w głowie wykazał różnice, a po prostu akurat przeprowadzał testy w tej sprawie.

play08:16

Jego uwagę przykuł fakt, że nieudane próby logowania z podaniem złych danych

play08:22

powodowały znaczny wzrost zużycia procesora, co nie miało na pierwszy rzut oka większego sensu.

play08:28

No i tu zaczęło się łączenie kropek.

play08:31

Źródłem problemu jego zdaniem miała być biblioteka liblzma, czyli część pakietu xz.

play08:38

Głębsza diagnoza jednak mroziła krew w żyłach.

play08:42

Zdaniem Andresa produkcyjny pakiet xz stał się koniem trojańskim.

play08:47

Początkowo sądził, że dotyczy to jedynie repozytorium Debiana, jednak szybko okazało się to sporym niedoszacowaniem,

play08:54

bo chodziło o większość dystrybucji.

play08:57

Co ciekawe, problem występował tylko w prekompilowanych paczkach.

play09:01

W programie kompilowanym ze źródła wszystko działało jak należy.

play09:05

Dlaczego?

play09:06

Ponieważ złośliwy kod dodawany był w bardzo sprytny sposób

play09:11

poprzez skrypty na etapie automatycznej kompilacji do formatu deb lub rpm.

play09:16

W dodatku wszystko było bardzo, ale to bardzo dobrze ukryte udając prowadzenie testów w taki sposób,

play09:24

że na pierwszy rzut oka nie było tam niczego niepokojącego.

play09:28

Andres postawił też tezę, że nie jest to po prostu wykorzystanie czyjegoś zaufanego konta, aby coś na szybko wstrzyknąć,

play09:35

a metodyczne od paru tygodni zachowanie i jest to po prostu jego zwieńczenie.

play09:41

Wiadomość ta gruchnęła jak grom z jasnego nieba, w dodatku w idealnym wręcz momencie.

play09:47

Łączę się w bólu z wszystkimi administratorami, którzy w całym tym zamieszaniu zresztą tak jak ja,

play09:53

próbowali łapać wszelkie ochłapy informacji, aby ustalić, czy ich systemy również mogły potencjalnie zostać zaatakowane.

play10:00

Całej sytuacji wcale nie pomógł GitHub.

play10:02

Zawiesili oni co prawda szybko konto JiaT75, ale też zablokowali dostęp do repozytorium xz,

play10:10

więc aby dokonać analizy kodu trzeba było uciekać się do lokalnych kopii albo forków projektu.

play10:16

Niestety zbanowali też konto Lasse, choć w tej sytuacji wydawał się on osobą,

play10:20

która mogła o sprawie wiedzieć najwięcej i najbardziej pomóc w rozwiązaniu tego palącego problemu.

play10:26

No ale nie dziwne, że w całym tym ferworze, dopiero później zaczęto weryfikować jego intencje.

play10:33

Konto Lasse zostało na szczęście szybko odblokowane i ruszył on na pomoc i gdzie tylko mógł,

play10:39

zaczął wycofywać wprowadzone przez Jia zmiany oraz informował na bieżąco społeczność o swoich odkryciach.

play10:46

Podatności przypisano oczywiście odpowiedni numer CVE2024-3094 i jest to podatność 10 na 10.

play10:55

Szybko ustalono, że zawierają ją tylko dwie wersje xz – 5.6.0 oraz 5.6.1 podpisane cyfrowo przez Jia.

play11:04

Wcześniejsze wersje podpisane przez Lasse nie zawierały złośliwego kodu.

play11:09

Kiedy już kurz opadnie, ma ukazać się wersja 5.8.0, która odetnie projekt od przeszłości.

play11:16

Większość dystrybucji szybko usunęła ze swoich repozytoriów zainfekowane wersje xz

play11:21

wymuszając tym samym instalację starszej wersji w momencie, kiedy ich użytkownicy przeprowadzą aktualizację.

play11:27

Tylko co właściwie wykombinował ten cały Jia?

play11:34

Ten atak to majstersztyk, ale wytłumaczenie w pełni jak został przeprowadzony nie jest wcale proste.

play11:40

Zainteresowanych szczególnie zachęcam do sprawdzenia bloga Gynvaela Coldwinda oraz innych źródeł,

play11:46

do których linki znajdziecie w opisie.

play11:48

Ja postaram się o szybkie streszczenie i z góry przepraszam za ewentualne uproszczenia.

play11:54

Cały łańcuch, który prowadzi do finalnego zaatakowania gotowej paczki xz złośliwym kodem ma kilka etapów.

play12:01

Każdy z nich jest na swój sposób obfuskowany, aby nie budzić podejrzeń na pierwszy rzut oka.

play12:07

Jia dodał do repozytorium dwa niewielkie binarne pliki, które wyglądały po prostu jak pliki wykorzystywane do testów.

play12:15

A to pewnie ostatnie miejsce, w które ktokolwiek z deweloperów by zaglądał, bo i po co?

play12:20

Wiadomo, potrzebna sprawa, ale nuda straszna, lepiej zająć się czymś innym.

play12:26

Podczas budowania gotowego pakietu przeznaczonego do szerokiej dystrybucji,

play12:30

dwie dodane do skryptów konfiguracyjnych linijki kodu, sięgają po te rzekome testowe pliki, rozpakowują je,

play12:38

a potem zamieniają ze sobą dwie pary znaków, tak samo jak funkcją znajdź i zamień.

play12:45

W ten sposób coś, co wyglądało wcześniej jak nieistotny bełkot, staje się nagle działającym fragmentem kodu.

play12:53

Drugi z plików testowych też jest filtrowany i modyfikowany w inny sposób, jednak w tym samym celu.

play13:00

Złożenie tego w całość tworzy skompresowany plik, który wystarczy po prostu rozpakować.

play13:06

Klocki zaczynają sukcesywnie trafiać na swoje miejsce.

play13:10

Następnym krokiem jest przygotowanie na tej podstawie pliku zawierającego kod maszynowy,

play13:16

który niepostrzeżenie integrowany jest w trakcie kompilacji programu.

play13:20

Miesza się tu kod źródłowy, kod maszynowy korzysta szeroko z grepa, awka, kompresji i dekompresji.

play13:26

Ogólnie naprawdę wyrafinowana sprawa.

play13:29

Et voila. Gotowe.

play13:31

Właśnie do xz trafiła jakaś magiczna funkcja, której nie znajdziemy nigdzie w kodzie źródłowym,

play13:38

a jest zwyczajnym backdoorem.

play13:40

Ba! Jia przygotował nawet mechanizm, który pozwalałby na dalszy rozwój możliwości tego konia trojańskiego,

play13:47

dodając po prostu następne pliki testowe, aby nie wzbudzać podejrzeń.

play13:53

Na drodze do próby przejęcia władzy nad światem,

play13:56

pierwsza wersja zawierająca dodatki okazała się generować błędy przy kompilacji,

play14:01

co wraz z pomocą innych specjalistów zostało szybko naprawione w kolejnej, szybko wypuszczonej wersji xz.

play14:08

I nikt nie zauważył, że coś jest bardzo nie-tak,

play14:11

aż do czasu, gdy Andres nie zwrócił uwagi na półsekundowe opóźnienie przy logowaniu.

play14:18

Dodajmy – zwrócił w ostatnim momencie, bo gdyby minęło parę dni albo tygodni,

play14:24

luka ta rozeszłaby się pewnie szeroko po całym świecie.

play14:28

Tylko na co tak właściwie pozwalała?

play14:31

Po przeprowadzeniu procesu inżynierii wstecznej przez społeczność dowiedzieliśmy się, co chciano osiągnąć.

play14:38

No bo co xz odpowiedzialne za kompresowanie danych ma w ogóle z logowaniem przez SSH wspólnego?

play14:45

No bezpośrednio to niby nic, ale – uwaga – będzie grubo.

play14:51

Żeby system operacyjny w ogóle wiedział, że usługa SSH działa, to musi ona o sobie dać znać demonowi systemd.

play14:59

Korzysta więc z funkcji sd_notify, która zawarta jest w bibliotece libsystemd.

play15:04

Żeby móc to zrobić, openSSH musi załadować ją do pamięci.

play15:08

Ta biblioteka zależna jest od innej biblioteki – liblzma, a więc siłą rzeczy ją też trzeba wczytać.

play15:16

A to ona właśnie jest częścią zainfekowanego pakietu xz.

play15:20

Wiemy już więc jak się tam znalazła, ale teraz jak to wykorzystać?

play15:24

Łącząc się do serwera SSH przesyłamy swój klucz publiczny,

play15:28

aby się niejako przedstawić i potwierdzić, kim właściwie jesteśmy.

play15:33

W miejsce tego klucza atakujący wstawia specjalnie spreparowany łańcuch znaków,

play15:39

który też jest kluczem, ale zaszyfrowanym w inny sposób z wykorzystaniem mechanizmu ED488, a nie RSA.

play15:47

Funkcja, która ma za zadanie ten klucz sprawdzić, została po prostu podmieniona, aby robiła coś więcej.

play15:55

Zamiast po prostu sprawdzić poprawność klucza, najpierw próbuje porównać go z posiadanym wzorcem.

play16:01

Jeżeli to porównanie się zgadza, to znaczy, że do drzwi puka atakujący.

play16:07

Jeżeli jednak się nie zgadza, to po prostu wykonuje się dalej tak jak pierwotnie miała

play16:11

i sprawdza poprawność danych uwierzytelniania.

play16:14

Proces ten jest praktycznie niewidoczny dla końcowego użytkownika,

play16:18

ale jak widzicie do sprawdzania klucza dochodzi w tym przypadku dwukrotnie, co trwa nieco dłużej.

play16:25

A więc nieco prościej – złośliwy kod wykonywany był praktycznie natychmiast po połączeniu do serwera,

play16:32

jeszcze przed przeprowadzeniem procesu uwierzytelniania.

play16:36

Sprawdzano, czy ktoś, kto puka do drzwi, dysponuje odpowiednim, sekretnym kluczem.

play16:42

Jeżeli nie, po prostu uwierzytelniano się tak jak zwykle, nie budząc podejrzeń.

play16:46

Jeżeli jednak ktoś był w posiadaniu klucza, to wpuszczano go do środka,

play16:51

aby wygodnie rozsiadł się w fotelu i czuł jak u siebie w domu.

play16:56

Nic innego nie było potrzebne, żeby przejąć setki, a może i miliony urządzeń na całym świecie.

play17:02

To dodatkowe sprawdzenie trwało te magiczne pół sekundy i położyło cały latami pieczołowicie przygotowywany atak.

play17:11

Tylko kto za tym wszystkim stoi?

play17:17

Kim właściwie jest sprawca całego tego zamieszania, Jia Tan?

play17:21

Mamy w tej sprawie sporo poszlak, do których analizy ruszyli ochoczo OSINTowcy z Twixxera.

play17:26

Wgląd w to dają nam choćby narzędzia GitHuba, pozwalające prześledzić historię wprowadzanych zmian.

play17:32

Ale nie tylko.

play17:34

Jia łączył się do IRCa projektu xz.

play17:37

Połączenie nawiązywał za każdym razem przez VPN prowadzący przez Singapur.

play17:43

Adres mailowy Jia nie występuje nigdzie poza GitHubem, wliczając w to wycieki baz użytkowników.

play17:50

Biorąc pod uwagę czas trwania takiej operacji, ciężko uznać to za normalne zachowanie.

play17:57

Wskazuje raczej na kogoś, kto nie tylko chciał pozostać anonimowy, ale też doskonale wiedział, jak to zrobić.

play18:04

Zdecydowanie lepiej niż zwykły użytkownik internetu, bo tacy zawsze popełniają jakieś opsecowe błędy.

play18:11

A tu ich nie ma.

play18:13

Grzebanie w logach GitHuba pozwoliło odkryć,

play18:15

że adres mailowy z którego korzystał Jia został raz użyty w połączeniu z drugim imieniem Cheong.

play18:23

Nie znam mandaryńskiego, ale źródła, które znalazłem

play18:26

wskazują, że takie połączenie w takiej transkrypcji na łaciński alfabet nie jest możliwe.

play18:32

Sugeruje się więc, że to po prostu przypadkowy zlepek imion użyty przez kogoś, kto o Chinach nie ma zbyt wiele pojęcia,

play18:41

ale chce, aby wszyscy wokół bez zastanowienia wskazali oczywistego według nich sprawcę.

play18:47

Jednym ze sposobów na sprawdzenie lokalizacji Jia jest analiza godzin, w których był aktywny.

play18:53

Ktoś używający tego konta, owszem – korzystał z urządzenia z ustawioną strefą czasową

play18:58

wskazującą na Chiny albo przynajmniej kraje na tych południkach.

play19:02

Jednak jego aktywność pozwala też wysnuć tezę, że znajdował się we wschodniej Europie lub np. Izraelu czy Iranie.

play19:11

Mogą to potwierdzać zmiany wprowadzone do repozytorium z wykorzystaniem innej strefy czasowej niż chińska,

play19:17

w bardzo krótkich, niemożliwych fizycznie do realizacji odstępach.

play19:22

Kolejną wskazówką jest praca w święta, w które ktoś z Chin raczej miałby wolne,

play19:27

za to brak aktywności choćby w Nowy Rok czy Boże Narodzenie.

play19:31

Ukrywanie się przez dwa lata, aby coś takiego zrobić ciężko nazwać hobby.

play19:38

Trzeba w tym czasie mieć co jeść.

play19:40

W dodatku do przeprowadzenia tak wyrafinowanego ataku potrzeba naprawdę ogromnej wiedzy.

play19:47

Mając takie umiejętności można w krótkim czasie zarobić pieniądze,

play19:51

które pozwolą przejść na emeryturę przed 40-tką w jakimś kraju, gdzie nigdy nie ma brzydkiej pogody.

play19:57

I to bez ryzyka trafienia do aresztu.

play20:00

To wszystko pozwala sądzić, że nie był to ktoś przypadkowy.

play20:04

Ba, pewnie nie była to nawet jedna osoba.

play20:08

Wszystko wskazuje na bardzo pieczołowicie zaplanowaną, spektakularną akcję,

play20:13

prowadzoną latami przez na przykład wywiad jakiegoś państwa.

play20:18

Społeczność zebrana wokół otwartoźródłowych projektów szybko wskazała prawdziwego winnego całego zamieszania.

play20:25

Oberwało się wszystkim firmom pasożytniczo korzystającym ze zdobyczy wolnego oprogramowania.

play20:30

Te często opierają swoje wielomiliardowe biznesy o jakąś małą bibliotekę

play20:36

rozwijaną po godzinach przez jakiegoś jednego pasjonata, bez żadnych finansowych korzyści z tego płynących.

play20:42

Nie mają więc prawa niczego w zamian wymagać.

play20:46

A już w szczególności tego, że jakiś przypadkowy Anczej pracując z czeluści swojej piwnicy,

play20:52

sam jeden dzielnie stawi czoła latami szkolonym szpiegom ze służb wywiadu jakiegoś mocarstwa.

play20:59

Pojawiła się zresztą w internecie masa memów,

play21:01

nabijających się z tego, że przecież projekty open source nawoływały do ich szerszego finansowego wsparcia,

play21:09

więc w sumie nie powinno się narzekać, że zainteresował się nimi w końcu ktoś,

play21:13

kto jest w stanie płacić rozwijającym je programistom.

play21:16

Ale dobra, żarty na bok, bo nie jest to cała prawda.

play21:20

Wiele firm, szczególnie tych największych, wspiera otwarte oprogramowanie.

play21:24

Często zresztą delegując do jego rozwoju swoich etatowych pracowników czy trzymając nad nimi mecenat.

play21:31

Problemem często jest też po prostu wypalenie,

play21:34

szczególnie w przypadku jakichś bardzo wyspecjalizowanych małych bibliotek.

play21:38

No bo co w nich można ciekawego i kreatywnego dodawać?

play21:43

Łata się jakieś drobne błędy, a zapał z czasem opada.

play21:47

I jak w końcu znajdzie się ktoś, kto chce przejąć taki zapomniany projekt, a w dodatku ma na to jakiś interesujący pomysł,

play21:55

to po prostu łatwo temu przyklasnąć, myśląc, że robi się to dla dobra wszystkich.

play22:04

Jeżeli lubisz być na bieżąco z technologią,

play22:06

to pewnie kusi Cię korzystanie z testowych albo nawet eksperymentalnych gałęzi oprogramowania.

play22:12

O ile gwarantuje to dostęp do najnowszych funkcji.

play22:15

To przysparza też więcej siwych włosów na głowie albo powoduje ich sukcesywne utratę.

play22:21

Bo nie tylko coś częściej może nie działać, ale też nie jest wystarczająco dobrze przetestowane,

play22:27

co w skrajnych przypadkach może prowadzić do takich właśnie sytuacji.

play22:32

A z dużą dozą pewności można stwierdzić, że był to najpoważniejszy atak na otwartoźródłowy projekt w historii.

play22:39

Choćby dlatego lepiej nie testuj na produkcji.

play22:43

Czy to jedyny taki przypadek?

play22:45

Cóż, z jednej strony widzimy, że przeprowadzenie takiej operacji w tej skali jest możliwe.

play22:52

Z drugiej, szerokie próby ingerowania w różne projekty mogą paradoksalnie zwiększyć czujność

play22:58

i utrudnić przeprowadzenie z sukcesem takiej operacji w przyszłości.

play23:02

A więc – jak zwykle –  jeden rabin powie tak, drugi rabin powie nie.

play23:07

Pierwszą teorię potwierdzać jednak może fakt,

play23:09

że w podobny sposób próbowano ostatnio wpływać na deweloperów F-Droida,

play23:14

największego repozytorium wolnych i otwartoźródłowych aplikacji dla Androida.

play23:19

Chciano wymusić na nich, aby dokonali zmian w kodzie swojego projektu,

play23:24

które mogły wprowadzić bokiem podatność kategorii SQL injection.

play23:29

Cała sprawa miała miejsce jakieś trzy lata temu i o szczegółach możecie przeczytać na 404media.

play23:35

Link oczywiście znajdziecie w opisie pod filmem.

play23:37

Konto Jia wprowadziło jakieś 6 tysięcy zmian na GitHubie do 7 różnych projektów,

play23:43

więc audyt i nieuchronnie nadciągające po nim sprzątanie tego bałaganu zajmie pewnie długie tygodnie.

play23:51

Ale co to jest dla pasjonatów?

play23:53

Powstał już nawet honeypot, który ma nasłuchiwać, czy ktoś próbuje wykorzystać lukę.

play23:58

Ale błagam, nie rób tego w domu.

play24:01

A jeżeli jesteś programistą, nie dołączaj do swojego oprogramowania na ślepo zamkniętych bibliotek.

play24:07

Nigdy nie wiesz, co może siedzieć w ich wnętrzu.

play24:10

I to już wszystko na dziś.

play24:12

Tymczasem dziękuję za Waszą uwagę i do zobaczenia!

Rate This

5.0 / 5 (0 votes)

Related Tags
OpenSSHCybersecuritySoftware VulnerabilitySupply Chain AttackDebian IssueGitHub AuditXZ PackageBackdoor MechanismCVE2024-3094Security Breach