____ __ __ _ _
| _ __ _ _ __ ___ _ __ | / | __ _ ___| |__ ___| |_ ___ ________
| |_) / _` | '_ / _ '__| | |/| |/ _` |/ __| '_ / _ __/ _ /_______/
| __/ (_| | |_)| __/ | | | | | (_| | (__| | | | __/ || __/ _______
|_| __,_| .__/___|_| |_| |_|__,_|___|_| |_|___|_____| /_______/
|_| @==|;;;;;;>
Paper Machete (PM) организует бинарную ниндзя и Grakn.ai, чтобы помочь статическому бинарному анализу с целью поиска ошибок в программном обеспечении. PM использует бинарную ниндзя MLIL SSA для извлечения семантического значения о отдельных инструкциях, операциях, регистрационном/переменном состоянии и общем потоке управления.
PM переносит эти данные в Grakn - график знаний, который дает нам возможность определять специфичные для домена онтологии для данных и писать мощные правила вывода, чтобы сформировать отношения между данными, которые мы не хотим (или не можем) явно хранить. Хи, как это аккуратно?
Этот проект был выпущен в сочетании с выступлением Derbycon 2017 под названием «Помощь в статическом анализе: обнаружение уязвимостей в бинарных целях посредством выводов графа знаний». Вы можете посмотреть этот разговор здесь.
Первоначальный прототип Paper Machete и общедоступная кодовая база были разработаны исследователями безопасности в Мемориальном институте Баттелле. Когда этот проект созревает, мы надеемся, что вы найдете его полезным в собственном исследовании и рассмотрите возможность внесения вклад в проект.
Сюина BNIL ILS легко работать, приятно словесно и читается человеком. В любой момент мы можем решить использовать другие уровни и формы IL с небольшими усилиями по разработке с нашей стороны. Когда вы добавляете в это возможность поднимать несколько архитектур и писать пользовательские подъемники, у нас мало причин не использовать BNIL.
Язык запросов Гракна (GRAQL) легко изучить и интуитивно понятно, что чрезвычайно важно на ранних этапах этого исследования, в то время как мы все еще выступаем вручную, чтобы моделировать уязвимые уязвимость, которые искали исследователи уязвимости при выполнении статического анализа.
Способность писать наши собственные онтологии, специфичные для домена, позволяет нам быстро экспериментировать с новыми идеями запросов и способами сделать наши запросы менее сложными. Когда мы сталкиваемся с случаем, когда мы думаем: «Ну и дела, если у меня был доступ к отношениям между ...», мы можем изменить наши онтологии и правила вывода, чтобы получить эту информацию.
В то время как конечная игра для PM состоит в том, чтобы устранить необходимость в написанных человеком запросах, факт в том, что мы начинаем с квадрата первой. Это означает, что вручную много запрашивает, чтобы моделировать модели людей, которые исследователи уязвимости ищут, когда охотятся за ошибками.
Паппер -мачете требует BinaryNinja V1.1, Grakn V1.4.2, водитель Grakn Python и Java Jre
Мы включили несколько основных запросов, чтобы начать вас, если вы хотите поиграть с PM. Как вы можете себе представить, нет запроса «серебряной пули», который найдет все проявления конкретного класса уязвимости. Из -за этого мы включили версии для каждого запроса CWE. Когда мы добавляем новые методы поиска одной и той же CWE, мы добавим сценарии с увеличением номеров версий для дифференциации.
cwe_120_v1.py - Тесты для использования небезопасной функции GETS () '(CWE -120)
cwe_121_v1.py - тесты на переполнение буфера (CWE -121)
cwe_129_v1.py - тесты на пропущенные проверки границ (CWE -129)
cwe_134_v1.py - Тесты на уязвимости формата строки (CWE -134)
cwe_788_v1.py - Тесты для проверки отсутствующих границ по индексам массива (CWE -788)
Для базового использования запустите сценарий paper_machete.py и следуйте подсказкам. Для более продвинутого использования, пожалуйста, прочитайте вики.
Как правило, вы начнете с опции [1] и пройдете свой путь к опции [3] . Если вы столкнетесь с любыми проблемами с опцией использования Grakn [4] чтобы сбросить Grakn в чистое состояние и попробуйте еще раз.
... banner ...
[1] Analyze a binary file
[2] Migrate a JSON file into Grakn
[3] Run all CWE queries
[4] Clean and restart Grakn
[5] Quit
Опция [1] перечисляет все исполняемые файлы в каталоге /analysis . Так что поместите любые исполняемые файлы, которые вы хотите проанализировать в /analysis . Этот вариант будет запускать pmanalyze.py и генерировать файл JSON в каталоге /analysis .
После того, как вы проанализировали файлы с [1] и произведены в результате файлов JSON, они появятся как выбор в опции [2] . Выбор файла JSON в опции [2] будет мигрировать данные в Grakn.
Теперь, когда у вас есть данные в Grakn, вы можете использовать опцию [3] . Это начнет все сценарии в /queries против ключи от вашего выбора. Если вы напишете свои собственные шаблоны запросов, просто бросьте их в /queries , и опция [3] тоже запустит их.