热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《网络攻防》实验四:恶意代码分析

《网络攻防》实验四:恶意代码分析小生有感安装360,到底是“伺虎在侧”还是“御虎在侧”?从目前网络主流舆论和周围同学的看法看,

 《网络攻防》实验四:恶意代码分析

小生有感

安装360,到底是“伺虎在侧”还是“御虎在侧”?从目前网络主流舆论和周围同学的看法看,还是前者居多。虽然我没经历过3721支配的恐惧,但这个360的前生,确实被很多人痛骂唾弃过。有人说,现在360就是走3721的老路,从一个方便的好工具,野蛮生长,疯狂无底线,誓要完成像木马的“华丽蜕变”。以上的话,是危言耸听、杞人忧天还是警示恒言,抱歉,我看不清。但不可否认的是,二者同父,长兄既然是流氓,次子的行为举止有一丝流氓的气息似乎也是意料之中。这时候我又冒出一个问题,企业道德和产品能力到底孰重孰轻?我深知,这不是鱼和熊掌之问,毕竟企业道德和产品文化从来都不是站在对立面的,一个优秀的企业,二者应该兼得。但把问题放在360公司上,你该如何评价分析呢?催生我这个问题的导火索源于今晚刘老师在班群里发的一则分享,大意为以色列一家安全公司发现一个叫“双面间谍”的病毒,之所以取这名,是因为它可以把杀毒软件变成地地道道的病毒,在肆虐欧洲各大杀软后,在天朝这片神奇的土地上,遇到一生之敌——360.我第一次看到这个新闻的心情是为国产产品感到自豪,兴奋的我在群里分享时,却遭到同学的不屑“一个本来就是恶意软件的杀软”,不得不说该同学的“冷水”确实浇灭了我的自豪感。我突然意识到,原来360的口碑已经沦落如此不堪了么。奇虎360作为一家研发杀毒软件的公司,在欧洲战场节节败退之际,能抵御“双面间谍”,其产品能力还是有目共睹,然其企业道德文化流氓化,让同学否定它,于情于理,我稍感遗憾。进而有了一个问题“当一个人倚马可待,能力出众,却品行不好”,你该如何评价?且让你思考一会吧,让我们看看古代人的智慧。《除三害》这篇中学文言文,想必大家定不会陌生,毕竟大家都是上过9年义务教育的社会主义接班人啊!村霸周处,在老实淳朴的村民忽悠下,先拳打深林恶虎,后手刃深海蛟龙。改邪归正,一段美谈自不必多说。古人言“勿因人废言”也是告诫当权者不要因为一个人的品行去否定一个人的能力。再回到现实,“因为流氓,所以更懂流氓”放在360智斗双面间谍一事上很适用啊有木有。360可以是一把双刃剑,在面朝胸前,抵御外来的恶意代码(做过免杀的应该知道,360的云主防是最难过的),同时也面朝胸口,我们心里的隐私很有可能窥探,打包带走。因此我们要灵活运用?哦不,再这么写就是高中的辩证议论文的模样了。很可惜,在你选择这把刀之后,使刀的手就不是你了。那通篇下来,我的态度是什么,我只能说,姑且看之,姑且用之。毕竟国人的盲从心理严重,往往“破鼓万人捶,墙倒万人推”,360的黑粉中不少是为了黑而黑,或围观黑凑个热闹。我深信这事是有的,我非洗白,你若不服,我不舌辩,你别纠缠,求同存异,各自欢喜。那写这么多文字有什么现实意义呢?没意义,我手写我心罢了。以前不经意间,看过杜文超同学的一个个签——“你可以不优秀,但一定要善良。”不料,滚瓜烂熟于心。这句话一定程度上也成了我三观的基石,来!在品行与能力的天平上,给品行加一磅。后来在今日头条上受到冲击,在一则新闻报道的评论区,有句评论被最多点赞——“一个有能力的贪官胜过十个没能力的清官”,且慢,乍看有点恍惚,容我消化一下。原来,这才是民声么?百姓办事,比起官员收钱办事,更抵触官员不收钱却乱踢皮球么?写得有点多了,一言以蔽之。品行与能力不是对立的,“你可以不优秀,但一定要善良。”不能成为你不思进取的借口,“一个有能力的贪官胜过十个没能力的清官”不能成为你道德堕落的措词。人生路漫漫,能力在左,道德在右,且行且珍惜!

恶意代码综述

代码,指计算机程序代码,可以被执行完成特定功能。Each coin has two sides!人类发明的所有工具既可造福也可作孽,这完全取决于使用工具的人。
恶意代码,指没有作用却会带来危险的代码。

恶意代码的特征

恶意代码,或恶意软件具有如下共同特征:
(1)恶意的目的
(2)本身是程序
(3)通过执行发生作用

