CN108156181B - 一种基于协程异步io的漏洞探测方法及其漏洞扫描系统 - Google Patents
一种基于协程异步io的漏洞探测方法及其漏洞扫描系统 Download PDFInfo
- Publication number
- CN108156181B CN108156181B CN201810103601.3A CN201810103601A CN108156181B CN 108156181 B CN108156181 B CN 108156181B CN 201810103601 A CN201810103601 A CN 201810103601A CN 108156181 B CN108156181 B CN 108156181B
- Authority
- CN
- China
- Prior art keywords
- coroutine
- detection
- asynchronous
- thread
- scanning
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1433—Vulnerability analysis
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Debugging And Monitoring (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明涉及网络漏洞扫描技术,旨在提供一种基于协程异步IO的漏洞探测方法及其漏洞扫描系统。该种基于协程异步IO的漏洞探测方法通过运行主线程,由主线程创建一个输出汇总队列,一个协程池和一个输出汇总线程;主线程完成系统各参数的初始化工作后,读取待扫描目标列表文件,创建扫描任务并提交到协程池,协程池中相应协程被创建对目标使用漏洞探测规则进行探测,当探测到漏洞结果时,将结果排队到输出队列中,由输出汇总线程统一输出到一个扫描日志文件保存。本发明使用协程将异步IO基于状态机的业务流程同步化,以更接近人的思维方式去编写代码,同时获得异步IO的性能。
Description
技术领域
本发明是关于网络漏洞扫描技术领域,特别涉及一种基于协程异步IO的漏洞探测方法及其漏洞扫描系统。
背景技术
当前的漏洞扫描器实现普遍以同步IO搭配多线程模型或异步IO搭配状态机模型来实现。前者运行效率较低,单个扫描器运行实例无法覆盖大范围互联目标设备,或是要增加相应的软件硬件资源,如增加真机或虚拟机来提高扫描效率,带来资源配置和管理上的成本增加。后者实现方式复杂,不利于系统的健壮性和可维护性,当有新的漏扫策略需要实现时开发和测试效率偏低。
在网络扫描系统的开发中阻塞模式的优点是其的简洁性,其编程模型更接近人的思维,使得程序的编写/调试更容易,有利于提高开发效率和程序稳定性、健壮性。缺点是阻塞模式在进行IO操作中会阻塞当前线程的运行,直到IO操作完成。所以阻塞模式下多任务处理依赖多线程,每个线程在操作系统内核中对应一个执行实体,会占用相应的内核资源,启动过多的线程会造成内核的调度开销加重,降低系统的运行效率,加大系统的线程调度,切换等开销。
非阻塞模式的优点是无论操作成功失败,操作会立即返回,调用线程有机会立即运行别的任务,充分利用空闲cpu时间执行尽可能多的任务,提高多任务运行的并发度。缺点是编程方式复杂,编程思维非线性跳跃,如任务A无法进行a操作时则需主动切换到任务B,而任务B可能需要执行的是任务c,且运行流程中要需要随时判断调用失败的原因,IO无法及时完成还是其它调用错误。使得程序的编写及调试方式复杂,不利于程序的稳定性、健壮性。
为提高程序运行效率,通常都会以某种方式避免阻塞模式中因IO无法完成而阻塞调用者,并避免非阻塞模式中因IO无法完成而报错。因此出现了相应的IO方法,流行的方法包括unix下的select,poll。linux下的epoll。windows下的WSAAsyncSelect,WSAEventSelect,重叠IO,IO完成端口等。但在这些IO方法下,都存在业务逻辑不连续的问题,通常需要将业务逻辑组织成某种状态机模型,当条件不满足而切换到别的任务时,会保存当前任务的状态,而当条件满足切换回当前任务时继续。
基于异步IO和状态机模型的业务逻辑本身性能较高,但与人的思维方式差异较大,且每个逻辑处理多个并发任务,在高并发情况下完整的跟踪,调试某个单一任务变的复杂。因此需要更有效的方法综合异步IO的性能和同步IO的简单性,在提高的开发效率,软件可维护性的同时,最大化系统的资源利用率,最小化系统运行开销。
协程做为一种轻量级的用户态线程(user thread),拥有自己的运行上下文和堆栈,可中断/继续灵活自由调度,使得协程成为一个很好的中间层,用于封装异步IO和状态机的复杂机制,并对上表现出一个相对简洁的接口和流程,从而在确保运行效率的同时,提高开发效率和软件可维护性。erlang语言的轻量级进程及golang的go程(goroutine)均是与协程相似的概念,协程已逐步在高并发服务器端开发上得到实践与应用,但无未见在漏洞扫描器方面的应用方案。
发明内容
本发明的主要目的在于克服现有技术中的不足,提供一种在漏洞扫描系统的实现过程中,结合了同步IO的简单设计与异步IO的运行性能,并以协程的表现形式予以实现的方法和系统。为解决上述技术问题,本发明的解决方案是:
提供一种基于协程异步IO的漏洞探测方法,协程异步IO模式下,在IO进行中时,协程能被挂起,底层线程转去执行其它协程,而在IO完成后能恢复执行;所述基于协程异步IO的漏洞探测方法具体包括下述步骤:
(1)协程连接探测目标;
首先初始化一个协程上下文(包括当前指令指针PC,各寄存器当前值等信息),然后执行这个协程,发起一个协程连接操作(Coro_connect)连接被探测目标(该操作由一个实现协程异步IO的库进行封装);进入协程连接操作后,协程库(协程库是封装协程运行调度和切换功能的代码库)发起异步连接操作,并保存当前协程的运行上下文(包括当前指令指针PC,各寄存器当前值等信息);
运行当前协程的线程调用事件选择器获取下一事件:
如果无事件则阻塞等待,执行协程连接操作的协程被挂起;
如果事件选择器收到相应的事件(异步连接完成事件,则会调用Connect_complete_handler对事件进行处理),阻塞的线程被系统内核唤醒,线程根据异步连接前保存的协程运行上下文,将连接成功状态保存到上下文中,然后根据上下文中保存的信息,恢复各寄存器值,并转到指令指针PC处继续运行,执行协程连接操作的协程被恢复执行,进入步骤(2);
(2)协程发送探测包;
探测协程再发起一个协程发送操作(Coro_send)(该功能由协程库封装);进入协程发送操作后,协程库发起异步发送操作,并保存当前协程的运行上下文;
运行当前协程的线程再次调用事件选择器获取下一事件:
如果无事件则阻塞等待,执行协程发送操作的协程被挂起;
如果事件选择器再次收到相应的事件(发送完成事件,则会调用Send_complete_handler对事件进行处理),阻塞的线程被系统内核唤醒,线程根据异步发送前保存的协程运行上下文,将发送成功状态保存到上下文中,然后根据上下文中保存的信息,恢复各寄存器值,并转到指令指针PC处继续运行,执行协程发送操作的协程被恢复执行,进入步骤(3);
(3)协程接收探测响应包;
探测协程再次发起一个协程接收操作(Coro_recv)(该功能由协程库封装);协程库发起异步接收操作,并保存当前协程的运行上下文;
运行当前协程的线程再次调用事件选择器获取下一事件:
如果无事件则阻塞等待,执行协程接收操作的协程被挂起;
如果事件选择器再次收到相应的事件(接收完成事件,则会调用Recv_complete_handler对事件进行处理),阻塞的线程被系统内核唤醒,线程根据异步接收前保存的协程运行上下文,将接收成功状态保存到上下文中,然后根据上下文中保存的信息,恢复各寄存器值,并转到指令指针PC处继续运行,执行协程接收操作的协程被恢复执行,进入步骤(4);
(4)判断探测是否结束;
探测协程根据所探测漏洞的类型和返回数据包进行判断是否完成了探测:
如果未完成探测,则根据当前返回数据包的内容(cookie或是其它会话参数)准备下一个探测包,并再次发起协程发送操作,并跳到步骤(2)重复上面过程,直到漏洞探测过程结束;
如果完成了探测,即漏洞探测过程结束,则保存对该目标探测所获得的信息(原始数据包,或提取数据包中的关键参数)进行保存;
(5)结束一个目标的探测;
最后结束对该目标的探测,关闭已建立网络连接。
提供一种基于协程异步IO的漏洞扫描系统,包括处理器,适于实现各指令;以及存储设备,适于存储多条指令,所述指令适用于由处理器加载并执行:
A、初始化事件选择器(Event_Selector);
B、初始化输出队列(Output_queue);
C、创建输出线程(Output_thread);
所述输出线程能实现:c1)从输出队列中获取一条扫描结果;c2)写入日志文件;c3)判断是否全部任务结束;c4)如未完成则回到c1)执行;
D、创建状态显示线程(Status_thread);
所述状态显示线程能实现:d1)获取当前全局扫描任务统计信息;d2)显示当前统计信息;d3)判断是否全部任务结束;d4)如未结束则回到d1)执行;
E、读取任务配置,包括所有待探测目标、探测输出文件名、最大探测任务;
初始化一个任务输入队列,待探测目标信息包括ip地址、域名、端口信息;
F、根据最大任务数和待探测目标生成一组协程扫描任务(每个任务协程在对目标的探测前、探测中、探测后,汇报一些统计信息,如发送了多少探测包、接收了多少响应包、共探测了多少目标、发现多少漏洞);
所述协程扫描任务(Task_coroutine)能实现:f1)准备目标扫描参数;f2)采用基于协程异步IO的漏洞探测方法进行探测;f3)向输出队列(Output_queue)输出扫描结果;f4)完成一个扫描任务;
G、等待,直到当前任务数小于最大任务数;
H、判断是否全部扫描结束或是否被被要求终止扫描:如未结束且未被要求终止扫描,则回到F执行;否则,结束扫描。
在本发明中:
Coro_connect,协程连接操作:
a)准备协程上下文参数;
b)发起异步连接操作;
c)保存协程状态并调用事件选择器;
d)处理获取的事件。
Connect_complete_handler,连接完成事件处理:
a)获取与事件关联的协程上下文;
b)向上下文中保存操作结果;
c)恢复到上下文中保存的协程中断位置继续执行。
Coro_send,协程发送操作:
a)准备协程上下文参数;
b)发起异步发送操作;
c)保存协程状态并调用事件选择器;
d)处理获取的事件。
Send_complete_handler,发送完成事件处理:
a)获取与事件关联的协程上下文;
b)向上下文中保存操作结果;
c)恢复到上下文中保存的协程中断位置继续执行。
Coro_recv,协程接收操作:
a)准备协程上下文参数;
b)发起异步接收操作;
c)保存协程状态并调用事件选择器;
d)处理获取的事件。
Recv_complete_handler,接收完成事件处理:
a)获取与事件关联的协程上下文;
b)向上下文中保存操作结果;
c)恢复到上下文中保存的协程中断位置继续执行。
本发明的工作原理:本发明通过运行主线程,由主线程创建一个输出汇总队列,一个协程池和一个输出汇总线程;主线程完成系统各参数的初始化工作后,读取待扫描目标列表文件,创建扫描任务并提交到协程池,协程池中相应协程被创建对目标使用漏洞探测规则进行探测,当探测到漏洞结果时,将结果排队到输出队列中,由输出汇总线程统一输出到一个扫描日志文件保存。
本发明通过多核并发搭配异步IO来提高并发扫描效率,以尽可能低的资源消耗运行更多的并发连接任务,同时以协程简化异步IO编程的复杂性,提高系统的健壮性和稳定性。
与现有技术相比,本发明的有益效果是:
1、本发明以异步IO提高扫描器的并发度,提高性能。
2、本发明以协程简化异步IO的复杂度,提高扫描功能的开发效率,提升系统稳定性和可维护性。
3、本发明使用协程将异步IO基于状态机的业务流程同步化,以更接近人的思维方式去编写代码,同时获得异步IO的性能。
附图说明
图1为同步IO模式下的漏洞探测流程图。
图2为异步IO模式下的漏洞探测流程。
图3为协程异步IO模式下的漏洞探测流程。
图4为基于协程异步IO的漏洞扫描系统结构图。
具体实施方式
下面结合附图与具体实施方式对本发明作进一步详细描述:
进程:进程是操作系统结构的基础;是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动;是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
线程:计算机科学术语,有时也被称为轻量级进程(Light Weight Process,LWP),它是运行中的程序的调度单位。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。线程被包含在进程之中,是进程的一个实体,是CPU调度和分派的基本单位它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程的特点是抢占式调度,即优先级高的线程抢占优先级低的线程运行时间,当线程的运行时间片用完后也会被主动抢占强行剥夺运行时间。
协程:是一种用户线程(user thread),与普通的线程不同在于操作系统内核中不存在对应的实体,也就无法对其进行调度,所以协程的运行是协作式的,即在合适的时间点主动切换到别的协程运行不同的任务,不同的协程相互配合完成任务。与线程的相同点在于协程有自己的当前指令指针(PC),寄存器集合和堆栈。
阻塞模式:在阻塞模式下,执行的系统调用在完成以前会一直等待下去,不会立即返回到程序中(将控制权交还给程序)。
非阻塞模式:在非阻塞模式下,系统调用无论成功或失败都会立即返回。
同步IO:是指在进行IO操作,当操作未完成时,IO调用会被阻塞,直到成功或失败返回。
异步IO:是指在进行IO操作时,IO调用会立即返回(并不知道操作是否成功或失败),而在之后的得到内核的通知获取操作成功或失败的结果。
状态机:状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。由软件实现的状态机通常由变量保存各状态,并根据信号进行状态转移,完成特点任务。
本发明一种基于协程异步IO的漏洞探测方法,用于解决现有网络扫描技术中效率较低(同步IO方式下)或流程复杂度较高(异步IO方式下)的问题,兼具同步IO的简单性和异步IO的高性能。具体涉及到两个方面:
一、IO操作协程化封装;
二、异步IO流程协程化隐藏,对调用者表现出同步IO形式。
下面详细描述同步IO,异步IO及协程异步IO的漏洞探测流程以及基于协程异步IO的漏洞扫描系统的特点。
如图1所示,同步IO模式下的探测流程:
1)同步连接探测目标;
2)同步发送探测包;
3)同步接收探测响应包;
4)判断探测是否结束;
5)如未结束则准备下一个探测包;
6)如果已结束则保存探测结果;
7)结束一个目标的探测。
同步IO模式下系统首先发起一个同步连接操作连接目标端口,当与目标成功建立连接后,再发送漏洞探测数据包。有时使用畸形的协议数据包,有时使用符合协议规范,但具有特殊参数的数据包,依据准备探测的漏洞类似而定。当目标系统收到数据包时,或因程序处理不健壮,或因参数处理有问题,返回具有一定特征的错误数据,或是返回正常数据但超出原有逻辑应该处理的范围,产生信息泄露。
有时探测过程需要进行多次前期交互,才能让目标系统的运行逻辑进程有问题的部分,则需要使用多个探测数据包重复进行多次收发操作进行探测。
当得到目标响应探测请求,返回相应的数据后,则可以保存下这些信息。
同步IO模式下,探测所执行的动作和探测任务的不同部分一一对应,为线性的顺序/循环流程,有利于系统的可维护性,但在IO进行时当前线程无法执行其它操作,即使当前系统非常空闲也无法利用系统资源。
如图2所示,异步IO模式下的探测流程:
1)向探测目标发起异步连接;
2)线程调用事件选择器等待事件。
Connect_complete_handler,连接完成事件处理:
1)发起异步发送操作,发送探测包;
2)线程调用事件选择器等待事件。
Send_complete_handler,发送完成事件处理:
1)发起异步接收操作,接收探测响应包;
2)线程调用事件选择器等待事件。
Recv_complete_handler,接收完成事件处理:
1)判断探测是否完成;
2)如未完成则准备下一个探测包,否则4;
3)并启动异步发送操作;
4)如已完成则关闭;
5)保存探测结果。
异步IO模式下,首先会发起一个异步连接操作,该操作会立即返回,但此时并不知道操作是成功还是失败,这时候当前线程需要调用事件选择器来获取其它事件进行处理,如果当前没有任何事件,则线程会阻塞。
当连接完成后,事件选择器会得到相应的事件,内核会唤醒阻塞的线程,线程立即对连接完成事件进行处理。当前线程会准备使用一个漏洞探测数据包,并发起一个异步发送操作,此时也不知道发送操作是否成功,线程还需要再次调用事件选择器来获取其它事件(如果在发送完成之前有其它事件产生则线程也会进行相应的处理,此就是异步IO能充分利用空闲时间的原因),如没有事件则线程会阻塞等待。
当发完操作成后,事件选择器再次得到相应的事件,内核再次唤醒阻塞的线程,线程发起一个异步接收操作,此时并不知道接收操作是否成功,线程再次调用事件选择器获取下一事件,如无相应事件线程再次阻塞等待。
当接收操作完成后,事件选择器再次得到相应的事件,内核再次唤醒阻塞的线程,线程根据接收到的目标回应的探测响应数据包,判断是否需要进行下一步探测。如无多余探测步骤,则完成本次单个目标的扫描探测。
如探测需多次前期交互才能触发目标系统的漏洞,则当前处理接收事件的线程会再次发起异步发送操作发送下一个探测数据包,然后调用事件选择器等待其它事件,重复上述发送完成后的处理流程直到探测完成。
当完成最终探测,得到了相应的探测响应数据包,则保存下这些信息。
异步IO模式下一个线程可以运行多个任务,根据不同任务的状态执行不同的动作,少量线程即可运行大量并发任务,可避免因启动过多线程而带来的系统内核调度开销,事件得到及时响应,提高系统资源利用率,增加性能。但任务被分散后探测动作与探测任务不再是线性的顺序/循环流程,而是分散的事件处理和状态转换,编写/调试复杂不利于系统的可维护性。
如图3所示,协程异步IO的探测流程:
1)协程连接探测目标;
2)协程发送探测包;
3)协程接收探测响应包;
4)判断探测是否结束;
5)如未结束则准备下一个探测包;
6)如果已结束则保存探测结果;
7)结束一个目标的探测。
Coro_connect,协程连接操作:
a)准备协程上下文参数;
b)发起异步连接操作;
c)保存协程状态并调用事件选择器;
d)处理获取的事件。
Connect_complete_handler,连接完成事件处理:
a)获取与事件关联的协程上下文;
b)向上下文中保存操作结果;
c)恢复到上下文中保存的协程中断位置继续执行。
Coro_send,协程发送操作:
a)准备协程上下文参数;
b)发起异步发送操作;
c)保存协程状态并调用事件选择器;
d)处理获取的事件。
Send_complete_handler,发送完成事件处理:
a)获取与事件关联的协程上下文;
b)向上下文中保存操作结果;
c)恢复到上下文中保存的协程中断位置继续执行。
Coro_recv,协程接收操作:
a)准备协程上下文参数;
b)发起异步接收操作;
c)保存协程状态并调用事件选择器;
d)处理获取的事件。
Recv_complete_handler,接收完成事件处理:
a)获取与事件关联的协程上下文;
b)向上下文中保存操作结果;
c)恢复到上下文中保存的协程中断位置继续执行。
协程异步IO漏洞探测的主体流程与同步IO漏洞探测流程相同,但底层IO处理的细节与异步IO漏洞探测流程相似。对于协程的使用者来说,与使用同步IO模式进行漏洞探测很相似。
首先初始化一个协程上下文(包括当前指令指针PC,各寄存器当前值等信息),然后转去执行这个协程。
协程被执行时会首先发起一个协程连接操作连接被探测目标,该操作由一个实现协程异步IO的库进行封装。进入协程连接操作后,协程库会发起异步连接操作,并保存当前协程的运行上下文(包括当前指令指针PC,各寄存器当前值等信息),好在将来某个时间段恢复执行,然后运行当前协程的线程会调用事件选择器获取下一事件,如无事件则阻塞等待。
当异步连接操作完成时,事件选择器会收到相应的事件,阻塞的线程被系统内核唤醒,线程根据异步连接前保存的协程运行上下文,将连接成功状态保存到上下文中,然后根据上下文中保存的信息,恢复各寄存器值,并转到指令指针PC处继续运行。
此时发起协程连接操作而中断运行的协程恢复了运行,对于协程的使用者来说如同没有被中断过,探测协程会再发起一个协程发送操作,该功能由协程库封装。进入协程发送操作后,协程库会发起异步发送操作,并保存当前协程的运行上下文,然后运行当前协程的线程会再次调用事件选择器获取下一事件,如无事件则阻塞等待。
当异步发送操作完成时,事件选择器再次收到相应的事件,阻塞的线程被系统内核唤醒,线程根据异步发送前保存的协程运行上下文,将发送成功状态保存到上下文中,然后根据上下文中保存的信息,恢复各寄存器值,并转到指令指针PC处继续运行。
此时发起协程发送操作而中断运行的协程恢复了运行,探测协程再次发起一个协程接收操作,该功能由协程库封装,协程库发起异步接收操作,并保存当前协程的运行上下文,然后运行当前协程的线程会再次调用事件选择器获取下一事件,如无事件则阻塞等待。
异步接收操作完成时,事件选择器再次收到相应的事件,阻塞的线程被系统内核唤醒,线程根据异步接收前保存的协程运行上下文,将接收成功状态保存到上下文中,然后根据上下文中保存的信息,恢复各寄存器值,并转到指令指针PC处继续运行。
此时发起协程接收操作而中断运行的协程恢复了运行,探测协程根据所探测漏洞的类型和返回数据包进行判断是否完成了探测,如未完成则根据当前返回包的内容(cookie或是其它会话参数)准备下一个探测包,并再次发起协程发送操作,并重复上面过程,直到漏洞探测过程结束,则保存对该目标探测所获得的信息(原始数据包,或提取数据包中的关键参数)进行保存。
最后结束对该目标的探测,关闭已建立网络连接。
协程库的IO部分与异步IO相似,协程的可中断/继续运行特点使得在IO进行中时,协程被挂起,底层线程转去执行其它协程,线程的空闲时间得到重用,因此与异步IO模式一样只需较少线程即可运行大量并发任务。而在IO完成后恢复执行的特点又与同步IO模式相似。所以协程异步IO模式可以实现同步IO相同的探测流程,而在底层以异步IO的性能运行。
如图4所示,一种基于协程异步IO的漏洞扫描系统:
A)初始化事件选择器,Event_Selector;
B)初始化输出队列,Output_queue;
C)创建输出线程,Output_thread;
D)创建状态显示线程,Status_thread;
E)读取扫描目标列表;
F)对每个扫描目标生成一个协程扫描任务,此处需根据配置控制最大任务数;
G)等待,直到当前任务数小于最大任务数;
H)判断是否全部扫描结束或是否被被要求终止扫描;
I)如未结束则回到E执行。
Output_thread,输出线程:
a)从输出队列中获取一条扫描结果;
b)写入日志文件;
c)判断是否全部任务结束;
d)如未完成则回到a执行。
Status_thread,状态显示线程:
a)获取当前全局扫描任务统计信息;
b)显示当前统计信息;
c)判断是否全部任务结束;
d)如未结束则回到a执行。
Task_coroutine,扫描任务协程:a)准备目标扫描参数;b)使用前描述的”协程异步IO的探测流程”进行探测;c)向输出队列Output_queue输出扫描结果;d)完成一个扫描任务。
一种基于协程异步IO的漏洞扫描系统,是前面单个目标“协程异步IO的探测流程”的更高层次架构,包括运行多个并发探测任务的协程组成一个协程池,探测的最大任务数即协程池的大小。
该种基于协程异步IO的漏洞扫描系统的主线程会读取任务配置,包括所有待探测目标,探测输出文件名,最大探测任务(探测的最大任务数也即协程池的大小),每个任务的超时时间等,然后向任务队列上排队待探测目标信息。
每个任务协程都从任务输入队列上获取待探测目标信息,包括ip地址,域名,端口等信息。然后探测协程运行前面描述的“协程异步IO的探测流程”,得到一个目标的探测结果,并向一个输出队列上输出结果信息。
每个任务协程会在对目标的探测前,探测中,探测后汇报一些统计信息,如发送了多少探测包,接收了多少响应包,共探测了多少目标,发现多少漏洞等。
扫描系统启动的状态显示线程,定时显示出当前所有探测任务汇报的信息,以便了解全部扫描任务的状态和进度。
扫描系统启动的输出线程,会等在任务输出队列上,将输出的探测信息逐条写入指定的扫描日志文件中。
两种情况扫描系统会退出漏洞扫描系统:
1、所有待探测目标均已排队到任务输入队列上,被任务协程处理完毕,任务输出队列上所有信息已写入扫描日志文件后,输出线程退出,状态显示线程退出,扫描系统正常退出。
2、系统被强制要求退出,则主线程通知所有任务协程不再继续处理任务输入队列上其它任务,任务协程完成当前正在进行的探测任务后退出,然后等待任务输出队列上所有信息已写入扫描日志文件后,输出线程退出,状态显示线程退出,扫描系统正常退出。
在此协程异步IO结构下,协程库封装了异步IO的复杂性,对漏洞扫描系统的实现提供了简洁的网络连接,接收,发送协程接口。避免了纯异步IO模式下,探测流程的非线性状态切换,使底层的IO逻辑与漏洞探测逻辑耦合度降底,在开发过程中也可以分别进行调试和测试,协程库中的IO部分可以独立进行测试,扫描系统调用协程库功能实现的漏扫流程因为与同步IO相似,所以必要时可在底层更换成同步IO方便验证流程的正确性。
本发明使漏洞扫描系统的开发过程具有更好的开发效率(与单纯异步IO模式相比),运行过程具有更好的性能(与同步IO模式相比),功能升级和维护时具有更好的可维护性。
最后,需要注意的是,以上列举的仅是本发明的具体实施例。显然,本发明不限于以上实施例,还可以有很多变形。本领域的普通技术人员能从本发明公开的内容中直接导出或联想到的所有变形,均应认为是本发明的保护范围。
Claims (2)
1.一种基于协程异步IO的漏洞探测方法,协程异步IO模式下,在IO进行中时,协程能被挂起,底层线程转去执行其它协程,而在IO完成后能恢复执行,其特征在于,所述基于协程异步IO的漏洞探测方法具体包括下述步骤:
(1)协程连接探测目标;
首先初始化一个协程上下文,然后执行这个协程,发起一个协程连接操作连接被探测目标;进入协程连接操作后,协程库发起异步连接操作,并保存当前协程的运行上下文;
运行当前协程的线程调用事件选择器获取下一事件:
如果无事件则阻塞等待,执行协程连接操作的协程被挂起;
如果事件选择器收到相应的事件,阻塞的线程被系统内核唤醒,线程根据异步连接前保存的协程运行上下文,将连接成功状态保存到上下文中,然后根据上下文中保存的信息,恢复各寄存器值,并转到指令指针PC处继续运行,执行协程连接操作的协程被恢复执行,进入步骤(2);
(2)协程发送探测包;
探测协程再发起一个协程发送操作;进入协程发送操作后,协程库发起异步发送操作,并保存当前协程的运行上下文;
运行当前协程的线程再次调用事件选择器获取下一事件:
如果无事件则阻塞等待,执行协程发送操作的协程被挂起;
如果事件选择器再次收到相应的事件,阻塞的线程被系统内核唤醒,线程根据异步发送前保存的协程运行上下文,将发送成功状态保存到上下文中,然后根据上下文中保存的信息,恢复各寄存器值,并转到指令指针PC处继续运行,执行协程发送操作的协程被恢复执行,进入步骤(3);
(3)协程接收探测响应包;
探测协程再次发起一个协程接收操作;协程库发起异步接收操作,并保存当前协程的运行上下文;
运行当前协程的线程再次调用事件选择器获取下一事件:
如果无事件则阻塞等待,执行协程接收操作的协程被挂起;
如果事件选择器再次收到相应的事件,阻塞的线程被系统内核唤醒,线程根据异步接收前保存的协程运行上下文,将接收成功状态保存到上下文中,然后根据上下文中保存的信息,恢复各寄存器值,并转到指令指针PC处继续运行,执行协程接收操作的协程被恢复执行,进入步骤(4);
(4)判断探测是否结束;
探测协程根据所探测漏洞的类型和返回数据包进行判断是否完成了探测:
如果未完成探测,则根据当前返回数据包的内容准备下一个探测包,并再次发起协程发送操作,并跳到步骤(2)重复上面过程,直到漏洞探测过程结束;
如果完成了探测,即漏洞探测过程结束,则保存对该目标探测所获得的信息进行保存;
(5)结束一个目标的探测;
最后结束对该目标的探测,关闭已建立网络连接。
2.一种基于协程异步IO的漏洞扫描系统,包括处理器,适于实现各指令;以及存储设备,适于存储多条指令,所述指令适用于由处理器加载并执行:
A、初始化事件选择器;
B、初始化输出队列;
C、创建输出线程;
所述输出线程能实现:c1) 从输出队列中获取一条扫描结果;c2) 写入日志文件;c3)判断是否全部任务结束;c4) 如未完成则回到c1)执行;
D、创建状态显示线程;
所述状态显示线程能实现:d1) 获取当前全局扫描任务统计信息;d2) 显示当前统计信息;d3) 判断是否全部任务结束;d4) 如未结束则回到d1)执行;
E、读取任务配置,包括所有待探测目标、探测输出文件名、最大探测任务;所述最大探测任务是指,对每个扫描目标生成一个协程扫描任务,此处根据配置控制最大任务数,最大任务数即协程池的大小;
初始化一个任务输入队列,待探测目标信息包括ip地址、域名、端口信息;
F、根据最大任务数和待探测目标生成一组协程扫描任务;
所述协程扫描任务能实现:f1) 准备目标扫描参数;f2) 采用权利要求1所述的基于协程异步IO的漏洞探测方法进行探测;f3) 向输出队列输出扫描结果;f4) 完成一个扫描任务;
G、等待,直到当前任务数小于最大任务数;
H、判断是否全部扫描结束或是否被被要求终止扫描:如未结束且未被要求终止扫描,则回到F执行;否则,结束扫描。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810103601.3A CN108156181B (zh) | 2018-02-01 | 2018-02-01 | 一种基于协程异步io的漏洞探测方法及其漏洞扫描系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810103601.3A CN108156181B (zh) | 2018-02-01 | 2018-02-01 | 一种基于协程异步io的漏洞探测方法及其漏洞扫描系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108156181A CN108156181A (zh) | 2018-06-12 |
CN108156181B true CN108156181B (zh) | 2020-10-20 |
Family
ID=62459537
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810103601.3A Active CN108156181B (zh) | 2018-02-01 | 2018-02-01 | 一种基于协程异步io的漏洞探测方法及其漏洞扫描系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108156181B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109815028B (zh) * | 2018-12-27 | 2022-02-08 | 汉海信息技术(上海)有限公司 | 数据同步的系统、方法、装置和计算机存储介质 |
CN109885386A (zh) * | 2019-01-03 | 2019-06-14 | 北京潘达互娱科技有限公司 | 一种多任务执行的方法、装置及电子设备 |
CN111078323B (zh) * | 2019-10-12 | 2024-06-28 | 平安科技(深圳)有限公司 | 基于协程的数据处理方法、装置、计算机设备及存储介质 |
CN111190569B (zh) * | 2019-12-30 | 2022-05-13 | 中国科学技术大学 | 一种基于Intel QAT的同态加密卸载方法 |
CN111767159A (zh) * | 2020-06-24 | 2020-10-13 | 浙江大学 | 一种基于协程的异步系统调用系统 |
CN113177422B (zh) * | 2020-09-30 | 2024-02-20 | 深圳华智融科技股份有限公司 | 卡检测方法、计算机设备和计算机可读存储介质 |
CN112286595A (zh) * | 2020-10-30 | 2021-01-29 | 深圳市九九互动科技有限公司 | Lua语言的异步处理方法、装置、计算机设备和存储介质 |
CN112632559A (zh) * | 2020-12-24 | 2021-04-09 | 北京天融信网络安全技术有限公司 | 漏洞自动验证方法、装置、设备及存储介质 |
CN113553172B (zh) * | 2021-06-11 | 2024-02-13 | 济南浪潮数据技术有限公司 | 一种ipmi服务执行方法、装置及存储介质 |
CN114896172A (zh) * | 2022-06-17 | 2022-08-12 | 深信服科技股份有限公司 | 一种异常检测方法、装置、设备及存储介质 |
CN115567425B (zh) * | 2022-08-22 | 2024-07-23 | 清华大学 | 一种互联网分布式主动探测方法及系统 |
CN116823162B (zh) * | 2023-06-27 | 2024-04-09 | 上海螣龙科技有限公司 | 一种网络资产扫描任务管理方法、系统及计算机设备 |
CN117850994A (zh) * | 2023-12-11 | 2024-04-09 | 天翼云科技有限公司 | 一种基于异步事件回调的协程调度模型与方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103929429A (zh) * | 2014-04-24 | 2014-07-16 | 北京邮电大学 | 基于RESTful Web服务的网络漏洞扫描系统及方法 |
CN106503563A (zh) * | 2016-10-17 | 2017-03-15 | 成都知道创宇信息技术有限公司 | 基于通用框架的批量漏洞检测方法 |
CN106650434A (zh) * | 2016-12-27 | 2017-05-10 | 四川大学 | 一种基于io序列的虚拟机异常行为检测方法与系统 |
CN106844017A (zh) * | 2015-12-03 | 2017-06-13 | 阿里巴巴集团控股有限公司 | 用于网站服务器处理事件的方法和设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8639813B2 (en) * | 2008-11-25 | 2014-01-28 | Citrix Systems, Inc. | Systems and methods for GSLB based on SSL VPN users |
-
2018
- 2018-02-01 CN CN201810103601.3A patent/CN108156181B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103929429A (zh) * | 2014-04-24 | 2014-07-16 | 北京邮电大学 | 基于RESTful Web服务的网络漏洞扫描系统及方法 |
CN106844017A (zh) * | 2015-12-03 | 2017-06-13 | 阿里巴巴集团控股有限公司 | 用于网站服务器处理事件的方法和设备 |
CN106503563A (zh) * | 2016-10-17 | 2017-03-15 | 成都知道创宇信息技术有限公司 | 基于通用框架的批量漏洞检测方法 |
CN106650434A (zh) * | 2016-12-27 | 2017-05-10 | 四川大学 | 一种基于io序列的虚拟机异常行为检测方法与系统 |
Also Published As
Publication number | Publication date |
---|---|
CN108156181A (zh) | 2018-06-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108156181B (zh) | 一种基于协程异步io的漏洞探测方法及其漏洞扫描系统 | |
US10678550B2 (en) | Capturing snapshots of offload applications on many-core coprocessors | |
US9501319B2 (en) | Method and apparatus for scheduling blocking tasks | |
JP5258019B2 (ja) | アプリケーション・プロセス実行の範囲内での非決定論的オペレーションを管理、ロギング、またはリプレイするための予測方法 | |
TWI534709B (zh) | 用於進行虛擬機器分支和平行執行的電腦實施方法、電腦系統及電腦可讀取儲存媒體 | |
US7613597B2 (en) | Non-intrusive method for simulation or replay of external events related to an application process, and a system implementing said method | |
TWI559153B (zh) | 分散式計算架構 | |
WO2018112855A1 (zh) | 一种虚拟化方法、装置、及电子设备、计算机程序产品 | |
CN103744716A (zh) | 一种基于当前vcpu调度状态的动态中断均衡映射方法 | |
US8739151B1 (en) | Computer system using in-service software upgrade | |
CN108228330B (zh) | 一种串行化的多进程任务调度方法和装置 | |
US9703905B2 (en) | Method and system for simulating multiple processors in parallel and scheduler | |
Zhao et al. | Efficient sharing and fine-grained scheduling of virtualized GPU resources | |
JP2000066904A (ja) | マルチタスク制御方法及び記憶媒体 | |
CN104102491B (zh) | 单片机实时任务与耗时任务并行执行的实现方法和系统 | |
Schäfer et al. | Workload partitioning and task migration to reduce response times in heterogeneous computing environments | |
Pufek et al. | Achieving Efficient Structured Concurrency through Lightweight Fibers in Java Virtual Machine | |
CN113687926A (zh) | 一种服务器资产扫描的控制方法、装置及设备 | |
CN113472557A (zh) | 一种虚拟网元处理方法、装置及电子设备 | |
CN116360941A (zh) | 一种面向多核dsp的并行计算资源自组织调度方法及系统 | |
CN114610485A (zh) | 资源处理系统以及方法 | |
CN111258715B (zh) | 多操作系统渲染处理方法及装置 | |
CN114298313A (zh) | 一种人工智能计算机视觉推理方法 | |
TWI697217B (zh) | 用以重複執行無服務器程式之容器控管系統及其方法 | |
Luo et al. | {DepFast}: Orchestrating Code of Quorum Systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |