CN103902895A - 僵尸网络控制协议挖掘方法和装置 - Google Patents
僵尸网络控制协议挖掘方法和装置 Download PDFInfo
- Publication number
- CN103902895A CN103902895A CN201210568194.6A CN201210568194A CN103902895A CN 103902895 A CN103902895 A CN 103902895A CN 201210568194 A CN201210568194 A CN 201210568194A CN 103902895 A CN103902895 A CN 103902895A
- Authority
- CN
- China
- Prior art keywords
- code block
- track
- botnet
- execution track
- control protocol
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种僵尸网络控制协议的挖掘方法和装置。所述方法包括以下步骤:捕捉僵尸程序的执行轨迹;对所述执行轨迹进行代码块划分;统计所述执行轨迹对每个代码块的覆盖次数,计算得到每个代码块的覆盖率;对所述代码块的覆盖次数及覆盖率分析得到第一类代码块和第二类代码块;根据所述第一类代码块和第二类代码块在执行轨迹中定位可疑区域;对所述可疑区域进行分析提取出恶意控制命令及其对应的特定程序指令;引导所述恶意控制命令所对应的程序覆盖僵尸程序,得到僵尸网络的控制协议。上述僵尸网络控制协议的挖掘方法和装置,提高了分析的准确率,分析的更全面。此外,简化执行轨迹中的指令数目,大幅减小分析所需的时间复杂度和空间复杂度。
Description
技术领域
本发明涉及计算机技术,特别是涉及一种僵尸网络控制协议挖掘方法和装置。
背景技术
随着互联网的发展,僵尸网络逐渐发展成规模庞大、功能多样的恶意网络,给当前的信息安全带来了不容忽视的威胁。其中,僵尸网络是指采用一种或多种传播手段将主机感染僵尸病毒,从而在控制者与被感染主机之间形成的可一对多控制的网络。在很多情况下,僵尸网络的控制协议和僵尸程序的高级语言形式的源代码难以得到,能够得到的仅仅是一些通过监视CPU(CentralProcessing Unit,中央处理器)的执行及其状态而捕捉到的僵尸程序执行部分命令时的二进制执行轨迹。如何利用这些执行轨迹挖掘出僵尸程序的全部命令,进而挖掘出该僵尸程序所在僵尸网络的控制协议是一个亟待解决的问题。
传统的对僵尸网络的命令和控制协议的挖掘主要包括动态分析和静态分析。动态分析的研究对象是僵尸网络的数据包,通过统计分析挖掘数据包中的特征,然后开发网络过滤工具阻断僵尸网络的通信;静态分析一般是由病毒分析员手工完成的,从僵尸网络的恶意代码样本中找出其中包含的命令与控制协议。然而传统的技术方案成本较高,需要大量的人力资源,分析的效率低,需要较长的分析时间,漏报率高。
发明内容
基于此,有必要针对传统的对僵尸网络的控制协议的挖掘中漏报率高的问题,提供一种能提高分析准确率的僵尸网络控制协议的挖掘方法。
此外,还有必要针对传统的对僵尸网络的控制协议的挖掘中漏报率高的问题,提供一种能提高分析准确率的僵尸网络控制协议的挖掘装置。
一种僵尸网络控制协议的挖掘方法,包括以下步骤:
捕捉僵尸程序的执行轨迹;
对所述执行轨迹进行代码块划分;
统计所述执行轨迹对每个代码块的覆盖次数,计算得到每个代码块的覆盖率;
对所述代码块的覆盖次数及覆盖率分析得到第一类代码块和第二类代码块,所述第一类代码块为仅被预设数量的执行轨迹中的一个覆盖的代码块,第二类代码块为代码块的覆盖率为百分百、每个执行轨迹对该代码块的覆盖次数均不同且都小于指定阈值的代码块;
根据所述第一类代码块和第二类代码块在执行轨迹中定位可疑区域;
对所述可疑区域进行分析提取出恶意控制命令及其对应的特定程序指令;
引导所述恶意控制命令所对应的程序覆盖僵尸程序,得到僵尸网络的控制协议。
一种僵尸网络控制协议的挖掘装置,包括:
捕捉模块,用于捕捉僵尸程序的执行轨迹;
划分模块,用于对所述执行轨迹进行代码块划分;
获取模块,用于统计所述执行轨迹对每个代码块的覆盖次数,计算得到每个代码块的覆盖率;
分析模块,用于对所述代码块的覆盖次数及覆盖率分析得到第一类代码块和第二类代码块,所述第一类代码块为仅被预设数量的执行轨迹中的一个覆盖的代码块,第二类代码块为代码块的覆盖率为百分百、每个执行轨迹对该代码块的覆盖次数均不同且都小于指定阈值的代码块;
定位模块,用于根据所述第一类代码块和第二类代码块在执行轨迹中定位可疑区域;
提取模块,用于对所述可疑区域进行分析提取出恶意控制命令及其对应的特定程序指令;
引导模块,用于引导所述恶意控制命令所对应的程序覆盖僵尸程序,得到僵尸网络的控制协议。
上述僵尸网络控制协议的挖掘方法和装置,对僵尸网络的执行轨迹进行划分代码块后,对代码块的覆盖率及被覆盖次数进行分析定位可疑区域,针对可疑区域进行分析提取出恶意控制命令及对应的特定程序,将提取的恶意控制命令及特定程序覆盖到僵尸程序,可分析得到僵尸程序的全部控制命令,如此提高了分析的准确率,分析的更全面。且无须高级语言形式的语义支持,能直接通过二进制执行轨迹分析,处理简单。
附图说明
图1为在一个实施例中僵尸网络控制协议的挖掘方法的流程示意图;
图2为代码块划分前执行轨迹中一组指令示例;
图3为图2中执行轨迹的一组指令进行代码块划分后的第一代码块;
图4为图2中执行轨迹的一组指令进行代码块划分后的第二个代码块;
图5为某个执行轨迹划分代码块后得到的代码块序列中的一部分;
图6为化简前的执行轨迹中的一组按序执行的指令示例;
图7为图6中指令简化后的示例;
图8为代码块覆盖次数示例;
图9为计算得到的代码块覆盖率的示例;
图10为代码块覆盖次数、覆盖率结合示例;
图11为第一类代码块示例;
图12为设置阈值r为50时筛选出来的SCB;
图13为设置阈值r为30时筛选出来的SCB;
图14为Zeus僵尸网络的僵尸程序对应的执行轨迹中定位到的可疑区域;
图15为代码块26d879a->26d879c和在它之前执行的代码示例;
图16为一个实施例中僵尸网络控制协议的挖掘装置的结构示意图;
图17为另一个实施例中僵尸网络控制协议的挖掘装置的结构示意图。
具体实施方式
下面结合具体的实施例及附图对僵尸网络控制协议的挖掘方法和装置的技术方案进行详细的描述,以使其更加清楚。
如图1所示,在一个实施例中,一种僵尸网络控制协议的挖掘方法,包括以下步骤:
步骤S102,捕捉僵尸程序的执行轨迹。
本实施例中,捕捉僵尸程序中预设数量个不同输入对应的不同二进制执行轨迹,并将二进制执行轨迹反汇编成汇编指令格式的执行轨迹。具体的,在一个全系统模拟器中运行僵尸程序,监视僵尸程序的执行过程,捕捉僵尸程序在输入为ti的情况下的二进制执行轨迹TRi(i=1,2,…,n)。然后将这n个二进制执行轨迹TRi反汇编成汇编指令格式的执行轨迹tri(i=1,2,…,n)。后续步骤中所指的“执行轨迹”均指汇编语言格式的执行轨迹,n为输入不同的执行轨迹的总个数。
例如在全系统模拟器中运行Zeus僵尸网络的僵尸程序,捕捉到10个输入不同命令时的二进制执行轨迹,然后将这10个二进制执行轨迹进行反汇编,得到10个汇编语言格式的执行轨迹。对每条指令的格式可如下:
地址:汇编指令、参与操作的寄存器或存储器中的数据污点信息。
步骤S104,对该执行轨迹进行代码块划分。
具体的,首先将汇编指令分为两类,一类是可能会直接引起程序执行过程中的执行路径或功能发生变化或指令地址发生转移的指令,即程序转移指令,如无条件转移指令(jump)、条件转移指令(jz、jnz、je、jne、jb等)、循环指令(loop、loopz、loopnz等)、过程调用指令(call)、调用返回指令(ret)、中断指令(INT等)等;另一类是非程序转移指令。
然后再以程序转移指令作为代码块的边界对执行轨迹进行代码块划分。且所有代码块中包含的指令集合的并集等于执行轨迹中包含的指令集合,任意两个代码块的交集为空。如,将执行轨迹tri(i=1,2,…,n)划分成m个代码块cb1,cb2,…,cbm,满足 且cbj∩cbk=φ其中,I(Χ)表示Χ中包含的指令的集合,Χ表示cbj或tri,m个代码块中包含的指令集合的并集等于n个执行轨迹中包含的指令集合的并集,表示任意。
图2为代码块划分前执行轨迹中一组指令,图3为图2中执行轨迹的一组指令进行代码块划分后的第一代码块、图4为图2中执行轨迹的一组指令进行代码块划分后的第二个代码块。图2中的执行轨迹中的一组指令中有两个可能会引起程序执行过程中的执行路径或功能发生变化或引起指令地址发生转移的地方,即地址为26dd3cd的jne指令和地址为26dd3e5的call指令,以这两条语句作为块的结尾,将该组指令划分为如图3和图4中所示的两个代码块。
为了简化,可用代码块的起始地址和结束地址代替代码块,图3中的代码块可表示为26dd3ca->26dd3cd,图4中的代码块可表示为26dd3d4->26dd3e5。因同一个僵尸程序在几次不同的执行过程中某一代码块在内存中的绝对地址是不同的,当它的相对地址是相同的,故可把不同执行轨迹中该代码块的地址都进行规格化,如在不同的执行轨迹中的26dd3ca和276d3ca都规格化为200d3ca,而同一执行轨迹中的地址26dd3ca和26e1468可规格化为200d3ca和2011468。通过规格化操作可得到执行轨迹的代码块序列。如图5所示为某个执行轨迹划分代码块后得到的代码块序列中的一部分。通过规格化代码块可简化计算,大幅减小分析所需的时间复杂度和空间复杂度。
在一个实施例中,在步骤S104之前,还可包括步骤:对该执行轨迹进行简化处理。
具体的,把系统空间的指令简化成用户空间对系统函数调用的信息。
在本实例中,系统空间的指令的特点是其地址为8位,而用户空间的指令地址为6位或7位。图6是化简前的执行轨迹中的一组按序执行的指令。其中,从地址为7c80aa26到地址为7c80aa3b的指令段是属于系统空间的指令。图6中指令段是一个系统函数lstrcmpiW,由于暂时无须关心其内部执行的细节,所以可以简化掉它,而仅留下一个描述信息来表示在此处调用过该系统函数。将图6中的指令简化后如图7所示,得到一行调用信息:
7c80aa26:kernel32.dll lstrcmpiW0xaa26。
其中,7c80aa26表示该系统函数的入口地址,kernel32.dll是拥有它的进程,lstrcmpiW是函数名,0xaa26表示该函数的入口地址的相对偏移。
把Zeus僵尸网络中僵尸程序的10个执行轨迹进行简化,简化之前和之后执行轨迹的文件大小对比如表1所示。
表1
执行轨迹 | 输入的恶意命令 | 简化前(MB) | 简化后(MB) | 简化比例 |
1 | user_logoff | 606.1 | 125.8 | 79.24% |
2 | user_execute | 544.3 | 122.2 | 77.55% |
3 | bot_uninstall | 670.2 | 121.3 | 81.90% |
4 | os_shutdown | 991.8 | 206 | 79.23% |
5 | os_reboot | 1331.2 | 212.5 | 84.04% |
6 | user_homepage_set | 1069.3 | 279.6 | 73.85% |
7 | fs_search_remove | 843.5 | 215.7 | 74.42% |
8 | fs_search_add | 1126.4 | 341.9 | 69.65% |
9 | fs_path_get | 926 | 204 | 77.97% |
10 | user_destroy | 1353.1 | 343.4 | 74.62% |
从表1中可以看出,大部分执行轨迹都能简化掉约70%左右,如此大幅度的简化执行轨迹中的指令数目,大幅减小分析所需的时间复杂度和空间复杂度,大大提高了分析效率。
步骤S106,统计执行轨迹对每个代码块的覆盖次数,计算得到每个代码块的覆盖率。
具体的,统计预设数量个执行轨迹对每个代码块的覆盖状态,计算覆盖代码块的执行轨迹的个数与该预设数量的比值,将该比值作为相应的代码块的覆盖率。
首先,统计每一个代码块cbj被执行轨迹tri(i=1,2,…,n)是否覆盖,且令
其中,ci[j]表示覆盖状态,1表示覆盖,0表示未覆盖。
然后,统计执行轨迹tri(i=1,2,…,n)对每一个代码块cbj的覆盖次数cti[j],令
对Zeus僵尸网络的僵尸程序的10个执行轨迹中每个执行轨迹进行单独统计,统计该执行轨迹对每个代码块的覆盖次数,如图8所示为代码块覆盖次数示例,如200d5f6->200d5fb的覆盖次数为15次。然后对比10个执行轨迹,统计这些执行轨迹中出现的不同代码块的总数,比较这些执行轨迹对每个代码块的覆盖状态,计算每一个代码块的覆盖率。如图9所示为计算得到的代码块覆盖率的示例。
为了便于分析,将计算得到的每个代码块的覆盖率和每一个执行轨迹对代码块的覆盖次数结合在一起,其格式为:
代码块cbj:cbj的覆盖率:每个执行轨迹对cbj是否覆盖:每个执行轨迹对cbj的覆盖次数。
如图10所示,为代码块覆盖次数、覆盖率结合示例。以图10中最后一行的数据为例说明各数据表示的含义。最后一行数据:
20190af->20190b1:40%:0101100001:010014938000057。
其中,20190af->20190b1表示起始地址为20190af,结束地址为20190b1的代码块;40%表示其覆盖率;0101100001表示在统计的10个执行轨迹对该代码块覆盖情况,其中每一个执行轨迹对应其中的一位,1表示覆盖了该代码块,0表示未覆盖;所以,0101100001就表示第1、6、7、9个执行轨迹(从低位即右边开始数起)覆盖了该代码块,其余的执行轨迹都没有覆盖该代码块;后面的数字0,10,0,149,38,0,0,0,0,57则具体记录了这10个执行轨迹对该代码块的覆盖的次数。
步骤S108,对代码块的覆盖次数及覆盖率分析得到第一类代码块和第二类代码块,该第一类代码块为仅被预设数量的执行轨迹中的一个覆盖的代码块,第二类代码块为代码块的覆盖率为百分百、每个执行轨迹对该代码块的覆盖次数均不同且都小于指定阈值的代码块。
对代码块覆盖率cbcj和覆盖次数cti[j]进行统计分析,首先找出仅仅被n个执行轨迹中的一个覆盖的代码块,这些代码块属于某一特定输入所对应的恶意程序部分的概率最大,记该代码块为ECB(exclusive code block),即ECB满足对于某个trk(k∈{1,2,…,n})有ck[ECB]=1,而对于其他s≠k有cs[ECB]=0。
如图11所示,为第一类代码块示例,图11中这些代码块的覆盖率是10%,即只有1个执行轨迹覆盖了代码块,该代码块就是该执行轨迹所独有的代码块,该代码块很可能就是僵尸网络的客户端收到某个特定的恶意命令后要执行的特定功能。
然后找出代码块覆盖率为100%但每个执行轨迹对该代码块的覆盖次数又均不相同且都小于某一指定阈值r的代码块,记这些代码块为SCB(specific codeblock),即SCB满足:①cbcSCB=100%;②对于有cti[SCB]≠ctj[SCB];③对于有cti[SCB]<r;其中,n为对应不同输入的不同执行轨迹的个数。
SCB满足的三个条件是根据如下情况得出:因为僵尸网络的客户端要根据服务器端发来的不同的命令执行不同的操作,那么其需要知道自己接收到的是哪个命令,故要有命令的比较操作。而命令的比较相关的代码块要满足三个条件:其一是所有的执行轨迹都要经过恶意命令比较才知道其接收的是什么命令进而执行相应的操作;其二是不同的恶意命令的比较次数不同;其三是僵尸网络的恶意命令的种类有限,所以每一个执行轨迹中命令比较的次数都会小于某个特定值。
按照三个条件,对所有的代码块进行筛选。如图12是设置阈值r为50时筛选出来的SCB。统计阈值r为50时筛选前后代码块的总数,对比结果如表2所示。
表1
筛选前代码块总数 | 筛选后代码块总数 | 筛选后占筛选前的比例 |
2091 | 10 | 0.48% |
从表2可以看出,筛选后的代码块总数仅占筛选前代码块总数的0.48%。这有助于快速地定位到可疑区域。
图13是设置阈值r为30时筛选出来的SCB。统计阈值r为30时筛选前后代码块的总数,对比如表3所示。
表2
筛选前代码块总数 | 筛选后代码块总数 | 筛选后占筛选前的比例 |
2091 | 5 | 0.24% |
步骤S110,根据第一类代码块和第二类代码块在执行轨迹中定位可疑区域。
执行轨迹中先执行第二类代码(SCB)然后紧接着执行第一类代码(ECB)的区域是跟恶意控制命令相关的代码块的可能性最大,称为可疑区域。
当可疑区域很多时,在根据步骤S110之后,还包括步骤:获取每个代码块的污点状态,将没有污点的代码块从所述可疑区域中剔除。污点是指已出现过恶意命令的代码块。
如图14所示为Zeus僵尸网络的僵尸程序对应的执行轨迹中定位到的可疑区域。
步骤S112,对可疑区域进行分析提取出恶意控制命令及其对应的特定程序指令。
具体的,对可疑区域进行分析,从中找到僵尸程序接收的命令存储的地址和该命令对应的特定程序的入口地址,结合二进制代码动态分析方法根据得到的存储地址及入口地址提取出恶意控制命令及其对应的特定程序指令。
例如对图14中的可疑区域进行分析,即代码块200879a->200879c进行分析。以该代码块的起始地址879a为标识,在执行轨迹中找到并分析该代码块和它周围的区域。其中,地址前3位是200,是因为做了规格化,在下面特定的执行轨迹中对应地址前3位是26d。
图15是代码块26d879a->26d879c和在它之前执行的代码。可以看到,首先执行代码块26d878f->26d8792,然后调用了系统函数lstrcmpiW、GetThreadLocale和CompareStringW,最后执行代码块26d879a->26d879c。这些系统函数完成的功能就是字符串的比较,而代码块26d879a->26d879c的作用就是判断字符串比较是否匹配,如果匹配则把程序转移到26d87a6。
然后,进一步分析简化前的执行轨迹中系统函数lstrcmpiW、GetThreadLocale和CompareStringW的对应指令,从中找到字符串比较的两个参数。经过分析得知,第一个参数是该执行轨迹接收到的命令字符串,放在以地址0x2a02740为起始地址的内存中,第二个参数是要与接收到的命令进行比较的字符串,放在以地址0x188f838开始的堆栈中。如果通过比较找到了匹配的恶意命令,则执行其对应的操作,其对应程序的入口地址被放在以0x26d25bc为基址、以比较次数乘以8为偏移的地址中,所以从地址0x26d25bc开始,可以取出所有恶意命令对应的特定操作的入口地址。
提取出的Zeus僵尸程序可以接收的全部恶意命令如表4所示。
表3
命令 | 比较次序 | 对应恶意程序的入口地址 |
os_shutdown | 1 | 8088 |
os_reboot | 2 | 8092 |
bot_uninstall | 3 | 809c |
bot_update | 4 | 80a6 |
bot_bc_add | 5 | 815d |
bot_bc_remove | 6 | 816f |
bot_httpinject_disable | 7 | 8181 |
bot_httpinject_enable | 8 | 818d |
fs_path_get | 9 | 8199 |
fs_search_add | 10 | 8199 |
fs_search_remove | 11 | 8199 |
user_destroy | 12 | 819c |
user_logoff | 13 | 81a6 |
user_execute | 14 | 81b0 |
user_cookies_get | 15 | 82fe |
user_cookies_remove | 16 | 8306 |
user_certs_get | 17 | 8317 |
user_certs_remove | 18 | 831c |
user_url_block | 19 | 8321 |
user_url_unblock | 20 | 832d |
user_homepage_set | 21 | 8339 |
user_ftpclients_get | 22 | 8388 |
user_emailclients_get | 23 | 83ba |
user_flashplayer_get | 24 | 83ec |
user_flashplayer_remove | 25 | 83f4 |
经过分析得知,Zeus的僵尸程序在收到恶意控制命令时,首先将该命令和表4中的命令按照表中的比较次序依次比较,当匹配的时候就停止比较,转到对应程序的入口地址处开始执行对应的操作;如果不匹配就继续比较,一直找到匹配的命令或者比较完所有命令为止。
步骤S114,引导恶意控制命令所对应的程序覆盖僵尸程序,得到僵尸网络的控制协议。
具体的,利用二进制代码动态插装技术,引导得到的恶意控制命令所对应的程序在全系统模拟器中执行,进而实现僵尸程序命令空间的全覆盖,从而挖掘出该僵尸程序所在僵尸网络的控制协议。如此即可得到Zeus僵尸网络的全部控制命令和它们对应的操作即操作行为特征,从而得到Zeus僵尸网络的控制协议。
上述僵尸网络控制协议的挖掘方法,对僵尸网络的执行轨迹进行划分代码块后,对代码块的覆盖率及被覆盖次数进行分析定位可疑区域,针对可疑区域进行分析提取出恶意控制命令及对应的特定程序,将提取的恶意控制命令及特定程序覆盖到僵尸程序,可分析得到僵尸程序的全部控制命令,如此提高了分析的准确率,分析的更全面。且无须高级语言形式的语义支持,能直接通过二进制执行轨迹分析,处理简单。
如图16所示,在一个实施例中,一种僵尸网络控制协议的挖掘装置,包括捕捉模块102、划分模块104、获取模块106、分析模块108、定位模块110、提取模块112和引导模块114。其中:
捕捉模块102用于捕捉僵尸程序的执行轨迹。
本实施例中,捕捉僵尸程序中预设数量个不同输入对应的不同二进制执行轨迹,并将二进制执行轨迹反汇编成汇编指令格式的执行轨迹。具体的,在一个全系统模拟器中运行僵尸程序,监视僵尸程序的执行过程,捕捉僵尸程序在输入为ti的情况下的二进制执行轨迹TRi(i=1,2,…,n)。然后将这n个二进制执行轨迹TRi反汇编成汇编指令格式的执行轨迹tri(i=1,2,…,n)。后续步骤中所指的“执行轨迹”均指汇编语言格式的执行轨迹,n为输入不同的执行轨迹的总个数。
例如在全系统模拟器中运行Zeus僵尸网络的僵尸程序,捕捉到10个输入不同命令时的二进制执行轨迹,然后将这10个二进制执行轨迹进行反汇编,得到10个汇编语言格式的执行轨迹。对每条指令的格式可如下:
地址:汇编指令、参与操作的寄存器或存储器中的数据污点信息。
划分模块104用于对所述执行轨迹进行代码块划分。
具体的,首先将汇编指令分为两类,一类是可能会直接引起程序执行过程中的执行路径或功能发生变化或指令地址发生转移的指令,即程序转移指令,如无条件转移指令(jump)、条件转移指令(jz、jnz、je、jne、jb等)、循环指令(loop、loopz、loopnz等)、过程调用指令(call)、调用返回指令(ret)、中断指令(INT等)等;另一类是非程序转移指令。
然后划分模块104以程序转移指令作为代码块的边界对执行轨迹进行代码块划分。且所有代码块中包含的指令集合的并集等于执行轨迹中包含的指令集合,任意两个代码块的交集为空。如,将执行轨迹tri(i=1,2,…,n)划分成m个代码块cb1,cb2,…,cbm,满足 且cbj∩cbk=φ其中,I(Χ)表示Χ中包含的指令的集合,Χ表示cbj或tri,m个代码块中包含的指令集合的并集等于n个执行轨迹中包含的指令集合的并集,表示任意。
图2为代码块划分前执行轨迹中一组指令,图3为图2中执行轨迹的一组指令进行代码块划分后的第一代码块、图4为图2中执行轨迹的一组指令进行代码块划分后的第二个代码块。图2中的执行轨迹中的一组指令中有两个可能会引起程序执行过程中的执行路径或功能发生变化或引起指令地址发生转移的地方,即地址为26dd3cd的jne指令和地址为26dd3e5的call指令,以这两条语句作为块的结尾,将该组指令划分为如图3和图4中所示的两个代码块。
为了简化,可用代码块的起始地址和结束地址代替代码块,图3中的代码块可表示为26dd3ca->26dd3cd,图4中的代码块可表示为26dd3d4->26dd3e5。因同一个僵尸程序在几次不同的执行过程中某一代码块在内存中的绝对地址是不同的,当它的相对地址是相同的,故可把不同执行轨迹中该代码块的地址都进行规格化,如在不同的执行轨迹中的26dd3ca和276d3ca都规格化为200d3ca,而同一执行轨迹中的地址26dd3ca和26e1468可规格化为200d3ca和2011468。通过规格化操作可得到执行轨迹的代码块序列。如图5所示为某个执行轨迹划分代码块后得到的代码块序列中的一部分。通过规格化代码块可简化计算,大幅减小分析所需的时间复杂度和空间复杂度。
获取模块106用于统计所述执行轨迹对每个代码块的覆盖次数,计算得到每个代码块的覆盖率。
具体的,统计预设数量个执行轨迹对每个代码块的覆盖状态,计算覆盖代码块的执行轨迹的个数与该预设数量的比值,将该比值作为相应的代码块的覆盖率。
首先,统计每一个代码块cbj被执行轨迹tri(i=1,2,…,n)是否覆盖,且令
其中,ci[j]表示覆盖状态,1表示覆盖,0表示未覆盖。
然后,统计执行轨迹tri(i=1,2,…,n)对每一个代码块cbj的覆盖次数cti[j],令
对Zeus僵尸网络的僵尸程序的10个执行轨迹中每个执行轨迹进行单独统计,统计该执行轨迹对每个代码块的覆盖次数,如图8所示为代码块覆盖次数示例,如200d5f6->200d5fb的覆盖次数为15次。然后对比10个执行轨迹,统计这些执行轨迹中出现的不同代码块的总数,比较这些执行轨迹对每个代码块的覆盖状态,计算每一个代码块的覆盖率。如图9所示为计算得到的代码块覆盖率的示例。
为了便于分析,将计算得到的每个代码块的覆盖率和每一个执行轨迹对代码块的覆盖次数结合在一起,其格式为:
代码块cbj:cbj的覆盖率:每个执行轨迹对cbj是否覆盖:每个执行轨迹对cbj的覆盖次数。
如图10所示,为代码块覆盖次数、覆盖率结合示例。以图10中最后一行的数据为例说明各数据表示的含义。最后一行数据:
20190af->20190b1:40%:0101100001:010014938000057。
其中,20190af->20190b1表示起始地址为20190af,结束地址为20190b1的代码块;40%表示其覆盖率;0101100001表示在统计的10个执行轨迹对该代码块覆盖情况,其中每一个执行轨迹对应其中的一位,1表示覆盖了该代码块,0表示未覆盖;所以,0101100001就表示第1、6、7、9个执行轨迹(从低位即右边开始数起)覆盖了该代码块,其余的执行轨迹都没有覆盖该代码块;后面的数字0,10,0,149,38,0,0,0,0,57则具体记录了这10个执行轨迹对该代码块的覆盖的次数。
分析模块108用于对代码块的覆盖次数及覆盖率分析得到第一类代码块和第二类代码块,所述第一类代码块为仅被预设数量的执行轨迹中的一个覆盖的代码块,第二类代码块为代码块的覆盖率为百分百、每个执行轨迹对该代码块的覆盖次数均不同且都小于指定阈值的代码块。
对代码块覆盖率cbcj和覆盖次数cti[j]进行统计分析,首先找出仅仅被n个执行轨迹中的一个覆盖的代码块,这些代码块属于某一特定输入所对应的恶意程序部分的概率最大,记该代码块为ECB(exclusive code block),即ECB满足对于某个trk(k∈{1,2,…,n})有ck[ECB]=1,而对于其他s≠k有cs[ECB]=0。
如图11所示,为第一类代码块示例,图11中这些代码块的覆盖率是10%,即只有1个执行轨迹覆盖了代码块,该代码块就是该执行轨迹所独有的代码块,该代码块很可能就是僵尸网络的客户端收到某个特定的恶意命令后要执行的特定功能。
然后找出代码块覆盖率为100%但每个执行轨迹对该代码块的覆盖次数又均不相同且都小于某一指定阈值r的代码块,记这些代码块为SCB(specific codeblock),即SCB满足:①cbcSCB=100%;②对于有cti[SCB]≠ctj[SCB];③对于有cti[SCB]<r;其中,n为对应不同输入的不同执行轨迹的个数。
SCB满足的三个条件是根据如下情况得出:因为僵尸网络的客户端要根据服务器端发来的不同的命令执行不同的操作,那么其需要知道自己接收到的是哪个命令,故要有命令的比较操作。而命令的比较相关的代码块要满足三个条件:其一是所有的执行轨迹都要经过恶意命令比较才知道其接收的是什么命令进而执行相应的操作;其二是不同的恶意命令的比较次数不同;其三是僵尸网络的恶意命令的种类有限,所以每一个执行轨迹中命令比较的次数都会小于某个特定值。
按照三个条件,对所有的代码块进行筛选。如图12是设置阈值r为50时筛选出来的SCB。统计阈值r为50时筛选前后代码块的总数,对比结果如表2所示。图13是设置阈值r为30时筛选出来的SCB。统计阈值r为30时筛选前后代码块的总数,对比如表3所示。
定位模块110用于根据所述第一类代码块和第二类代码块在执行轨迹中定位可疑区域。
执行轨迹中先执行第二类代码(SCB)然后紧接着执行第一类代码(ECB)的区域是跟恶意控制命令相关的代码块的可能性最大,称为可疑区域。
如图14所示为Zeus僵尸网络的僵尸程序对应的执行轨迹中定位到的可疑区域。
提取模块112用于对所述可疑区域进行分析提取出恶意控制命令及其对应的特定程序指令。
具体的,对可疑区域进行分析,从中找到僵尸程序接收的命令存储的地址和该命令对应的特定程序的入口地址,结合二进制代码动态分析方法根据得到的存储地址及入口地址提取出恶意控制命令及其对应的特定程序指令。
例如对图14中的可疑区域进行分析,即代码块200879a->200879c进行分析。以该代码块的起始地址879a为标识,在执行轨迹中找到并分析该代码块和它周围的区域。其中,地址前3位是200,是因为做了规格化,在下面特定的执行轨迹中对应地址前3位是26d。
图15是代码块26d879a->26d879c和在它之前执行的代码。可以看到,首先执行代码块26d878f->26d8792,然后调用了系统函数lstrcmpiW、GetThreadLocale和CompareStringW,最后执行代码块26d879a->26d879c。这些系统函数完成的功能就是字符串的比较,而代码块26d879a->26d879c的作用就是判断字符串比较是否匹配,如果匹配则把程序转移到26d87a6。
然后,进一步分析简化前的执行轨迹中系统函数lstrcmpiW、GetThreadLocale和CompareStringW的对应指令,从中找到字符串比较的两个参数。经过分析得知,第一个参数是该执行轨迹接收到的命令字符串,放在以地址0x2a02740为起始地址的内存中,第二个参数是要与接收到的命令进行比较的字符串,放在以地址0x188f838开始的堆栈中。如果通过比较找到了匹配的恶意命令,则执行其对应的操作,其对应程序的入口地址被放在以0x26d25bc为基址、以比较次数乘以8为偏移的地址中,所以从地址0x26d25bc开始,可以取出所有恶意命令对应的特定操作的入口地址。
提取模块112提取出的Zeus僵尸程序可以接收的全部恶意命令如表4所示。
经过分析得知,Zeus的僵尸程序在收到恶意控制命令时,首先将该命令和表4中的命令按照表中的比较次序依次比较,当匹配的时候就停止比较,转到对应程序的入口地址处开始执行对应的操作;如果不匹配就继续比较,一直找到匹配的命令或者比较完所有命令为止。
引导模块114用于引导所述恶意控制命令所对应的程序覆盖僵尸程序,得到僵尸网络的控制协议。
具体的,利用二进制代码动态插装技术,引导得到的恶意控制命令所对应的程序在全系统模拟器中执行,进而实现僵尸程序命令空间的全覆盖,从而挖掘出该僵尸程序所在僵尸网络的控制协议。如此即可得到Zeus僵尸网络的全部控制命令和它们对应的操作即操作行为特征,从而得到Zeus僵尸网络的控制协议。
上述僵尸网络控制协议的挖掘装置,对僵尸网络的执行轨迹进行划分代码块后,对代码块的覆盖率及被覆盖次数进行分析定位可疑区域,针对可疑区域进行分析提取出恶意控制命令及对应的特定程序,将提取的恶意控制命令及特定程序覆盖到僵尸程序,可分析得到僵尸程序的全部控制命令,如此提高了分析的准确率,分析的更全面。且无须高级语言形式的语义支持,能直接通过二进制执行轨迹分析,处理简单。
如图17所示,在一个实施例中,上述僵尸网络控制协议的挖掘装置,除了包括捕捉模块102、划分模块104、获取模块106、分析模块108、定位模块110、提取模块112和引导模块114,还包括简化模块116和剔除模块118。其中:
简化模块116用于对执行轨迹进行简化处理。具体的,把系统空间的指令简化成用户空间对系统函数调用的信息。
在本实例中,系统空间的指令的特点是其地址为8位,而用户空间的指令地址为6位或7位。图6是化简前的执行轨迹中的一组按序执行的指令。其中,从地址为7c80aa26到地址为7c80aa3b的指令段是属于系统空间的指令。图6中指令段是一个系统函数lstrcmpiW,由于暂时无须关心其内部执行的细节,所以可以简化掉它,而仅留下一个描述信息来表示在此处调用过该系统函数。将图6中的指令简化后如图7所示,得到一行调用信息:
7c80aa26:kernel32.dll lstrcmpiW0xaa26。
其中,7c80aa26表示该系统函数的入口地址,kernel32.dll是拥有它的进程,lstrcmpiW是函数名,0xaa26表示该函数的入口地址的相对偏移。
把Zeus僵尸网络中僵尸程序的10个执行轨迹进行简化,简化之前和之后执行轨迹的文件大小对比如表1所示。
剔除模块118用于获取每个代码块的污点状态,将没有污点的代码块从所述可疑区域中剔除。
当可疑区域很多时,剔除模块118获取每个代码块的污点状态,将没有污点的代码块从可疑区域中剔除。污点是指已出现过恶意命令的代码块。如此可减少分析量,提高分析效率。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (12)
1.一种僵尸网络控制协议的挖掘方法,包括以下步骤:
捕捉僵尸程序的执行轨迹;
对所述执行轨迹进行代码块划分;
统计所述执行轨迹对每个代码块的覆盖次数,计算得到每个代码块的覆盖率;
对所述代码块的覆盖次数及覆盖率分析得到第一类代码块和第二类代码块,所述第一类代码块为仅被预设数量的执行轨迹中的一个覆盖的代码块,第二类代码块为代码块的覆盖率为百分百、每个执行轨迹对该代码块的覆盖次数均不同且都小于指定阈值的代码块;
根据所述第一类代码块和第二类代码块在执行轨迹中定位可疑区域;
对所述可疑区域进行分析提取出恶意控制命令及其对应的特定程序指令;
引导所述恶意控制命令所对应的程序覆盖僵尸程序,得到僵尸网络的控制协议。
2.根据权利要求1所述的僵尸网络控制协议的挖掘方法,其特征在于,所述捕捉僵尸程序的执行轨迹的步骤包括:
捕捉僵尸程序中预设数量个不同输入对应的不同二进制执行轨迹,并将所述二进制执行轨迹反汇编成汇编指令格式的执行轨迹。
3.根据权利要求1所述的僵尸网络控制协议的挖掘方法,其特征在于,在对所述执行轨迹进行代码块划分的步骤之前,还包括步骤:
对所述执行轨迹进行简化处理。
4.根据权利要求1所述的僵尸网络控制协议的挖掘方法,其特征在于,所述计算得到每个代码块的覆盖率的步骤包括:
统计预设数量个执行轨迹对每个代码块的覆盖状态,计算覆盖代码块的执行轨迹的个数与该预设数量的比值,将所述比值作为相应的代码块的覆盖率。
5.根据权利要求1所述的僵尸网络控制协议的挖掘方法,其特征在于,在根据所述第一类代码块和第二类代码块在执行轨迹中定位可疑区域的步骤之后,还包括步骤:
获取每个代码块的污点状态,将没有污点的代码块从所述可疑区域中剔除。
6.根据权利要求1所述的僵尸网络控制协议的挖掘方法,其特征在于,所述对所述执行轨迹进行代码块划分的步骤包括:
以程序转移指令作为代码块的边界对执行轨迹进行代码块划分,且所有代码块中包含的指令集合的并集等于执行轨迹中包含的指令集合,任意两个代码块的交集为空。
7.一种僵尸网络控制协议的挖掘装置,其特征在于,包括:
捕捉模块,用于捕捉僵尸程序的执行轨迹;
划分模块,用于对所述执行轨迹进行代码块划分;
获取模块,用于统计所述执行轨迹对每个代码块的覆盖次数,计算得到每个代码块的覆盖率;
分析模块,用于对所述代码块的覆盖次数及覆盖率分析得到第一类代码块和第二类代码块,所述第一类代码块为仅被预设数量的执行轨迹中的一个覆盖的代码块,第二类代码块为代码块的覆盖率为百分百、每个执行轨迹对该代码块的覆盖次数均不同且都小于指定阈值的代码块;
定位模块,用于根据所述第一类代码块和第二类代码块在执行轨迹中定位可疑区域;
提取模块,用于对所述可疑区域进行分析提取出恶意控制命令及其对应的特定程序指令;
引导模块,用于引导所述恶意控制命令所对应的程序覆盖僵尸程序,得到僵尸网络的控制协议。
8.根据权利要求7所述的僵尸网络控制协议的挖掘装置,其特征在于,所述装置还包括反汇编模块,所述捕捉模块还用于捕捉僵尸程序中预设数量个不同输入对应的不同二进制执行轨迹;所述反汇编模块用于将所述二进制执行轨迹反汇编成汇编指令格式的执行轨迹。
9.根据权利要求7所述的僵尸网络控制协议的挖掘装置,其特征在于,所述装置还包括:
简化模块,用于对所述执行轨迹进行简化处理。
10.根据权利要求7所述的僵尸网络控制协议的挖掘装置,其特征在于,所述获取模块还用于统计预设数量个执行轨迹对每个代码块的覆盖状态,计算覆盖代码块的执行轨迹的个数与该预设数量的比值,将所述比值作为相应的代码块的覆盖率。
11.根据权利要求7所述的僵尸网络控制协议的挖掘装置,其特征在于,所述装置还包括:
剔除模块,用于获取每个代码块的污点状态,将没有污点的代码块从所述可疑区域中剔除。
12.根据权利要求7所述的僵尸网络控制协议的挖掘装置,其特征在于,所述划分模块还用于以程序转移指令作为代码块的边界对执行轨迹进行代码块划分,且所有代码块中包含的指令集合的并集等于执行轨迹中包含的指令集合,任意两个代码块的交集为空。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210568194.6A CN103902895B (zh) | 2012-12-24 | 2012-12-24 | 僵尸网络控制协议挖掘方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210568194.6A CN103902895B (zh) | 2012-12-24 | 2012-12-24 | 僵尸网络控制协议挖掘方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103902895A true CN103902895A (zh) | 2014-07-02 |
CN103902895B CN103902895B (zh) | 2017-07-07 |
Family
ID=50994207
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210568194.6A Active CN103902895B (zh) | 2012-12-24 | 2012-12-24 | 僵尸网络控制协议挖掘方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103902895B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106664201A (zh) * | 2014-08-28 | 2017-05-10 | 三菱电机株式会社 | 进程解析装置、进程解析方法和进程解析程序 |
CN107291598A (zh) * | 2017-08-07 | 2017-10-24 | 腾讯科技(深圳)有限公司 | 监控方法、监控装置、监控设备和存储介质 |
CN109033836A (zh) * | 2018-07-24 | 2018-12-18 | 南开大学 | 基于统计学习的恶意代码多模型交叉检测方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101404658A (zh) * | 2008-10-31 | 2009-04-08 | 北京锐安科技有限公司 | 一种检测僵尸网络的方法及其系统 |
US20090172815A1 (en) * | 2007-04-04 | 2009-07-02 | Guofei Gu | Method and apparatus for detecting malware infection |
US20090249481A1 (en) * | 2008-03-31 | 2009-10-01 | Men Long | Botnet spam detection and filtration on the source machine |
CN101741862A (zh) * | 2010-01-22 | 2010-06-16 | 西安交通大学 | 基于数据包序列特征的irc僵尸网络检测系统和检测方法 |
CN101930517A (zh) * | 2010-10-13 | 2010-12-29 | 四川通信科研规划设计有限责任公司 | 一种僵尸程序的检测方法 |
CN102291397A (zh) * | 2011-08-04 | 2011-12-21 | 中国科学院计算技术研究所 | 一种僵尸网络追踪方法 |
CN102457495A (zh) * | 2010-10-21 | 2012-05-16 | 中华电信股份有限公司 | 网络病毒防护方法及系统 |
-
2012
- 2012-12-24 CN CN201210568194.6A patent/CN103902895B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090172815A1 (en) * | 2007-04-04 | 2009-07-02 | Guofei Gu | Method and apparatus for detecting malware infection |
US20090249481A1 (en) * | 2008-03-31 | 2009-10-01 | Men Long | Botnet spam detection and filtration on the source machine |
CN101404658A (zh) * | 2008-10-31 | 2009-04-08 | 北京锐安科技有限公司 | 一种检测僵尸网络的方法及其系统 |
CN101741862A (zh) * | 2010-01-22 | 2010-06-16 | 西安交通大学 | 基于数据包序列特征的irc僵尸网络检测系统和检测方法 |
CN101930517A (zh) * | 2010-10-13 | 2010-12-29 | 四川通信科研规划设计有限责任公司 | 一种僵尸程序的检测方法 |
CN102457495A (zh) * | 2010-10-21 | 2012-05-16 | 中华电信股份有限公司 | 网络病毒防护方法及系统 |
CN102291397A (zh) * | 2011-08-04 | 2011-12-21 | 中国科学院计算技术研究所 | 一种僵尸网络追踪方法 |
Non-Patent Citations (2)
Title |
---|
杨奇: ""基于异常行为特征的僵尸网络检测方法研究"", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
王威等: ""基于终端行为特征的IRC僵尸网络检测"", 《计算机学报》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106664201A (zh) * | 2014-08-28 | 2017-05-10 | 三菱电机株式会社 | 进程解析装置、进程解析方法和进程解析程序 |
CN107291598A (zh) * | 2017-08-07 | 2017-10-24 | 腾讯科技(深圳)有限公司 | 监控方法、监控装置、监控设备和存储介质 |
CN107291598B (zh) * | 2017-08-07 | 2018-07-06 | 腾讯科技(深圳)有限公司 | 监控方法、监控装置、监控设备和存储介质 |
CN109033836A (zh) * | 2018-07-24 | 2018-12-18 | 南开大学 | 基于统计学习的恶意代码多模型交叉检测方法 |
CN109033836B (zh) * | 2018-07-24 | 2021-07-20 | 南开大学 | 基于统计学习的恶意代码多模型交叉检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103902895B (zh) | 2017-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Yu et al. | Deescvhunter: A deep learning-based framework for smart contract vulnerability detection | |
CN107102941B (zh) | 一种测试用例的生成方法及装置 | |
CN108268777A (zh) | 一种利用补丁信息进行未知漏洞发现的相似性检测方法 | |
CN103839003A (zh) | 恶意文件检测方法及装置 | |
US11263062B2 (en) | API mashup exploration and recommendation | |
CN105677311A (zh) | 一种函数调用关系的识别方法及装置 | |
JP2021093176A (ja) | セキュリティ情報分析方法、セキュリティ情報分析システム、及び、プログラム | |
CN108229158A (zh) | 一种Android中存储的用户隐私信息的保护方法 | |
CN103294951B (zh) | 一种基于文档型漏洞的恶意代码样本提取方法及系统 | |
CN114462044B (zh) | 一种基于污点分析的uefi固件漏洞静态检测方法及装置 | |
US11528285B2 (en) | Label guided unsupervised learning based network-level application signature generation | |
CN104866764B (zh) | 一种基于对象引用图的Android手机恶意软件检测方法 | |
CN102298681B (zh) | 一种基于数据流切片的软件识别方法 | |
CN104360837A (zh) | 取证软件中基于自定义脚本实现电子数据取证分析的方法 | |
CN103902895A (zh) | 僵尸网络控制协议挖掘方法和装置 | |
CN108055166B (zh) | 一种嵌套的应用层协议的状态机提取系统及其提取方法 | |
CN103902906A (zh) | 基于应用图标的移动终端恶意代码检测方法及系统 | |
CN108959922B (zh) | 一种基于贝叶斯网的恶意文档检测方法及装置 | |
CN107707540A (zh) | 一种基于消息字段分隔符识别的网络协议逆向分析方法 | |
CN106528411A (zh) | 覆盖率检测方法、装置和设备 | |
CN113779589B (zh) | 一种安卓智能手机应用误配置检测方法 | |
CN111245880A (zh) | 基于行为轨迹重建的用户体验监控方法及装置 | |
US10474651B2 (en) | Analysis of system information | |
CN103905391B (zh) | 僵尸网络命令和控制协议的获取方法及装置 | |
KR101619059B1 (ko) | 악성 스크립트 탐지를 위한 경량 시그니처 생성 및 배포 장치, 시스템 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |