Hello, в цьому звіті ми розглянемо техніки антивідлагодження, які допомагають шкідливим програмам виявляти та уникати середовищ відлагодження, ускладнюючи їх аналіз. Відлагодження дозволяє аналітикам проходити по коду, змінювати пам'ять та вивчати поведінку, але ці техніки спрямовані на перешкоджання таким зусиллям. Розуміння цих технік є ключем до виявлення справжньої мети шкідливої програми.
Lab 16–1
Проаналізуйте шкідливу програму, знайдену в Lab16–01.exe, за допомогою відлагоджувача. Це та сама шкідлива програма, що й Lab09–01.exe, але з доданими техніками антивідлагодження.
Питання
1. Які техніки антивідлагодження використовує ця шкідлива програма?
Перевіряючи основну функцію, можна помітити виклик підпрограми sub_403530 за адресою 0x404405, всередині цієї підпрограми використовується безліч технік антивідлагодження, завжди є виклик підпрограми, яка самостійно видаляє бінарний файл.
Аналізуючи всі посилання на fs:[30h]
(Блок середовища процесу) в виконуваному процесі, можна виявити кілька порівнянь, що націлені на ключові поля, такі як BeingDebugged (
mov bl, [eax+2])
, ProcessHeap
та NTGlobalFlag
, для визначення їх статусу та оцінки можливого відлагодження або маніпулювання.
2. Що відбувається, коли кожна з технік антивідлагодження успішно спрацьовує?
Як ми згадували раніше, шкідлива програма буде видаляти себе.
3. Як обійти ці техніки антивідлагодження?
Для цієї задачі ми використовуємо плагін OllyDbg ScyllaHide, якщо відкрити бінарний файл у x32dbg, зайти в Plugins > ScyllaHide > Options та встановити ті опції, що на зображенні.
Тепер можна відлагоджувати програму нормально.
Надалі, прапорці порівняння можна змінити, перейшовши з jnz
(Jump if Not Zero) на jz
(Jump if Zero) і навпаки, щоб ефективно відредагувати бінарний файл.
4. Як вручну змінити структури, які перевіряються під час виконання?
Щоб вручну змінити структури PEB, які перевіряються під час виконання, ми можемо відлагоджувати бінарний файл в OllyDbg, використовуючи командний рядок і вивантажити вміст PEB, після чого заповнити адресу нулями 00.
Ось розбір API та команд для вивантаження
BeingDebugged:
dump fs:[30] + 2
ProcessHeap:
dump ds:[fs:[30] + 0x18] + 0x10
NTGloabalFlag:
dump fs:[30] + 0x68
5. Який плагін OllyDbg захистить вас від технік антивідлагодження, що використовуються цією шкідливою програмою?
Для захисту від технік антивідлагодження ось кілька плагінів OllyDbg:
-
ScyllaHide
-
OllyAdvanced
-
HideOD
-
StrongOD
Lab 16–2
Проаналізуйте шкідливу програму, знайдену в Lab16–02.exe, за допомогою відлагоджувача. Мета цього лабораторного заняття — знайти правильний пароль. Шкідлива програма не створює шкідливого вантажу.
Питання
1. Що відбувається, коли ви запускаєте Lab16–02.exe з командного рядка?
2. Що відбувається, коли ви запускаєте Lab16–02.exe і вгадуєте параметр командного рядка?
3. Який пароль командного рядка?
Правильний пароль командного рядка — byrr.
Ми можемо знайти його, запустивши бінарний файл в OllyDbg і встановивши точку зупину на strcmp, щоб перевірити рядок порівняння.
4. Завантажте Lab16–02.exe в IDA Pro. Де у головній функції знаходиться strncmp?
Щоб знайти місце розташування strcmp, я йду до рядків і перевіряю перехресні посилання на повідомлення про помилку, потім помічаю strcmp за адресою 0x40123A.
5. Що відбувається, коли ви завантажуєте цю шкідливу програму в OllyDbg за допомогою стандартних налаштувань?
Програма різко завершується після завантаження в OllyDbg з стандартними налаштуваннями.
6.
Що унікального в PE-структурі Lab16–02.exe?
Програма містить секцію .tls (Thread Local Storage).
7. Де знаходиться callback? (Підказка: використовуйте CTRL-E в IDA Pro.)
Знаходиться за адресою 0x401016.
8. Яку техніку антивідлагодження використовує програма для негайного завершення роботи в відлагоджувачі та як можна уникнути цієї перевірки?
Шкідлива програма використовує функцію FindWindowA
, щоб виявити та завершити виконання, коли знаходить вікно з класовим ім'ям OLLYDBG
. Щоб обійти цю поведінку, можна змінити ім'я класу вікна за допомогою плагіна OllyDbg, наприклад, PhantOm, або нейтралізувати виклик завершення програми, замінивши його на NOP за адресою 0x40107C
.
9. Який пароль командного рядка ви бачите в відлагоджувачі після вимкнення техніки антивідлагодження?
Ми можемо знайти пароль, встановивши точку зупину на strcmp та запустивши програму до того, як вона досягне цієї точки. Ви помітите, що вона порівнює його з bzrr.
Цей п@сс є приманкою.
10. Чи працює пароль, знайдений в відлагоджувачі, в командному рядку?
Пароль, отриманий з відлагоджувача, не працює при використанні в командному рядку, оскільки до нього додається заповнювач, і він декодується.
11. Які техніки антивідлагодження пояснюють різні паролі в відлагоджувачі та командному рядку, і як можна захиститися від них?
Результат OutputDebugStringA
за адресою 0x40103A та прапор BeingDebugged
використовуються як вхідні дані для алгоритму декодування. Ви можете використовувати плагін PhantOm, щоб забезпечити значення BeingDebugged
рівним 0
, а також можна нейтралізувати інструкцію add
за адресою 0x401051
.
Lab 16–3
Проаналізуйте шкідливу програму в Lab16–03.exe за допомогою відлагоджувача. Ця шкідлива програма схожа на Lab09–02.exe, з певними модифікаціями, включаючи введення технік антивідлагодження. Якщо ви застрягли, дивіться Lab 9–2.
Питання
1. Які рядки ви бачите при використанні статичного аналізу бінарного файлу?
Також floss декодує деякі рядки.
Відкриваючи бінарний файл у pestudio
2. Що відбувається, коли ви запускаєте цей бінарний файл?
Якщо ми запустимо бінарний файл, він одразу припинить виконання і закриється.
Як ви можете бачити, при захопленні мережевого трафіку нічого не відбувається.
3. Як потрібно перейменувати зразок, щоб він працював правильно?
Як видно в результатах floss, ім'я файлу має бути ocl.exe, але якщо перейменувати бінарний файл і спробувати запустити, нічого не відбудеться.
Нам потрібно встановити точку зупину на strcmp за адресою 0x401518, щоб перевірити порівняння під час відлагодження бінарного файлу, ми стикаємося з помилкою "ділення на нуль". Можна обійти цю помилку, замінивши її на NOP.
Тепер ми бачимо, що точка зупину порівнює рядок з qgr.exe.
Якщо перейменувати бінарний файл на qgr.exe і спробувати запустити його, не з'являються з'єднання чи мережеві дії.
Якщо встановити точку зупину на strcmp і замінити її на NOP, змінні var_118, які переносять два значення в адресу 0x401292, також потрібно встановити значення переміщення на адресі 0x40129C на 1.
Якщо відлагоджувати, ми побачимо порівняння з peo.exe.
4.
Які техніки антивідлагодження використовує ця шкідлива програма?
Ця шкідлива програма використовує три різні техніки антивідлагодження за допомогою часу для ускладнення аналізу: RDTSC
(помилка ділення на 0), GetTickCount
і QueryPerformanceCounter
.
5. Що відбувається з кожною технікою, якщо програма визначає, що вона виконується в середовищі відлагодження?
Шкідлива програма включає умовну поведінку, залежно від успішності перевірок часу антивідлагодження:
QueryPerformanceCounter
: Після успішної перевірки шкідлива програма змінює критичний рядок, необхідний для належної роботи програми.GetTickCount
: Якщо ця перевірка проходить успішно, шкідлива програма викликає необроблену помилку, що призводить до аварійного завершення програми.RDTSC
: Коли ця перевірка успішна, шкідлива програма намагається видалити себе з диска, що ускладнює подальший форенсичний аналіз.
6. Чому техніки антивідлагодження успішно діють в цій шкідливій програмі?
Техніки антивідлагодження цієї шкідливої програми є успішними завдяки використанню Structured Exception Handling (SEH) (структурованої обробки винятків), щоб порушити процес відлагодження. Програма стратегічно викликає та ловить виняток, вставляючи свій власний обробник винятків між двома викликами функцій часу. Ця тактика використовує той факт, що винятки обробляються значно повільніше в середовищі відлагодження, ніж при звичайному виконанні, що дозволяє шкідливій програмі визначити наявність середовища відлагодження.
7. Яке доменне ім'я використовує ця шкідлива програма?
Перекладено з: LAB 16 Practical Malware Analysis: Uncover Anti-Debugging Techniques