
Распределенный фреймворк обработки вредоносного ПО на основе 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):
"""
Выполняет распаковку образца
"""
identity = "karton.generic-unpacker"
filters = [
{
"type": "sample",
"kind": "runnable",
"platform": "win32"
}
]
def process(self, task: Task) -> None:
# Получаем объект образца
packed_sample = task.get_resource('sample')
# Логирование через self.log
self.log.info(f"Привет, {packed_sample.name}, дай я тебя проанализирую!")
...
# Отправляем результаты для дальнейшей обработки или отчетности
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 # создать новый конфигурационный файл
$ karton list -s # показать текущие привязки
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 # начать потоковую передачу всех системных логов
$ karton delete karton.something # удалить неиспользуемую привязку (будет собрана сборщиком мусора при следующей операции)
Некоторые системы Karton универсальны и полезны всем. Мы решили поделиться ими с сообществом.
Этот репозиторий. Содержит службу karton.system — основную службу, отвечающую за диспетчеризацию задач внутри системы. Также содержит модуль karton.core, используемый как библиотека другими системами.
Небольшая панель управления на Flask для управления задачами и очередями, а также мониторинга.
«Маршрутизатор». Распознает образцы/файлы и создает различные типы задач в зависимости от формата файла. Благодаря этому другие системы могут слушать только задачи определенного формата (например, только архивы zip).
Универсальный распаковщик архивов. Архивы, загруженные в систему, будут извлечены, и каждый файл будет обработан индивидуально.
Экстрактор конфигураций вредоносного ПО. Использует Yara-правила и Python-модули для извлечения статической конфигурации из образцов вредоносного ПО и их анализа. Это удочка, а не рыба — сами модули мы не публикуем. Но написать свои несложно!
Очень важная часть конвейера. Репортер отправляет все файлы, теги, комментарии и другие разведданные, полученные в ходе анализа, в MWDB. Если вы еще не используете MWDB или предпочитаете другие бэкенды, написать собственный репортер несложно.
Автоматически запускает Yara-правила на все файлы в конвейере и соответствующим образом помечает образцы. Правила не включены ;).
Система Karton, декодирующая файлы, закодированные распространенными методами, такими как hex, base64 и т.д. (Вы не поверите, как это часто встречается).
Небольшая обертка вокруг AutoIt-Ripper, извлекающая встроенные скрипты и ресурсы AutoIt из скомпилированных исполняемых файлов AutoIt.
Автоматизированная система анализа вредоносного ПО в черном ящике на основе движка DRAKVUF, не требующая агента на гостевой ОС.
Вот как эти системы могут быть использованы для формирования базового конвейера анализа вредоносного ПО:
Модульный сервис фреймворка Karton, распаковывающий распространенные упаковщики, такие как UPX и другие, с использованием Qiling Framework.
Многофункциональная модульная утилита для извлечения конфигураций вредоносного ПО для MalDuck
Классификатор Detect-It-Easy для фреймворка Karton
Модуль распаковщика RetDec для фреймворка Karton
Платформа для анализа схожести вредоносного ПО с учетом модульности.
Масштабируемый конвейер анализа уязвимостей драйверов Windows.