恶意代码的传播手法

恶意代码编写者一般利用三类手段传播恶意代码:软件漏洞、用户本身或这两者的混合。有些恶意代码是自启动的蠕虫和嵌入脚本,本身就是软件,这类恶意代码对人的活动没有要求。一些像特洛伊木马、电子邮件蠕虫等恶意代码,利用受害者的心理操纵他们只想能够不安全的嗲吗;还有一些是哄骗用户关闭保护措施来安装恶意代码。

恶意代码的分类

恶意代码按传播方式可以分成几类:病毒,木马,蠕虫,移动代码。

  1. 病毒一般都具有自我复制的功能,同时,它们还可以把自己的副本分发到其他文件、程序或电脑中去。病毒一般镶嵌在主机的程序中,当被感染文件执行操作的时候(例如:打开一个文件,运行一个程序,点击邮件的附件等),病毒就会自我繁殖。

  2. 特洛伊木马这类恶意代码是根据古希腊神话中的木马来命名的,它从表面上看是正常的程序,但是实际上却隐含着恶意 意图。一些木马程序会通过覆盖系统中已经存在的文件的方式存在于系统之中,同时它能以加载恶意代码动态库的方式携带恶意代码程序,还有一些木马会以一个软 件的身份出现(例如:一个可供下载的游戏,将木马捆绑在软件安装程序上),但它实际上是一个窃取密码的工具。这类应用通常在网络游戏盗号木马上。大多数木 马都可以使木马的控制者登录到被感染电脑上,并拥有绝大部分的管理员级别的控制权限。为了达到这个目的,木马一般都包括一个客户端和一个服务器端。客户端 放在木马控制者的电脑中,服务器端放置在被入侵电脑中,木马控制者通过客户端与被入侵电脑的服务器端建立远程连接。一旦连接建立,木马控制者就可以通过对 被入侵电脑发送指令来传输和修改文件。通常木马具有很强的隐敝性,会采用多种手段隐藏木马。隐藏恶意进程的痕迹,例如使恶意进程不在进程列表中显示出来 等。常见的木马有灰鸽子、彩虹桥、Poison_Ivy、守望者、上兴远控、turkojan等一些木马。

  3. 蠕虫是一种能在没有任何用户动作的情况下自动传染计算机的病毒变形。蠕虫不修改文件,而是常驻在内存里并复制自 己。蠕虫使用操作系统的一部分,这部分对于用户来说是自动且无形的。通常只有在它的无法控制的疯狂复制占用了系统资源使得其他的 任务缓慢甚至停滞的情况下才会发现它们。蠕虫的自我复制不像其他的病毒,它可以自动创建与它的功能完全相同的副本,并在没人干涉的情况下自动运行。蠕虫是 通过系统存在的漏洞和设置的不安全性(例如:设置共享)来进行入侵的。它的自身特性可以使它以极快的速度传输(在几秒中内从地球的一端传送到另一端)。其 中比较典型的有Blaster和SQL Slammer。

  4. 移动代码是能够从主机传输到客户端计算机上并执行的代码,它通常是作为病毒,蠕虫,或是特洛伊木马的一部分被传 送到客户计算机上的。另外,移动代码可以利用系统的漏洞进行入侵,例如非法的数据访问和盗取root账号。通常用于编写移动代码的工具包括Java applets,ActiveX,Javascript,和Vbscript。

 恶意代码分析(我觉得高其同学总结很好,以下均为引用))

  在大多数情况下,进行恶意代码分析时,我们将只有恶意代码的可执行文件本身,而这些文件并不是我们人类可读的。为了了解这些文件的意义,你需要使用各种工具和技巧,而每种只能揭露出少量的信息。所以在实战中,我们要综合使用各种工具,才能看到一个全貌。
恶意代码分析有两类基本方法:
静态分析:在没有运行恶意代码时对其进行分析的技术
动态分析:相比较静态分析而言,则需要运行恶意代码,通过其产生的行为,如对计算机中注册表、文件的更改,网络的连接等动态数据进行分析,从而确定其具体行为
本次实验使用的样本是第二次实验生成的后门20145213.exe

 静态分析之特征库比对

杀毒软件一般是通过对代码与特征库中的特征码进行比对,判断这个文件是否是为恶意代码,如果是则进一步联系到病毒库中对该病毒的描述,从而确认其行为,达到分析的目的。我们可以利用上次实验中VirSCAN.org平台进行分析,结果如下:
898082-20170329205843592-968389779.png
898082-20170329210752967-2053571660.png
898082-20170329210800998-2003208555.png
898082-20170329210808326-1171100120.png

使用PE explorer分析

