Вышла новость, чтоe Amazon выпустила новый инструмент фаззинга под названием Snapchange., что позволяет проверять исполняемые файлы без их модификации и без наличия исходного кода приложения. Этот шаг частично разработан для решения проблем безопасности цепочки поставок программного обеспечения.
В сообщении Amazon упоминается, что Snapchange начинался как эксперимент от исследовательской группы AWS Find and Fix (F2) по исследованию безопасности с открытым исходным кодом, чтобы изучить потенциал использования KVM для включения фаззинга моментальных снимков.
Сегодня мы рады объявить о Snapchange, новом проекте с открытым исходным кодом, который значительно упрощает фаззинг на основе моментальных снимков. Snapchange позволяет фаззить целевой двоичный файл с минимальными изменениями, предоставляя полезную информацию, которая помогает в фаззинге.
Snapchange — это среда Rust для создания фаззеров, которые воспроизводят снимки физической памяти, чтобы повысить эффективность и упростить фаззинг многих типов целей. Snapchange использует функции встроенного в ядро Linux диспетчера виртуальных машин, известного как виртуальная машина ядра или KVM.
О Snapchange
Упоминается, что, Snapchange позволяет загрузить дамп физической памяти с производным исполняемым кодом и организовать, с помощью гипервизора KVM циклическое выполнение кода присутствует на свалке, перебор различных комбинаций входных данных, отслеживая возникающие сбои или аномалии и перезапуская проверку после очередной итерации, каждый раз при восстановлении сегмента памяти и регистров ЦП в исходное состояние.
Итерация сбрасывается и перезапускается после аварийного завершения, время ожидания или наступления определенного события. Входные данные замещаются непосредственно в память и для экономии ресурсов при инициализации в начальное состояние памяти после выполнения очередной итерации определяется, какие данные находятся в памяти и изменились.
Начальный дамп памяти создается путем сохранения моментального снимка виртуальной машины. в котором выполняется среда с тестируемым приложением, работающим под VirtualBox или QEMU. Логика подмены входных данных определяется созданием специальных скриптов, а начальная позиция циклического выполнения задается установкой из точки останова в отладчике.
Например, если необходимо проверить многостадийность обработки сетевого запроса, исследователь запускает приложение на гостевой системе в VirtualBox или QEMU, в отладчике находит начало выполнения процедуры обработки запроса (например , после вызова функции recv), ставит на него точку останова и определяет область памяти, в которую загружается полученный сетевой пакет. После этого создается снапшот гостевой системы и загружается в Snapchange.
Для проверки пишется скрипт, записывающий данные при переборе прямо в буфер. сетевого пакета, который позволяет имитировать обработку реальных сетевых пакетов. Snapchange продолжает работу с того места, где остановился, каждый раз изменяя содержимое данных в буфере и возвращая состояние памяти в исходное состояние.
Поддерживаются различные стратегии генерации входных данных. Несколько сред, привязанных к разным ядрам ЦП, могут быть пронумерованы с параллельным выполнением. Помимо обнаружения сбоев во время выполнения кода, он также поддерживает сбор показателей производительности, накопление статистики покрытия для оценки покрытия исполняемого кода и пошаговую трассировку исполняемого кода.
Для заинтересован в проекте, следует знать, что код проекта написан на Rust и распространяется под лицензией Apache 2.0 через GitHub.
Snapchange работает в Linux, но требует прямого доступа к базовым примитивам KVM. Поэтому он поддерживает типы инстансов EC2 без операционной системы, которые работают без гипервизора, но не виртуализированные инстансы EC2.
Наконец, если вы заинтересованы в том, чтобы узнать об этом больше, вы можете ознакомиться с исходным объявлением. По следующей ссылке.