
Распределенный фреймворк обработки вредоносного ПО на основе Python, Redis и S3.
Распределённый фреймворк для обработки вредоносного ПО на основе Python, Redis и S3.
Karton — это надёжный фреймворк для создания гибких и лёгких бэкендов анализа вредоносного ПО. Его можно использовать для объединения систем анализа вредоносного ПО* в надёжный конвейер с минимальными усилиями.
Мы давно занимаемся автоматизацией. Мы имеем дело со всё большим числом угроз, и нам приходится автоматизировать всё, чтобы успевать реагировать на инциденты. Из-за этого мы часто получаем множество скриптов, скреплённых уткой клейкой лентой и WD-40. Эти скрипты написаны аналитиками в спешке, они хрупкие и уродливые — но они работают и производят данные, которые необходимо хранить, обрабатывать дальше, отправлять в другие системы или делиться с другими организациями.
Нам нужен был способ брать наши PoC-скрипты и легко встраивать их в наш конвейер анализа. Мы также хотели отслеживать их выполнение, централизовать логирование, повысить надёжность, снизить инерцию разработки... Именно для этой цели мы создали Karton.
* хотя Karton разрабатывался с учётом анализа вредоносного ПО, он отлично работает в любом проекте, ориентированном на микросервисы.
Установка так же проста, как одна команда pip install:
pip3 install karton-core
Чтобы настроить всё окружение бэкенда, вам также понадобится S3-совместимое хранилище и Redis, подробности см. в документации.
Чтобы использовать karton, вы должны предоставить класс, наследующий от Karton.
from karton.core import Karton, Task, Resource
class GenericUnpacker(Karton):
"""
Performs sample unpacking
"""
identity = "karton.generic-unpacker"
filters = [
{
"type": "sample",
"kind": "runnable",
"platform": "win32"
}
]
def process(self, task: Task) -> None:
# Get sample object
packed_sample = task.get_resource("sample")
# Log with self.log
self.log.info(f"Hi {packed_sample.name}, let me analyze you!")
...
# Send our results for further processing or reporting
task = Task(
{
"type": "sample",
"kind": "raw"
},
payload={
"parent": packed_sample,
"sample": Resource(filename, unpacked)
},
)
self.send_task(task)
if __name__ == "__main__":
GenericUnpacker.main()
Этот пакет также предоставляет утилиту командной строки под названием "karton". Вы можете использовать её для простых задач управления (но она не задумана как полноценный инструмент управления).
$ karton configure # create a new configuration file
$ karton list -s # list current binds
karton name version karton
------------------------------------------------------------------------
karton.yaramatcher 1.2.0 5.3.0
karton.autoit-ripper 1.2.1 5.3.3
karton.mwdb-reporter 1.3.0 5.3.2
$ karton logs # start streaming all system logs
$ karton delete karton.something # remove unused bind (will be GCed by system during the next operation)
Некоторые системы Karton универсальны и полезны всем. Мы решили поделиться ими с сообществом.
Этот репозиторий. Он содержит сервис karton.system — основной сервис, отвечающий за распределение задач внутри системы. Он также содержит модуль karton.core, который используется как библиотека другими системами.
Небольшой дашборд на Flask для управления задачами и очередями и мониторинга.
"Маршрутизатор". Он распознаёт образцы/файлы и создаёт различные типы задач в зависимости от формата файла. Благодаря этому другие системы могут слушать только задачи с определённым форматом (например, только архивы zip).
Универсальный распаковщик архивов. Архивы, загруженные в систему, будут распакованы, и каждый файл будет обработан отдельно.
Извлекатель вредоносного ПО. Он использует правила Yara и модули Python для извлечения статической конфигурации из образцов вредоносного ПО и результатов анализа. Это удочка, а не рыба — сами модули мы не делимся. Но написать свои несложно!
Очень важная часть конвейера. Reporter отправляет все файлы, теги, комментарии и другие данные, полученные в ходе анализа, в MWDB. Если вы ещё не используете MWDB или предпочитаете другие бэкенды, написать свой reporter несложно.
Автоматически запускает правила Yara для всех файлов в конвейере и соответствующим образом помечает образцы. Правила не включены ;).
Система Karton, которая декодирует файлы, закодированные распространёнными методами, такими как hex, base64 и т. д. (Вы не поверите, насколько это распространено).
Небольшая обёртка вокруг AutoIt-Ripper, которая извлекает встроенные скрипты и ресурсы AutoIt из скомпилированных исполняемых файлов AutoIt.
Автоматизированная система анализа вредоносного ПО методом чёрного ящика с движком DRAKVUF под капотом, не требующая агента на гостевой ОС.
Вот как эти системы можно использовать для формирования базового конвейера анализа вредоносного ПО:
Модульный сервис фреймворка Karton, который распаковывает распространённые упаковщики, такие как UPX и другие, используя Qiling Framework.
Многофункциональная модульная утилита извлечения конфигурации вредоносного ПО для MalDuck
Классификатор Detect-It-Easy для фреймворка Karton
Модуль распаковщика RetDec для фреймворка Karton
Платформа сравнения вредоносного ПО с упором на модульность.
Масштабируемый конвейер анализа уязвимостей драйверов Windows.
