Анализ безопасности CVE-2024-3094 (бэкдор в XZ Utils), включающий моделирование угроз, статический/динамический анализ кода, фаззинг с помощью AFL++ и эксплойт доказательства концепции. Включает Docker-среду для воспроизводимого анализа.
Автор: Сушин Иван
Дата: Март 2026
Данный репозиторий содержит результаты полного security review уязвимости CVE-2024-3094 (Supply Chain Attack в библиотеке XZ Utils).
Цель работы:
Артефакты:
| Файл | Описание |
|---|
docs/ThreatModel.md | Модель угроз STRIDE + диаграмма |
docs/Report_Final.pdf | Финальный отчёт (57+ страниц) |
exploit/PoC.py | Proof-of-Concept уязвимости |
tests/ | Набор автотестов (pytest) |
reports/Findings.xlsx | Таблица находок Security Review |
presentation/ | Слайды и видео презентации |
| Компонент | Версия | Назначение |
|---|---|---|
| Docker Engine | 20.10+ | Контейнеризация окружения |
| Git | 2.20+ | Контроль версий |
| Python | 3.8+ | Тесты и скрипты |
| GCC/Clang | 9.0+ | Компиляция XZ Utils |
cd kaspersky_task_SushinIvan
# Собрать образ
docker build -t cveanalysis:1.0 .
# Проверка образа
docker images | grep cveanalysis
# Запустить контейнер
docker run -it --rm --privileged -v $(pwd):/work cveanalysis:1.0
cd /work/src/vulnerable-code/build
# Очистка кэша
rm -rf CMakeCache.txt CMakeFiles/
# Конфигурация
cmake .. -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Debug \
-DUSE_ATTR_IFUNC=OFF -DENABLE_NLS=OFF
# Сборка
make -j$(nproc)
# Проверка версии
./xz --version
# Ожидаемый вывод: xz (XZ Utils) 5.6.1
cd /work/src/patched-code/build
# Очистка кэша
rm -rf CMakeCache.txt CMakeFiles/
# Конфигурация
cmake .. -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Debug \
-DUSE_ATTR_IFUNC=OFF -DENABLE_NLS=OFF
# Сборка
make -j$(nproc)
# Проверка версии
./xz --version
# Ожидаемый вывод: xz (XZ Utils) 5.6.2
cd /work/src/vulnerable-code/build
# Сборка
make -j$(nproc)
# Запуск тестов проекта
make test
# Ожидаемый результат: All tests passed
# Установка зависимостей
cd /work
pip3 install -r tests/requirements.txt
# Запуск pytest
python3 -m pytest tests/ -v
Ожидаемый результат: 5 passed
Static Analysis
# Анализ символов (nm)
nm -C liblzma.a | grep -iE "ssh|backdoor|hook|init"
# Cppcheck
cppcheck --enable=all --inconclusive src/liblzma 2> reports/cppcheck_log.txt
Dynamic Analysis
# AddressSanitizer (сборка с флагами)
cmake .. -DCMAKE_C_FLAGS="-fsanitize=address -g"
# Valgrind
valgrind --leak-check=full ./exploit/test_trigger
# AFL++ Fuzzing (30 минут)
timeout 1800 afl-fuzz -i fuzzing/inputs -o fuzzing/outputs -- ./exploit/test_trigger_afl @@
.
├── Dockerfile # Docker-образ
├── README.md # Этот файл
├── Report_Final.pdf # Финальный отчёт
├── docs/
│ ├── ThreatModel.md # Модель угроз
│ └── threat_model.png # Диаграмма
├── exploit/
│ ├── PoC.py # Proof-of-Concept
│ ├── test_trigger.c # Тест для ASAN/AFL++
│ ├── test_trigger # Бинарник
│ └── test_trigger_afl # Инструментированный бинарник
├── tests/
│ ├── src/
│ │ └── test_cve2024_3094.py # Автотесты
│ ├── CMakeLists.txt # Конфигурация тестов
│ └── requirements.txt # Python зависимости
├── reports/
│ ├── Findings.xlsx # Таблица находок
│ ├── asan_test_output.txt # Логи ASAN
│ ├── valgrind_log.txt # Логи Valgrind
│ ├── cppcheck_log.txt # Логи Cppcheck
│ ├── afl_fuzzing_log.txt # Логи AFL++
│ └── version_*.txt # Версии сборок
└── presentation/
└── slides.md # Слайды презентации