out-of-tree v1.0.0 ― инструмСнтарий для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования эксплоитов ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ядра Linux


out-of-tree v1.0.0 ― инструмСнтарий для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования эксплоитов ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ядра Linux

Бостоялся Ρ€Π΅Π»ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠΉ (v1.0.0) вСрсии out-of-tree ― инструмСнтария для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования эксплоитов ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ядра Linux.

out-of-tree позволяСт Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€ΡƒΡ‚ΠΈΠ½Π½Ρ‹Π΅ дСйствия ΠΏΠΎ созданию ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ядра ΠΈ эксплоитов, Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ статистики надСТности эксплоитов, Π° Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ простой ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π² CI (Continuous Integration).

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ядра Π»ΠΈΠ±ΠΎ эксплоит описываСтся Ρ„Π°ΠΉΠ»ΠΎΠΌ .out-of-tree.toml, Π³Π΄Π΅ указываСтся информация ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΈ (Π² случаС, Ссли это эксплоит) ΠΎ ограничСниях Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ€ бСзопасности (security mitigations).

Π’Π°ΠΊΠΆΠ΅ инструмСнтарий позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ вСрсии ядра, Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹Π΅ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ —guess), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для упрощСния Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°.

Π”Π°Π»Π΅Π΅ список ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ со Π²Ρ€Π΅ΠΌΠ΅Π½ вСрсии v0.2.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ

  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ количСство Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… (out-of-tree kernel autogen) ядСр (Π½Π° основС описания Π² .out-of-tree.toml) ΠΈ запусков ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ (out-of-tree pew) c ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° —max=X.

  • Новая ΠΊΠΎΠΌΠ°Π½Π΄Π° genall, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΡΠ³Π΅Π½Π΅Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС ядра для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ дистрибутива ΠΈ вСрсии.

  • ВсС Π»ΠΎΠ³ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ хранятся Π² sqlite3 Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для простых часто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… запросов, Π° Ρ‚Π°ΠΊΠΆΠ΅ экспорт Π΄Π°Π½Π½Ρ‹Ρ… Π² json ΠΈ markdown.

  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ подсчСт вСроятности ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ эксплуатации (Π½Π° основС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… запусков).

  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ сборки (Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ —dist для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ out-of-tree pew)

  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… для ядСр, установлСнных Π² хостовой систСмС, Π° Ρ‚Π°ΠΊΠΆΠ΅ сборка нСпосрСдствСнно Π½Π° хостС.

  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сторонних ядСр.

  • Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ (out-of-tree debug) автоматичСски ΠΈΡ‰Π΅Ρ‚ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Π΅ символы Π½Π° хостовой систСмС.

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ управлСния ΠΌΠ΅Ρ€Π°ΠΌΠΈ бСзопасности (security mitigations) Ρ„Π»Π°Π³Π°ΠΌΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ/ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ KASLR, SMEP, SMAP ΠΈ KPTI Π²ΠΎ врСмя ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ.

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ —threads=N для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ запуска тСстирования out-of-tree pew, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ сборка/запуск ΠΈ тСстированиС эксплоитов ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ядра.

  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚Π΅Π³, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π² Π»ΠΎΠ³ ΠΈ Π΄Π°Π»Π΅Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для расчСта статистики.

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ ядра Π±Π΅Π· использования рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

  • Новая ΠΊΠΎΠΌΠ°Π½Π΄Π° pack, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ для массовых тСстов эксплоитов ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ядра Π² поддирСкториях.

  • Π’ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (.out-of-tree.toml) для эксплоита ΠΈ модуля ядра Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ KASLR, SMEP, SMAP ΠΈ KPTI, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство ядСр ΠΈ памяти.

  • Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±Ρ€Π°Π·Ρ‹ (rootfs) Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ автоматичСски Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ kernel autogen. bootstrap большС Π½Π΅ Π½ΡƒΠΆΠ΅Π½.

  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ядСр CentOS.

ИзмСнСния

  • Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли Π½Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π·Π° (rootfs) для Π½ΡƒΠΆΠ½ΠΎΠΉ вСрсии дистрибутива ― out-of-tree Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Π»ΠΈΠ·ΠΊΠΎΠΉ вСрсии. НапримСр, ΠΎΠ±Ρ€Π°Π· Ubuntu 18.04 для Ubuntu 18.10.

  • Π’Π΅ΠΏΠ΅Ρ€ΡŒ тСсты для ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ядра Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ²Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΎΠ½ΠΈ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ (Π½Π΅Ρ‚ тСстов ― Π½Π΅Ρ‚ ошибок!).

  • Π’Π΅ΠΏΠ΅Ρ€ΡŒ out-of-tree Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ошибки Π² Ρ‚ΠΎΠΌ случаС, Ссли хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ этап (сборка, запуск ΠΈΠ»ΠΈ тСстированиС) Π½Π° любом ΠΈΠ· ядСр Π±Ρ‹Π» Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ с ошибкой.

  • ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠ΅Ρ€Π΅ΡˆΠ΅Π» Π½Π° использованиС Go modules, сборка с GO111MODULE=on Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π°.

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ тСсты ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

  • Π’Π΅ΠΏΠ΅Ρ€ΡŒ test.sh Π±ΡƒΠ΄Π΅Ρ‚ использован ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Ρ‚ΠΎΠΌ случаС, Ссли сборка Π² ${TARGET}_test Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Makefile.

  • Π›ΠΎΠ³ ядра Π±ΠΎΠ»Π΅Π΅ Π½Π΅ очищаСтся ΠΏΠ΅Ρ€Π΅Π΄ запуском модуля ядра ΠΈΠ»ΠΈ эксплоита. НСкоторыС ΠΈΠ· эксплоитов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ Π±Π°Π·Ρ‹ ядра Π² dmesg для ΠΎΠ±Ρ…ΠΎΠ΄Π° KASLR, поэтому очистка ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ эксплоита.

  • qemu/kvm Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ всС возмоТности хостового процСссора.

Π£Π΄Π°Π»Π΅Π½ΠΎ

  • Π€Π°Π±Ρ€ΠΈΠΊΠ° ядСр ΡƒΠ±Ρ€Π°Π½Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π² связи с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ядСр Π½Π° основС ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ дополняСмых Dockerfile.

  • bootstrap Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚. Команда Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½Π° Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π΅Π»ΠΈΠ·Π΅.

Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ

  • На macOS Π±ΠΎΠ»Π΅Π΅ Π½Π΅ трСбуСтся GNU coreutils для Ρ€Π°Π±ΠΎΡ‚Ρ‹.

  • Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ пСрСнСсСны Π² ~/.out-of-tree/tmp/ ΠΈΠ·-Π·Π° ошибок монтирования Π²Π½ΡƒΡ‚Ρ€ΠΈ docker Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… систСмах.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: linux.org.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