Preloader
Производитель
Решение
новости
Дистрибуция решений по кибер-безопасности, развитию и оптимизации ИТ-технологий для организаций любого масштаба
Oberig IT держит руку на пульсе ИТ-мира и предлагает самые актуальные новости по кибер-безопасности
25 января, 2024

Обеспечение безопасности сетей: Обнаружение ключевых слов Base64 в режиме реального времени

Подробности

Исчезнувшие конфиденциальные данные трудно обнаружить, анализируя сетевой трафик в режиме реального времени, если злоумышленники предварительно закодировали их в base64. Как правило, невозможно определить и декодировать все возможные последовательности base64 из сетевого трафика, если кодировка не указана в контексте протокола. Это затрудняет механизмы прямого обнаружения, такие как совпадение ключевых слов. Однако при кодировании base64 любая возможная строка может выглядеть как одно из трех уникальных кодированных смещений, что обусловлено природой 6-битного алфавита base64. Используя эти три смещения и сигнатуру YARA с помощью Fidelis Elevate Network, можно найти закодированные данные в сетевом трафике без предварительного декодирования всех возможных блоков в кодировке base64.

Кодирование и декодирование Base64

Base64 – это схема двоично-десятичного кодирования, в которой последовательности из 24 бит могут быть представлены четырьмя 6-битными цифрами Base64. Каждая 6-битная цифра затем представляется набором из 64 уникальных 7-битных символов ASCII из заранее определенного алфавита.

Стандартный алфавит Base64 определен в RFC 4648, хотя могут использоваться и альтернативные алфавиты.

Обеспечение безопасности сетей: Обнаружение ключевых слов Base64 в режиме реального времени

Рисунок 1: Алфавит Base64, определенный в RFC 4648 (источник: Википедия) [3].

В дополнение к 64 возможным символам в конец закодированных последовательностей можно добавить один или два символа подстановки, если общее количество нерасшифрованных битов не кратно 6. Например, буква ‘A’ (hex: x41, binary: 0100 0001) не разбивается равномерно на кратные 6, но ее можно сделать таковой, добавив пару из двух 0-битов. Последовательность становится 010000 01(00)(00), всего 12 бит, что делится на 6. Две 6-битные цифры кодируются с помощью стандартного алфавита base64 в ‘QQ’. Дополнительная пара из 2 битов прокладки представляется добавлением двух символов прокладки, и в итоге получается ‘QQ==’.

Когда кодировка меняется на противоположную, символы подстановки удаляются вместе с дополнительной парой 2-битов. В этом примере QQ== (010000 010000) превращается в 01000001 или ‘A’. Если для того, чтобы общее количество битов было кратно 6, требуется только два дополнительных 0-бита, то к закодированной последовательности добавляется только один символ подстановки, а при обратном кодировании удаляются только два 0-бита.

Киберугрозы, использующие шифрование Base64

Злоумышленники часто используют base64 для кодирования командно-административной связи, а также для утечки данных, используя как стандартный алфавит, так и нестандартные алфавиты. Например, нестандартный алфавит может быть похож на стандартный, но символы «+» и «/» могут быть заменены на символы «-» и «_» соответственно, а в качестве символа подстановки может использоваться «.».

Блоки Base64 трудно распознать в больших объемах сетевого трафика из-за разнообразия всех возможных кодировок. Данные в кодировке Base64 могут содержать столько символов A-Z, a-z, 0-9, сколько необходимо, а также могут содержать или не содержать никаких символов +, / или символов подстановки. Кроме того, обычно невозможно попробовать декодирование Base64 в реальном времени для всего трафика, чтобы попытаться найти утечку конфиденциальных данных, если только кодировка base64 не указана в контексте передающего протокола, например SMTP.

Кроме того, ключевые слова, такие как пути, имена файлов, учетные записи пользователей, ключи реестра или любую другую конфиденциальную информацию — трудно найти в последовательности, закодированной в base64, даже если она может быть распознана, без предварительной попытки обратного декодирования.

Например, когда ключевое слово «password» закодировано в base64, оно кодируется как «cGFzc3dvcmQ=». Однако, когда оно окружено другими символами, кодировка существенно меняется. Строка «QpasswordQ» кодируется как «UXBhc3N3b3JkUQ==», что совсем не похоже на самостоятельную кодировку. Хуже того, «QQpasswordQQ» превращается в «UVFwYXNzd29yZFFR», что представляет собой совершенно другой набор символов.

Поиск ключевых слов в блоках, закодированных в Base64

Можно ли найти закодированное ключевое слово без предварительного обнаружения и декодирования Base64? Если снова рассмотреть пример с ключевым словом «password», то «QQQpasswordQQQ» превращается в «UVFRcGFzc3dvcmRRUVE=», что выглядит очень похоже на отдельную кодировку «cGFzc3dvcmQ=», хотя «Q=» больше нет, а закодированная последовательность начинается по-другому. «QQQQpasswordQQQQQ» становится «UVFRUXBhc3N3b3JkUVFRUQ==», что похоже на вторую кодировку «QpasswordQ», хотя опять же с некоторыми отличиями в начале и конце.

Если продолжать в том же духе, добавляя и добавляя к ключевому слову все новые и новые символы, то окажется, что существует всего три возможных варианта кодировки слова «пароль», хотя и с некоторыми различиями в начале и конце кодировки. Это справедливо для любой кодированной строки, за исключением одиночных символов.

