《网络攻防》实验四:恶意代码分析
《网络攻防》实验四:恶意代码分析
小生有感
安装360,到底是“伺虎在侧”还是“御虎在侧”?从目前网络主流舆论和周围同学的看法看,还是前者居多。虽然我没经历过3721支配的恐惧,但这个360的前生,确实被很多人痛骂唾弃过。有人说,现在360就是走3721的老路,从一个方便的好工具,野蛮生长,疯狂无底线,誓要完成像木马的“华丽蜕变”。以上的话,是危言耸听、杞人忧天还是警示恒言,抱歉,我看不清。但不可否认的是,二者同父,长兄既然是流氓,次子的行为举止有一丝流氓的气息似乎也是意料之中。这时候我又冒出一个问题,企业道德和产品能力到底孰重孰轻?我深知,这不是鱼和熊掌之问,毕竟企业道德和产品文化从来都不是站在对立面的,一个优秀的企业,二者应该兼得。但把问题放在360公司上,你该如何评价分析呢?催生我这个问题的导火索源于今晚刘老师在班群里发的一则分享,大意为以色列一家安全公司发现一个叫“双面间谍”的病毒,之所以取这名,是因为它可以把杀毒软件变成地地道道的病毒,在肆虐欧洲各大杀软后,在天朝这片神奇的土地上,遇到一生之敌——360.我第一次看到这个新闻的心情是为国产产品感到自豪,兴奋的我在群里分享时,却遭到同学的不屑“一个本来就是恶意软件的杀软”,不得不说该同学的“冷水”确实浇灭了我的自豪感。我突然意识到,原来360的口碑已经沦落如此不堪了么。奇虎360作为一家研发杀毒软件的公司,在欧洲战场节节败退之际,能抵御“双面间谍”,其产品能力还是有目共睹,然其企业道德文化流氓化,让同学否定它,于情于理,我稍感遗憾。进而有了一个问题“当一个人倚马可待,能力出众,却品行不好”,你该如何评价?且让你思考一会吧,让我们看看古代人的智慧。《除三害》这篇中学文言文,想必大家定不会陌生,毕竟大家都是上过9年义务教育的社会主义接班人啊!村霸周处,在老实淳朴的村民忽悠下,先拳打深林恶虎,后手刃深海蛟龙。改邪归正,一段美谈自不必多说。古人言“勿因人废言”也是告诫当权者不要因为一个人的品行去否定一个人的能力。再回到现实,“因为流氓,所以更懂流氓”放在360智斗双面间谍一事上很适用啊有木有。360可以是一把双刃剑,在面朝胸前,抵御外来的恶意代码(做过免杀的应该知道,360的云主防是最难过的),同时也面朝胸口,我们心里的隐私很有可能窥探,打包带走。因此我们要灵活运用?哦不,再这么写就是高中的辩证议论文的模样了。很可惜,在你选择这把刀之后,使刀的手就不是你了。那通篇下来,我的态度是什么,我只能说,姑且看之,姑且用之。毕竟国人的盲从心理严重,往往“破鼓万人捶,墙倒万人推”,360的黑粉中不少是为了黑而黑,或围观黑凑个热闹。我深信这事是有的,我非洗白,你若不服,我不舌辩,你别纠缠,求同存异,各自欢喜。那写这么多文字有什么现实意义呢?没意义,我手写我心罢了。以前不经意间,看过杜文超同学的一个个签——“你可以不优秀,但一定要善良。”不料,滚瓜烂熟于心。这句话一定程度上也成了我三观的基石,来!在品行与能力的天平上,给品行加一磅。后来在今日头条上受到冲击,在一则新闻报道的评论区,有句评论被最多点赞——“一个有能力的贪官胜过十个没能力的清官”,且慢,乍看有点恍惚,容我消化一下。原来,这才是民声么?百姓办事,比起官员收钱办事,更抵触官员不收钱却乱踢皮球么?写得有点多了,一言以蔽之。品行与能力不是对立的,“你可以不优秀,但一定要善良。”不能成为你不思进取的借口,“一个有能力的贪官胜过十个没能力的清官”不能成为你道德堕落的措词。人生路漫漫,能力在左,道德在右,且行且珍惜!
恶意代码综述
代码,指计算机程序代码,可以被执行完成特定功能。Each coin has two sides!人类发明的所有工具既可造福也可作孽,这完全取决于使用工具的人。
恶意代码,指没有作用却会带来危险的代码。
恶意代码的特征
恶意代码,或恶意软件具有如下共同特征:
(1)恶意的目的
(2)本身是程序
(3)通过执行发生作用
恶意代码的传播手法
恶意代码编写者一般利用三类手段传播恶意代码:软件漏洞、用户本身或这两者的混合。有些恶意代码是自启动的蠕虫和嵌入脚本,本身就是软件,这类恶意代码对人的活动没有要求。一些像特洛伊木马、电子邮件蠕虫等恶意代码,利用受害者的心理操纵他们只想能够不安全的嗲吗;还有一些是哄骗用户关闭保护措施来安装恶意代码。
恶意代码的分类
恶意代码按传播方式可以分成几类:病毒,木马,蠕虫,移动代码。
-
病毒一般都具有自我复制的功能,同时,它们还可以把自己的副本分发到其他文件、程序或电脑中去。病毒一般镶嵌在主机的程序中,当被感染文件执行操作的时候(例如:打开一个文件,运行一个程序,点击邮件的附件等),病毒就会自我繁殖。
-
特洛伊木马这类恶意代码是根据古希腊神话中的木马来命名的,它从表面上看是正常的程序,但是实际上却隐含着恶意 意图。一些木马程序会通过覆盖系统中已经存在的文件的方式存在于系统之中,同时它能以加载恶意代码动态库的方式携带恶意代码程序,还有一些木马会以一个软 件的身份出现(例如:一个可供下载的游戏,将木马捆绑在软件安装程序上),但它实际上是一个窃取密码的工具。这类应用通常在网络游戏盗号木马上。大多数木 马都可以使木马的控制者登录到被感染电脑上,并拥有绝大部分的管理员级别的控制权限。为了达到这个目的,木马一般都包括一个客户端和一个服务器端。客户端 放在木马控制者的电脑中,服务器端放置在被入侵电脑中,木马控制者通过客户端与被入侵电脑的服务器端建立远程连接。一旦连接建立,木马控制者就可以通过对 被入侵电脑发送指令来传输和修改文件。通常木马具有很强的隐敝性,会采用多种手段隐藏木马。隐藏恶意进程的痕迹,例如使恶意进程不在进程列表中显示出来 等。常见的木马有灰鸽子、彩虹桥、Poison_Ivy、守望者、上兴远控、turkojan等一些木马。
-
蠕虫是一种能在没有任何用户动作的情况下自动传染计算机的病毒变形。蠕虫不修改文件,而是常驻在内存里并复制自 己。蠕虫使用操作系统的一部分,这部分对于用户来说是自动且无形的。通常只有在它的无法控制的疯狂复制占用了系统资源使得其他的 任务缓慢甚至停滞的情况下才会发现它们。蠕虫的自我复制不像其他的病毒,它可以自动创建与它的功能完全相同的副本,并在没人干涉的情况下自动运行。蠕虫是 通过系统存在的漏洞和设置的不安全性(例如:设置共享)来进行入侵的。它的自身特性可以使它以极快的速度传输(在几秒中内从地球的一端传送到另一端)。其 中比较典型的有Blaster和SQL Slammer。
-
移动代码是能够从主机传输到客户端计算机上并执行的代码,它通常是作为病毒,蠕虫,或是特洛伊木马的一部分被传 送到客户计算机上的。另外,移动代码可以利用系统的漏洞进行入侵,例如非法的数据访问和盗取root账号。通常用于编写移动代码的工具包括Java applets,ActiveX,JavaScript,和VBScript。
恶意代码分析(我觉得高其同学总结很好,以下均为引用))
在大多数情况下,进行恶意代码分析时,我们将只有恶意代码的可执行文件本身,而这些文件并不是我们人类可读的。为了了解这些文件的意义,你需要使用各种工具和技巧,而每种只能揭露出少量的信息。所以在实战中,我们要综合使用各种工具,才能看到一个全貌。
恶意代码分析有两类基本方法:
静态分析:在没有运行恶意代码时对其进行分析的技术
动态分析:相比较静态分析而言,则需要运行恶意代码,通过其产生的行为,如对计算机中注册表、文件的更改,网络的连接等动态数据进行分析,从而确定其具体行为
本次实验使用的样本是第二次实验生成的后门20145213.exe
静态分析之特征库比对
杀毒软件一般是通过对代码与特征库中的特征码进行比对,判断这个文件是否是为恶意代码,如果是则进一步联系到病毒库中对该病毒的描述,从而确认其行为,达到分析的目的。我们可以利用上次实验中VirSCAN.org平台进行分析,结果如下:
使用PE explorer分析
在点击import
功能图标后出现了5个文件,分别是MSVCRT.dll
、KERNEL32.dll
、ADVARI32.dll
、WSOCK32.dll
、WS2_32.dll
。博主不知扩展名为.dll
的文件是什么含义,先问度娘吧
DLL是Dynamic Link Library的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL 副本的内容。
通过度娘的介绍,我目前的理解是,一个可执行文件好比一个主函数,导入的动态链接库好比调用的函数。那么我们可以知道,这个black.exe
后门程序导入了5个动态链接库。那么这些动态链接具体可以实现哪些功能呢?
1. msvcrt.dll是微软在windows操作系统中提供的C语言运行库执行文件(Microsoft C Runtime Library),其中提供了printf,malloc,strcpy等C语言库函数的具体运行实现,并且为使用C/C++(Vc)编绎的程序提供了初始化(如获取命令行参数)以及退出等功能。
2. kernel32.dll是Windows 9x/Me中非常重要的32位动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理,当Windows启动时,kernel32.dll就驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域。
3. advapi32.dll是一个高级API应用程序接口服务库的一部分,包含的函数与对象的安全性,注册表的操控以及事件日志有关。
4. wsock32.dll是Windows Sockets应用程序接口,用于支持很多Internet和网络应用程序。
5. ws2_32.dll是Windows Sockets应用程序接口, 用于支持Internet和网络应用程序。
查询文件头信息,贴上食用图
通过反汇编指令去反汇编程序,得到一个大致的程序汇编语言
使用PEiD分析
运行PEID
把要查壳的文件,拉到peid 里,
如果出现:tElock 0.98b1 -> tE! 证明就是tElock 0.98b1 -> tE! 的壳
如果出现:Microsoft Visual C++ 7.0 [Debug] 证明就是无壳 vc7.0 写的软件,当然不排除伪装壳的可能.
如果出现途中所示Nothing found *
证明就是壳特征码里没有,不知道是什么壳
至于不知道是什么壳的,则需要一定的经验判断。
使用Wireshark分析
首先是Kali监听,肉鸡点击black.exe
,产生连接.具体表现为三次握手
我们在控制机输入ls
指令,查看当前文件夹
依图可知,该文件夹共有8个文件,正好对应8个数据包
使用Dependency Walker分析
Dependency Walker可以更细致具体的分析dll文件,我们可以点开看看其模块依赖关系。
PI(Parent Import Function List View):从哪些其他文件中调用了函数。
E(Export Function List View):提供了哪些接口,让其他的程序调用。
使用Process Monito分析
打开Process Monito,开始捕获
回连成功,暂停捕获,查看分析。但数量汗牛充栋,我们需要通过添加相关信息用于过滤。
控制机输入截屏指令,再次暂停捕获,过滤,查看进程
控制机输入提权指令,再次暂停捕获,过滤,查看进程
把左上角的“Architecture”选择改为“Process Name”,“is”不变, 输入栏里填“black.exe”“add” ,然后“ok” 并启动监视即可。最后结果如下:
ProcessName进程名过滤
- PID进程号过滤
使用计划任务schtasks
根据老师的指导书,使用指令C:\schtasks /create /TN netstat /sc MINUTE /MO 5 /TR "cmd /c netstat -bn > c:\netstatlog.txt
创建计划任务netstat
指令解释:
> TN:Task Name,本例中是netstat
> SC: SChedule type,本例中是MINUTE,以分钟来计时
> MO: MOdifier
> TR: Task Run,要运行的指令是 netstat -bn,b表示显示可执行文件名,n表示以数字来显示IP和端口
(如果出现拒绝访问,请用管理员身份打开)
在C盘中创建一个netstat.bat文件,内容为
date /t >> c:\netstatlog.txt
time /t >> c:\netstatlog.txt
netstat -bn >> c:\netstatlog.txt
具体步骤就是先新建一个记事本,写入如上内容,再重名,连同扩展名一起改。出现可能不可用的提示,请放心选Yes!
打开计划任务,找到netstat
选择属性,接着选择操作,将cmd /c netstat -bn > c:\netstatlog.txt
替换为c:\netstatlog.bat
C盘会执行指令,生成netstatlog.txt
,点击打开
1.实验后回答问题
(1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。
(2)如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
首先使用PEiD对程序进行查壳脱壳处理,再使用Dependency Walker对其进行PE模块依赖性分析,脱壳后,我们可以更真实地查看PE模块的导入模块,查看PE模块的导入和导出函数,更加具体直观地分析PE模块的模块依赖性。再使用wireshark抓包或Process Monito捕获分析相关进程