[网络安全自学篇] 七十九.Windows PE病毒原理、分类及感染方式详解

这是做者网络安全自学教程系列,主要是关于安全工具和实践操做的在线笔记,特分享出来与博友们学习,但愿您喜欢,一块儿进步。前文分享了XSS跨站脚本攻击案例,主要内容包括XSS原理、不一样类型的XSS、XSS靶场9道题目、如何防护XSS。这篇文章将介绍Windows PE病毒, 包括PE病毒原理、分类及感染方式详解,并经过案例进行介绍。基础性文章,但愿对您有所帮助~php

做者做为网络安全的小白,分享一些自学基础教程给你们,主要是关于安全工具和实践操做的在线笔记,但愿您们喜欢。同时,更但愿您能与我一块儿操做和进步,后续将深刻学习网络安全和系统安全知识并分享相关实验。总之,但愿该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!若是文章对您有帮助,将是我创做的最大动力,点赞、评论、私聊都可,一块儿加油喔~git

PS:本文参考了《软件安全》视频、安全网站和参考文献中的文章(详见参考文献),并结合本身的经验和实践进行撰写,也推荐你们阅读参考文献。github

做者的github资源:
软件安全:https://github.com/eastmountyxz/Software-Security-Course
其余工具:https://github.com/eastmountyxz/NetworkSecuritySelf-study
XSS案例:https://github.com/eastmountyxz/XSS-Experimentweb


声明:本人坚定反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络须要咱们共同维护,更推荐你们了解它们背后的原理,更好地进行防御。正则表达式