898082-20170401104932836-134881783.png
898082-20170329205637670-1330325836.png
在点击import功能图标后出现了5个文件,分别是MSVCRT.dllKERNEL32.dllADVARI32.dllWSOCK32.dllWS2_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和网络应用程序。

查询文件头信息,贴上食用图
898082-20170401124716024-1440542430.png
898082-20170329205649264-1972766249.png
通过反汇编指令去反汇编程序,得到一个大致的程序汇编语言
898082-20170329205708920-1375172898.png

使用PEiD分析

运行PEID
把要查壳的文件,拉到peid 里,
如果出现:tElock 0.98b1 -> tE! 证明就是tElock 0.98b1 -> tE! 的壳
如果出现:Microsoft Visual C++ 7.0 [Debug] 证明就是无壳 vc7.0 写的软件,当然不排除伪装壳的可能.
898082-20170329200859967-322542930.png
如果出现途中所示Nothing found *证明就是壳特征码里没有,不知道是什么壳
至于不知道是什么壳的,则需要一定的经验判断。

使用Wireshark分析

首先是Kali监听,肉鸡点击black.exe,产生连接.具体表现为三次握手
898082-20170329213340904-1502255353.png
我们在控制机输入ls指令,查看当前文件夹
898082-20170329213457545-1951710293.png
依图可知,该文件夹共有8个文件,正好对应8个数据包
898082-20170329213619858-2055308755.png

使用Dependency Walker分析

898082-20170402104651961-644452684.png
Dependency Walker可以更细致具体的分析dll文件,我们可以点开看看其模块依赖关系。
898082-20170402104314211-80455383.png
PI(Parent Import Function List View):从哪些其他文件中调用了函数。
E(Export Function List View):提供了哪些接口,让其他的程序调用。

使用Process Monito分析

打开Process Monito,开始捕获
898082-20170329221021248-1711726420.png
898082-20170402120315977-1973439685.png
回连成功,暂停捕获,查看分析。但数量汗牛充栋,我们需要通过添加相关信息用于过滤。
898082-20170402120143727-1388368490.png
控制机输入截屏指令,再次暂停捕获,过滤,查看进程
898082-20170402120514274-1485199068.png

898082-20170402120454758-718624918.png
控制机输入提权指令,再次暂停捕获,过滤,查看进程
898082-20170402120521461-569039575.png
898082-20170402120526711-992101906.png
把左上角的“Architecture”选择改为“Process Name”,“is”不变, 输入栏里填“black.exe”“add” ,然后“ok” 并启动监视即可。最后结果如下:
898082-20170402121742211-1743276725.png

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和端口

898082-20170402213211430-1896254565.png
(如果出现拒绝访问,请用管理员身份打开)
在C盘中创建一个netstat.bat文件,内容为

date /t >> c:\netstatlog.txt
time /t >> c:\netstatlog.txt
netstat -bn >> c:\netstatlog.txt

具体步骤就是先新建一个记事本,写入如上内容,再重名,连同扩展名一起改。出现可能不可用的提示,请放心选Yes!
898082-20170402213549789-165295268.png
打开计划任务,找到netstat
898082-20170402213121539-141523175.png
选择属性,接着选择操作,将cmd /c netstat -bn > c:\netstatlog.txt替换为c:\netstatlog.bat
C盘会执行指令,生成netstatlog.txt,点击打开
898082-20170402213959149-1625974820.png

1.实验后回答问题

(1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么。请设计下你想监控的操作有哪些,用什么方法来监控。

(2)如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息。
首先使用PEiD对程序进行查壳脱壳处理,再使用Dependency Walker对其进行PE模块依赖性分析,脱壳后,我们可以更真实地查看PE模块的导入模块,查看PE模块的导入和导出函数,更加具体直观地分析PE模块的模块依赖性。再使用wireshark抓包或Process Monito捕获分析相关进程

转:https://www.cnblogs.com/qiwei/p/6646886.html



推荐阅读
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • javax.mail.search.BodyTerm.matchPart()方法的使用及代码示例 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 结城浩(1963年7月出生),日本资深程序员和技术作家,居住在东京武藏野市。他开发了著名的YukiWiki软件,并在杂志上发表了大量程序入门文章和技术翻译作品。结城浩著有30多本关于编程和数学的书籍,其中许多被翻译成英文和韩文。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • C语言中全部可用的数学函数有哪些?2.longlabs(longn);求长整型数的绝对值。3.doublefabs(doublex);求实数的绝对值。4.doublefloor(d ... [详细]
  • Flutter 2.* 路由管理详解
    本文详细介绍了 Flutter 2.* 中的路由管理机制,包括路由的基本概念、MaterialPageRoute 的使用、Navigator 的操作方法、路由传值、命名路由及其注册、路由钩子等。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
author-avatar
独孤依人x_762
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有