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-бітів. Послідовність стає 010 000 01(00)(00), всього 12 біт, що ділиться на 6. Дві 6-бітові цифри кодуються за допомогою стандартного алфавіту base64 в ‘QQ’. Додаткова пара з 2 бітів прокладки є додаванням двох знаків прокладки, і в результаті виходить ‘QQ==’.

Коли кодування змінюється на протилежне, символи підстановки видаляються разом із додатковою парою 2-бітів. У цьому прикладі QQ== (010000 010000) перетворюється на 01000001 або ‘A’. Якщо для того, щоб загальна кількість бітів була кратна 6, потрібно лише два додаткові 0-біти, то до закодованої послідовності додається лише один символ підстановки, а при зворотному кодуванні видаляються лише два 0-біти.

Кіберзагрози, що використовують шифрування Base64

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

Блоки Base64 важко розпізнати у великих обсягах мережевого трафіку через різноманітність всіх можливих кодувань. Дані кодування Base64 можуть містити стільки символів AZ, az, 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, від https://dev.exiv2.org/projects/exiv2/wiki/The_Metadata_in_JPEG_files.

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

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

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

Джерело: Securing Networks: Real-Time Base64 Keyword Detection

Зв'яжіться з нами
Зворотний зв'язок зі спікером