giantbranch 发表于 2016-11-15 10:36

《恶意代码分析实战》Chapter 1课后静态分析实验

本帖最后由 giantbranch 于 2018-8-14 21:19 编辑

这个学习的时候是边做边写博客的,这样学习效果挺好的,推荐给大家
博客原文:http://oldblog.giantbranch.cn//url]
4个小实验做下来,发现自己确实一点点在进步

实验文件(包含脱壳后的文件)


文章备份(还是传个doc备份一下吧):


Lab1-1这个有个exe,还有个dll先去查杀一下
由于那个网站上不了(翻墙的话应该可以)http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161112/1478958980538944.png
除了上面这个多引擎查杀,还有下面的https://virusscan.jotti.org/http://www.virscan.org/https://fireeye.ijinshan.com/
不过还有PhrozenVirusTotalUploader工具,是客户端版http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161112/1478959770597158.png不过还是不行.....http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161112/1478960205373901.png算了用其他吧http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161112/1478960824167137.pnghttp://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161112/1478960841120599.pngdll的http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479019040574997.png2.什么时候编译的呢pe文件里面有这个一个字段http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161112/1478961557543366.png直接拖PE tools,点击文件头http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161112/1478961513354891.png当然用其他工具,或者手动也可以http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161112/1478961948186643.png发现结果跟上面的不一样http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161112/1478961978782886.pnghttp://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161112/1478961989557305.png那么可以确定那个工具有点问题啊
再看看dll的http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479019228359569.pnghttp://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479019235430300.png时间相差无几,应该是同属一个恶意代码包有没有被加壳呢http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161112/1478962390795718.png直接看到了vc++6.0,区段也http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161112/1478962474869967.pngdll的http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479019089854997.png
查看输入表http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161112/1478962926457177.png有两个查找当前目录文件的api,还有复制文件的(应该是复制自身到一个隐蔽的目录)http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161112/1478962972820634.png
dll的有创建进程,和睡眠http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479019303889130.png这个就有个网络通信的了http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479019325232142.png还有没有其他特征可发现呢看看里面有什么字符串是一个办法
strings的下载地址
https://technet.microsoft.com/en-us/sysinternals/bb897439.aspx
直接strings + 文件名http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161112/1478963485114584.png
我们可以看到 有个迷惑的字符串,那个l变成了1,根据前面可以猜测是将自身复制到system32那里迷惑人了http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161112/1478963601499241.png
也可看到导入函数http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161112/1478963850160689.png
看下dllhttp://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479019460529694.png有个ip地址,如果真实的病毒就不知保留地址了
总结应该是复制自身,查找文件那个api有可能是查找杀软,或者要感染的文件等
dll可能是一个后门,由exe来启动,exe有个CreateProcess的api可以dll注入什么的
Lab1-2接下来直接跟上面的步骤来重复了
http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479003462597208.png而且从上面可以大概知道加了upx壳,应该是一个含有下载功能的恶意代码
查壳看看确实如此http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479003724902421.pngupx壳,直接esp定律即可脱壳http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479003874355550.png
先看没脱壳的
一个创建服务的The CreateService function creates a service object and adds it to the specified service control manager database. http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479004009124113.png那个InternetOpen是初始化对象的(Initializes an application's use of the WinINet functions.)http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479004021340462.png
再看脱壳了的,就看得更多了http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479004239820869.pnghttp://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479004258442179.png这里就多了一个打开url的了,猜想是get参数传递?http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479004268405710.png再看看字符串直接看脱壳了的,脱壳对静态分析的影响还是挺重要的,下面就看到了那个url了,一看这个程序就是本书原作者自己写的
http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479004397232876.png当然od也可以http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479004574890981.png
怎么检测这个主机被这个恶意代码感染呢一个就是网络迹象:访问上面那个url的另一个就是创建了一个服务,通过上面的分析可知道,但是创建的服务名是什么还不知道...稍微od跟一下差多多确定是这个了名称的服务http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479004673125990.png当然ida就更加清晰了(脱壳的哦)http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479004956705468.png之后调用了401040,我们去看看http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479005030817246.png最后再创建一个线程,调用的是StartAddress函数http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479004965383838.png
Lab1-3http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479008646732642.png一上去全部报毒,这个看来很牛逼啊
查下壳,果然http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161113/1479041319562242.png见识短,这个我第一次见
这个壳,作者说暂时没法脱壳,我就是要挑战,失败了再说,基本上脱壳八法都尝试过了
查了一下,可以用模拟跟踪来脱壳http://oldblog.giantbranch.cn/?p=341#nbsphttp://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479089068884095.pnghttp://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479089052471316.png再ctrl + a就看到熟悉的结构了http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479089112846569.png向下稍微拖一下,发现了main函数http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479089175198763.png直接用od的插件脱壳吧http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479089297508537.png看看,果然脱壳了http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479089256765659.png
当然用SFX也是可以的http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479090313150108.png
既然脱了壳,那尝试继续分析咯
看看导入表,有点诡异,不认识。。。,等之后的章节再看吧,作者说18章后回来
http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479091089487494.png
http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479091121927871.png
看看字符串,有个urlhttp://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479092647747939.png也跟程序运行的效果吻合
http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479092900142314.png跟着就跳到404的页面了
用ida看看吧,其实也不太懂,大概就是通过浏览器打开那个url吧http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479093108803793.png
这里的话,可以通过这个网络特征来查,当然还可以有其他方法
Lab1-4先查杀一波http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479093783985527.png又有下载字眼
查一下,没有壳http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479093597393034.png看看编译时间http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479111483802501.png看着就有点不对劲http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479111541504650.png这是伪造的。。我也可以去修改它
http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479111583784126.png
看看导入表http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479093673457136.pnghttp://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479093707363474.png这里可以知道这个可能会执行命令,复制文件,操作一些资源文件,创建线程什么的http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479093906794226.png这里还涉及权限的东西,那个提升程序的特权(AdjustTokenPrivileges),那个lookup是查询权限,之前的打开句柄吧
网上查了查提升权限的代码段if ( !OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) ){
       TOKEN_PRIVILEGES tkp;
       LookupPrivilegeValue( NULL,SE_DEBUG_NAME,&tkp.Privileges.Luid );//修改进程权限
       tkp.PrivilegeCount=1;
       tkp.Privileges.Attributes=SE_PRIVILEGE_ENABLED;
       AdjustTokenPrivileges( hToken,FALSE,&tkp,sizeof tkp,NULL,NULL );//通知系统修改进程权限
       return( (GetLastError()==ERROR_SUCCESS) );
}
就是用这几个函数的

