首页
社区
课程
招聘
[原创]病毒分析日志2_EPROCESS断链隐藏进程
发表于: 2020-10-31 17:33 5872

[原创]病毒分析日志2_EPROCESS断链隐藏进程

2020-10-31 17:33
5872

[toc]

  #运行效果

 ##查壳

 ### 静态分析  

 ####基础动态分析

##### 动态分析


运行效果               

    拿到了样本,在虚拟机中运行了一下,结果如下


每隔一段时间就会启动浏览器,访问一个固定的网址。访问的是wormvirous这个网址,推测可能是个加载器或者后门,我们打开任务管理器发现找不到进程,恢复快照到虚拟机感染病毒之前的状态,下面开始来分析


查壳

       

无壳


静态分析

    strings查看字符串

    

这里看到了sleep函数,源程序应该调用了sleep函数睡眠一个定长时间然后唤醒,这也是为什么网页间隔一段时间弹出来的原因,DeviceIoControl可以通过设备句柄向内核驱动发送数据,CreateFileA表明创建了一个文件,CloseServiceHandle  StartServiceA CreateServiceA  OpenSCManagerA 告诉我们这个程序创建并启动了一个服务,OleUninitialize与OleInitialize表明可能调用了COM库,CoCreateInstance表明可能创建与指定的CLSID关联的类的单个未初始化对象。GetOEMCP返回操作系统的当前原始设备制造商的代码页标识符。

在C:\Windows\System32\目录下创建了virousal.sys文件,下面分析该驱动

IoGetCurrentProcess调用表明这个驱动可能修改正在运行的程序,或者需要该进程的信息。


这里我们看到了网址和驱动安装的目录


dependencewalker可以看到导入函数,我们用strings工具已经分析过了,这里可以验证一下

驱动程序



基础动态分析

   打开processexplorer运行程序,发现列表中没有forge进程,和任务浏览器一样,只有浏览器进程,说明用了进程隐藏技术,



processname过滤forge.exe,procmon一片空白

动态分析

   

    因为程序没有在WInDBG和OllyDbg的进程列表中显示,所以我们也不能附加一个调试器到进程。

   将可执行文件载入IDA



这里,从OpenSCManagerA到DeviceIoControl之间一系列的函数调用,主要是加载和发送请求到内核驱动函数,程序创建了一个叫做Process Helper的服务,它负责加载内核驱动 C:\Windows\System32\virousal.sys,然后启动了Process Helper服务,加载virousal.sys到内核并且打开了句柄\\.\ProcHelper,打开了一个由ProcHelper驱动创建的内核设备句柄继续往下看

 


这里是一个COM对象的使用,在分析strings的返回结果的时候我们就猜测到了,这里验证了我们的猜想,除此之外,还有一个对ecx+0x2c的调用,

DeviceIoControl将控制代码直接发送到指定的设备驱动程序,使相应的设备执行相应的操作,这里参数LpOutBuffer和LpInBuffer都为0,意思是这个请求没有发送任何信息到内核驱动,而且内核驱动也没有反馈任何信息,这个DeviceIoControl干嘛了呢

下面初始化了COM,调用OleInitialize和CoCreateInstance获得一个COM对象,返回的COM对象被保存在栈上的一个变量中,IDA将它标识为ppv,查看CLSID以及IID判断这个程序使用了COM的什么功能

判断会调用哪个程序,在注册表中查找这个CLSID,这个IID是IWebBrowser2,这个CLSID对应Internet Explorer

 40110f处eax被解引用ecx指向这个COM对象的基地址,40111e处,对象中偏移0x2c处的函数被调用,IWebBrowser2接口的偏移0x2c处是Navigate函数,这个函数将Internet Explorer的网址导航到wormvirous这个网址,之后会睡眠一段时间,然后循环。

将内核文件加载入IDA


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 3
支持
分享
最新回复 (4)
雪    币: 29182
活跃值: (63621)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
感谢分享!
现在读大二?
2020-11-2 10:15
0
雪    币: 2674
活跃值: (2304)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
感谢分享!
看了帖子,我觉得楼主是专业人士的概率要大些! 当然也不排除一些牛的大学生。
2020-11-2 12:39
0
雪    币: 114
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
样本有MD5吗?
2020-11-18 15:59
0
雪    币: 2674
活跃值: (2304)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
sub_10666就是主功能号为IRP_MJ_DEVICE_CONTROL的分发函数,在里面就把当前进程断链了。
根据你发上来的贴图,还看到有个sub_1062A,是DriverUnload, 它指定一个内核模块卸载函数, 难道是干完了事情想把自己卸载掉,最后还很有可能把驱动服务本身都从注册表中删除了来达到清理痕迹的目的? Rootkit的作者太狡猾了!
2020-11-23 23:37
0
游客
登录 | 注册 方可回帖
返回
//