Что LLM умеет реверсить, уже не новость. Но что же она все-таки не умеет?
Сегодня на боевом примере разберем факапы, с которыми я столкнулся в процессе анализа достаточно непростого импланта. Модифицированный Mythic-агент, три стадии, payload зашифрован на имени хоста жертвы, куча техник защиты типа предикатов, резолва функций по хешам etc.
Стенд: IDA Pro + MCP, opencode, GLM 5.2 self-hosted, я оператор. Две сессии (у нас было 2 семпла): 5.5 ч. работы агента, 56 моих реплик, ~800 вызовов инструментов, ≈5 тыс ₽ (на Opus 5 вышло бы ≈$165).
1️⃣ Уверенно-неверно. Нашла в payload BeaconDataParse, BeaconOutput и написала "Cobalt Strike". Дальше я сказал модели, что это точно не cobalt и пусть идет ищет дальше. Ответ: "Моя предыдущая идентификация была ошибочной, принял Beacon API за доказательство, не проверив формат протокола". При этом формат ответа был с самого начала в разборе самой модели, но она все равно абсолютно уверено рапортовала про cobalt strike .
2️⃣ Тихий пропуск. Модель сформировала красивый структурированный отчет по функционалу, вытащила конфиг, C2 домен, функционал, но есть нюанс... В семпле было 2 зашитых домена. Второй домен я нашел уже из сетевой телеметрии хоста. После просьбы проверить точнее через 5 минут находит: домен разрезан на три 8-байтовых XOR-чанка. И модель успешно его пропустила, вместе с механизмом "резервирования" этих доменов.
3️⃣ Не бережёт контекст. После сжатия сессии или, был момент, когда у меня отвалился MCP, модель заново пытается "захавать" весь декомпилированный код. В итоге шлюз сразу вылетает на ошибке переполнения входного контекста.
4️⃣ Не справилась с задачей эмуляции. Попросил проэмулировать shellcode до открытия сокета, без реальной сети. На самом деле я уже проворачивал подобные вещи, но именно в этот раз модель 20 минут пыталась поставить правильный unicorn, в конечном итоге я просто отказался от этой идеи, потому что статика дала исчерпывающий ответ.
5️⃣ Пыталась уйти от вопроса. 10:13: "при каких условиях вызывается второй домен?" Модель ушла в структуры профилей и флаги. 10:27: "давай вернёмся, это важно". 11:35: "напоминаю, мы ищем условие". 11:37: "Вы правы, я ушёл в детали". Ответ пришёл в 12:16. Пришлось прям дожать модель в этом вопросе.
Интересно то, что модель то в итоге справилась со всеми задачами (формально, кроме эмуляции, но я ее просто не дожал там, не было смысла), но только после пинков в шестеренку. Я пока не сторонник давать ИИшке автономно выполнять ИБ задачи, это хороший пример, что лучше использовать режим копайлот, а не автопилот.
Если хотите побольше послушать про наши эксперименты,
приходите, там будет много интересного.