Українська

Розробники · Base64 енкодер & decoder

Як видалити підозрювану команду Base64 PowerShell без запуску

· Чому це питання

Опубліковано ToolAcre · Редакція журналу

бази64 безпека

ЕнергоШелл -EncodedCommand розшифрування навантаження, щоб виявити нешкідливий текст без його виконання
Головна ToolAcre векторна ілюстрація

Атакери використовують Base64 для приховувати сценарії з випадкової перевірки. Цей запис показує, як видалити код -EncodedCommand без його виконання, чому вихід може виглядати непарно UTF-8 декодер і що шукати.

Планове завдання з 2,000-правда на діаграма — де закодовані команди перетворюються і чому вони є червоним прапором

Синадмін відкриває планове завдання з 2,000-чарівник -EncodedCommand аргумент, який виглядає підозрілим. Завдання здійснюється під сервісним рахунком з високими привілеями.

Приміння вставити команду в PowerShell і запустити його, щоб побачити, що це небезпечно; якщо команда шкідлива, що робить його протипоказання системи. Підхід сейфа – це декодування бази64 локально і читання виходу як текст перед тим, як вирішити, чи запустити щось. Ця пошта пояснює, як видалити команди PowerShell безпечно без їх виконання, чому вихід може виглядати загарбовано в стандарті UTF-8 декодер, і що потрібно для оцінки, чи є команда безпечною або підозрою.

Декод, ніколи не виконує — правило, що зберігає аналіз сейфу, і чому браузер-навколо декодер є гарним придатним

Ключовий інсайт - це використання PowerShell UTFкодування -16LE для -EncodedCommand, не UTF-8, так що кожен інший байт є нульовим, який стандартні інструменти інтерпретують як іменні термінології. Право на аналіз будь-якого підозрілого коду простий: декодування, ніколи не виконання. Це стосується команди Base64-encoded, стисканих сценаріїв, скриптів з ненадійних джерел і що-небудь в ланцюжку неamiliar кодування. Виконуючи скрипт – точка повернення; один раз, коли він працює, зміни системи були надані, дані були вилучені.

Визначте та прочитайте сценарій як текст дозволяє оцінити його перед незворотним кроком. Друге правило - це використання інструменту, який працює локально і не робить мережевих запитів. Для того, щоб він був портативний, не вимагає додаткового програмного забезпечення і зберігає підозрісне завантаження на пристрої, не завантажуючи його на будь-який сервер. Якщо інструмент є свого роду, який розміщує на віддалений декодер, не використовуйте його; перезавантаження після цього піддається цьому сервісу. ЕнергоШелл -EncodedCommand параметр приймає рядок Base64, яка при декодуванні, містить скрипт PowerShell.

Чому виглядають декодовані байти на відміну від UTF-8 текст — перевірка UTF-16LE byte візерунок в шістнадці, а не запитуючи це UTF-8 текстовий інструмент для перекладу

Однак PowerShell не використовує UTF-8 кодування для цього; він використовує UTF-16LE (литт-ендіан) UTF-16... Вступ UTF-16, кожен ASCII характер представлений як два байти: код персонажа, що знаходиться на нульовому байті. Лист А 41 00 в шістку. Лист Б 42 00. рядок, як Привіт з'являється як 48 00 65 00 6КХ 00 6КХ 00 6Ф 00 в UTF-16LE байтів. Коли це зашифровано, результат містить зашифровану форму всіх байтів, включаючи всі нулі. Випадковий стандарт UTF-8 декодер виробляє швейні тексти або трюнкти на першому нульовому байті, тому що UTF-8 лікує null байтів як струнніх термінітораторів.

Вихід виглядає як H e l замість Привіт, здавалося б випадкові символи або відсутній текст. У роботі прикладі проявляється проблема і рішення. Надайте команду PowerShell кодує простий рядок Write-Host Hello. ЕнергоШелл UTF-16LE-encodes це для байтів, включаючи всі нульи, Base64-encodes байтів і виробляє довгий рядок, як VwByAGkAdABlAC0ASwBvAHMAaAAgACIASABlAGwAbABvACIA. Скопіюйте цей рядок в Base64 енкодер і декодер у вашому браузері і натисніть кнопку Decode. Декодування за замовчуванням буде намагатися інтерпретувати результат, як UTF-8 текст і виготовляти пошкоджені або обрізаються виводами через вбудовані нулі.

Успішний приклад: декодування нешкідливого зразка, зашифрованого командуванням — читання тексту, що переплетені нульові байти

Розчин полягає в тому, щоб використовувати шестигранний вигляд замість. Переключіть в поле перегляду і ви побачите байти: 57 00 72 00 69 00 74 00 65 00 2Д 00 4Б 00 6Ф 00 73 00 68 00 20 00 22 00 48 00 65 00 6КХ 00 6КХ 00 6Ф 00 22 00. Читання байтів як UTF-16LE пар врожай W-r-i-t-e--K-o-s-h--H-e-l-o-. З досвідом роботи можна ознайомитися UTF-16LE шестигранний безпосередньо, або ви можете написати байти до файлу і декодувати їх з скриптом PowerShell або Python, що працює локально.

