windows应急响应指导分析 一、病毒分类 1、蠕虫病毒(worm) 文件夹蠕虫、网络蠕虫、邮件蠕虫等,主要特点是具有很强的传播性 2、挖矿病毒(CoinMiner/XMiner) 利用被感染主机进行挖矿,占用主机资源,近几年十分流行,通常与僵尸网络搭配 3、木马病毒(Trojan/Backdoor) 木马、后门等主要是为了获得主机的控制权限,窃取信息,执行C&C端的功能指令等 4、感染型病毒(Virus) 主要行为是感染文件,常见家族有Sality、Ramnit、Virut等 5、宏病毒(W200M/X97M/OMacro) 文档类,启用宏功能后执行宏代码,通常为一个DownLoader,下载执行其他恶意软件 6、勒索病毒(Ransom) 加密文件,勒索赎金 理解上,僵尸网络:是由大量中了木马病毒的主机组成,不特定单一主机中了僵尸网络病毒。 感染型病毒和蠕虫病毒:都具有扩散性,但感染型病毒只是在同台主机的不同文件间扩散;而蠕虫病毒是在不同主机间扩散,范围不一样。 勒索病毒:其实可以算是影响比较大的感染型病毒,也会感染文件,但它感染程度更恶劣,破坏文件。 宏病毒:比较类似木马病毒,用来执行指令,或者下载文件等。 二、进程排查 病毒的存在形式是多样的,可能是独立运行的进程,也可能是将动态库或恶意代码注入到系统进程、应用进程中运行。这里,粗略分为三种,即独立进程模块、动态库模块、隐藏模块。 1、独立进程块 这是最简单的一种形式,即病毒是独立可执行文件,以独立进程在运行。这类进程通常要么进程名随机,要么伪装成与系统进程相似的名字,或者名字与系统进程完全一样,但文件位置完全不是系统默认的正常路径。以某中毒主机为例,打开任务管理器后观察如下:病毒进程名为svch0st.exe,而系统进程为svchost.exe。 遇到这种,我们可以使用PCHunter对所有进程文件校验签名,检查无签名或签名可疑的进程。 或者使用微软提供的procexp,他支持自动上传进程文件至virustotal 2、动态库模块 病毒也可能以动态库的方式注入到系统进程或应用进程中去。如下图所示,客户某一中毒主机,我们使用PCHunter工具观察到病毒体sdbot.dll模块注入到系统进程explorer.exe进程中,并且对该进程挂了应用层钩子,包括IAT、EAT和inline等类型的钩子。 同上,可以使用PCHUNTER校验某个进程的dll文件做快速判断。 同时也可以使用procexp自动上传某个进程的dll至virustotal 如果已知病毒dll,需要找到对应的进程,可以使用如下命令。或者使用以上工具搜索所有进程的dll 3、隐藏模块 隐藏模块往往也是动态库模块,但它肉眼观察不到(Windows系统工具看不到,PCHunter等工具也看不到),是很隐蔽的一种手段,属于难查难杀的类型。 譬如,在某客户主机上,我们怀疑svchost.exe进程有问题(进程有问题并不代表进程对应的文件有问题,这一点一定要区分好),但我们使用系统工具和PCHunter等等工具均查看不到任何异常模块。至此,怀疑有隐藏模块,祭出特殊工具dump出该svchost.exe的所有模块空间(按模块分割成独立文件),观察到有隐藏的模块: svchost_exe_PID384_hiddenmodule_2560000_x86.exe就是隐藏在svchost.exe进程中的模块 注:此特殊工具会将隐藏模块文件名加上“hiddenmodule”字眼 可使用微软的procdump工具pd64.exx -pid [PID] 4、进程内存字符串 在网络端检测出某个恶意域名或 IP 后,可以在所有系统进程中搜索该域名,帮助定位发起域名连接的进程,从而定位病毒文件。 深信服SfabAntiBot即可对内存进行扫描 需要注意的是上面扫描是对进程所有内存进行扫描,一个是会比较卡,并且同样会扫描到代码段,这样可能会有误判,把代码当成域名字符串。 所以需要结合process hacker等工具查看指定进程内存是否确实存在指定字符串信息。 三、网络行为排查 威胁情报等辅助网站 5、 Google与Baidu等搜索引擎,输入文件MD5/IP/域名,有时候可以查询到对应病毒信息。 网络连接查看命令 Process Hacker 查看网络连接,出现绿色的连接表示新增,红色的连接表示断开的。 四、文件排查 1、临时目录排查 黑客往往可能将病毒放在临时目录(tmp/temp),或者将病毒相关文件释放到临时目录,因此需要检查临时目录是否存在异常文件。 假设系统盘在C盘,则通常情况下的临时目录如下: C:\Users\[用户名]\Local Settings\Temp C:\Documents and Settings\[用户名]\Local Settings\Temp C:\Users\[用户名]\桌面 C:\Documents and Settings\[用户名]\桌面 C:\Users\[用户名]\Local Settings\Temporary InternetFiles C:\Documents and Settings\[用户名]\Local Settings\Temporary InternetFiles 2、浏览器相关文件排查 黑客可能通过浏览器下载恶意文件,或者盗取用户信息,因此需要检查下浏览器的历史访问记录、文件下载记录、cookie信息,对应相关文件目录如下: C:\Users\[用户名]\Cookies C:\Documents and Settings\[用户名]\Cookies C:\Users\[用户名]\Local Settings\History C:\Documents and Settings\[用户名]\Local Settings\History C:\Users\[用户名]\Local Settings\Temporary InternetFiles C:\Documents and Settings\[用户名]\Local Settings\Temporary InternetFiles 3、最新打开文件排查 检查下最近打开了哪些文件,可疑文件有可能就在最近打开的文件中,打开以下目录或者运行中输入recent即可看到: C:\Users\[用户名]\Recent C:\Documents and Settings\[用户名]\Recent 4、文件时间排查 可以根据文件夹内文件列表时间进行排序,查找可疑文件。一般情况下,修改时间离现象发现时间越近的文件越可疑。当然,黑客也有可能修改”修改日期“,但遇到很少。 用everything对所有exe文件排序,查找现象时间段内创建和修改的文件。 5、其他重要目录排查 System32也是常见的病毒释放目录,因此也要检查下该目录。hosts文件是系统配置文件,用于本地DNS查询的域名设置,可以强制将某个域名对应到某个IP上,因此需要检查hosts文件有没有被黑客恶意篡改。 C:\Windows\System32 C:\Windows\System32\drivers\hosts 五、远程登录排查 系统产生的日志默认分为三类:应用程序日志、安全性日志、系统日志 这些日志以evt文件形式存储在%systemroot%\system32\config目录下,使用日志查看器可查看这些日志(开始 – 运行 –eventvwr) 1、RDP远程登录 RDP登录日志位于windows安全日志中,登录类型为10,该日志记录了此主机上的所有登录行为。 审计RDP登录日志的目的是为了发现可疑登录记录,包括: 1.是否有异常的没有登录成功的审计事件,比如RDP爆破登录; 2.是否有成功登录的不明帐号记录; 3.是否有异常IP的登录事件,比如IP非此主机用户常用IP; 4.是否有异常时间的登录事件,比如凌晨2点远程登录主机; 注意:有时候登录记录会十分多,分析起来难度大,因此我们可以根据前期收集到的信息来帮助我们缩小审计范围,比如异常现象发生的时间,恶意文件创建的时间等,可在这类时间点附近查找异常的登录记录。 操作系统 | | | | | | | | | | | | 2008/2012/2016/win7/win8/win10 | | | | 2008/2012/2016/win7/win8/win10 | | | |
应用程序和服务日志 -> Microsoft -> Windows ->TerminalServices-RemoteConnectionManager->Operational,事件ID 1149为RDP登录成功日志,会记录源IP和用户。 查看本机登录过的IP: 打开注册表,打开此路径:HKCU\Software\Microsoft\Terminal ServerClient。 选中Default可以看到连接过的IP。 选中Servers -> [IP]可以查看登陆名。 2、SMB远程登录 共享目录登录记录位于windows安全日志中,登录类型为3,常见的基于共享目录的攻击行为是IPC爆破,若爆破成功,攻击者可以将受攻击主机的磁盘文件映射到本地,造成信息泄露。同时,共享目录可作为传输恶意文件的途径之一,了解共享目录的访问情况可以帮助我们了解攻击者的攻击方法。 操作系统 | | | | | | | | 2008/2012/2016/win7/win8/win10 | | | | 2008/2012/2016/win7/win8/win10 | | | | 2008/2012/2016/win7/win8/win10 | | | |
六、启动项排查 黑客为了保持病毒能够开机启动、登录启动或者定时启动,通常会有相应的启动项,因此有必要找出异常启动项,并删除之。启动项的排查,这里引入一个非常好用的工具,工具名字Autoruns(官网 www.sysinternals.com)。 1、自启动项 autoruns查看 注册表查看 永久启动项 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 一次性启动项,下次启动会自动删除 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce 32位程序启动项 HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run 通过以下路径放置程序也可以自启动程序 %appdata%\Microsoft\Windows\Start Menu\Programs\Startup 2、任务计划 autoruns查看 微软自带工具 taskschd.msc可启动系统自带任务计划程序,可以查看任务计划具体操作,显示所有正在运行的任务,并且可以开启任务历史记录。 注册表查看 \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Schedule\TaskCache\Tree 有些任务计划做了隐藏可通过注册表查看,这里任务计划只有名称,如果想知道任务计划执行内容,可以结合任务计划历史记录日志看判断。 服务排查 通过tasklist /svc,可以查看每个进程所对应的PID和服务 使用autoruns查看 注册表查看 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services存储着所有的服务启动项 七、账户排查 查看用户最后一次登录,修改密码时间,以及账户是否启动。 通过PCHunter等工具可以查看隐藏用户,如添加$符号的隐藏账号,以及克隆账号。 八、宏病毒分析处置 现象: EDR等杀软报宏病毒,病毒名提示类似于W97M、VBA、MSWor、Macro。 分析过程: 根据文件后缀其实就能看出,该word文档是带有宏代码的,m即为macro。 oledump.py是一个用于分析OLE文件(复合文件二进制格式)的程序,而word、excel、ppt等文档是OLE格式文件的,可以用它来提取宏代码。 先进行文件基础分析,可以看到A3这段数据被标记为“M”,“M”即表示Macro,说明这段数据是带有VBA代码的。 python oledump.py SSL.docm 接下来我们就需要将这段VBA代码提取出来,执行以下命令,可以看到VBA代码就被提取出来了。我们把他重定向到一个文件里即可。 python oledump.py -s A3 -v SSL.docm 这段代码其实比较简单。 1.先判断操作系统位数设置不同路径的rundll32.exe,然后通过CreateProcessA启动rundll32.exe。 2.通过VirtualAllocEx在rundll32进程里申请一段内存空间。 3.通过WriteProcessMemory将myArray数组的内容,按字节写入到刚才申请的内存空间。 4.通过CreateRemoteThread在rundll32进程创建远程线程,入口点为刚才申请的内存空间首地址,并启动该线程。 综上所述,该代码为远程注入恶意代码到其他进程,可以判断为病毒。 九、勒索病毒 勒索病毒特征 1、文件被加密成统一后缀,无法使用。 2、桌面存在勒索信息文件,或勒索信息背景。 勒索信息文件里的一串二进制字符串,实际上是加密密钥,但它被其他算法又加密了一层。 加密原理 1.常见的勒索病毒加密算法为RSA+AES。 2.勒索病毒运行时会随机生成一串AES密钥,用该密钥来加密文件,加密结束后,使用RSA公钥对AES密钥进行加密,保存在本地。 3.解密需要病毒开发者提供RSA私钥,解密本地AES密钥文件,从而得到AES密钥来解密系统数据。 所以别寄希望于逆向分析来解密 十、sysmon监控 sysmon为windows提供了更强大的监控功能,但遗憾的是sysmon只支持2008以后的系统。 sysmon安装推荐xml文件下载链接 最常用的安装方式 sysmon.exe -accepteula -i -n |
但上述方式不支持DNS记录,而且日志量会过大。 推荐安装命令,使用上述git里的配置,可支持DNS记录,并且可自行修改过滤器,记录自己需要的。 Sysmon64.exe -accepteula -i z-AlphaVersion.xml |
卸载 日志通过事件查看器查看,因为sysmon的日志是以evtx格式存储的。 具体事件路径为 应用程序和服务日志-Microsoft-Windows-Sysmon-Operational 如下图所示,或者你直接去C盘指定路径查文件也行 如同windows自带的系统日志,安全日志有事件ID一样,sysmon日志也有对应的事件ID,最新版本支持23种事件。 Event ID 1: Process creation Event ID 2: A process changed a file creation time Event ID 3: Network connection Event ID 4: Sysmon service state changed Event ID 5: Process terminated Event ID 6: Driver loaded Event ID 7: Image loaded Event ID 8: CreateRemoteThread Event ID 9: RawAccessRead Event ID 10: ProcessAccess Event ID 11: FileCreate Event ID 12: RegistryEvent (Object create and delete) Event ID 13: RegistryEvent (Value Set) Event ID 14: RegistryEvent (Key and Value Rename) Event ID 15: FileCreateStreamHash Event ID 17: PipeEvent (Pipe Created) Event ID 18: PipeEvent (Pipe Connected) Event ID 19: WmiEvent (WmiEventFilter activity detected) Event ID 20: WmiEvent (WmiEventConsumer activity detected) Event ID 21: WmiEvent (WmiEventConsumerToFilter activity detected) Event ID 22: DNSEvent (DNS query) Event ID 255: Error 案例 常用的有事件ID 1,监控进程创建,恶意进程的创建,包括他的父进程,PID,执行命令等等。 之前遇到过一起,开启会自动运行powershell,但查了启动项,任务计划,wmi都没发现痕迹,苦苦无解,然后使用sysmon监控进程创建,最终定位是谁拉起了powershell,往上溯源找到是一个伪造成正常程序图标和后缀的link文件,存放在Startup目录下,链接到存放在另一处的vbs脚本。 下图即为进程创建监控日志,可以看到几个关键点,创建的进程,命令行,以及父进程 事件ID3,监控网络连接,当恶意程序外连CC服务器或者矿池等操作的时候,可以监控到是哪个进程发起的连接。这边也举个例子,之前遇到一种病毒,当你去用进程管理器或分析工具去查看时,该病毒会自动退出,防止被检测到,并且随机一段时间重启,但态势感知上发现确实有挖矿行为,使用sysmon监控,当他不定时运行时,即可捕捉到他连接矿池的行为,从而定位到进程。 下图为网络连接监控日志,可以看到网络连接的五元组,和对应的进程。 事件ID22,是这次重磅推出的新功能,DNS查询记录,这功能让应急响应人员可以很轻松的通过域名定位到进程,并且你即使开启了dnscache服务,也能定位到原先进程。dnscache是一个缓存服务,简单来讲,就是会代理其他进程进行dns解析,并且会缓存解析结果,下一次解析就不再发送请求,读取缓存内容返回给指定程序即可。所以大家使用内存扫描工具,可能会定位到dnscache服务进程。 在监测设备上发现可疑域名解析时,通过这个功能,可以轻松定位到发起解析的进程,从而进一步分析进程文件是否确实有问题。 如下图所示,为dns查询日志,会记录解析域名和结果,以及对应的进程PID和路径。 |