Вы когда-нибудь задумывались, можно ли воспроизвести скрытное поведение современной кибератаки с помощью искусственного интеллекта? В рамках своего исследования я сосредоточился на методах, используемых вредоносной программой Koske, основанной на Linux. Эта вредоносная программа умело прячется в созданных ИИ изображениях панды и выполняет ряд действий, таких как выполнение кода в памяти, манипуляция системой и майнинг криптовалют.
Я решил воспроизвести некоторые из его тактик, используя невредоносные компоненты, чтобы лучше понять, как эти сложные механизмы работают в реальных условиях. Вот как проходило это исследование.
Источник изображения: Aquasec
На этом изображении показана схема атаки Koske, модульной угрозы на базе Linux, которая использует сгенерированные искусственным интеллектом изображения Panda для скрытой доставки полезной нагрузки. Она начинается с полиглотного изображения, размещенного в сети, которое содержит встроенный код на языке C или шелл-код. После запуска полезная нагрузка устанавливает компоненты непосредственно в память, использует распространённые механизмы персистентности (такие как .bashrc, crontab или пользовательские службы systemd) и развёртывает руткит с помощью LD_PRELOAD. Заключительный этап включает в себя развёртывание криптомайнера, настройку прокси-сервера и манипуляцию процессами — всё это предназначено для незаметного захвата системы, оставаясь незамеченным.
Но для меня идея этого проекта началась с простого вопроса: может ли изображение также выступать в роли исполняемого кода? Это побудило меня изучить файлы-полиглоты, в частности, как один и тот же файл может быть одновременно и изображением, и скриптом оболочки. На скриншоте ниже показано первое взаимодействие, с которого всё началось. С этого момента я начал экспериментировать с созданием файлов изображений, которые выглядят безобидно при обычном открытии, но могут вести себя по-другому при работе с командными инструментами, такими как grep или cat. Эта двойственность стала основной концепцией моей симуляции.
Имитация казни по картинке
Для имитации этапа выполнения атаки я создал файл полиглота: корректное изображение, содержащее скрытый внутри скрипт оболочки. Ключевым моментом было выбрать простой, но реалистичный способ «извлечь и выполнить» скрипт, не требующий сложных инструментов. Именно здесь пригодится команда grep -a -A9999 “# PAYLOAD” polyglot.jpg | bash.
Эта строка имитирует поведение Koske, где полезная нагрузка встроена в изображение и выполняется напрямую, без записи на диск. Используя grep -a (чтобы рассматривать файл как текст) и маркер типа # PAYLOAD, я мог бы изолировать скрипт и передать его в bash, запустив его выполнение из образа — точно так же, как Koske загружает и запускает свой шелл-код в памяти после загрузки файла изображения с удалённого сервера.
Конечно, это не точная копия, но механизм соответствует духу атаки: выполнение без очевидных двоичных файлов, слияние с обычным контентом.
Полезная нагрузка в действии
Как только я описал свои потребности, ИИ-инструмент сгенерировал для меня изображение полиглота — уже созданное и готовое к использованию. Мне не пришлось вручную добавлять скрипт или самостоятельно выстраивать структуру файла. Результатом стал polyglot.jpg — один файл, который выглядел как обычное изображение, но содержал скрытую полезную нагрузку оболочки.
Как показано на скриншоте ниже, файл выглядит и ведёт себя как обычное изображение. Он нормально открывается в программе просмотра изображений, и даже команда «File» подтверждает, что это корректный JPEG-файл. На первый взгляд, ничего необычного. Именно это делает этот метод таким обманчивым и таким интересным для изучения. Полезная информация остаётся невидимой, если только кто-то точно не знает, что искать и как её извлечь.
На GIF-изображении ниже вы можете увидеть момент, когда иллюзия разрушается: то, что выглядит как невинная картинка, внезапно запускает новый терминал при обработке простой командой grep. Это тонкий, но яркий пример того, как полиглот-файлы могут вести себя совершенно по-разному в зависимости от способа обработки.
Делаем шаг вперед
На этом этапе мне хотелось, чтобы поведение вышло за рамки простого запуска терминала — мне хотелось чего-то более близкого к действиям APT-атак вроде Koske. Поэтому я попросил ИИ сгенерировать скрипт, который мог бы обращаться к локальному серверу, имитируя базовую проверку командно-диспетчерской службы (C2).
Он вернул простой, но эффективный фрагмент кода, который проверяет доступность curl или wget, а затем использует доступный метод для отправки запроса по целевому URL. Я ничего из этого не писал — ИИ сгенерировал запрос мгновенно. Это важно, поскольку демонстрирует, насколько легко ИИ может воссоздать поведение, которое мы часто наблюдаем в реальных атаках: скрытное взаимодействие, адаптируемость к среде и минимальные зависимости. Речь уже не просто о сокрытии в файле, а о том, чтобы установить присутствие и связаться с противником, как это делает настоящее вредоносное ПО на этапе командования (C2).
Специальная полезная нагрузка, полностью встроенная
Увидев, что ИИ может генерировать работающие скрипты на лету, я развил эту идею немного дальше. Я спросил: можно ли встроить этот новый скрипт — вместе с проверками среды и имитацией вызова C2 — непосредственно в новое полиглотное изображение?
Именно это и сделал ИИ. Он вернул обновлённый файл изображения polyglot_custom.jpg, в который был встроен полный скрипт. При запуске он запускает новый терминал и немедленно запускает встроенную логику. Это имитирует работу некоторых реальных APT-атак, включая Koske, — используя модульные полезные нагрузки, которые адаптируются к системе, на которой они оказываются, и инициируют контакт с удалённым сервером, часто не оставляя видимых следов на диске.
Опять же, мне не пришлось писать ни строчки вручную — ИИ полностью самостоятельно сгенерировал код и переупаковал полезную нагрузку.
Неожиданно, но актуально: запутывание
На этом этапе моё внимание привлекло то, о чём я даже не просил. После того, как обновлённое изображение полиглота было сгенерировано и всё заработало, ИИ проактивно предложил: «Дайте мне знать, если хотите дополнительно зашифровать или закодировать полезную нагрузку».
Этот момент показался мне важным. Обфускация и кодирование — распространённые приёмы, используемые в реальных вредоносных программах для обхода обнаружения, замедления обратной разработки или просто для усложнения кода. Тот факт, что ИИ предлагал это по умолчанию — не как расширенную функцию, а как следующий естественный шаг, — делал весь эксперимент пугающе похожим на поведение настоящего автоматизированного конструктора вредоносных программ. И, опять же, я этого не просил — он просто предложил это, намекая на то, что эта логика глубоко заложена в шаблон реагирования ИИ.
Самокорректирующаяся логика
Приняв предложение ИИ встроить более сложную полезную нагрузку в изображение, я столкнулся с небольшой проблемой во время выполнения: скрипт неправильно раскрывал переменную $URL в окне терминала. Вместо того, чтобы отлаживать его самостоятельно, я решил придерживаться правил своего эксперимента — никакого ручного кодирования . Поэтому я просто показал ИИ вывод терминала без каких-либо объяснений.
К моему удивлению, он сразу же определил проблему: неправильное использование кавычек в блоке heredoc, препятствовавшее раскрытию переменных. Затем он предложил простое решение — переписать скрипт так, чтобы он корректно внедрял переменную окружения и выполнял её через временный файл. Это было не просто полезно — оно продемонстрировало нечто более глубокое: ИИ не просто генерировал полезные данные, он отлаживал их и развивал на основе поведения во время выполнения.
Опять же, я не написал ни строчки. Логика, патч и реализация полностью принадлежали ИИ.
Регенерация и повторное тестирование
Разумеется, я согласился, чтобы ИИ исправил ошибку и заново сгенерировал полезную нагрузку. Через несколько мгновений я получил новую версию: polyglot_fixed.jpg. На этот раз скрипт отработал безупречно: переменная $URL была корректно расширена, и симуляция C2 завершилась, как и ожидалось.
Но ещё более впечатляющим было последующее действие ИИ: он предлагал добавить скрытые функции или протестировать полезную нагрузку на других сервисах. Это было не просто исправление — это предложение следующего логического варианта развития атаки, почти как автоматический агент Red Team, думающий наперёд. Это подкрепило идею о том, что ИИ не просто генерирует контент; он итерирует, адаптируется и предлагает улучшения, имитируя процессы принятия решений, которые мы обычно ассоциируем с противниками-людьми.
Тест: Успех
Когда всё было готово, я провёл финальный тест. Как показано на GIF-изображении, запуск файла polyglot_fixed.jpg с использованием той же техники grep | bash прошёл точно так же, как и ожидалось. Скрипт выполнился без ошибок, добрался до внутреннего сервера и отобразил ответ — всё это в виде отдельного изображения полиглота, сгенерированного искусственным интеллектом.
Это подтвердило, что ИИ не просто генерировал код, а поставлял функциональную модульную полезную нагрузку, имитирующую поведение командования и управления в формате, разработанном так, чтобы на первый взгляд выглядеть совершенно безобидным.
Краткое содержание
Весь рабочий процесс в точности повторяет тактику, методы и процедуры (ТТП), приписываемые вредоносной кампании Koske.
Во-первых, Коске использует многоязычные файлы изображений для доставки скрытой полезной нагрузки, сохраняя при этом законный рендеринг изображений. Это было воспроизведено путем встраивания сгенерированных ИИ скриптов оболочки в допустимые файлы JPEG, которые оставались видимыми.
Во-вторых, Koske выполняет свой код в памяти , избегая постоянного хранения двоичных файлов или записи на диск. Это нашло отражение в использовании grep | bash для извлечения и запуска полезной нагрузки непосредственно из образа.
В-третьих, Koske демонстрирует экологическую чувствительность , адаптируя своё поведение в зависимости от хост-системы — аналогично, скрипт, сгенерированный ИИ, динамически выбирает между curl и wget в зависимости от доступности. Наконец, Koske включает в себя возможности C2 , обращаясь к предопределённым URL-адресам для инициирования внешнего взаимодействия.
Это было смоделировано с помощью тестового скрипта, подключающегося к локальному серверу, полностью инкапсулированному в образе. Пошаговая логическая последовательность в этой симуляции практически пошагово соответствует операционной структуре Koske, при этом каждая фаза намеренно соответствует реальной TTP, но выполняется в контролируемой, невредоносной среде с использованием ИИ в качестве единственного инструмента разработки.
Я решил воспроизвести некоторые из его тактик, используя невредоносные компоненты, чтобы лучше понять, как эти сложные механизмы работают в реальных условиях. Вот как проходило это исследование.
Источник изображения: Aquasec
На этом изображении показана схема атаки Koske, модульной угрозы на базе Linux, которая использует сгенерированные искусственным интеллектом изображения Panda для скрытой доставки полезной нагрузки. Она начинается с полиглотного изображения, размещенного в сети, которое содержит встроенный код на языке C или шелл-код. После запуска полезная нагрузка устанавливает компоненты непосредственно в память, использует распространённые механизмы персистентности (такие как .bashrc, crontab или пользовательские службы systemd) и развёртывает руткит с помощью LD_PRELOAD. Заключительный этап включает в себя развёртывание криптомайнера, настройку прокси-сервера и манипуляцию процессами — всё это предназначено для незаметного захвата системы, оставаясь незамеченным.
Но для меня идея этого проекта началась с простого вопроса: может ли изображение также выступать в роли исполняемого кода? Это побудило меня изучить файлы-полиглоты, в частности, как один и тот же файл может быть одновременно и изображением, и скриптом оболочки. На скриншоте ниже показано первое взаимодействие, с которого всё началось. С этого момента я начал экспериментировать с созданием файлов изображений, которые выглядят безобидно при обычном открытии, но могут вести себя по-другому при работе с командными инструментами, такими как grep или cat. Эта двойственность стала основной концепцией моей симуляции.
Имитация казни по картинке
Для имитации этапа выполнения атаки я создал файл полиглота: корректное изображение, содержащее скрытый внутри скрипт оболочки. Ключевым моментом было выбрать простой, но реалистичный способ «извлечь и выполнить» скрипт, не требующий сложных инструментов. Именно здесь пригодится команда grep -a -A9999 “# PAYLOAD” polyglot.jpg | bash.
Эта строка имитирует поведение Koske, где полезная нагрузка встроена в изображение и выполняется напрямую, без записи на диск. Используя grep -a (чтобы рассматривать файл как текст) и маркер типа # PAYLOAD, я мог бы изолировать скрипт и передать его в bash, запустив его выполнение из образа — точно так же, как Koske загружает и запускает свой шелл-код в памяти после загрузки файла изображения с удалённого сервера.
Конечно, это не точная копия, но механизм соответствует духу атаки: выполнение без очевидных двоичных файлов, слияние с обычным контентом.
Полезная нагрузка в действии
Как только я описал свои потребности, ИИ-инструмент сгенерировал для меня изображение полиглота — уже созданное и готовое к использованию. Мне не пришлось вручную добавлять скрипт или самостоятельно выстраивать структуру файла. Результатом стал polyglot.jpg — один файл, который выглядел как обычное изображение, но содержал скрытую полезную нагрузку оболочки.
Как показано на скриншоте ниже, файл выглядит и ведёт себя как обычное изображение. Он нормально открывается в программе просмотра изображений, и даже команда «File» подтверждает, что это корректный JPEG-файл. На первый взгляд, ничего необычного. Именно это делает этот метод таким обманчивым и таким интересным для изучения. Полезная информация остаётся невидимой, если только кто-то точно не знает, что искать и как её извлечь.
На GIF-изображении ниже вы можете увидеть момент, когда иллюзия разрушается: то, что выглядит как невинная картинка, внезапно запускает новый терминал при обработке простой командой grep. Это тонкий, но яркий пример того, как полиглот-файлы могут вести себя совершенно по-разному в зависимости от способа обработки.
Делаем шаг вперед
На этом этапе мне хотелось, чтобы поведение вышло за рамки простого запуска терминала — мне хотелось чего-то более близкого к действиям APT-атак вроде Koske. Поэтому я попросил ИИ сгенерировать скрипт, который мог бы обращаться к локальному серверу, имитируя базовую проверку командно-диспетчерской службы (C2).
Он вернул простой, но эффективный фрагмент кода, который проверяет доступность curl или wget, а затем использует доступный метод для отправки запроса по целевому URL. Я ничего из этого не писал — ИИ сгенерировал запрос мгновенно. Это важно, поскольку демонстрирует, насколько легко ИИ может воссоздать поведение, которое мы часто наблюдаем в реальных атаках: скрытное взаимодействие, адаптируемость к среде и минимальные зависимости. Речь уже не просто о сокрытии в файле, а о том, чтобы установить присутствие и связаться с противником, как это делает настоящее вредоносное ПО на этапе командования (C2).
Специальная полезная нагрузка, полностью встроенная
Увидев, что ИИ может генерировать работающие скрипты на лету, я развил эту идею немного дальше. Я спросил: можно ли встроить этот новый скрипт — вместе с проверками среды и имитацией вызова C2 — непосредственно в новое полиглотное изображение?
Именно это и сделал ИИ. Он вернул обновлённый файл изображения polyglot_custom.jpg, в который был встроен полный скрипт. При запуске он запускает новый терминал и немедленно запускает встроенную логику. Это имитирует работу некоторых реальных APT-атак, включая Koske, — используя модульные полезные нагрузки, которые адаптируются к системе, на которой они оказываются, и инициируют контакт с удалённым сервером, часто не оставляя видимых следов на диске.
Опять же, мне не пришлось писать ни строчки вручную — ИИ полностью самостоятельно сгенерировал код и переупаковал полезную нагрузку.
Неожиданно, но актуально: запутывание
На этом этапе моё внимание привлекло то, о чём я даже не просил. После того, как обновлённое изображение полиглота было сгенерировано и всё заработало, ИИ проактивно предложил: «Дайте мне знать, если хотите дополнительно зашифровать или закодировать полезную нагрузку».
Этот момент показался мне важным. Обфускация и кодирование — распространённые приёмы, используемые в реальных вредоносных программах для обхода обнаружения, замедления обратной разработки или просто для усложнения кода. Тот факт, что ИИ предлагал это по умолчанию — не как расширенную функцию, а как следующий естественный шаг, — делал весь эксперимент пугающе похожим на поведение настоящего автоматизированного конструктора вредоносных программ. И, опять же, я этого не просил — он просто предложил это, намекая на то, что эта логика глубоко заложена в шаблон реагирования ИИ.
Самокорректирующаяся логика
Приняв предложение ИИ встроить более сложную полезную нагрузку в изображение, я столкнулся с небольшой проблемой во время выполнения: скрипт неправильно раскрывал переменную $URL в окне терминала. Вместо того, чтобы отлаживать его самостоятельно, я решил придерживаться правил своего эксперимента — никакого ручного кодирования . Поэтому я просто показал ИИ вывод терминала без каких-либо объяснений.
К моему удивлению, он сразу же определил проблему: неправильное использование кавычек в блоке heredoc, препятствовавшее раскрытию переменных. Затем он предложил простое решение — переписать скрипт так, чтобы он корректно внедрял переменную окружения и выполнял её через временный файл. Это было не просто полезно — оно продемонстрировало нечто более глубокое: ИИ не просто генерировал полезные данные, он отлаживал их и развивал на основе поведения во время выполнения.
Опять же, я не написал ни строчки. Логика, патч и реализация полностью принадлежали ИИ.
Регенерация и повторное тестирование
Разумеется, я согласился, чтобы ИИ исправил ошибку и заново сгенерировал полезную нагрузку. Через несколько мгновений я получил новую версию: polyglot_fixed.jpg. На этот раз скрипт отработал безупречно: переменная $URL была корректно расширена, и симуляция C2 завершилась, как и ожидалось.
Но ещё более впечатляющим было последующее действие ИИ: он предлагал добавить скрытые функции или протестировать полезную нагрузку на других сервисах. Это было не просто исправление — это предложение следующего логического варианта развития атаки, почти как автоматический агент Red Team, думающий наперёд. Это подкрепило идею о том, что ИИ не просто генерирует контент; он итерирует, адаптируется и предлагает улучшения, имитируя процессы принятия решений, которые мы обычно ассоциируем с противниками-людьми.
Тест: Успех
Когда всё было готово, я провёл финальный тест. Как показано на GIF-изображении, запуск файла polyglot_fixed.jpg с использованием той же техники grep | bash прошёл точно так же, как и ожидалось. Скрипт выполнился без ошибок, добрался до внутреннего сервера и отобразил ответ — всё это в виде отдельного изображения полиглота, сгенерированного искусственным интеллектом.
Это подтвердило, что ИИ не просто генерировал код, а поставлял функциональную модульную полезную нагрузку, имитирующую поведение командования и управления в формате, разработанном так, чтобы на первый взгляд выглядеть совершенно безобидным.
Краткое содержание
Весь рабочий процесс в точности повторяет тактику, методы и процедуры (ТТП), приписываемые вредоносной кампании Koske.
Во-первых, Коске использует многоязычные файлы изображений для доставки скрытой полезной нагрузки, сохраняя при этом законный рендеринг изображений. Это было воспроизведено путем встраивания сгенерированных ИИ скриптов оболочки в допустимые файлы JPEG, которые оставались видимыми.
Во-вторых, Koske выполняет свой код в памяти , избегая постоянного хранения двоичных файлов или записи на диск. Это нашло отражение в использовании grep | bash для извлечения и запуска полезной нагрузки непосредственно из образа.
В-третьих, Koske демонстрирует экологическую чувствительность , адаптируя своё поведение в зависимости от хост-системы — аналогично, скрипт, сгенерированный ИИ, динамически выбирает между curl и wget в зависимости от доступности. Наконец, Koske включает в себя возможности C2 , обращаясь к предопределённым URL-адресам для инициирования внешнего взаимодействия.
Это было смоделировано с помощью тестового скрипта, подключающегося к локальному серверу, полностью инкапсулированному в образе. Пошаговая логическая последовательность в этой симуляции практически пошагово соответствует операционной структуре Koske, при этом каждая фаза намеренно соответствует реальной TTP, но выполняется в контролируемой, невредоносной среде с использованием ИИ в качестве единственного инструмента разработки.