Сижу разбираю семпл, который прислали с пометкой «ничего серьёзного». Открываю в IDA — три тысячи функций. Раньше это означало вечер в компании кофе и реверс-инжиниринга. Теперь кидаю код в ИИ-ассистент и за пять минут получаю карту: вот здесь стилер, вот здесь кейлоггер, а вот эта функция — прокси-бэкдор, который ждёт команду с внешнего сервера. Выглядит впечатляюще. Давайте разберёмся, что там на самом деле работает, а что — маркетинг.
Зачем ИИ в реверс-инжиниринге
Статический анализ вредоноса — это когда ты не запускаешь файл, а смотришь на него глазами и в отладчике. Функции, строки, импорты, граф потока управления. Для опытного реверсера это читаемый текст. Для остальных — стена байтов, в которой непонятно, где сигнал, а где шум.
ИИ встраивается на нескольких уровнях. Самая простая роль — ассистент-interpretator. Объясни эту функцию. Что делает этот системный вызов. Зачем здесь base64. Раньше такие вопросы ты задавал коллеге в чате. Теперь — модели, которая видела миллионы функций и умеет делать предположения.
Но это базовый уровень. Интереснее, когда ИИ помогает строить гипотезы о поведении. Он берёт disassembly или псевдокод и говорит: «с высокой вероятностью это троян категории Remote Access Trojan, использует Windows API для захвата экрана, данные отправляет POST-запросом на hxxp://185.xxx.xxx.xxx:8080/update». Не идеально. Но отправная точка, с которой можно работать.
Что реально умеют модели
Я тестировал несколько подходов. Стандартный сценарий — дать модели вывод strings, objdump или IDA pseudocode и попросить описать функционал. Результат зависит от трёх вещей: качества входных данных, размера контекста модели и того, насколько удачно модель обучена на коде.
GPT-4 и Claude справляются прилично: распознают типовые пакеры, видят обфускацию среднего уровня, объясняют неочевидные WinAPI-вызовы. CodeLlama и её производные в локальном варианте работают медленнее и ошибаются чаще, зато не отправляют бинарник наружу.
Что конкретно я получаю на практике.
Первичный triage. На стол ложится пачка семплов, нужно за часы, а не за дни, понять, что лежит в папке «срочно разобрать», а что — в папке «потом». Кидаешь каждый файл через strings, потом ИИ-суммаризация — и через минуту у тебя карта. Без ИИ на каждый семпл уходит минимум двадцать минут.
Обфускация. Xor, rot13, base64 — это ещё терпимо. Когда попадается кастомный пакер с нелинейным потоком управления, разбирать его вручную — неделя. ИИ на основе pattern matching способен находить паттерны деобфускации в новых вариантах старых семейств. Не универсально, но процентов тридцать времени экономит.
Классификация. Модель, обученная на дизассемблированном коде и метаданных, может предсказать семейство вредоноса. Иногда лучше, чем YARA-правила, написанные человеком. Особенно когда семейство новое и правил ещё нет.
Где ИИ косячит
Буду честен: косячит он часто. Три основные проблемы.
Первая — галлюцинации. Модель уверенно описывает функции, которых в коде нет. Она видит не байт-код напрямую, а его интерпретацию — и иногда придумывает логику, которой там нет. Особенно это опасно, когда файл обфусцирован и псевдокод уже сам по себе неполон. ИИ дописывает за семплом то, чего там нет, и ты уходишь в неправильную сторону.
Вторая — контекстное окно. Ограничение на размер входных данных означает, что для большого бинарника ты работаешь с фрагментами. Модель анализирует кусок, не зная, что происходит в других кусках. Связи между компонентами она теряет. Например, часть малвари зашифрована, а ключ формируется в функции, которая в другом куске кода. Модель видит каждую часть по отдельности — и не складывает.
Третья — zero-day и кастомные вредоносы. ИИ хорош на известных семействах, на типовых приёмах, на паттернах из тренировочных данных. Когда автор малвари написал что-то своё, никогда раньше не виденное, модель плывёт. Она выдаёт «наиболее вероятную» интерпретацию, которая оказывается неверной. Человек-реверсер с опытом в конкретной области справится лучше.
Как я это использую в работе
Свою цепочку я выстроил так. Сначала — автоматические инструменты: IDA, Ghidra, YARA, песочница. Это fast path. Потом — ИИ-ассистент для тех семплов, где нужно быстро понять общую картину. Одновременно с этим — ручной реверс для ключевых функций, где точность критична.
ИИ-анализ не заменяет реверсера. Он заменяет ту часть работы, где реверсер листает хвосты функций и ищет знакомые паттерны. Это рутина, и на ней ИИ экономит время. Но когда дело доходит до новой техники, до обнаружения палевной ошибки в коде, до выстраивания цепочки атаки — здесь всё ещё нужен человек.
Отдельно стоит сказать про локальные модели. Бывают ситуации, когда отправлять бинарник внешнему сервису нельзя. Образец от заказчика, NDA, расследование инцидента, которое ещё не стало публичным. В таких случаях CodeLlama или StarCoder на локальной машине — единственный вариант. Качество ниже, чем у закрытых API, но данные никуда не уходят.
Стоит ли бояться
Обратная сторона — злоумышленники тоже используют ИИ. Пишут полиморфные вредоносы, автоматизируют генерацию обфускации, создают фейковые документы для фишинга. Это реальность, и она осложняет работу. Но ровно так же, как ИИ помогает аналитику, он помогает и атакующему. Ситуация не нова: та же динамика была с metasploit и готовыми эксплойтами. У обороны просто теперь другие вводные.
По моему опыту, ИИ на стороне защиты пока выигрывает. По крайней мере в нише анализа. Деобфускация, распознавание семейства, построение гипотез о поведении — задачи, где модель хорошо справляется и скорость решает. Но без человека, который ставит рамки и проверяет результат, ИИ остаётся инструментом, который уверенно ведёт в тупик.
Расклад простой: не доверяй слепо, но и не игнорируй. Используй как ускоритель рутины. Оставь время на ту работу, где нужен живой взгляд.