前文学习:
[网络安全自学篇] 一.入门笔记之看雪Web安全学习及异或解密示例
[网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登陆加密入门笔记
[网络安全自学篇] 三.Burp Suite工具安装配置、Proxy基础用法及暴库示例
[网络安全自学篇] 四.实验吧CTF实战之WEB渗透和隐写术解密
[网络安全自学篇] 五.IDA Pro反汇编工具初识及逆向工程解密实战
[网络安全自学篇] 六.OllyDbg动态分析工具基础用法及Crakeme逆向
[网络安全自学篇] 七.快手视频下载之Chrome浏览器Network分析及Python爬虫探讨
[网络安全自学篇] 八.Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster工具
[网络安全自学篇] 九.社会工程学之基础概念、IP获取、IP物理定位、文件属性
[网络安全自学篇] 十.论文之基于机器学习算法的主机恶意代码
[网络安全自学篇] 十一.虚拟机VMware+Kali安装入门及Sqlmap基本用法
[网络安全自学篇] 十二.Wireshark安装入门及抓取网站用户名密码(一)
[网络安全自学篇] 十三.Wireshark抓包原理(ARP劫持、MAC泛洪)及数据流追踪和图像抓取(二)
[网络安全自学篇] 十四.Python攻防之基础常识、正则表达式、Web编程和套接字通讯(一)
[网络安全自学篇] 十五.Python攻防之多线程、C段扫描和数据库编程(二)
[网络安全自学篇] 十六.Python攻防之弱口令、自定义字典生成及网站暴库防御
[网络安全自学篇] 十七.Python攻防之构建Web目录扫描器及ip代理池(四)
[网络安全自学篇] 十八.XSS跨站脚本攻击原理及代码攻防演示(一)
[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)
[网络安全自学篇] 二十.Powershell基础入门及常见用法(二)
[网络安全自学篇] 二十一.GeekPwn极客大赛之安全攻防技术总结及ShowTime
[网络安全自学篇] 二十二.Web渗透之网站信息、域名信息、端口信息、敏感信息及指纹信息收集
[网络安全自学篇] 二十三.基于机器学习的恶意请求识别及安全领域中的机器学习
[网络安全自学篇] 二十四.基于机器学习的恶意代码识别及人工智能中的恶意代码检测
[网络安全自学篇] 二十五.Web安全学习路线及木马、病毒和防护初探
[网络安全自学篇] 二十六.Shodan搜索引擎详解及Python命令行调用
[网络安全自学篇] 二十七.Sqlmap基础用法、CTF实战及请求参数设置(一)
[网络安全自学篇] 二十八.文件上传漏洞和Caidao入门及防护原理(一)
[网络安全自学篇] 二十九.文件上传漏洞和IIS6.0解析漏洞及防护原理(二)
[网络安全自学篇] 三十.文件上传漏洞、编辑器漏洞和IIS高版本漏洞及防护(三)
[网络安全自学篇] 三十一.文件上传漏洞之Upload-labs靶场及CTF题目01-10(四)
[网络安全自学篇] 三十二.文件上传漏洞之Upload-labs靶场及CTF题目11-20(五)
[网络安全自学篇] 三十三.文件上传漏洞之绕狗一句话原理和绕过安全狗(六)
[网络安全自学篇] 三十四.Windows系统漏洞之5次Shift漏洞启动计算机
[网络安全自学篇] 三十五.恶意代码攻击溯源及恶意样本分析
[网络安全自学篇] 三十六.WinRAR漏洞复现(CVE-2018-20250)及恶意软件自启动劫持
[网络安全自学篇] 三十七.Web渗透提升班之hack the box在线靶场注册及入门知识(一)
[网络安全自学篇] 三十八.hack the box渗透之BurpSuite和Hydra密码爆破及Python加密Post请求(二)
[网络安全自学篇] 三十九.hack the box渗透之DirBuster扫描路径及Sqlmap高级注入用法(三)
[网络安全自学篇] 四十.phpMyAdmin 4.8.1后台文件包含漏洞复现及详解(CVE-2018-12613)
[网络安全自学篇] 四十一.中间人攻击和ARP欺骗原理详解及漏洞还原
[网络安全自学篇] 四十二.DNS欺骗和钓鱼网站原理详解及漏洞还原
[网络安全自学篇] 四十三.木马原理详解、远程服务器IPC$漏洞及木马植入实验
[网络安全自学篇] 四十四.Windows远程桌面服务漏洞(CVE-2019-0708)复现及详解
[网络安全自学篇] 四十五.病毒详解及批处理病毒制做(自启动、修改密码、定时关机、蓝屏、进程关闭)
[网络安全自学篇] 四十六.微软证书漏洞CVE-2020-0601 (上)Windows验证机制及可执行文件签名复现
[网络安全自学篇] 四十七.微软证书漏洞CVE-2020-0601 (下)Windows证书签名及HTTPS网站劫持
[网络安全自学篇] 四十八.Cracer第八期——(1)安全术语、Web渗透流程、Windows基础、注册表及黑客经常使用DOS命令
[网络安全自学篇] 四十九.Procmon软件基本用法及文件进程、注册表查看
[网络安全自学篇] 五十.虚拟机基础之安装XP系统、文件共享、网络快照设置及Wireshark抓取BBS密码
[网络安全自学篇] 五十一.恶意样本分析及HGZ木马控制目标服务器
[网络安全自学篇] 五十二.Windows漏洞利用之栈溢出原理和栈保护GS机制
[网络安全自学篇] 五十三.Windows漏洞利用之Metasploit实现栈溢出攻击及反弹shell
[网络安全自学篇] 五十四.Windows漏洞利用之基于SEH异常处理机制的栈溢出攻击及shell提取
[网络安全自学篇] 五十五.Windows漏洞利用之构建ROP链绕过DEP并获取Shell
[网络安全自学篇] 五十六.i春秋老师分享小白渗透之路及Web渗透技术总结
[网络安全自学篇] 五十七.PE文件逆向之什么是数字签名及Signtool签名工具详解(一)
[网络安全自学篇] 五十八.Windows漏洞利用之再看CVE-2019-0708及Metasploit反弹shell
[网络安全自学篇] 五十九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及shell深度提权
[网络安全自学篇] 六十.Cracer第八期——(2)五万字总结Linux基础知识和经常使用渗透命令
[网络安全自学篇] 六十一.PE文件逆向之数字签名详细解析及Signcode、PEView、010Editor、Asn1View等工具用法(二)
[网络安全自学篇] 六十二.PE文件逆向之PE文件解析、PE编辑工具使用和PE结构修改(三)
[网络安全自学篇] 六十三.hack the box渗透之OpenAdmin题目及蚁剑管理员提权(四)
[网络安全自学篇] 六十四.Windows漏洞利用之SMBv3服务远程代码执行漏洞(CVE-2020-0796)复现及详解
[网络安全自学篇] 六十五.Vulnhub靶机渗透之环境搭建及JIS-CTF入门和蚁剑提权示例(一)
[网络安全自学篇] 六十六.Vulnhub靶机渗透之DC-1提权和Drupal漏洞利用(二)
[网络安全自学篇] 六十七.WannaCry勒索病毒复现及分析(一)Python利用永恒之蓝及Win7勒索加密
[网络安全自学篇] 六十八.WannaCry勒索病毒复现及分析(二)MS17-010利用及病毒解析
[网络安全自学篇] 六十九.宏病毒之入门基础、防护措施、自发邮件及APT28样本分析
[网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向
[网络安全自学篇] 七十一.深信服分享以外部威胁防御和勒索病毒对抗
[网络安全自学篇] 七十二.逆向分析之OllyDbg动态调试工具(一)基础入门及TraceMe案例分析
[网络安全自学篇] 七十三.WannaCry勒索病毒复现及分析(四)蠕虫传播机制全网源码详细解读
[网络安全自学篇] 七十四.APT攻击检测溯源与常见APT组织的攻击案例
[网络安全自学篇] 七十五.Vulnhub靶机渗透之bulldog信息收集和nc反弹shell(三)
[网络安全自学篇] 七十六.逆向分析之OllyDbg动态调试工具(二)INT3断点、反调试、硬件断点与内存断点
[网络安全自学篇] 七十七.恶意代码与APT攻击中的武器(强推Seak老师)
[网络安全自学篇] 七十八.XSS跨站脚本攻击案例分享及总结(二)算法


前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
[渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
[渗透&攻防] 三.数据库之差别备份及Caidao利器
[渗透&攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包shell



一.PE病毒概念

什么是PE病毒?
PE病毒是以Windows PE程序为载体,能寄生于PE文件或Windows系统的病毒程序。数据库

PE病毒数量很是之多,包括早起的CIH病毒,全球第一个能够破坏计算机硬件的病毒,它会破坏主办的BIOS,对其数据进行擦写修改。再好比熊猫烧香、机器狗等等,其危害很是之大。编程

在这里插入图片描述


什么叫感染?
说到病毒,不得不提感染。感染是指在尽可能不影响目标程序(系统)正常功能的前提下,而使其具备病毒自身的功能。什么叫病毒自身的功能呢?一个病毒一般包括以下模块:浏览器

  • 感染模块: 被感人程序一样具有感染能力
  • 触发模块: 在特定条件下实施相应的病毒功能,好比日期、键盘输入等
  • 破坏模块
  • 其余模块

CIH病毒
CIH病毒是一种可以破坏计算机系统硬件的恶性病毒。这个病毒产自TW,原集嘉通信公司工程师陈盈豪在其于TW大同工学院念书期间制做。最先随国际两大盗版集团贩卖的盗版光盘在欧美等地普遍传播,随后进一步经过网络传播到全世界各个角落。CIH的载体是一个名为“ICQ中文Chat模块”的工具,并以热门盗版光盘游戏如“古墓奇兵”或Windows95/98为媒介,经互联网各网站互相转载,使其迅速传播。目前传播的主要途径主要经过Internet和电子邮件,固然随着时间的推移,其传播主要仍将经过软盘或光盘途径。

CIH病毒曾入榜全球十大计算机病毒之首,该病毒引发了许多重要部门的严密关注,其缘由不言而喻。若是指挥、通讯、政务等系统受到了CIH病毒的威胁甚至破坏,其后果不堪设想。


若是咱们要编写PE病毒,则须要掌握如下的关键:

  • 病毒的重定位
  • 获取API函数地址
  • 文件搜索
  • 内存映射文件
  • 病毒如何感染其余文件
  • 病毒如何返回到Host程序


二.PE病毒的分类

以感染目标进行分类,包括:

(1) 文件感染
将代码寄生在PE文件,病毒自己只是PE文件的一部分,依赖于感染目标,一般也叫HOST文件,控制权得到也是以目标程序运行来得到的。分为:

  • 传统感染型:以Win32汇编程序编写为主
  • 捆绑释放型:编写难度较低,经过高级语言都可编写,将目标程序和病毒程序捆在一块儿,和捆绑器有类似之处

(2) 系统感染
将代码或程序寄生在Windows操做系统,该类病毒愈来愈多,它不感染具体文件,可是它会在操做系统中保存本身的实体。同时也能够经过系统启动的方法来获取控制权。传播途径包括:

  • 即时通讯软件,如QQ尾巴
  • U盘、光盘
  • 电子邮件
  • 网络共享
  • 其余途径


三.传统文件感染型

1.感染思路

做者前面详细分析了PE文件格式,参考文章:

当咱们了解PE文件格式以后,要了解PE文件感染型病毒就很是容易了。以下图所示,左边是一个正常的PE文件,右边是PE病毒感染该程序时的修改,能够看到病毒代码在最后面,一般它是一种新节的形式。咱们知道PE文件是由多个节组成的,病毒代码为了融入目标程序会以节的形式,同时修改PE文件头。

在这里插入图片描述

对感染来讲,它一方面须要使得对方具有本身的功能,另外一方面也不破坏对方程序的功能。因此病毒代码执行完毕以后,它必需要将控制权交给原始程序,从而防止病毒被发现。

  • 优势: 被感染后的程序主题依然是目标程序,不影响目标程序图标,隐蔽性稍好
  • 缺点: 对病毒代码的编写要求较高,一般是汇编语言编写,难以成功感染自校验程序


2.PE病毒典型案例

下面是演示代码,感染本目录下的test.ext文件,它没有破坏性,tset.exe被感染后,首先执行病毒代码,而后执行自身代码。以下图所示,存在四个文件。其中main.exe是PE病毒程序,它会感染当前目录下名为“test.exe”的文件。这里仅是测试PE病毒感染代码,没有破坏功能。

  • calc.exe:计算器
  • notepad.exe:记事本
  • test.exe:测试PE文件
  • main.exe:PE病毒程序

在这里插入图片描述


第一步,咱们尝试打开test.exe文件。它是一个正常的PE文件,前面的文章也分析过,它包括两个弹窗,以下图所示。

在这里插入图片描述

在这里插入图片描述


第二步,使用OD打开test.exe以下图所示,发现起始地址为0x00401000,该exe程序大小为2.50KB。

在这里插入图片描述


第三步,运行main.exe程序,它是PE病毒。注意,它会弹出以下图所示对话框,这是为了方便演示,而真实的PE病毒不会提示你信息。程序是两位大佬所写,其中一位是Hume前辈,另外一位 ^ _ ^

在这里插入图片描述

同时,若是360会查杀该病毒,添加信任便可。但当咱们在真实恶意样本分析时,必定要在虚拟机等有保护环境下进行。

在这里插入图片描述

IDA分析mian.exe以下图所示:

在这里插入图片描述


第四步,此时test.exe文件大小已经增长为6.50KB,说明其已经被恶意感染。

在这里插入图片描述

双击test.exe显示以下图所示,它会先弹出一个感染测试对话框,而后才是接下来的正常程序对话框。

在这里插入图片描述

在这里插入图片描述

用OD动态分析,发现程序入口地址是0x004042DC。说明该程序先执行PE病毒,以后才执行正常的程序,而真实的PE病毒不会只简单的弹出提示窗口,而会隐蔽的进行一些破坏或收集信息。

在这里插入图片描述


第五步,将被感染的“test.exe”重命名为“test-ok.exe”,而后将记事本修改成“test.exe”,由于咱们的代码只感染当前目录下“test”命名的文件。

在这里插入图片描述

接着运行“test-ok.exe”程序,发现打开记事本也会弹出以下图所示的对话框,接着才是记事本,说明该程序也被感染。

在这里插入图片描述

在这里插入图片描述


第六步,经过一样的方法感染计算器程序,以下图所示。

在这里插入图片描述

在这里插入图片描述

写到这里,该案例就演示完毕,这是一个传统典型的PE病毒感染示例。



3.关键技术

(1) 重定位

重定位在前面讲PE文件格式化时介绍过,尤为DLL文件常见重定位。由于DLL文件会加载到不一样的位置,若是再按照VA地址定位会出现差错,因此会出现重定位。对于病毒程序也是同样的,它有相应的代码去感染目标程序,而目标程序有不少,病毒程序写在目标程序什么位置呢?这就须要病毒代码去定位目标程序的位置,就要利用重定位技术。

  • 关键点:病毒代码目标寄生位置不固定
  • shellcode相似:一般须要注入远程系统,但这段代码在远程系统什么位置有时并不能肯定,另外远程系统的环境有时也不能准确感知,故须要使用重定位和API函数自获取技术

① 为何须要重定位呢?
下面是一段源代码(PE最小文件案例),经过mas32编译生成的目标程序。源代码很是简单,就是调用invoke,经过invoke调用MessageBox函数,包括四个参数;程序第二个语句是invoke调用退出。这里弹出对话框涉及两个字符串szCap和szMsgOK。

  • invoke MessageBox, NULL, addr szMsgOK, addr szCap, 40h+1000h
  • invoke ExitProcess, NULL

在这里插入图片描述

当该程序编译以后,反汇编结构显示以下图所示,好比Start位置,MessageBox函数包括四个参数,咱们采用PUSH压入堆栈,再CALL调用该函数。

  • push offset off_00401000
  • push offset off_00401014

图中红色圆圈显示的是PE文件代码的二进制部分,它是一个VA的地址,即RVA+ImageBase。程序在编译后,某些VA地址(如变量Var 004010xxh)就已经以二进制代码的形式固定,这就是须要重定位的缘由。

在这里插入图片描述

下图展现正常状况的ImageBase,值为400000H。好比HEX数据为“00104000”,因为高位在后面,因此对应的地址是“00 40 10 00”。

在这里插入图片描述

若是ImageBase为600000H,则代码不作重定位,PUSH压入堆栈的值为401000和401014。而此时的值什么也不是,经过数据窗口定位地址发现不存在。左下角能够看到,00601000位置才是存放的数据。因此,重定位须要将这里的40修改成60。

在这里插入图片描述

总之,若是病毒代码插入位置不固定,也会遇到相似的问题。病毒代码必须经过重定位解决相似的问题。



② 下面看看病毒代码植入HOST文件后的位置差别。
左边是病毒在感染前的VAR位置,其地址为004010xx;当这段代码插入到另外一个HOST文件后,如右图所示,变量的实际位置和预期位置出现了差别,而重定位的关键是知道这个差别是多少,后续遇到的各类变量或地址均可以经过这种差别方式校订。

  • 重定位本质:修正实际地址与预期地址的差别

在这里插入图片描述

可是根据HOST特征逐一硬编码这种方式不太可取,其繁琐且未必准确,因此采用另外一种方法,病毒代码运行过程当中自我重定位。首先它计算刚才的差别值,接着调用call delta将下一条语句开始位置压入堆栈,此时堆栈顶端存放的是pop ebp语句,它在内存汇总真实的地址;再后面是sub减法操做,ebp减去offset delta;最后当咱们须要重定位时,好比使用varl变量,重定位则为ebp+offset来消除差别,此时eax中存放varl在内存中的真实地址。

CALL语句功能:

  • 将下一条语句开始位置压入堆栈
  • JMP到目标地址执行

在这里插入图片描述



(2) API函数自获取

前面介绍了PE文件的引入函数节,它是目标程序做者编写的,当调用外部DLL中的API函数时,经过引入函数节将这种关系定义出来,系统加载时就能加载对应的DLL文件并找到相应的API函数,再将地址写入到PE文件的引入函数表中,程序运行时就直接从引入函数表中取地址进行调用,这是正常的PE文件运行过程。

但对于病毒程序来讲,它是一段代码,当它感染另一个程序时,它是否能修改目标程序的引入函数节,而使得其能够服务病毒代码呢?从原理上来讲,这是能够实现的,但很是复杂,由于要在引用函数节添加东西必定会致使其余结构的变化,须要作不少的修正工做,这也可能破坏原有功能。因此对于病毒来讲,它须要本身去获取API函数地址,而且没有引入函数节的支撑,但它又必需要使用不少API函数来实现病毒功能。

  • 关键点:须要使用的API函数,但无引入函数节支撑
  • shellcode相似:一般须要注入远程系统,但这段代码在远程系统什么位置有时并不能肯定,另外远程系统的环境有时也不能准确感知,故须要使用重定位和API函数自获取技术

① 如何获取API函数地址呢?

  • DLL文件的引出函数节
  • Kernel32.dll:核心API函数为 GetProcAddress和LoadLibraryA
  • GetProcAddress函数:包括两个参数,模块基地址和想要获取API函数名称,它将动态得到DLL函数的入口地址
  • LoadLibraryA函数:将制定的DLL动态连接库加载到内存中,返回值为DLL文件加载到内存中的基地址

② 当咱们得到GetProcAddress和LoadLibraryA地址后,想获取任何一个API函数地址均可以。那么,怎么获取这两个函数的地址呢?

  • 首先,得到kernel32.dll的模块加载基地址
    一种方法是采用硬编码(兼容性差),另外一种方法经过Kernel模块中的相应结构和特征定位
  • 其次,经过Kernel32.dll的引出目录表结构定位具体函数的函数地址

③ 接着,咱们看看获取Kernel32模块基地址的典型方法。

  • 定位Kernel32模块中任何一个地址,而后按照模块首地址特征(对齐于10000H,PE文件开始标识MZ)向低地址遍历定位PE文件头
  • Kernel32模块内的地址从何处得到?
    – 程序入口代码执行时Stack顶端存储的地址
    – SEH链末端
    – PEB相关数据结构指向了各模块地址
    – Stack特定高端地址的数据
    注意:不一样操做系统存在差异

在这里插入图片描述



(3) 目标程序遍历搜索

一般以PE文件格式的文件(如EXE、SCR、DLL等)做为感染目标,其关键点为全盘查找或者部分盘符查找,遍历算法包括递归或非递归。在对目标进行搜索时,一般调用两个API函数:

  • FindFirstFile
  • FindNextFile

搜索目标进行感染算法以下:

在这里插入图片描述



(4) 文件感染

感染的关键是病毒代码可以获得运行,经常使用方法包括:

  • 选择合适的位置放入病毒代码(已有节、新增节)
  • 将控制权交给病毒代码,如修改程序入口点AddressofEntryPoint,或者在原目标代码执行过程当中运行病毒代码(EPO技术,EntryPoint Obscuring)

同时,病毒代码执行时,程序的正常功能不能被破坏,即控制权的交换。

  • 感染时,记录原始“程序控制点位置”
  • 病毒代码执行完毕以后,返回控制权
  • 避免重复感染,感染标记

在这里插入图片描述


感染文件的基本步骤为:

  • ①判断目标文件开始的两个字节是否为“MZ”
  • ②判断PE文件标记“PE”
  • ③判断感染标记,若是已被感染过则跳出继续执行HOST程序,不然继续
  • ④得到Directory(数据目录)的个数(每一个数据目录信息占8个字节)
  • ⑤获得节表起始位置(Directory的偏移地址+数据目录占用的字节数=节表
    起始位置)
  • ⑥获得目前最后节表的末尾偏移(紧接其后用于写入一个新的病毒节)节表起
    始位置+节的个数*(每一个节表占用的字节数28H)=目前最后节表的末尾偏移
  • ⑦开始写入节表和病毒节
  • ⑧修正文件头信息


四.捆绑释放型

捆绑释放型感染实现起来比较简单,目前很大一部分病毒程序都采用这种方法。捆绑释放型感染时将目标HOST程序做为数据存储在病毒体内,当执行病毒程序时,它先执行病毒程序,而后还原并执行HOST文件,从而保证被感染的程序自己能正常运行,不会引发一些异样。

  • 熊猫烧香病毒
    左边是一个正常程序(QQ),感染以后会将病毒放在前面,正常程序放在后面,程序运行以后,病毒会拿到控制权。可是程序图标会显示前面的病毒程序,显示熊猫烧香,这也是一个明显的被感染特征。

  • 优势: 编写简单、效率高,可感染自校验程序

  • 缺点: 被感染后的程序主体是病毒程序,易被发现(程序叠加+释放执行),程序图标问题

在这里插入图片描述



五.系统感染型

系统感染型自己不对PE文件作任何感染操做,但它感染的目标是操做系统,也是一种寄生类的方式,只是寄生目标有所不一样。这类病毒一般为独立个体,不感染系统内的其余文件。

两个关键问题:

  • 如何再次得到控制权——自启动
    因为该程序不感染PE文件,它没有HOST文件,因此如何再次得到控制权是一个关键性问题,也是目标不少病毒程序设计时不得不考虑的问题。此时和操做系统自启动相关,病毒必须依赖于该机制再次得到控制权。
  • 如何传播
    可移动存储介质(U盘、移动硬盘刻录光盘等)
    网络共享
    电子邮件或其余应用


1.控制权再次获取

下面简单讲解控制权再次获取的自启动方式。首先看看操做系统启动流程:

  • BIOS --> 硬盘MBR --> 活动分区DBR --> 系统内部

整个启动流程也是控制权传递的过程,包括如今提出的可信计算,也是对控制权一步一步的校验,控制流程的数据完整性或行为的校验。对于操做系统自己,它的启动方式不少,系统内部包括:

  • 注册表中的键值
  • 系统中的特定位置
  • 配置文件
  • 特定路径的特定文件,如Explorer.exe(显示桌面)

下图展现了Autoruns软件看到Windows操做系统进行自启动的选项。若是病毒自己能很好地结合这套机制,它能够作的事情很是多,而且具备很好的隐蔽性。

在这里插入图片描述

其余启动方式:

  • 利用系统自动播放机制Autorun.inf
    好比U盘病毒或光盘病毒就是利用U盘或光盘的自动播放功能。目前,也有一些U盘插入以后,不须要你去双击这个U盘,里面的程序就会自启动。

  • 在其余可执行文件嵌入少许触发代码
    修改引入函数节启动DLL病毒文件(添加相应结构,初始化代码触发)
    在特定PE文件代码段插入触发代码等(只需定位可执行程序并运行)

  • DLL劫持:替换已有DLL文件
    不少应用程序或操做系统执行时,都会去执行DLL文件,若是病毒将自身作成一个DLL文件,同时将系统DLL文件替换。可想而知,系统启动时,它是根据文件名启动的,此时病毒DLL文件就会拿到控制权,若是拿到控制权以后再进一步装载原始DLL文件,这样系统的自己机制也不会受到影响,隐蔽性更强。该方法很是常见,甚至有一些病毒程序将反病毒软件可依赖的DLL文件替换。



2.病毒的传播方式

一切可对外交互的渠道均可传播,包括:

  • 各种存储设备(软盘、光盘、U盘、移动硬盘、智能设备)
  • 各种网络通讯方式(QQ、MSN、Email、淘宝旺旺、微信、微博等)
  • 各种网络链接方式(有线、wifi、蓝牙等)
  • 各种网络应用(迅雷、BT等)

在这里插入图片描述

邮件蠕虫愈来愈常见,其中以邮件附件的形式进行传播较多。附件中可能包含病毒包括exe文件、rar文件、pdf文件、doc文件、xls文件、jpg文件、chm文件等。下图是一个包含病毒的邮件附件,显示为一个word文档,后缀名doc,图标显示也是word。但它的真实后缀是scr(屏保),它实际上是利用了一种技术,在文件名里插入翻转字符,而后将翻转字符以后的其余字符进行了翻转,它的完整文件名应该是“5月TW行lmcod.scr”。这也是一种欺骗性很强的攻击手法。

在这里插入图片描述

再补充一个经过可移动存储设备传播的非感染式病毒,即Autorun.inf。右图显示了Autorun.inf文件,若是文件存在U盘根目录,当咱们双击这个U盘时,它就会触发对应的病毒,若是选择U盘盘符右键打开或打开资源管理器,这是进入的也是病毒程序。固然下面的演示是计算器程序。

[AutoRun]
open=mspaint.exe
shell\open=打开(&O)
shell\open\Command=calc.exe
shell\open\Default=1
shell\explore=资源管理器(&X)
shell\explore\Command=calc.exe

在这里插入图片描述

还有一类是假装的文件夹,以下图所示photo.exe文件,当Windows操做系统默认不显示“.exe”时,它就能假装成文件夹,当咱们双击以后就会运行病毒,同时能够打开某个文件夹进行隐蔽。

在这里插入图片描述

最后,补充“摆渡”知识点,这种攻击行为常常发生在一些具备特殊目的病毒程序身上。指望经过可移动的媒介来渗透一些平时不联网的电脑中,并从中获取数据,利用摆渡的方式植入病毒或木马到内网,比较典型的案例就是Stuxnet。

在这里插入图片描述

下图展现了Stuxnet震网事件的漏洞利用过程和启动方式,传统的Autorun方式很容易被禁止掉,而Stuxnet利用的是lnk漏洞(MS10-046),它会在目标U盘下放入lnk快捷方式及病毒程序(如DLL文件)。无论经过什么方式进入U盘,lnk文件会被解析从而触发漏洞,致使U盘中的病毒程序被执行。

在这里插入图片描述



六.总结

写到这里,这篇文章就介绍完毕,经过这些PE病毒原理、分类及感染方式的讲解,有利于你们去作一些拓展和思考,也体现出当下的网络形式,存在不少安全隐患,安全防护是很是必要的。

  • PE病毒概念
  • PE病毒的分类
  • 传统文件感染型
    感染思路
    PE病毒典型案例
    关键技术
  • 捆绑释放型
  • 系统感染型
    控制权再次获取
    病毒的传播方式

学安全一年,认识了不少安全大佬和朋友,但愿你们一块儿进步。这篇文章中若是存在一些不足,还请海涵。做者做为网络安全初学者的慢慢成长路吧!但愿将来能更透彻撰写相关文章。同时很是感谢参考文献中的安全大佬们的文章分享,感谢师傅、师兄师弟、师姐师妹们的教导,深知本身很菜,得努力前行。同时,今天是5月20日,没有给女神准备礼物挺愧疚的,但前两天炖的老鸭汤但愿她喜欢,也会爱她一生的。

欢迎你们讨论,是否以为这系列文章帮助到您!任何建议均可以评论告知读者,共勉。

(By:Eastmount 2020-05-20 晚上11点写于贵阳 http://blog.csdn.net/eastmount/ )