一.基础问题
1.如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控?
- 使用Windows自带的
schtasks
指令设置一个计划任务,指定每隔一定时间记录主机的各种操作记录,将这些信息录入excel分析(我的分析方法见下面实践过程记录)。 - 通过
sysmon
工具,配置好想记录事件的文件,之后在事件查看器里找到相关日志文件便可以查看它们都在干什么。
2.如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
- 使用
systracer
工具,动态分析注册表修改情况,分析原因,这样做的目的,查看文件修改情况和端口情况并分析原因。 - 使用
Wireshark
进行抓包分析,查看该程序传输了哪些数据。
二.实验总结与体会
本次实验我并没有使用很多分析工具,更在意的是分析的过程,我主要用到的就是上面回答问题的4种工具,但是仅仅这四种我就google了一堆内容,主要在于恶补了注册表知识,分析恶意软件修改了哪些注册表以及为什么要修改这些注册表,schtasks很好用,导入数据到excel费了一些功夫,分析结果其实不难,我就是想看看哪些进程连网最多,以及连得最多的外部IP是什么?然后打算研究下mmc.exe以及123.125.125.86这个网址(虽然它们可能都是好人)。sysmon可以分析日志,我了解到回连获得的cmd与win7下直接运行的cmd不是一个cmd。systracer
工具让我了解到回连时要做很多工作,修改注册表,添加设备文件,下各种命令,最后复习了快忘光的wireshark。
三.实践过程记录
(一)系统运行监控
1.Windows计划任务schtasks
- 为实现每5min记录下有哪些程序在连接网络,输入以下命令:
schtasks /create /TN 20144306netstat /sc MINUTE /MO 5 /TR "cmd /c netstat -bn > c: etstatlog.txt"
解释:TN是TaskName的缩写,我们创建的计划任务名是20144306netstat;sc表示计时方式,我们以分钟计时填MINUTE;TR=Task Run,要运行的指令是 netstat -bn,b表示显示可执行文件名,n表示以数字来显示IP和端口。
- 此命令完成后,每五分钟就会监测哪些程序在使用网络,并把结果记录在netstatlog.txt文档里,但是不显示记录的时间和日期,这可能不便于我们判断,要是想显示日期和时间,我们可以通过bat批处理文件来实现。
在C盘要目录下建一个文件c: etstatlog.bat
内容为:
打开控制面板->任务计划程序,找到我们的任务20144306netstat
双击点开,找到操作,点击所有项里的属性选项:
可以对任务的参数进行修改:
找到操作选项卡,双击详细信息,修改txt为bat。
修改成功后,显示:
点击确定。
可以看到记录文件netstatlog.txt中的记录有了日期和时间:
接下来我们要做的就是等待,等记录项目够多了再进行分析。
这里我选择用excel进行分析:
如何导入数据呢?
打开Excel点击数据选项卡,在获取外部数据的方式上选择 来自文本:
选择我们之前记录连接情况的文本netstatlog.txt
选择分隔符号:
分隔符号全部选上:
列数据格式选择常规:
点击完成:
可以看到我们数据项目都按规矩在格子里躺好了就可以分析了~
我习惯用数据透视工具,先看一下那些软件联网最多:
chrome是浏览器,连网比较正常,敢问那个360tray.exe是啥???
好吧,误会它了......
mmc.exe又是啥?为什么要连网?
这里有个详细的分析:http://www.jb51.net/os/83071.html
我现在比较怀疑那个mmc.exe,观察了下它连接的外部网络都是123.125.125.86
不知道mmc.exe是不是有问题,今后注意观察一下~~
迅雷setup.exe是我的后门软件,在excel里查找发现了这个:
没错找到了我kali的ip和端口~~~~
再看看哪些外部网络连接最频繁?
又是那个123.125.125.86!!
2.Sysmon
- 明确监控目标
我比较关心的事件有:网络连接、驱动加载、远程线程创建、进程创建、访问和结束等
- 配置文件
创建配置文件20144306.txt
该配置文件包含了我上面关系的事件配置。
-
启动sysmon (注意路径)
安装sysmon:sysmon.exe -i 20144306.txt
配置文件可以修改,修改完要更新,指令为:sysmon.exe -c 20144306.txt
- 查看日志:
日志位置在 应用程序和服务日志/Microsoft/Windows/Sysmon/Operational下。
- 分析例子
比如我用kali上的merterpreter连接下我电脑win7下的后门,并执行getuid、getpid、ps等操作
再回来看事件查看器:
果然被记录在案了,再仔细看下内容:
Process accessed:
UtcTime: 2017-03-29 10:34:20.310
SourceProcessGUID: {7555061d-8b7a-58db-0000-0010e0f82e01}
SourceProcessId: 9116
SourceThreadId: 6304
SourceImage: C:UsersAdministratorDesktop迅雷setup.exe
TargetProcessGUID: {7555061d-4415-58db-0000-001077e50100}
TargetProcessId: 1072
TargetImage: C:Windowssystem32winlogon.exe
GrantedAccess: 0x1410
CallTrace: C:WindowsSYSTEM32 tdll.dll+4bf9a|C:WindowsSYSTEM32wow64.dll+14e9c|C:WindowsSYSTEM32wow64.dll+d18f|C:WindowsSYSTEM32wow64cpu.dll+2776|C:WindowsSYSTEM32wow64.dll+d286|C:WindowsSYSTEM32wow64.dll+c69e|C:WindowsSYSTEM32 tdll.dll+698ec|C:WindowsSYSTEM32 tdll.dll+2a36e|C:WindowsSysWOW64 tdll.dll+1fc42(wow64)|C:Windowssyswow64KERNELBASE.dll+f30e(wow64)|UNKNOWN(000000000073FD9D)|UNKNOWN(000000000073F9F7)|UNKNOWN(000000000073F346)|UNKNOWN(0000000000E0CE36)|UNKNOWN(0000000000E0CD50)|C:Windowssyswow64kernel32.dll+1336a(wow64)|C:WindowsSysWOW64 tdll.dll+39902(wow64)|C:WindowsSysWOW64 tdll.dll+398d5(wow64)
目标是winlogon.exe,看看winlogon是干啥的?
sysmon发现我的后门登陆了用户 ~~~
而且后门软件执行的操作有:
0x1000 PROCESS_QUERY_LIMITED_INFORMATION 受限制的进程查询信息
0x0400 PROCESS_QUERY_INFORMATION 进程查询权限,包括token,退出代码,优先级,改权限自动继承 PROCESS_QUERY_LIMITED_INFORMATION
0x0010 PROCESS_VM_READ 读取进程中的内存
再试一次:
看下事件查看器:
Process Create:
UtcTime: 2017-03-29 10:53:35.907
ProcessGuid: {7555061d-922f-58db-0000-001084f33e01}
ProcessId: 7364
Image: C:WindowsSysWOW64cmd.exe
CommandLine: C:Windowssystem32cmd.exe
CurrentDirectory: C:UsersAdministratorDesktop
User: PC-201601290000Administrator
LogonGuid: {7555061d-441d-58db-0000-00206e8e0600}
LogonId: 0x68e6e
TerminalSessionId: 1
IntegrityLevel: High
Hashes: SHA1=EE8CBF12D87C4D388F09B4F69BED2E91682920B5,MD5=AD7B9C14083B52BC532FBA5948342B98,SHA256=17F746D82695FA9B35493B41859D39D786D32B23A9D2E00F4011DEC7A02402AE,IMPHASH=CEEFB55F764020CC5C5F8F23349AB163
ParentProcessGuid: {7555061d-8b7a-58db-0000-0010e0f82e01}
ParentProcessId: 9116
ParentImage: C:UsersAdministratorDesktop迅雷setup.exe
ParentCommandLine: "C:UsersAdministratorDesktop迅雷setup.exe"
正常的cmd位置在C:Windowssystem32cmd.exe,这里为什么会出现 C:WindowsSysWOW64cmd.exe这条路径?
那为什么会运行32位的程序呢?
我的电脑上装的win7和虚拟机里的kali都是64位操作系统:
如果我开启一个正常的cmd程序,再打开任务管理器会发现有两种cmd进程在执行:
关掉win7下的cmd.exe,上面的正常映像会消失,若关掉虚拟机kali里回连的window的shell的话,下面32位版本的cmd.exe才会消失,这样我们发现kali回连获取的windows cmd程序其实是32位的。
而本次看来这一切也没有逃过sysmon的法眼。
当然也可以结合EXCEL进行数据分析
将事件查看器的日志保存为.csv格式
用Excel打开后,筛选出联网事件,也就是事件id为3的事件:
这样可以看到连网信息总数。
如果想知道都有哪些程序联网了或者连了多少ip
可以用windows下findstr命令进行筛选:
该命令将所有外部ip信息存在了sysmon.c文件下。
该命令将所有连网程序信息存在了sysmon_image.c文件下。
再按上面的方法将两个文件导入Excel中,再用数据透视表图分析即可,可以得到:
然后批量查询下ip:
(二)恶意软件分析
1.静态分析
(1)特征库比对
使用VirSCAN.org网站进行对第一次生成的不做任何伪装的后门进行分析:
点击文件行为分析:
有连网,删除注册表的行为。
2.动态分析
用SysTracer进行动态分析
为了便于分析,我抓了四种状态:
snapshot#1不做任何操作,系统自然状态
snapshot#2启动后门回连msf
snapshot#3远程在win7上建立新文件夹,修改文档
snapshot#4进行进程迁移
这些叙述清楚后,我只关心以下几个重点问题:
(1)读取、添加、删除了哪些注册表项?
(2)读取、添加、删除了哪些文件?
(3)连接了哪些外部IP,传输了什么数据?
- 比较snapshot#2与snapshot#1:
注册表:
被修改的注册表是HKEY_CLASSES_USER,其根键中记录的是当前用户的配置数据信息,用户可以利用此根键下的子键修改Windows的许多环境配置。比如系统提示声、鼠标速度、图标间距、图标大小等。
上面选中的内容“HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerUserAss
ist{75048700-EF1F-11D0-9888-006097DEACF9}Count”,我google了下https://www.experts-exchange.com/questions/21581530/Urgent-HKEY-CURRENT-USER-software-microsoft-windows-currentversion-explorer-userassist-what-is-it.html,放的内容是:
The Count keys are a couple of lesser known and rather mysterious registry keys that are used to log some of your online and offline activity. This leads one to believe that these are "spyware" keys but it's important to realize that these keys are also used by legitimate sources - both online and offline. Installing hardware, software, making system changes and even just rebooting your computer usually adds entries to the Count keys. And even online, many sites you consider trustworthy may add info to these keys when you visit them. Over time, this key can become quite inflated and not even deleting all your History, Cookies and Temp files will clear the Count entries. So even if you do not care about the logging, you may want to clear these keys occasionally as part of your disk cleanup. [Extracted from Linda's Computer Stop]
翻译来就是:count就是计数键,可能记录了一些联机和离线活动,导致人们认为是“间谍软件”(其实就是),但也可能被用于合法的操作,安装硬件软件、系统变化重启系统也会被记录在案,访问网络也会被记录。
这样解释, 后门软件修改它就很合理了。
还修改了HKEY_LOCAL_MACHINE注册表的内容,在微软的Windows操作系统中,HKEY_LOCAL_MACHINE保存了注册表里的所有与这台计算机有关的配置信息,只是一个公共配置信息单元。HKEY_LOCAL_MACHINE根键包含5个子键,分别为Hardware子键、Sam子键、Security子键、Software子键和System子键。
看看都修改了哪些子键:
software:
system:
主要就是这两个子键,具体这两个子键负责什么请阅读上面的链接,反正我已经读了。
文件:
启动了4个dll文件:wow64cpu.dll、wow64win.dll、wow64.dll、ntdll.dll
wow64cpu.dll文件,上边分析过这个wow64,64位下使用32位,wow64win.dll也是类似,而ntdll.dll是Windows系统从ring3到ring0的入口。位于Kernel32.dll和user32.dll中的所有win32 API 最终都是调用ntdll.dll中的函数实现的。ntdll.dll中的函数使用SYSENTRY进入ring0,函数的实现实体在ring0中,如果是为了获取RING0权限,需要警惕。
增加的FILE有:
添加了很多设备信息。
knowndlls,顾名思义,是指系统目录默认加载的DLL。
Sessions1BaseNamedObjects和windows访问控制有关。
还添加了对桌面的操作指令。
外部IP与数据传输:
抓得很准,心服口服,外部地址的确是192.168.163.135,端口也的确是4306
再用wireshark分析一下传输内容:
三次握手:
当我获取win7shell后执行ipconfig操作会使用dns协议:
- 比较snapshot#3与snapshot#1:
snapshot#3的操作是远程建立文件夹,添加文件。
注册表:
被修改的注册表很多,但是我看不了.....
未注册版本看不了这些功能吗?sad
文件:
添加了文件test.txt ,没错我的确用msf进行了这一步:
当时的操作有:
回看结果也对:
外部IP与数据传输:
没什么变化:外部地址是192.168.163.135,端口也的确是4306
wireshark 数据包有:
没太看懂......
- 比较snapshot#4与snapshot#1:
snapshot#4的操作是进程迁移
注册表:
修改的表项是:
HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/ComDLg32/CIDSizeMRU HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/ComDLg32/LastVisitedPidIMRU
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerComDlg32OpenSavePidlMRU
文件:
文件变化不大。
外部IP与数据传输:
增加了一个新的进程:pid 5920
后来该进程又迁移到了7920进程chrowe.exe上了。
外部网址就是我的后门操控主机,端口号也对得上。
数据包: