恶意代码原理、技术与防范 课件 3-计算机病毒_第1页
恶意代码原理、技术与防范 课件 3-计算机病毒_第2页
恶意代码原理、技术与防范 课件 3-计算机病毒_第3页
恶意代码原理、技术与防范 课件 3-计算机病毒_第4页
恶意代码原理、技术与防范 课件 3-计算机病毒_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章计算机病毒引言计算机病毒是出现最早、流行最广的恶意代码类型之一。随着计算机、互联网的普及和操作系统的多样化,计算机病毒在传染机制、表现形式上都有了很大的发展。本章在介绍PE文件结构的基础上,深入剖析了Win32病毒、宏病毒和脚本型病毒等文件型病毒的原理和关键技术。计算机病毒概述Win32病毒宏病毒脚本病毒1.计算机病毒的基本概念4定义:计算机病毒是指编制或者在计算机程序中插入的破坏计算机功能或者毁坏数据,影响计算机使用,并能自我复制的一组计算机指令或者程序代码。特点:感染宿主式的自我复制花样繁多的破坏方式有宿主会破坏能感染定义1.计算机病毒的基本概念计算机病毒状态静态:是指存在于辅助存储介质中的状态,不具备破坏和表现功能;动态:处于运行状态,获得系统控制权;可激活态:病毒已被加载至内存,能够被系统的正常运行机制所执行却未执行病毒代码时的状态;激活态:系统正在执行病毒代码时,病毒处于激活态。5定义1.计算机病毒的基本概念6病毒的生命周期状态变迁图

1.计算机病毒的基本概念7计算机病毒的基本结构组成1.计算机病毒的基本概念注意:不是所有的计算机病毒均具有三个模块的功能。上述三个模块须由主控制模块调用,协同完成工作。8main(){调用引导功能模块;A:do{寻找传染对象;if(传染条件不满足)gotoA;}while(满足传染条件);调用传染功能模块;while(满足破坏条件){激活病毒程序;调用破坏功能模块;}运行宿主源程序;}1.计算机病毒的基本概念9计算机病毒的分类:按照计算机病毒攻击的设备类型分类:PC机病毒、小型机病毒、移动设备、工控设备病毒等;按照计算机病毒的链接方式:源码型病毒、二进制型病毒、解释型病毒等;计算机病毒按感染对象分类:引导型病毒;文件型病毒;引导型兼文件型病毒分类1.计算机病毒的基本概念工作机制:包括传播机制、触发机制和破坏机制传播机制又称感染机制,指计算机病毒自我复制的方法。10磁盘的引导扇区可执行文件OFFICE文档模板(宏)网页(js等脚本)其它…病毒的感染对象有哪些类型?传播机制1.计算机病毒的基本概念传播机制核心要解决病毒代码存储在宿主什么地方,并能获得控制权的问题。(a)引导型病毒的感染位置:替换MBR或DBR11MBRDBR......sec-0sec-1sec-n............Virus<446bytevirvirMBRDBR......sec-0sec-1sec-n............Virus>446bytevirheadvirpartvirhead传播机制1.计算机病毒的基本概念(b)文件型病毒脚本型病毒的感染

