Kam1n0 v2.x — это масштабируемая платформа для управления сборками и анализа. Он позволяет пользователю сначала индексировать (большую) коллекцию двоичных файлов в разные репозитории и предоставлять различные аналитические услуги, такие как поиск и классификация клонов. Он поддерживает мультитенантный доступ и управление репозиториями сборок с использованием концепции Application . Экземпляр приложения содержит собственный эксклюзивный репозиторий и предоставляет специализированный аналитический сервис. Учитывая универсальность задач обратного проектирования, сервер Kam1n0 v2.x в настоящее время предоставляет три различных типа приложений для поиска клонов: Asm-Clone , Sym1n0 и Asm2Vec , а также классификацию исполняемых файлов на основе Asm2Vec . В дальнейшем на платформу можно добавить новый тип приложения.
Пользователь может создать несколько экземпляров приложения. Экземпляр приложения может быть доступен определенной группе пользователей. Доступ для чтения и записи к репозиторию приложений, а также статус включения-выключения могут контролироваться владельцем приложения. Сервер Kam1n0 v2.x может одновременно обслуживать приложения, используя несколько пулов общих ресурсов.
Kam1n0 был разработан Стивеном Х.Х. Дином и Майлзом К. Ли под руководством Бенджамина К.М. Фунга из Лаборатории интеллектуального анализа данных и безопасности Университета Макгилла в Канаде. Он занял второе место на конкурсе плагинов Hex-Rays 2015. Если Kam1n0 окажется для вас полезным, процитируйте нашу статью:
ШХ Дин, Б.К.М. Фунг и П. Чарланд. Kam1n0: Поиск клонов сборок на основе MapReduce для обратного проектирования. В материалах 22-й Международной конференции ACM SIGKDD по обнаружению знаний и интеллектуальному анализу данных (SIGKDD) , страницы 461–470, Сан-Франциско, Калифорния: ACM Press, август 2016 г.
ШХ Дин, Б.К.М. Фунг и П. Чарланд. Asm2Vec: повышение устойчивости статического представления для поиска двоичных клонов против обфускации кода и оптимизации компилятора. В материалах 40-го симпозиума IEEE по безопасности и конфиденциальности (S&P) , 18 страниц, Сан-Франциско, Калифорния: Компьютерное общество IEEE, май 2019 г.
Приложения Asm-Clone пытаются решить эффективную проблему поиска подграфов (т. е. проблему изоморфизма графов) для функций сборки (среднее время запроса <1,3 с и среднее время индексации <30 мс для 2,3 млн функций). Учитывая целевую функцию (слева, как показано ниже), она может идентифицировать клонированные подграфы среди других функций в репозитории (тот, что справа, как показано ниже).
Семантический поиск клонов путем дифференцированного фазз-тестирования и решения ограничений. Эффективный и масштабируемый динамически-статический гибридный подход (среднее время запроса <1 с и среднее время индексации <100 мс при 1,5 млн функций). Учитывая целевую функцию (слева, как показано ниже), она может идентифицировать клонированные подграфы среди других функций в репозитории (тот, что справа, как показано ниже). Поддержка визуализации графа абстрактного синтаксиса.
Asm2Vec использует обучение представлению. Он понимает лексико-семантические отношения ассемблерного кода. Например, регистры xmm*
семантически связаны с векторными операциями, такими как addps
. memcpy
похож на strcpy
. На графике ниже показаны различные функции сборки, скомпилированные из одного и того же исходного кода gmpz_tdiv_r_2exp
в libgmp. Слева направо функции сборки компилируются с опцией GCC O0, опцией GCC O3, графом потока управления обфускатора O-LLVM, опцией выравнивания и опцией фиктивного графа потока управления обфускатора LLVM. Asm2Vec может статически идентифицировать их как клоны.
В этом приложении пользователь определяет набор классов программного обеспечения, основанных на функциональной связи, и обеспечивает принадлежность двоичных файлов каждому классу. Затем система автоматически группирует функции в кластеры, в которых функции связаны прямо или косвенно отношением клонирования. Кластеры, дискриминирующие классификацию, сохраняются и служат сигнатурами своих классов. Учитывая целевой двоичный файл, система показывает степень его принадлежности к каждому классу программного обеспечения.
Используйте Asm2Vec в качестве модели вычисления сходства функций.
На рисунке ниже показаны основные компоненты пользовательского интерфейса и функциональные возможности Kam1n0 v2.x. Мы принимаем материальный дизайн. Обычно у каждого пользователя есть список приложений, список выполняемых заданий и список файлов результатов.
Текущая версия Kam1n0 состоит из двух установщиков: основного сервера и подключаемого модуля IDA Pro.
Установщик | Входящие в комплект компоненты | Описание |
---|---|---|
Kam1n0-Server.msi | Основной двигатель | Основной механизм, предоставляющий услуги индексирования и поиска. |
Верстак | Пользовательский интерфейс для управления репозиториями и запущенным сервисом. | |
Веб-интерфейс пользователя | Веб-интерфейс пользователя для поиска/индексации двоичных файлов и функций сборки. | |
Распространяемый пакет Visual C++ для VS 15 | Зависимость для z3. | |
Kam1n0-IDA-Plugin.msi | Плагин | Разъемы и пользовательский интерфейс. |
Колеса PyPI для Cefpython | Механизм рендеринга пользовательского интерфейса. | |
PyPI и зависимые колеса | Управление пакетами для Python. Включено для IDA 6.8 и 6.9. |
Основной движок Kam1n0 написан исключительно на Java. Вам нужны следующие зависимости:
Загрузите файл Kam1n0-Server.msi
со страницы выпуска. Следуйте инструкциям по установке сервера. Вам будет предложено выбрать путь установки. IDA Pro является необязательной, если серверу не приходится заниматься дизассемблированием. Другими словами, клиентская часть использует плагин Kam1n0 для IDA Pro. Настоятельно рекомендуется установить IDA Pro вместе с сервером Kam1n0. Сервер Kam1n0 автоматически обнаружит ваш IDA Pro, выполнив поиск приложения по умолчанию, которое вы использовали для открытия файла .i64
.
Плагин Kam1n0 IDA Pro написан на Python для логики и на HTML/JavaScript для рендеринга. Для его установки необходимы следующие зависимости:
Затем загрузите установщик Kam1n0-IDA-Plugin.msi
со страницы выпуска. Следуйте инструкциям по установке плагина и среды выполнения. Обратите внимание, что плагин необходимо установить в папку плагинов IDA Pro, которая находится по адресу $IDA_PRO_PATH$/plugins
. Например, в Windows путь может быть C:/Program Files (x86)/IDA 6.95/plugins
. Установщик обнаружит и проверит путь.
Убедитесь, что у вас установлена версия Oracle Java 11. (Не default-jdk в apt.)
sudo add-apt-repository ppa:webupd8team/java
~webupd8team not found
), если вы используете прокси-сервер, убедитесь, что вы установили и экспортировали переменные среды http_proxy
и https_proxy
, а затем повторите попытку с опцией -E
в sudo. Кроме того, если вы получаете сообщение об ошибке «команда репозитория add-apt не найдена», попробуйте: sudo apt install -y software-properties-common
.sudo apt-get update
и sudo apt-get install oracle-java8-installer
java -version
; вам может потребоваться вручную установить переменную среды JAVA_HOME (в /etc/environment
), JAVA_HOME=/usr/lib/jvm/java-11-oracle
Загрузите последнюю версию для Linux (Kam1n0-IDA-Plugin.tar.gz и Kam1n0-Server.tar.gz) с сайта Kam1n0-Community.
Извлеките два архива (т. е. tar –xvzf Kam1n0-IDA-Plugin.tar.gz и tar –xvzf Kam1n0-Server.tar.gz)
Файл Kam1n0-Server.tar.gz создаст каталог сервера.
Внутри каталога server
вы должны увидеть файл kam1n0.properties
, в котором вы будете устанавливать различные конфигурации для kam1n0; это очень важно.
Установите kam1n0.data.path
туда, куда вы хотите, чтобы ваши данные, связанные с kam1n0, были записаны. Мы решили разместить его в том же месте, где находится наш server
. kam1n0.ida.home
означает место, где находится ваша установка IDA. Прокомментируйте эту строку (и следующую за ней kam1n0.ida.batch
), если у вас нет IDA и вы не планируете использовать kam1n0 для дизассемблирования. Дополнительные (точные) сведения о файле kam1n0.properties
см. в файле kam1n0.properties.explained
.
Запустите kam1n0-server-workbench: java -jar kam1n0-server-workbench.jar
. Это должно привести к появлению всплывающего окна с предложением запустить kam1n0. Альтернативно запустите kam1n0-server: java -jar kam1n0-server.jar --start
. Это запускает сервер из консоли без окна.
Чтобы подключиться и использовать его, перейдите по адресу 127.0.0.1:8571
(порт, который прослушивает kam1n0 по умолчанию, должен быть 8571, но его можно изменить в kam1n0.properties) в вашем браузере. Вы должны увидеть симпатичный веб-интерфейс kam1n0. Далее следуйте инструкциям в репозитории Kam1n0-Community, если вы не знаете, как использовать kam1n0.
Репозитории ассемблерного кода и файлы конфигурации, использованные в предыдущих версиях (<2.0.0), больше не поддерживаются последней версией. Пожалуйста, свяжитесь с нами, если вам нужно перенести старые репозитории.
Клонируйте последнюю стабильную ветку (не забудьте --recursive
!):
git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community
IntelliJ: импортируйте корень /kam1n0/kam1n0/ как проект maven. Все подмодули будут загружены соответствующим образом. EclipseEE: добавьте клонированный репозиторий git в представление git. Импортируйте все проекты maven из репозитория git. Возможно, вам придется изменить путь к классам для устранения любой ошибки. Все пути к ресурсам динамически изменяются при работе внутри IDE (через подмодуль kam1n0-resources).
Чтобы построить проект:
cd /kam1n0/kam1n0
mvn -DskipTests clean package
mvn -DskipTests package
Полученные двоичные файлы можно найти в /kam1n0/build-bins/.
Чтобы запустить тестовый код, вам необходимо сначала загрузить chromedriver.exe
с http://chromedriver.chromium.org/ и добавить его абсолютный путь в переменную среды с именем webdriver.chrome.driver
. Также необходимо, чтобы в системе был установлен браузер Chrome. Тестовый код запустит экземпляр браузера для тестирования интерфейсов пользовательского интерфейса. Полная процедура тестирования займет около 3 часов.
cd /kam1n0/kam1n0
mvn -DskipTests clean package # you can skip this one if you already built the package
mvn -DskipTests package # you can skip this one if you already built the package
mvn -DforkMode=never test
Эти команды компилируют Java только с предварительно скомпилированными дисками libvex и z3. Он работает «из коробки». Сборка libvex и z3 зависит от платформы. Мы используем форк libvex от Angr. Более серьезные сценарии сборки, а также установщики для Windows/Linux можно найти в /kam1n0-builds/.
У нас есть сервер Jenkin для непрерывной разработки и доставки. Последняя стабильная версия будет размещена здесь. Периодически мы будем синхронизировать нашу внутреннюю экспериментальную ветку с этим репозиторием.
Программное обеспечение было разработано Стивеном Х. Х. Дином, Майлзом К. Ли и Бенджамином К. Фунгом в Лаборатории интеллектуального анализа данных и безопасности McGill и Исследовательской лаборатории L1NNA компании Queen в Канаде. Он распространяется по лицензии Apache версии 2.0. Подробную информацию см. в файле LICENSE.txt.
Авторские права принадлежат Университету Макгилла и исследователям, 2014–2021 гг. Все права защищены.