之前学习了解到一些攻击组织或者恶意程序的特征分析检测方式,那么学习当今使用频率高的攻击技术的特征分析与检测也是很有必要的。
一、命令和脚本解释器(T1059)
1.powershell(T1059.001)
在之前关于powershell以及内网安全的文章提到相关内容。
2.Windows cmd shell(T1059.003)
常常使用cmd调用本机命令,并且将这些命令得输出重定向到本地管理共享文件。
检测方法: windows得安全事件日志,包含命令行参数的进程创建(ID4688)事件,是检查windows cmd shell被恶意使用的最佳来源。重点关注不常见的执行模式以及一些跟恶意行为有关的执行模式,这就体现了使用框架的优越性,能通过判断上下文关系,来推算出攻击手段。 ·检测cmd.exe进程含有混淆字符的情况,包括^、+、%、!等 ·在cmd.exe中大量使用set和call命令 ·将输出重定向到本地主机管理共享中,例如:>\\computername\c$ ·执行会引发其他攻击相关的命令(例如调用regsvr32.exe或者regasm.exe或者加载DLL) ·调用reg.exe,修改注册表,启用或者禁用掉远程桌面或者用户访问控制等功能
二、利用已签名二进制文件代理执行(T1218)
该技术的两个子技术:Rundll32和Mshta在目前使用频率高
1.Rundll32(T1218.011) 攻击者使用Rundll32.exe直接执行恶意代码,可以避免触发安全工具,因为目前程序将其加入白名单,工具无法对其进行监控。Rundll32是windows的一个内置的进程,支持DLL。 攻击者将恶意代码作为DLL执行,避免恶意代码直接出现在进程树中。更为常见的是攻击者利用DLL中的导出函数(如DllRegisterServer勒索病毒通过它来绕过策略 )绕过代理和逃避检测。 攻击者利用Rundll32从可以写入的(有权限的)目录(如Temp目录)中的DLL文件加载代码。利用Rundll32加载合法的comsvcs.dll导出MiniDump函数,来转移某些进程的内存。
Cobalt strike利用StarW函数从命令行加载DLL,如发现有代码使用这个函数,证明可能遇到了CS
检测Rundll32主要进行命令行参数监控、进程监控。 检测Rundll32的方法: ①从全局可写文件夹执行:攻击者经常利用Rundll32从全局可写文件夹中加载或者写入DLL,所以我们可以监控跟一下位置有关的情况,如下图
②导出函数 ③异常进程:看Rundll32的父进程是否合乎道理,下图进程一般不会产生新的Rundll32
2.Mshta(T1218.005)的分析与检测
Mshta能够通过受信任的程序代理执行攻击要执行的代码。与Rundll32相似,Mshta.exe是windows自带的一个二进制文件,用于执行HTA(Microsoft HTML Application)文件。Mshta能通过网络代理执行嵌入HTML中的windows Script Host代码(VBScript和JScript)。是一个受攻击者欢迎的通过受信任的签名程序代理执行恶意脚本的工具 。
Mshta执行恶意VBScript和JScript的方式: ·通过在命令行中传递给Mshta的参数进行内联执行; ·通过HTML Application文件或者基于COM执行,以便横向移动; ·通过调用mshtml.dll的RunHTMLApplication导出函数,用Rundll32.exe代替Mshta.exe
书本内容提到,随着2018年Kovter消失,通过命令行执行代码的方式逐渐减少。攻击者转而使用执行存储在文件中的代码这样的方式。攻击者在命令行使用本地磁盘文件路径、URI路径等,指示Mshta执行存储在本地或者远程的文件中的HTA内容。其优点是:在命令行看不到payload
检测Mshta需要收集的数据: ·进程和命令行监控: ·进程元数据:攻击者会重命名Mshta二进制文件。重命名系统程序(隐藏、抹去安全审计痕迹 )、内部进程名称等二进制元数据,能有效确定进程真实身份。 ·文件监控和网络连接
检测Mshta方法: ①内联脚本执行和协议处理程序: Mshta允许内敛执行Windows WSH脚本,依据不同的协议处理程序。因此我们可以查找Mshta.exe,以及包含与mshta相关的协议处理程序的命令行的执行情况; ②可疑进程的溯源: 与Rundll类似,由于是windows自带所以很常见,此时我们要考虑异常的进程之间的派生关系。比如word执行mshta是异常的。 ③Mshta伪装: 就是重命名。如果文件内部元数据信息中的文件名和Mshta一致但明显和磁盘文件名不一样,要着重注意。书中写道,攻击者还会将Mshta移出System32或者SysWOW64目录中的正常位置,给我们启发,不仅除了排查内部名称与外部名称不一致的,还可以找在合法位置之外出现执行Mshta的情况。 ④网络连接和HTA内容: Mshta执行的文件会存储在磁盘上,以.hta为扩展名。因此,需要检测分析来自URI、UNC路径、NTFS交换数据中远程托管的或者不以.hta结尾的HTA文件的执行。 查找是否有mshta.exe进行外部网络连接;排查Mshta是否通过URI下载并执行HTA内容。 HTA文件通常是MIME类型(多用途互联网邮件扩展类型)的。
三、创建或修改系统进程(T1543)
书中给出了这么一个定义:检测到最多的攻击技术是“创建或修改系统进程”,而且主要是windows服务,攻击者通过这个技术来实现持久化战术。检测到的数量多自然离不开windows服务,系统后台运行的常见二进制文件,在执行时通常不会引发警报,那么攻击者通过创建、修改系统服务进程,既能够瞒天过海,还能够取得较高权限。 攻击者经常使用Windows服务控制管理器配置工具(sc.exe),根据需要修改或者创建服务
检测windows服务要收集的数据: ·命令行监控:比如检测到使用sc.exe手动创建、注册、修改服务 ·进程监控:出现随机进程名 ·windows事件日志:关注4697、7045、4688 ·windows注册表:对注册表的异常修改,如对HKEY_LOCAL_MACHINE\SYSTEM\CurrentSet\Services 进行修改,说明可能存在不受信任的服务 ·文件监控:
四、计划任务/作业(T1053)
攻击者可以利用windows计划任务(task scheduler)实现初始访问 或重复执行恶意代码 ,在系统启动时或调度任务时执行恶意程序,实现持久化。 很多合法软件需要持久化,因此计划任务是不能够关闭或者阻止的。攻击者往往会混入正常使用,来绕过检测。攻击者常常同时使用计划任务和混淆文件或信息。 关于持久化,也就是计划任务,在学习内网安全的时候接触过,以前是用AT后来AT淘汰后使用schtasks。书中指出,在schtasks常用参数中,靠前的是 /Create、/Change、/Run、/Delete、/Query. 热知识,一天一共86400秒。攻击者很有可能在任何一秒启动计划。
检测计划任务需要搜集的数据: ·windows事件日志:(windows-Task-Scheduler/Operational日志)监控计划的创建、修改、删除、使用。 事件ID106、ID140记录创建、更新计划任务的事件、名称。ID141监控计划任务的删除信息。书中提到还要启用对象访问审核,创建特定的安全访问控制列表(SACL),收集ID4698(计划任务创建)、ID4699(计划任务删除)、ID4700(计划任务启用)、ID4701(计划任务禁用)。
·进程和命令行监控:
检测计划任务的方法: 首先,恶意计划任务常见的二进制文件有:cmd.exe、powershell.exe、regsvr32.exe、rundll32.exe ①Taskname、Taskrun 它们分别为/TN、/TR标记的传递参数。要留意包含TaskName或者/TN值。攻击者经常将而已任务的名字伪装,如使用GUID(如Qbot)混入合法的活动名称。而Taskrun一般会指定了预定时间执行的内容,攻击者曾通过使用LOLBINs或者将磁盘上的恶意软件命名类似合法的系统封程序。任何指向脚本的Taskrun都要注意
②没有schtasks.exe的计划任务: 由于攻击者可以在COM对象的帮助下直接创建或者修改任务,无需调用schtasks.exe和taskschd.msc,我们就要注意在\Windows\System32\Tasks以及\Windows\SysWOW64\Tasks目录中监控 文件创建、修改 事件。
③异常的模块加载: 监控镜像加载,例如\Windows\System32\taskschd.dll,通常不会被Excel或者word等进程加载。收集这些异常信息我认为可以通过黑白名单的方式。
五、OS凭证转储(T1003)
在内网学习的时候OS凭证转储就发挥了横向移动的作用。攻击者常使用的是LSASS内存(T1003.001)。LSASS本地安全验证子系统服务。
使用LSASS内存的原因: 首先它存储在内存中的敏感信息数量庞大,是很容易攻击的目标。攻击者攻击LSASS进程获取里面的凭据,使用Mimikatz等工具,攻击者通过现有beacon能轻松访问LSASS。 攻击者在目标设备上运行受信任的管理工具,如Sysinternals工具(ProDump)。书中提到,如果攻击者在目标主机以特权用户执行任务管理器(taskmgr.exe)的时候可以轻而易举转储任意进程的内存数据。 创建转储文件需要用MiniDumpWriteDump函数,在dbghelp.dll和dbgcore.dll中实现。rundll32.exe可以执行Windows本地DLL文件comsvcs.dll导出的MiniDumpW函数。 能够访问LSASS的工具: ·ProDump ·任务管理器(taskmgr.exe) ·Rundll(comsvcs.dll) ·Pwdump ·Lsassy ·Dumpert ·Minikatz ·Cobalt Strike ·Metasploit ·LaZahne ·Empire ·Pyoykatz
检测LSASS内存要收集的数据: ·进程监控 ·文件监控 ·网络连接
检测LSASS内存方法: ①基线:分析异常使用LSASS迹象 ②注入LSASS进程的可疑代码 ③检测MiniDumpW函数的使用情况
六、进程注入(T1055)
攻击者通过进程注入,将如lsass.exe与正常的进程融合,通过他们来代理执行恶意活动。通过进程注入,可以运行进程的内存空间内启动恶意payload,无需将任何恶意代码存储到磁盘中。 常见的攻击者使用的方法: ·远程把DLL注入正在运行的进程 ·注入受信任的内置可执行文件(如notepad.exe)建立网络连接,然后注入恶意行为的代码 ·从lsass.exe跨进程注入taskhost.exe ·Metaspolit将自身注入svchost.exe ·注入浏览器进程,窥视
检测进程注入的数据: ·进程监控 ·API监控 ·命令行监控
检测进程注入的方法: ①异常的进程行为:进程做了不属于它职责的事情 ②异常的路径和命令行: rundll32.exe、regasm.exe等没有发现命令行选项,可能表明他们是被注入的目标; Microsoft进程,如vbc.exe的命令行包括/scomma、/shtml表明可能注入了Nirsoft工具以进行凭证访问; 如果在linux进程的文件描述符指向的文件路径带有memfd标志,表示他是从另一个进程的内存派生出的。 ③注入LSASS
七、混淆文件或信息(T1027)
攻击者用该技术来实现隐藏,常见的混淆技术: ①base64编码 ②字符串拼接 ③转义字符
检测混淆文件或信息所需要搜集的数据: ·windows事件日志 ·进程和命令行监控:通常混淆由powershell.exe和cmd.exe命令启动
检测混淆文件或信息的方式: ①BASE64:可以检测powershell.exe和amd.exe进程的情况,看看有没有包含ToBases4String和FromBase64String等参数的命令行。 ②其他编码:书中提到最常见的混淆形式是使用-EcodedCommand Powershell参数。监控当执行Powershell.exe出现转换编码命令 的情况。 ③转义字符:如果系统经常使用大量与混淆相关的字符,要警报。
八、入口工具转移(T1105)
书中提到LOLBINs,找到天融信介绍它的文章。LOLBINs-生活在陆地上的二进制。能被称为LOLBINs的程序符合: ·可以是带有Microsoft签名的二进制文件,可以是Microsoft系统目录中二进制文件。 · 可以是第三方认证签名程序。 · 具有对APT或红队渗透方有用的功能。 ·该程序除过正常的功能外,可以做意料之外的行为。(如:执行恶意代码、绕过UAC)
攻击者进行入口工具转移的原因: 渗透测试到了后渗透阶段,攻击者就会进行持久化、留下backdoor,然后横向移动。 攻击者攻陷内部系统会尝试网络连接,以此来下载其他恶意软件、脚本、代码等。这里可以重视,攻击者必须下载文件才能成功执行入口工具转移 。攻击者贡献目标后会通过二进制文件LOLBIN执行入口工具转移,通常包括:BITSadmin、Certutil、Curl、Wget、Regsvr32、Mshta
检测入口工具转移需要搜集的数据: ·命令行监控: ·进程监控 ·网络连接 ·数据包捕获
检测入口工具转移的方式: ①最有效的方式是,检测powershell命令行的关键字和特定模式。比如有无使用: ·downloadstring; ·downloaddata; ·downloadfile; 又或者,命令行出现的参数由bitsadmin.exe、certutilulrcache、split这些字符串,很有可能存在下载恶意文件的行为。 ②注意检测可疑的命令模式,如Wget、curl
九、系统服务(T1569)
攻击者可以通过与服务交互或者创建服务来执行恶意代码,并且通过开机自启动实现持久化,攻击者最常使用的技术是“服务执行“(T1569.002)
攻击者利用windows服务控制管理器(services.exe)执行恶意命令或恶意payload。
在操作系统中,只有所有的进程都退出了才能关闭系统,而为了保证业务可靠性,可以通过检测每个程序的守护进程来判断能否关机。所有的windows服务都是作为services.exe的子进程产生的的。
需要检测的数据: ·进程和命令行监控 ·DLL加载监控:Sysmon事件的ID7 ·设备驱动程序加载监控:windows defender应用程序控制(WDAC)是设备驱动程序监控的有效数据源 ·UNIX/Linux系统:系统对守护进程的配置文件变更发出警报。
检测系统服务最有效的方式:查找从服务控制管理器派生的cmd.exe实例。在命令行中查找/c能缩小潜在的交互式会话。
十、伪装(T1036)
通过伪装,躲开检查。经常用到重命名系统程序(T1036.003)
检测伪装的方式: ·已知的进程名称 检测内外名称不一致的情况 ·已知的进程路径 内外路径不匹配的情况 ·已知的进程哈希值 哈希值出现偏差要警报 ·系统进程已知的命令行参数 两个进程用到同样的命令行参数,要警惕