特点:文本编辑解释引擎翻译执行顺序执行病毒代码也是文本12virus可以写在宿主脚本的头、中、尾的任何位置(最好包含在函数中)传播机制1.计算机病毒的基本概念二进制文件的感染控制权:入口点、退出点、必经路径。形式:二进制shellcode考虑重定位,插入的代码不应导致各节的偏移13传播机制1.计算机病毒的基本概念加壳式病毒将宿主文件整体打包并作为数据的一部分(类似加壳软件),执行时病毒先执行,再将宿主脱壳后执行。14HOST程序代码头HOST程序代码病毒头病毒代码原Host(压缩)传播机制1.计算机病毒的基本概念压缩式压缩型将原Host代码段进行压缩,将自身放入减少的代码段空间,并通过修改EPO获得控制权;15HOST程序代码头HOST程序代码HOST程序头(改EPO)病毒代码压缩后的Host代码代码段可容纳病毒HOST程序头(改EPO)病毒代码+JMPxx压缩后的Host代码病毒代码2代码段太小传播机制1.计算机病毒的基本概念空洞填充型16传播机制1.计算机病毒的基本概念17无入口点式入口点模糊技术,即病毒在不修改宿主原入口点的前提下,通过在宿主代码体内某处插入跳转指令来使病毒获得控制权传播机制1.计算机病毒的基本概念18链式病毒感染时,完全不改动宿主程序本体,而是改动或利用与宿主程序的相关信息,将病毒程序与宿主程序链成一体,这种感染方式叫做链式感染。传播机制1.计算机病毒的基本概念19破坏型感染病毒感染时,对宿主程序的一部分代码,不作保留第进行覆盖写入,病毒写入处的原宿主程序代码全部丢失。传播机制1.计算机病毒的基本概念编译器和源码的感染用被病毒感染的编译器编译新的代码,生成带病毒代码的程序对象。202016,Xcode风波传播机制1.计算机病毒的基本概念触发机制利用特定条件激活病毒代码,使其由可激活态转换为激活态。触发的条件包括:指令触发日期和时间触发键盘触发开机触发磁盘访问触发和中断访问触发其它触发:OS型号、IP地址、语言、地区、特定漏洞21触发机制破坏机制攻击文件和硬盘;攻击内存;干扰系统的运行;扰乱输出设备;扰乱键盘;干扰浏览器和下载新的恶意软件;实施网络攻击和敲诈;……221.计算机病毒的基本概念破坏机制计算机病毒概述Win32病毒宏病毒脚本病毒2Win32病毒PE可执行文件是Windows系统下计算机病毒感染的主要文件类型,通常将感染PE文件的病毒称为win32病毒。2.1

PE文件格式PE文件布局基址磁盘中的文件内存中的文件2.1

PE文件格式26物理地址(Raw

Address,RA):数据在磁盘文件中的偏移;

