一、病毒分类
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
tasklist /m xxx.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等工具查看指定进程内存是否确实存在指定字符串信息。
三、网络行为排查
威胁情报等辅助网站
1、 https://www.virustotal.com/ , 国外知名安全站点,可能需翻墙,可查询文件MD5、IP、域名、URL是否恶意,也可上传文件进行病毒扫描。
2、 https://x.threatbook.cn/ , 国内威胁情报站点,可查询文件MD5、IP、域名、URL是否恶意,也可上传文件进行病毒扫描。
3、 http://beian.cndns.com/,国内站点备案查询,所有有企业备案的国内站点可认为是可信站点。
4、 http://www.alexa.com/,全球站点排行查询,top100万的站点可认为是可信站点(国外站点没有备案这一说法)。
5、 Google与Baidu等搜索引擎,输入文件MD5/IP/域名,有时候可以查询到对应病毒信息。
网络连接查看命令
netstat -ano |
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点远程登录主机;
注意:有时候登录记录会十分多,分析起来难度大,因此我们可以根据前期收集到的信息来帮助我们缩小审计范围,比如异常现象发生的时间,恶意文件创建的时间等,可在这类时间点附近查找异常的登录记录。
操作系统 | 事件ID | 登录类型 | 说明 |
Xp/2003 | 528 | 10 | RDP远程登录成功 |
Xp/2003 | 529 | 10 | RDP远程登录失败 |
2008/2012/2016/win7/win8/win10 | 4624 | 10 | RDP远程登录成功 |
2008/2012/2016/win7/win8/win10 | 4625 | 10 | RDP远程登录失败 |
应用程序和服务日志 -> Microsoft -> Windows ->TerminalServices-RemoteConnectionManager->Operational,事件ID 1149为RDP登录成功日志,会记录源IP和用户。
查看本机登录过的IP:
打开注册表,打开此路径:HKCU\Software\Microsoft\Terminal ServerClient。
选中Default可以看到连接过的IP。
选中Servers -> [IP]可以查看登陆名。
2、SMB远程登录
共享目录登录记录位于windows安全日志中,登录类型为3,常见的基于共享目录的攻击行为是IPC爆破,若爆破成功,攻击者可以将受攻击主机的磁盘文件映射到本地,造成信息泄露。同时,共享目录可作为传输恶意文件的途径之一,了解共享目录的访问情况可以帮助我们了解攻击者的攻击方法。
操作系统 | 事件ID | 登录类型 | 说明 |
Xp/2003 | 540 | 3 | SMB远程登录成功 |
2008/2012/2016/win7/win8/win10 | 529 | 3 | SMB远程登录失败 |
2008/2012/2016/win7/win8/win10 | 4624 | 3 | SMB远程登录成功 |
2008/2012/2016/win7/win8/win10 | 4625 | 3 | SMB远程登录失败 |
六、启动项排查
黑客为了保持病毒能够开机启动、登录启动或者定时启动,通常会有相应的启动项,因此有必要找出异常启动项,并删除之。启动项的排查,这里引入一个非常好用的工具,工具名字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存储着所有的服务启动项
七、账户排查
查看用户最后一次登录,修改密码时间,以及账户是否启动。
net user xxx |
通过PCHunter等工具可以查看隐藏用户,如添加$符号的隐藏账号,以及克隆账号。
八、宏病毒分析处置
现象:
EDR等杀软报宏病毒,病毒名提示类似于W97M、VBA、MSWor、Macro。
分析过程:
根据文件后缀其实就能看出,该word文档是带有宏代码的,m即为macro。
为了分析脚本内容,打开文件就会触发脚本运行,但如果禁用宏的话,打开文档是看不到脚本内容的。为了以静态方式提取样本,这里会使用到一个分析程序oledump.py(https://github.com/decalage2/oledump-contrib)
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文件下载链接
https://github.com/SwiftOnSecurity/sysmon-config
最常用的安装方式
sysmon.exe -accepteula -i -n |
但上述方式不支持DNS记录,而且日志量会过大。
推荐安装命令,使用上述git里的配置,可支持DNS记录,并且可自行修改过滤器,记录自己需要的。
Sysmon64.exe -accepteula -i z-AlphaVersion.xml |
卸载
sysmon.exe -u |
日志通过事件查看器查看,因为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和路径。