Содержание статьи
Стенд
Давай быстренько скачаем готовую виртуальную машину, чтобы не тратить время на ее разворачивание из ISO-образа.
Готовые виртуалки можно найти на сайте osboxes.org. Там есть образы ВМ для VMware Player и VirtualBox.
Для этой статьи я взял образ Ubuntu для VirtualBox. Но ты волен выбрать любой другой дистрибутив и систему виртуализации.
Качаем Ubuntu 22.04 Jammy Jellyfish.
Пока виртуалка скачивается, повторим теорию про фаззинг и Syzkaller.
Краткая история фаззинга
Фаззинг (fuzzing) — это метод тестирования программ, который заключается в автоматической генерации и вводе случайных или некорректных данных в программу с целью поиска ошибок, уязвимостей и возможных сбоев.
Термин «фаззинг» был впервые использован в научной статье «An Empirical Study of the Reliability of UNIX Utilities» в 1988 году. Однако сам метод фаззинга стал активно развиваться в начале двухтысячных годов благодаря работе исследователей и хакеров, которые широко использовали его для поиска уязвимостей в ПО.
Один из первых известных случаев успешного применения фаззинга был в 2005 году, когда команда исследователей безопасности нашла уязвимость в Internet Explorer, используя автоматический фаззинг. Этот случай показал, что фаззинг может быть эффективным инструментом для поиска уязвимостей даже в очень популярных продуктах.
Со временем фаззинг стал широко распространенным методом тестирования программ и используется как разработчиками, так и хакерами для поиска уязвимостей и повышения безопасности. А с появлением специализированных инструментов и фреймворков для фаззинга он стал еще доступнее и эффективнее.
Краткая история Syzkaller
Syzkaller — это инструмент для автоматизированного тестирования ядра операционной системы, разработанный Дмитрием Вьюковым. История Syzkaller началась примерно в 2014 году.
В начале работы над Syzkaller Вьюков столкнулся с проблемой поиска и исправления уязвимостей в ядре Linux. Традиционные методы тестирования и ручного анализа кода оказались неэффективными из‑за сложности и объема кода ядра. Поэтому он решил создать инструмент, который позволил бы автоматизировать этот процесс.
Syzkaller был разработан как инструмент для генерации и запуска случайных тестов на ядре Linux. Он использует фаззеры для генерации случайных входных данных, которые передаются в системные вызовы ядра. Затем Syzkaller отслеживает поведение системы и реагирует на ошибки, падения или другие аномалии.
Со временем Syzkaller стал широко используемым инструментом в сообществе разработчиков ядра Linux и других операционных систем. Он помог выявить множество уязвимостей и ошибок в ядре, улучшить его качество и надежность.
Сегодня Syzkaller поддерживает не только ядро Linux, но и другие операционные системы, такие как FreeBSD, Fuchsia и даже Windows. Он продолжает развиваться и улучшаться благодаря вкладу сообщества разработчиков и исследователей безопасности.
Что ж, думаю, виртуалка уже скачалась, поэтому сворачиваем исторический экскурс и отправляемся заниматься практикой.
В архиве ты найдешь виртуальный диск, его нужно подключить при создании новой виртуалки.
В случае VirtualBox это выглядит так, как на рисунке ниже.
Очень важно включить вложенную виртуализацию, в этом поможет команда
& 'C:\Program Files\Oracle\VirtualBox\VBoxManage.exe' modifyvm Ubuntu.22.04.x64 --nested-hw-virt on
И не забудь включить буфер обмена, чтобы можно было копировать команды в виртуалку.
Если копирование не заработает, то можно поставить в виртуалке OpenSSH server и просто работать с ней через SSH. Только перед этим нужно поменять у виртуалки тип соединения с NAT на сетевой мост.
Дальше узнаём адрес и подключаемся.
Я использую именно этот метод, поскольку работаю на выделенном сервере, а не в ВМ.
Собираем фаззер
Теперь, когда скачан виртуальный диск и развернута виртуальная машина, приступаем к сборке фаззера.
Перво‑наперво — Go. Фаззер написан на Golang, поэтому нам понадобится компилятор этого языка. Для сборки нужна версия 1.21 или старше.
wget https://dl.google.com/go/go1.21.4.linux-amd64.tar.gz
tar -xf go1.21.4.linux-amd64.tar.gz
export GOROOT=`pwd`/go
export PATH=$GOROOT/bin:$PATH
Еще понадобится компилятор C и С++, а также ядро с включенным измерением покрытия кода (первое заполучить элементарно, второе — чуть сложнее), ну и, само собой, нужен Git. И еще всякое по мелочи, полный список есть в документации Syzkaller.
Напоминаю, пароль от скачанной виртуалки — osboxes.
.
sudo apt update
sudo apt install -y gcc g++ git make flex bison libncurses-dev libelf-dev libssl-dev bc
С ядром разберемся чуть позже, а пока клонируем репозиторий Syzkaller и собираем проект.
cd $HOMEgit clone https://github.com/google/syzkaller
cd syzkaller
make
Собранные бинарники будут находиться в директории bin
.
Сборка ядра
Переходим к подготовке ядра, так как это и есть наша цель для фаззинга. Клонируем репозиторий, настроим и скомпилируем ядро.
Качаем ядро
Тут всё стандартно. Сначала клонируем репозиторий исходного кода ядра.
export KERNEL=$HOME/linux
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git $KERNEL
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»