虚拟地址(Virtual

Address,VA):数据加载到虚拟空间后的内存地址;相对虚拟地址(RelativeVirtualAddresses,RVA),数据相对于在虚拟地址的基地址的偏移量。VA=ImageBase+RVA27typedefstruct_IMAGE_DOS_HEADER{

USHORTe_magic;//魔术数字MZUSHORTe_cblp;USHORTe_cp;……LONGe_lfanew;//新EXE头部的文件地址}作用:判断文件是否为PE文件;DOSStub是为了与DOS操作系统兼容而保留的头部;2.1

PE文件格式2.1

PE文件格式28PEHeader(PE文件头):是IMAGE_NT_HEADER的简称,存放PE整个文件信息分布的重要字段,包含了许多PE装载器用到的重要字段。2.1

PE文件格式IMAGE_NT_HEADERSSTRUCTSignaturedd?//’PE\0\0’FileHeaderIMAGE_FILE_HEADER<>//文件基本信息OptionalHeaderIMAGE_OPTIONAL_HEADER32<>//文件附属信息IMAGE_NT_HEADERSENDStypedefstruct_IMAGE_FILE_HEADER{WORDMachine;//0x04,该程序要执行的环境及平台

WORDNumberOfSections;//0x06,文件中节的个数

DWORDTimeDateStamp;//0x08,文件建立的时间

DWORDPointerToSymbolTable;//0x0c,COFF符号表的偏移

DWORDNumberOfSymbols;//0x10,符号数目

WORDSizeOfOptionalHeader;//0x14,可选头的长度

WORDCharacteristics;//0x16,标志集合}IMAGE_FILE_HEADER,*PIMAGE_FILE_HEADER;2.1

PE文件格式30紧跟映像文件头后面的就是可选映像头typedefstruct_IMAGE_OPTIONAL_HEADER{//标准域:WORDMagic;//0x18,一般是0x010BBYTEMajorLinkerVersion;//0x1a,链接器的主/次版本号,

BYTEMinorLinkerVersion;//0x1b,这两个值都不可靠

DWORDSizeOfCode;//0x1c,可执行代码的长度

DWORDSizeOfInitializedData;//0x20,初始化数据的长度(数据节)DWORDSizeOfUninitializedData;//0x24,未初始化数据的长度(bss节)

DWORDAddressOfEntryPoint;//0x28,代码的入口RVA地址,程序从这开始执行

DWORDBaseOfCode;//0x2c,可执行代码起始位置,意义不大

DWORDBaseOfData;//0x30,初始化数据起始位置,意义不大

DWORDImageBase;//0x34,载入程序首选的RVA地址

DWORDSectionAlignment;//0x38,加载后节在内存中的对齐方式,0x1000

(待续)31DWORDFileAlignment;//0x3c,节在文件中的对齐方式,0x200

WORDMajorOperatingSystemVersion;//0x3e,操作系统主/次版本,WORDMinorOperatingSystemVersion;//0x40,Loader并没有用这两个值WORDMajorImageVersion;//0x42,可执行文件主/次版本WORDMinorImageVersion;//0x44WORDMajorSubsystemVersion;//0x46,子系统版本号WORDMinorSubsystemVersion;//0x48DWORDWin32VersionValue;//0x4c,Win32版本,一般是0DWORDSizeOfImage;//0x50,程序调入后占用内存大小(字节)DWORDSizeOfHeaders;//0x54,文件头的长度之和DWORDCheckSum;//0x58,校验和,DLL用WORDSubsystem;//0x5c,可执行文件的子系统WORDDllCharacteristics;//0x5e,何时DllMain被调用,一般为0DWORDSizeOfStackReserve;//0x60,初始化线程时保留的堆栈大小DWORDSizeOfStackCommit;//0x64,初始化线程时提交的堆栈大小DWORDSizeOfHeapReserve;//0x68,进程初始化时保留的堆大小DWORDSizeOfHeapCommit;//0x6c,进程初始化时提交的堆大小DWORDLoaderFlags;//0x70,装载标志,与调试相关DWORDNumberOfRvaAndSizes;//0x74,数据目录的项数,一般是16IMAGE_DATA_DIRECTORYDataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];}IMAGE_OPTIONAL_HEADER,*PIMAGE_OPTIONAL_HEADER;2.1

PE文件格式32节表是紧挨着NT映像头的一结构数组,其成员的数目由映像文件头中NumberOfSections决定#defineIMAGE_SIZEOF_SHORT_NAME8typedefstruct_IMAGE_SECTION_HEADER{UCHARName[IMAGE_SIZEOF_SHORT_NAME];//节名

union{ULONGPhysicalAddress;//OBJ文件中表示本节物理地址

ULONGVirtualSize;//对齐前节的实际字节数

}Misc;

ULONGVirtualAddress;//本节的RVA

ULONGSizeOfRawData;//本节经过文件对齐后的尺寸

ULONGPointerToRawData;//本节原始数据在文件中的位置,自装载时有用

ULONGPointerToRelocations;//OBJ文件中表示本节重定位信息的偏移

ULONGPointerToLinenumbers;//OBJ行号偏移

USHORTNumberOfRelocations;//OBJ本节需重定位的数目

USHORTNumberOfLinenumbers;//OBJ本节在行号表中的行号数目

ULONGCharacteristics;//节属性}IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;2.1

PE文件格式33代码节的属性一般是60000020H,即“可执行”、“可读”和“节中包含代码”数据节的属性一般是C0000040H,即“可读”、“可写”和“包含已初始化数据”

病毒在添加新节时,都会将新添加的节的属性设置为可读、可写、可执行2.1

PE文件格式IMAGE_IMPORT_DESCRIPTORSTRUCT{union{DWORDCharacteristics DWORDOriginalFirstThun//该RVA指向一个IMAGE_THUNK_DATA

}DWORDTimeDateStamp //时间日期记录,无意义

DWORDForwarderChain //正向连接索引

DWORD

Name //被调用dll的名字指针数组的指针

DWORDFirstThunk //该RVA指向一个IMAGE_THUNK_DATA}IMAGE_IMPORT_DESCRIPTOR34导入表格式导入表的重要性2.1

PE文件格式

_IMAGE_THUNK_DATA{

union{

DWORDForwarderString

DWORDFunction

DWORDOrdinal//序号

DWORDAddressOfData//指向IMAGE_IMPORT_BY_NAME

}}IMAGE_THUNK_DATAIMAGE_IMPORT_BY_NAME{

WORDHint//函数序号,但有的编译器不用此域

BYTEName[1]

//函数名称,以0结尾}IMAGE_IMPORT_BY_NAMEends352.1

PE文件格式36PE加载前2.1

PE文件格式37PE加载后2.2

Win32病毒Win32病毒是一段二进制代码,但与正常程序有区别:1.只有代码节,没有数据节等其它节;2.病毒附着在宿主文件,附着的位置不确定;3.病毒功能需要的API宿主程序的导入表并不提供;38病毒代码入口重定位查找Kernel32基地址获取API函数地址搜索文件读写操作文件操作是否成功读取文件PE头信息是否已经被感染修改PE节感染Host,设置新入口点,并在病毒结束处指向原入口点判断发作条件是否符合发作条件转到Host程序执行正常程序操作成功否是否是不成功进行破坏或窃听潜伏并监听怎么办?原理2.2

Win32病毒重定位问题病毒的寄生性决定了病毒只能作为一段代码寄生在PE文件中,而不是一个完整的可执行文件。病毒中所有的数据和代码都必须融合在代码段完成;39重定位bvsegment;定义段

assumecs:bv,ds:bv,es:bv;声明段与寄存器的结合start:

oint13_ipdw?;定义双字

oint13_csdw?

;定义双字……2.2

Win32病毒40callvstartvstart:popebx…var1:db10dup(0)leaeax,[ebx+(offsetvar1-offsetvstart)]//eax中存放着var1在内存中的真实地址感染不同的宿主对象后病毒代码所在内存位置不同,执行时对地址的调用如何解决?重定位找一个相对稳定的位置2.2

Win32病毒API函数的问题宿主程序并不保证提供病毒代码实现功能的API函数。41解决方案:(1)在宿主程序的内存空间中搜索需要的API(2)动态获得API函数的地址调用API2.2

Win32病毒(1)在宿主程序的内存空间中搜索需要的API条件:适合宿主程序的内存空间已经加载了所需API的动态链接库,不具有普适性;方法:找到所在DLL的基址,再根据其导出表找到所需API的地址;调用API2.2

Win32病毒typedefstruct_IMAGE_EXPORT_DIRECTORY{

//导出表结构 DWORDCharacteristics;//保留 DWORDTimeDateStamp;//时间戳

WORDMajorVersion;//

WORDMinorVersion;//

DWORDName;//指向模块名称的RVA DWORDBase;//导出表用于导出函数序号基数

DWORDNumberOfFunctions;//导出函数成员个数

DWORDNumberOfNames;//导出函数名称表成员个数

DWORDAddressOfFunctions;//导出函数址表RAV DWORDAddressOfNames;//函数名称表RAV DWORDAddressOfNameOrdinals;//导出函数序号表}IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;调用API2.2

Win32病毒(2)动态获取API函数地址(普适性)获取Kernel32.dll的基地址;获得LoadLibrary和GetProcAddress函数地址调用API2.2

Win32病毒46mov

edx,

[esp].Next:dec

edxXordx,

dx

;减去跨度,或andedx,0xFFFF0000

cmp

word

[edx],

’ZM’

jz

.IsPe

jmp

.Next

.IsPe:

mov

eax,

[edx+3ch]

cmp

word

[eax+edx],

‘EP'

jnz

.Next

xchg

eax,

edx

eax

=

kernel32

基地址获得KERNEL32的基地址方法利用HOST程序入口点的返回地址,在其附近搜索KERNEL32模块基地址(适合入口点病毒)。调用API2.2

Win32病毒47通过PEB(ProcessEnviromentBlock)获取PEB基本结构基本原理:NT内核系统中FS寄存器指向TEB,TEB+0X30处指向PEB结构,PEB+0X0C处指向PEB_LDR_DATA结构,PEB_LDR_DATA+0X14处存放一些DLL地址,其中第一个为NTDLL.DLL,第二个为KERNEL32.DLL调用API2.2

Win32病毒48

__asm{ pusheax mov eax,fs:[30h]//获得PEB指针 mov eax,[eax+0ch]//获得PEB_LDR_DATA结构

mov eax,[eax+14h]//PEB->Ldr.InInitializationOrderModuleList.Flink mov eax,[eax]//eax,现在是ntdll.dll

moveax,[eax]//现在是kernel32.dll

mov eax,[eax+10h] //得到Kernel32.dll的BaseAddress

movret,eax popeax }基于PEB结构获得基地址的代码实例调用API2.2

Win32病毒通过SEH获取异常处理链表的顶端节点默认情况下会放置Kernel32.UnhaldledExceptionFilter函数。因此,可以通过遍历异常处理链表来找到它的未处理异常回调函数的地址,通过该地址向低地址寻找PE文件的DOS头标志.49EXCEPTION_REGISTRATIONTEB(fs:[0])回调函数1的地址下一个回调函数2的地址下一个Toplevel函数的地址0xFFFFFFFF…调用API2.2

Win32病毒常见感染方法:新加代码节,修改入口点主要的工作:增加一个节表项;向节表增加一个新段(病毒代码);//注意对齐调整文件映像尺寸,节表数(即SizeofImage/NumberofSections)以及节的属性。50文件修改病毒写到哪个位置不会影响原功能?2.2

Win32病毒病毒对文件头的修改修改映像文件头中节表数目NumberOfSections;新增节表SectionTable;修改入口点AddressOfEntryPoint;修改内存映像大小SizeOfImage(内存中整个PE映像尺寸=原SizeOfImage+病毒节经过内存节对齐后的大小);写入感染标记。51注意:为了将控制权转回宿主程序,病毒代码中需要一个变量用于存放原来的入口点!文件修改计算机病毒概述Win32病毒宏病毒脚本病毒3宏病毒什么是宏?宏(macro)是一种批量处理的称谓,是指把常用的动作写成类似批处理命令的多行代码的集合。适合所有文档操作,通常是将重复操作设置为宏;创建或录制;宏的类型自建宏:只对本文档有效的宏,如FileSave、FilePrint等;自动宏:对于所有文档都有效的,如AutoExit、AutoOpen、AutoClose、AutoNew等;自定义宏:用户自己建立或录制。53概念3宏病毒54SubHelloVBA()DimNormProjMsgBox"HelloWold!这是我的第一个VBA宏!",vbOKOnly,"宏测试"SetNormProj=NormalTemplate.VBProjectMsgBoxNormProj.Name,vbOKOnly,"模板文件名"'显示模板文件名

WithAssistant.NewBalloon'调出助手

.Icon=msoIconAlert.Animation=msoAnimationGetArtsy.Heading="请注意!".Text="助手在此!".ShowEndWithEndSubOffice软件的宏主要采用VBA语言编写。概念3宏病毒定义使用宏语言编写的程序,附着在文字处理的文档、表格、数据库、演示文档等数据文件中,由数据处理软件运行,利用宏语言的功能将自己复制、繁殖到其他数据文档中。寄生性:宏程序可以附着在一个文档文件上;传染性:宏程序可以随着文档文件的复制传播;破坏性:宏程序不需要用户的干预而自动执行相应功能。55概念3宏病毒宏病毒同样需要解决如下问题:如何获得控制权?充分利用自动宏和内建宏的事件触发机制如何传播?如何保护?56工作原理3宏病毒利用文档模板共享的特性,先感染模板,再由染毒模板向干净文档的复制;57宏病毒如何传播?工作原理有毒文档打开,激自动宏活写入干净模板Normal.dot有毒模板打开新文档,激活自动宏写入干净文档

有毒文档3宏病毒宏病毒的自我保护58OnErrorResumeNext'如果发生错误,不弹出出错窗口,继续执行下面语句Application.DisplayAlert=wdAlertsNoe'不弹出警告窗口Application.EnableCancelKey=wdCancelDisabled'不允许通过ESC键结束正在运行的宏Application.DisplayStatusBar=False'不显示状态栏,避免显示宏的运行状态Application.ScreenUpdating=False'不让刷新屏幕,避免病毒运行引起刷新速度变慢Option.VirusProtection=False'关闭病毒保护功能,运行前如果包含宏,不提示Option.SaveNormalPrompt=False'如果公用模板被修改,不给用户提示窗口而直接保存工作原理计算机病毒概述Win32病毒宏病毒脚本病毒4脚本病毒脚本语言脚本语言前身是批处理文件,后通过优化、扩充形成脚本编程语言。VBScript既是客户端脚本语言,也是服务器端脚本语言。可用于各种应用程序。JavaScript只是一种客户端脚本语言,用于各种网站浏览器上的各种操作。PowerShell是一个强类型的动态脚本语言,支持面向对象,支持调用系统API和.NET库。604脚本病毒Win32

APIWindows

Desktop

Windows

StartMenuWindows

Applications

Windows

File

SystemQuick

Lanch

Bar

Network

PrintersNetwork

Drivers

Windows

RegistryWeb

Application

WebAPICloud

Native

ApplicationMobile

Application

IoTMachine

learningWSH(Windows

Script

Host)CSript

Execution

HostWSript

Execution

HostVBScriptJScriptPowershell.NETWindows脚本架构4脚本病毒WSH(WindowsScriptingHost)WSH是一个基于32位Windows平台、并独立于语言的脚本运行环境,是脚本语言/命令的工具。在WSH脚本环境里,预定义了一些对象,通过这些内置对象,可以实现获取环境变量、创建快捷方式、加载程序、读写注册表等功能。624脚本病毒63访问文件WScript.Echo("WSH应用举例")'在D盘根目录下建立5个新文件夹dimobjdirsetobjdir=WScript.CreateObject("Scripting.filesystemobject")fork=1to5sNewFolder="d:\WSHsample"&k'给新的文件夹命名

objdir.Createfolder(sNewFolder)next'在C盘根目录创建一个文本文件testfile.txtSetRegWsh=Wscript.CreateObject("Wscript.Shell")RegWsh.Run("notepad"&WScript.ScriptFullName)Setfs=WScript.CreateObject("Scripting.FileSystemObject")Seta=fs.CreateTextFile("c:\testfile.txt",True)a.WriteLine("HelloWorld!")a.Close4脚本病毒64访问注册表DimRegWsh,sReadKey,sPrompt,sFixpromptSetRegWsh=WScript.CreateObject("WScript.Shell")RegWsh.RegWrite"HKCU\MyRegKey","一级键值"'创建一级键值sReadKey=RegWsh.RegRead("HKCU\MyRegKey")'读取(默认)键值sPrompt="(默认)键值为:"&sReadKeyMsgBox"读取的HKCU\MyRegKey下"&sPromptRegWsh.Reg

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论