Для строки «password» три возможных смещения, которые будут содержаться в любой возможной base64-кодировке этой строки, независимо от того, какие символы добавлены или добавлены к строке, это: «cGFzc3dvcm», «Bhc3N3b3Jk» и «wYXNzd29yZ». Теперь, чтобы найти строку «password» в любом наборе случайных данных, достаточно найти одно из этих трех смещений. Чем длиннее искомые данные или ключевое слово, тем больше уверенности в том, что они были найдены в блоке base64 при совпадении одной из трех возможных кодированных последовательностей.

Например, следующий блок в кодировке base64 содержит ключевое слово «password», на что указывает наличие смещения «cGFzc3dvcm»:

V2h5IGRpZCB0aGUgcGFzc3dvcmQgdGFrZSB1

cCBnYXJkZW5pbmc/IEl0IGhlYXJkIHRoYXQncyB

0aGUgYmVzdCB3YXkgdG8gY3VsdGl2YXRlIHN0cm9uZyByb290cyE

Обнаружение с использованием смещения Base64

Инструмент CyberChef [2] (https://gchq.github.io/CyberChef) содержит операцию «Show Base64 offsets», которая вычисляет эти три возможные кодированные строки. Чтобы использовать ее, перетащите операцию в Recipe и введите искомое ключевое слово.

Обеспечение безопасности сетей: Обнаружение ключевых слов Base64 в режиме реального времени

Рисунок 2: Операция Show Base64 offsets в CyberChef.

Эта операция даже принимает различные алфавиты, хотя это необходимо знать перед предварительным вычислением смещений для данного ключевого слова.

На рисунке 3 показан захват пакетов HTTP POST файла JPEG с базовыми блоками данных в кодировке Base64 после маркера конца изображения (0xFF 0xD9) [1]. В этих данных также присутствуют некодированные заголовки, такие как os, processes, hdd, build, network, cmd_id, которые указывают на то, что внутри кодированных блоков содержатся данные системного профиля.

Обеспечение безопасности сетей: Обнаружение ключевых слов Base64 в режиме реального времени

Рисунок 3. Исчезновение закодированных данных после маркера конца изображения в файле JPEG

Обеспечение безопасности сетей: Обнаружение ключевых слов Base64 в режиме реального времени

Рисунок 4: Данные появляются в этом JPEG-файле после маркера конца изображения (0xFF 0xD9)

Используя CyberChef для декодирования самого большого закодированного блока, мы видим, что он представляет собой закодированный список исполняемых файлов. Учитывая, что блок появляется после заголовка «процессы», можно предположить, что это список процессов, запущенных в зараженной системе.

Обеспечение безопасности сетей: Обнаружение ключевых слов Base64 в режиме реального времени

Рисунок 5: Декодирование блока в кодировке base64 с помощью CyberChef

Используя смещения Base64, можно легко обнаружить список процессов, запущенных на зараженной системе в кодировке base64. Чтобы обнаружить закодированный список процессов, ищите несколько экземпляров смещения для строки «.exe», за которой следует символ новой строки (0x0A). В YARA реализован модификатор base64 для совпадений строк, который делает это автоматически [4], как показано на рисунке 6:

Обеспечение безопасности сетей: Обнаружение ключевых слов Base64 в режиме реального времени

Рисунок 6: Нахождение нескольких закодированных экземпляров строки «.exe\n» в файле.

Опасения по поводу ложных срабатываний минимизируются требованием, чтобы эти конкретные кодированные смещения, хотя и состоящие всего из 6 символов каждое, встречались не менее 25 раз в файле размером не более 500 КБ. Эти смещения достаточно случайны, поэтому вряд ли удастся найти такое количество повторений в одном закодированном контексте, если только они не находятся там намеренно. Если же они встречаются, есть все основания полагать, что это аномальная активность и ее следует расследовать. Кроме того, ограничение совпадений на основе максимального размера файла является лучшей практикой, поскольку в потоковом контенте такие смещения могут происходить случайно.

Кроме того, Fidelis Network декодирует и идентифицирует все файлы по всем протоколам и портам. Эта логика обнаружения может быть использована в отпечатке содержимого YARA, определяющем тип файла JPEG. С помощью этого правила Fidelis проверит все jpeg-файлы на наличие любого из смещений base64 и предупредит, если они появятся более 25 раз в одном файле.

Обеспечение безопасности сетей: Обнаружение ключевых слов Base64 в режиме реального времени

Рисунок 7: Сетевой YARA-отпечаток Fidelis для поиска смещений в формате jpeg в кодировке base64

Цитаты:

1. ^Title. (2023) Метаданные в файлах JPEG — Exiv2. Retrieved November 21, 2023, from https://dev.exiv2.org/projects/exiv2/wiki/The_Metadata_in_JPEG_files .

2. ^Выбор имени. (2023) CyberChef. Retrieved November 21, 2023, from https://gchq.github.io/CyberChef/.

3. ^Base64 — Википедия. (2023) Retrieved November 21, 2023, from https://en.wikipedia.org/wiki/Base64.

4. ^Запись правил YARA — документация yara 4.4.0. Retrieved November 22, 2023, from https://yara.readthedocs.io/en/stable/writingrules.html#base6

Источник: Securing Networks: Real-Time Base64 Keyword Detection

Свяжитесь с нами
Обратная связь со спикером