关于常常进行浸透测验的人员来说,AMSI是再了解不过的作业了。
Windows一直是罪犯和安全研讨人员宠爱的进犯方针,为了防护该体系,微软公司也在不断选用更好的防护办法 , 比方Windows 10中引进的AMSI(Antimalware Scan Interface,杀毒软件扫描接口) 东西。微软开发出了反歹意软件扫描接口(AMSI)东西,能够在内存中捕捉歹意脚本。任何应用程序都能够调用这个接口,任何注册反歹意软件引擎都能处理提交给AMSI的内容。Windows Defender 和AVG现在正在运用AMSI,这一接口应该被更广泛地采用。特别是在应对PowerShell进犯的场景中,AMSI更是起到了很好的效果。
可是,AMSI并不完美,经混杂编码的脚本,或许从WMI姓名空间、注册表、事情日志等非常规方位加载的脚本,就不太会被AMSI检测出来。不必powershell.exe履行(可用 *** 战略服务器之类的东西)的PowerShell脚本也会使AMSI失效。绕过AMSI的办法也有许多,比方修正脚本签名,运用 PowerShell ,或许禁用AMSI。
因而,AMSI是许多研讨的首要方针,能够绕过AMSI可能是进犯成功与否的关键因素。这篇文章,我就为咱们解说了AMSI的内部作业原理,并描述了一种新的绕过技能。
本文分为以下4部分:
1.根本的Windows内部常识(如虚拟地址空间、Windows API);
2.用于剖析和反汇编程序的根本Windows调试器用法(在本文的示例中为powershell.exe);
3. Frida用于函数挂钩的根本用法;
4.PowerShell脚本的基础常识;
AMSI怎么运转
如上所述,AMSI答应服务和应用程序与装置的杀毒软件进行通讯。为此,AMSI要进行挂钩,例如Windows脚本主机(Windows Scripting Host ,WSH)和PowerShell,以便对正在履行的内容进行反混杂剖析,该内容会被“捕获”并在履行之前被发送到杀毒软件中。
这是在Windows 10上完成AMSI的一切组件的列表:
1.用户帐户操控或UAC (EXE、COM、MSI或ActiveX装置的晋级);
2.PowerShell(脚本、交互运用和动态代码评价);
3.Windows脚本主机(wscript.exe和cscript.exe);
4.JavaScript和VBScript;
5. Office VBA宏;
以下是AMSI体系结构的表明:
例如,在创立PowerShell进程时,AMSI动态链接库(Dynamic-Link Library, DLL)被映射到进程的虚拟地址空间,这是Windows为进程分配和供给的虚拟地址规模。DLL是一个模块,它包括可由另一个模块运用的导出和内部函数。内部函数能够从DLL中拜访,导出的函数能够由其他模块拜访,也能够从DLL中拜访。在咱们的示例中,PowerShell将运用AMSI DLL导出的函数来扫描用户输入。假如以为无害,则履行用户输入,否则将阻挠履行并记载事情1116(MALWAREPROTECTION_BEHAVIOR_DETECTED)。
在PowerShell shell中测验AMSI篡改办法时陈述的事情(ID 1116)的示例:
请留意,AMSI不只用于扫描脚本、代码、指令或cmdlet,还可用于扫描任何文件、内存或数据流,如字符串、即时消息、图片或视频。
枚举AMSI函数
如上所述,完成AMSI的应用程序运用AMSI导出的函数,可是运用哪些函数以及怎么运用?重要的是,哪些函数担任检测,然后避免“歹意”内容履行?
运用两种办法以取得导出函数的列表,首要,能够从Microsoft文档网站找到一个根本的函数列表:
· AmsiCloseSession
· AmsiInitialize
· AmsiOpenSession
· AmsiResultsMalware
· AmsiScanBuffer
· AmsiScanString
· AmsiUninitialize
其次,运用WinDbg等软件对AMSI DLL进行调试,用于逆向工程、反汇编和动态剖析。在咱们的示例中,WinDbg将附加到正在运转PowerShell的进程上,以剖析AMSI。
下图显现了运用WinDbg时,被导出的列表和内部AMSI函数的列表。留意,“x”指令用于查看符号。符号文件是编译程序时创立的文件。尽管程序的履行不需要这些文件,可是它们在调试过程中包括有用的信息,比方大局和局部变量以及函数名和地址。
尽管函数是已知的,可是,这并没有答复最重要的问题——检测和防备“歹意”内容触及哪个函数或哪些函数?
为了答复这个问题,将运用Frida。Frida是一个用于应用程序内省和挂钩的动态东西东西包,这意味着它能够用来挂钩函数,以便剖析由它们传递或回来的变量和值。
请留意,装置和解说Frida的作业方式超出了本文的规模,如需进一步了解,请点此了解。在咱们的示例中,只运用“frida-trace”东西。
首要,frida-trace将附加到正在运转的PowerShell进程(左下方的shell),一切称号以“Amsi”最初的函数都将被挂起。“-P”开关用于指定进程Id,“-X”开关用于指定模块(DLL),“-i”开关用于指定函数称号,在咱们的示例中代表形式。
请留意,有必要运用管理员权限履行“frida-trace”(右下方的shell)。
现在一切这些函数都被Frida挂钩,因而能够监督PowerShell所调用的内容,例如,输入一个简略的字符串。如下所示,调用AmsiScanBuffer和AmsiOpenSession。[1][2][3][4][5][6]黑客接单网