接下来看看字符串http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479094188967366.pnghttp://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479094132968580.png
有些个下载到文件的api,下载那个完之后的文件后,很可能伪装成系统的一些文件的名称了
没运行lab4前,我们打开那个system32的exe看看http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479112301297663.png
其实运行lab4也会打开这个页面http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479113479380258.png
先来个小总结:有网络连接为啥没有网络连接的api,但字符串中又搜索得到呢,为什么要操作资源节中的数据呢,难道资源节中有什么秘密吗

我们用resource hacker看看资源有什么http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479111905486898.png我去,里面竟然藏了一个二进制文件我们直接将他导出来
http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479112088690141.png
我们上传查下毒http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479112965311831.png
查下壳,就是一个vc++写的程序,没加壳http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479112618450991.png看下导入表http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479113019508542.png应该http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479113040155478.png这才看到下载了字符串跟刚才的重复了的,string也搜到资源节中的字符串了
那整个程序我们就可以猜想出来了:首先是从资源节提取出二进制文件,放到一个目录(可能需要提权),跟着执行提取出来的下载程序,并运行,下载程序下载一个程序后,运行下载后的程序,恩大概应该这样
我们接借助ida看看吧一开始会枚举进程
http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479113809683329.png枚举每个进程pid下面调用此函数,看看那个程序(winlogon.exe)有没有运行,http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479114210851948.pngwinlogon.exe:Windows Logon Process,Windows NT 用户登陆程序,管理用户登录和退出
跟着进入下面这里http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479114362813989.png这个是将系统目录下的\system32\wupdmgr.exe移动到临时目录的winup.exe搜一下,确实如此http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479114578279597.png
再来看,最后的4011fchttp://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479114639687976.png首先获取到路径\system32\wupdmgr.exe跟着从资源节读取数据,最终写入上面的目录跟着执行从资源节提取出来的一个二进制文件
我们用ida看看那个提取出来的文件 http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479114946780392.png
那个程序图标都变了

最后发现怎么没有权限提升呢,发现漏了http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479115188684740.png跟进,提升不成功就加载一个dll,sfc_os.dll,进行dll注入http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479115207131658.png继续跟进就可以看到经常看到的权限提升的代码了http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479115258366769.png
我们最后看看那个下载来的程序时怎么样的吧
结果发现跟从资源节解压出来的哪个二进制文件一样,访问一下那个下载的url结果已经404了http://oldblog.giantbranch.cn/wp-content/plugins/A221201583-33513//ueditor/php/upload/image/20161114/1479115548371813.png所以那个wupdmgr.exe跟资源节解压出来的一样也不奇怪了(没下载前是用那个覆盖的嘛)
好了,基本上分析完了,虽然程序简单,但是学到的东西还是很多的

giantbranch 发表于 2016-11-16 09:36

chinesewolf 发表于 2016-11-15 16:49
感兴趣,不过汇编语言是不是要很深厚点基础

不需要很深厚吧,边搞边学咯

aptsuny 发表于 2017-6-25 11:28

拜谢,阅读并实践了你的分析过程,读那本书的时候也没现在这样受益。另外阅读了你的博客,脱壳八法。感谢你。

chinesewolf 发表于 2016-11-15 16:49

感兴趣,不过汇编语言是不是要很深厚点基础

lies2014 发表于 2016-11-15 17:05

还没仔细看,不过冲着这么详细的过程记录必须加分,认真的态度总是最美的

huitailang 发表于 2016-11-16 02:10

giantbranch 发表于 2016-11-16 09:38

huitailang 发表于 2016-11-16 02:10
这个属于行为分析吗

静态的分析。。。。,也涉及一些行为吧

still1414 发表于 2016-11-16 10:21

f5还是好啊

wskill60 发表于 2016-11-16 11:35

好帖必须支持

shuixiang110 发表于 2016-11-24 14:05

楼主说的很详细。感觉相当有用。。。

GreyChroma 发表于 2016-11-24 18:37

学习下,收藏了,整理的很好,4个实验,动手操作下
页: [1] 2
查看完整版本: 《恶意代码分析实战》Chapter 1课后静态分析实验