
Реверс-инжиниринг программного обеспечения с использованием полносистемного симулятора
RESim — это инструмент динамического анализа системы, обеспечивающий детальное понимание процессов, программ и потоков данных в сетевых компьютерах. RESim симулирует сети компьютеров с использованием высокоточных моделей процессоров, периферийных устройств (например, сетевых интерфейсных карт) и дисков платформы Simics. Модели сетевых компьютерных платформ загружают и запускают целевое программное обеспечение, скопированное из образов, извлечённых из физических систем, которые моделируются.
RESim помогает в реверс-инжиниринге и анализе уязвимостей сетей систем на базе Linux и Windows, инвентаризируя процессы с точки зрения выполняемых ими программ и потребляемых данных. Источники данных включают файлы, интерфейсы устройств и механизмы межпроцессного взаимодействия. Выполнение процессов и потребление данных документируются с помощью динамического анализа работающей смоделированной системы без установки или внедрения программного обеспечения в смоделированную систему и без детального знания ядра, на котором работают процессы.
RESim также обеспечивает интерактивную видимость отдельных исполняемых программ с помощью плагинов к дизассемблерам/отладчикам IDA Pro и Ghidra. Дизассемблер/отладчик позволяет устанавливать точки останова для приостановки симуляции в выбранных событиях как в будущем, так и в прошлом[2]. Например, RESim может направить состояние симуляции в обратном направлении до самого последнего изменения выбранного адреса памяти. В любой момент выполнения системы могут быть созданы перезагружаемые контрольные точки. Симуляцию RESim можно приостановить для проверки, например, когда указанный процесс запланирован на выполнение, а затем продолжить, потенциально с изменённым состоянием памяти или регистров. Аналитик может явно изменять содержимое памяти или регистров, а также динамически дополнять память на основе системных событий, например, изменить запись в файле паролей при её чтении программой su.
Анализ выполняется полностью путём наблюдения за состоянием памяти и процессора смоделированной целевой системы, без необходимости в оболочках, внедрении программного обеспечения или таблицах символов ядра. Этот анализ называется внешним, потому что функции наблюдения не влияют на состояние смоделированной системы.
RESim интегрирован с фаззером American Fuzzing Lop (AFL). Эта фаззинг-система вводит фаззированные данные непосредственно в буфер чтения приложения, упрощая настройку и рабочий процесс фаззинга. RESim автоматически повторяет и анализирует любые обнаруженные сбои, выявляя причины сбоев, например, повреждение управления выполнением.
Пожалуйста, обратитесь к Руководству пользователя RESim для получения дополнительной информации. Краткая демонстрация RESim доступна здесь: (https://nps.box.com/s/rf3n104ualg38pon6b7fm6m6wqk9zz50)
Примеры образов дисков описаны в этом readme
RESim является производным от платформы проверки программного обеспечения и судебно-медицинского анализа, созданной для DARPA Cyber Grand Challenge. Репозиторий находится здесь: https://github.com/mfthomps/cgc-monitor. Статья, описывающая эту работу, доступна по адресу https://www.sciencedirect.com/science/article/pii/S1742287618301920 А отличное описание использования Simics в CGC Monitor есть на https://software.intel.com/content/www/us/en/develop/blogs/simics-software-automates-cyber-grand-challenge-validation.html
[1]Simics — это симулятор полной системы, разработанный Intel, которому принадлежат все соответствующие товарные знаки. [2]Simics 7 отказался от «обратного выполнения», но RESim его возвращает.
This software was created by United States Government employees
and may not be copyrighted.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.