EvilVM
Компилятор EvilVM для инструментов исследования информационной безопасности. Проект построен вокруг компилятора Forth для нативного кода, который развёртывается как позиционно-независимый шелл-код. Он предоставляет платформу для удалённого выполнения кода, полезную в контексте информационной безопасности.
Презентация на NolaCon 2019
Я представил альфа-релиз EvilVM на NolaCon в 2019 году. Вы можете посмотреть видеозапись Irongeek на YouTube — хорошее введение в проект и несколько демонстраций:
Запись на YouTube
Документация
Документацию по EvilVM можно найти на сайте документации.
Основной сценарий использования EvilVM — развернуть агента на удалённой системе и взаимодействовать с ним. Внешний интерпретатор языка представлен в виде интерактивной оболочки или REPL, а система предоставляет возможность доставлять код агенту, который компилируется и добавляется в гиперстатическую глобальную среду.
Технологические решения принимаются с учётом целей проекта:
- Небольшая, легко развёртываемая полезная нагрузка: агент EvilVM представляет собой позиционно-независимый шелл-код для x86_64, размером где-то от 5 до 10 КБ, в зависимости от опций и инкапсуляции.
- Удалённые потоки ввода-вывода: стандартная парадигма ввода-вывода для взаимодействия с языком основана на абстрагированных сетевых потоках, что позволяет осуществлять передачу через файловые дескрипторы, TCP (bind и reverse), HTTP, разделяемую память, ICMP и именованные каналы SMB.
- Низкоуровневый доступ: среда выполнения обеспечивает прямой доступ к внутренностям компилятора, машинному коду и прямое взаимодействие с памятью.
- Нативная совместимость: предоставляется простой C FFI, что упрощает импорт DLL, поиск экспортов и их обёртывание в определения функций Forth.
- Выразительный язык: хотя Forth обеспечивает «низкий порог», функционируя близко к уровню языка ассемблера, он также предлагает «высокий потолок», допуская синтаксическое расширение языка во время выполнения, и хорошо подходит для методов метапрограммирования.
- Соображения информационной безопасности: генерация полезных нагрузок поддерживает различные схемы кодирования и инкапсуляции, чтобы хорошо вписываться в типичные сценарии вредоносной доставки (эксплойты, инъекции и т. д.).