бекдор XZ
Без сумніву Випадок з бекдором, який був виявлений в утиліті XZ, є одним із випадків, який увійде в історію Linux і це не дарма, але всю роботу виконав Цзя Тан Це один із найкращих прикладів прикладної соціальної інженерії, оскільки виконана робота, безсумнівно, викликає захоплення через кількість вкладеного часу, оскільки ми не говоримо про тижні чи місяці, принаймні про два роки.
Цей випадок привернув увагу багатьох і розпочато зворотний інженерний аналіз, які за їхніми попередніми результатами виявити наявність бекдора, вбудованого в liblzma як частину кампанії з проникнення в пакет XZ. Цей бекдор спеціально розроблений для впливу на системи x86_64 з ядром Linux і бібліотекою Glibc C, де до sshd застосовано додатковий патч, щоб зв’язати його з libsystemd.
Дослідники згадують це Спочатку вважалося, що бекдор може обійти аутентифікацію sshd і отримати доступ до системи через SSH, але подальший аналіз показав, що бекдор дозволяє виконувати довільний код у системі, не залишаючи слідів у журналах sshd.
Функція RSA_public_decrypt перехоплюється бекдором для перевірки підпису хоста за допомогою фіксованого ключа Ed448. Якщо перевірка пройшла успішно, код, переданий зовнішнім хостом, виконується за допомогою функції system() перед тим, як sshd скине привілеї. Дані коду, які потрібно виконати, витягуються з параметра «N», який передається у функцію RSA_public_decrypt, і перевіряються та розшифровуються за допомогою попередньо визначеного ключа ChaCha20.
Щоб активувати бекдор в sshd, використовує стандартний механізм обміну ключами хоста та відповідає лише на ключ, підготовлений зловмисником і відповідно до попередньо визначеного фіксованого ключа Ed448. Якщо перевірка підпису відкритого ключа не вдається або якщо цілісність даних виконання не підтверджено, бекдор повертає керування стандартним функціям SSH.
Приватний ключ зловмисника залишається невідомим, що унеможливлює впровадження коду перевірки для активації бекдору із зовнішніх джерел або розробку сканера, який виявляє скомпрометовані хости в мережі. Однак дослідники розробили сценарій, який показує, як відкритий ключ можна замінити в сертифікаті OpenSSH, переданому SSH-клієнтом, який обробляється функцією RSA_public_decrypt, перехопленою бекдором.
Крім того, Дослідники виявили існування механізму нейтралізації бекдору (killswitch) у локальній системі, встановивши змінну середовища перед запуском sshd. Також було проведено детальний аналіз збірок оболонки, які використовуються для того, щоб заплутати процес вилучення об’єктного файлу з бекдором і замінити його в бібліотеці liblzma.
Під час компіляції пакета XZ було виконано деякий код зі сценарію «build-to-host.m4» який маніпулював тестовим файлом і вніс певні зміни в персонажів і перетворив його на неушкоджений файл, з якого було витягнуто сценарій оболонки. Отриманий сценарій оболонки міг поступово витягувати інший сценарій оболонки з вмісту, пропускаючи певні послідовності з командами та замінюючи символи.
У результаті цього процесу було створено досить складний і великий сценарій оболонки, який напряму витягував файл із бекдором із файлу good-large_compressed.lzma, розшифровував його та вставляв у liblzma. Цей сценарій також включав реалізацію механізму плагіна, який дозволяв доставляти додаткові виконувані компоненти пізніше шляхом розміщення нових тестових файлів без зміни good-large_compressed.lzma та bad-3-corrupt_lzma2.xz, використовуючи пошук підпису. У код також включений дешифратор на основі алгоритму RC4, реалізований на мові AWK.
З іншого боку, варто зазначити, що виходячи з інциденту, Розроблено набір інструментів під назвою xzbot, що включає:
- Приманка для створення фіктивних серверів, які видають себе за вразливі для виявлення спроб підключення зловмисників.
- Патч для заміни відкритого ключа на бекдорі в liblzma.so на ваш власний (для підключення до бекдору за допомогою відповідного закритого ключа).
- Демо для ініціювання виконання коду на модифікованому бекдорі за допомогою відповідного закритого ключа.
Якщо вам цікаво знати докладніше про це, Ви можете перевірити деталі в за наступним посиланням.