Практичний підхід – замітка шаблону і запам’ятати, що PowerShell використовує UTF-16Л. Коли ви декодуєте PowerShell -EncodedCommand у браузері та виході неправильно виглядає, дивитись на перегляд шістнадцят замість текстового вигляду. Вид шістнадцяткового виду показує кожну опцію індивідуально. Що ASCII характер з'являється як два байти з нуль між ними. Якщо байти, які виписують шкідливі команди, такі як New-AdminAccount, зворотні погляди або експорт облікових даних безпеки, команда підозріла. Якщо байти записують щось нетипове, як список каталогів або простий скрипт, команда, ймовірно, benign.

Нестерене кодування та стиснення — Base64 всередині Base64, а потік gzip не можна прочитати як текст

Вид шістнадцятого важко читати, ніж звичайний текст, але він безпечніше, ніж вгадувати від пошкоджених UTF-8 вихід. Нестерене кодування та стиснення додають складність до аналізу шкідливих програм. Команда PowerShell може Base64-encode інший рядок Base64 або стискати скрипт з gzip, а потім Base64-encode результат. У від'єднаному сценарії ви зашифруєте зовнішній бази64, прочитайте результат і виявите його саме base64. Ви не можете перенести дані, якщо ви не можете змінити. Gzip та інші формати стиснення починаються з магійних байтів (1F 8B для gzip) видимих у вигляді шістнадцяти.

Якщо ви декодуєте Base64 і вид шестигранної форми починається з 1F 8B, байти є стисненим струмом, який вимагає від депресії. Base64 енкодер & decoder показує вам шестигранний, допомагаючи виявляти ці візерунки без виконання будь-яких. Пригнічений або додатково зашифрований перевантаження підозріли, що вони додають обфускаційні шари.

Що записувати звіт про інцидент — декодований текст, джерело та має, а не сам собі перезавантаження

Legitimate команди рідко вимагають декількох кроків кодування. Запис результатів для звіту про інциденти вимагає дисципліни та точності. Напишіть точний рядок Base64, який ви його знайшли і коли. Якщо ви зашифровані і знайшли підозрілі команди, описайте команди, але не включають повноцінний скрипт у звіті, але скрипт може бути нерозривним або довгим.

Включає хеш (SHA-256) декодованого сценарію, щоб пошук можна перевірити і відстежити. Якщо команда чітко шкідлива або використовує відомі методи експлуатації, залучіть реагування на інциденти та команди безпеки перед тим, як приймати будь-які дії. Не виконавши команду, щоб побачити, що це робить. Якщо інцидент реабілітатори повинні виконувати його для тестування, вони роблять це в піщаному середовищі, де містяться будь-які пошкодження. Ваша робота полягає в тому, щоб декодувати і оцінити ризик на безпечному відстані. У статті не передбачено повного спектру аналізу шкідливих програм, умов пісочниці або атаки припливу.

Що це не кришка — виконання пісочниці, інструментування та атрибутіонування шкідливих програм

Ми працюємо з командою безпеки та реагування на інциденти. Сфера тут вузько зосереджена на безпечному декодуванні закодованої команди PowerShell без її виконання, тому ви можете прочитати скрипт і оцінити, чи варто слідкувати далі. Бази64 кодування є обфускацією, не захистом. Будь-який з кодуванням і декодером може витягти скрипт. Атакери використовують Base64 для evade базового виявлення і запобігання випадкових перевірок, не захоплювати їх непристойним від аналізу. Команда decoded PowerShell, яка заманює та виконує віддалений скрипт, є шкідливим, чи ви заперечуєте його самостійно або інструмент безпеки.

Практичний наступний крок після декодування підозрюваного командного завдання полягає в тому, щоб повідомити його відповідній команді. Якщо це ваша система, визначте, чи було поставлено завдання навмисно і ким. Перевірити дату створення та рахунок, який планував його. Якщо завдання не є несанкціонованим, відключіть його, зберігайте деталі для судової експертизи та розслідуйте, як атакуючий отримав привілеї для створення. Якщо команда містить мережеві запити або механізми, що зберігаються, такі як зміни реєстру або створення запланованих завдань, це майже напевно, маловідомо.

Takeaway: Base64 є обфускацією, не захистом — як Base64 енкодер і декодер декодує завантаження локально без нього, коли-небудь залишить машину

Якщо це виконує законні функції адміністрування та деталі створення є нормальними, це може бути законний адміністративний сценарій, який може бути зашифрований з причин, пов'язаних з політикою безпеки або інтеграцією з більшим інструментом автоматизації. Не виконувати його як спосіб; нехай ваш розрахунок декодованого тексту повідомлення про своє рішення. Безпечне декодування підозрілих команд Base64 PowerShell слідувати за прямим процесом. Використовуйте Base64 кодування та декодер для видалення рядків без завантаження його або виконання будь-яким чином. Дивитися на хексі, щоб зрозуміти, що байти представляють.

Якщо ви бачите UTF-16LE візерунки (інтерліфіковані нульові байти) пам'ятайте, що PowerShell використовує UTF-16LE і читати відповідно. Визначте будь-які підозрілі візерунки, такі як мережеві запити, механізми підвищення привілеїв або наполегливість. Записувати деталі точно для звіту про інцидент, включаючи оригінальну рядок Base64 та її хеш. Не виконавши команду самостійно; залиште те, що для інцидентів реагаторів у контрольованому середовищі. Довірте свою локальну декодацію і вашу оцінку простого тексту, і дайте, що довідник про вашу наступну дію.