漏洞POC是什么/一种基于漏洞poc实现安卓系统漏洞检测的方法与流程_小白信息安全自学
本发明属于安卓系统安全防护技术领域,尤其涉及一种安卓系统漏洞检测方法。
背景技术:
随着互联网和智能移动终端在人们生活中的日益普及,移动安全问题和安全隐患也随之愈来愈严重。目前在移动终端上植入恶意代码进行网络犯罪的事件呈增长趋势,移动终端的用户正在面临前所未有的安全风险。尤其是系统的智能手机,基于源代码的开源性,其开发的各类智能产品存在的安全风险更是备受人们关注。安卓系统存在漏洞可能会被各种病毒木马利用,从而遭受网银被盗、被监听监视、无端扣费、隐私泄露、成为病毒传播源等诸多损害。因此,及早发现安卓系统的漏洞对安卓设备的整体安全非常重要。另一方面,目前安卓系统版本繁多,如果使用人工手动检测,必然耗费大量人力物力,几乎是不可完成的任务,因此,自动化检测十分必要。
幸运的是,目前实现安卓系统漏洞检测的基础技术已经成熟。cve的英文全称是“s&”,该库公开了大量漏洞细节,并提供了相应的验证代码,即poc代码,通过执行poc代码即可以验证漏洞是否存在,从而达到漏洞检测的目标;jni技术是程序开发的一种技术,通过该技术可以方便的实现java代码和c代码的混合编程,从而可以方便的实现安卓系统的内核接口调用,达到深度检测的目的。yaml是一种以数据为中心的标记语言,是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互。使用该语言可以完善的描述漏洞细节,同时又方便程序的处理。
现有技术中,针对安卓系统的漏洞检测主要有以下几种:a).基于特征匹配的漏洞检测;b).基于公开库的漏洞攻击行为分析。
现有基于特征匹配的漏洞检测方案中,检测过程是一种被动检测,主要依靠漏洞规则,完成检测过程,存在无动态行为检测的缺点。
基于公开库的漏洞攻击行为分析,通过分析各个公开库的内容,找到攻击行为和攻击过程的对应关系,为系统加固提供知识积累。该方法应用于系统漏洞检测,存在应用目标不匹配,没有与第三方系统的通信接口,与其他检测设备集成不容易的缺点。
技术实现要素:
本发明的目的在于:提供一种基于漏洞poc实现安卓系统漏洞检测的方法,以解决现有技术中检测效率低、检测内容不全面和用户操作体验不佳的技术问题,弥补了现有方案的不足。
本发明采用的技术方案如下:
一种基于漏洞poc实现安卓系统漏洞检测的方法,其特征在于,包括以下步骤:
步骤一:从公开漏洞网站爬取所需漏洞信息,使用yaml建立具体信息的漏洞描述文件;从公开漏洞网站爬取所需的poc文件,并针对性的转化为c或java版本的poc代码,使用yaml及poc代码建立检测所用的漏洞库;
步骤二:开发用于检测的app程序,并将步骤一获得的poc代码集成到app程序中;
步骤三:用户通过上位检测系统将app程序安装到被检测安卓终端上;app程序启动,并通过adb桥建立与上位检测系统的通信链路;
步骤四:上位检测系统向app程序发送开始检测指令;app程序接收开始检测指令后,初始化漏洞库管理引擎和漏洞检测引擎;
步骤五:app程序获取被检测安卓终端的安卓系统信息,漏洞库管理引擎根据安卓系统信息加载相应的漏洞检测单元列表;
步骤六:漏洞检测引擎逐一执行加载后的漏洞检测单元,执行检测任务;每一个漏洞检测单元执行相应的poc代码,记录检测结果,并由漏洞检测引擎收集每个漏洞检测单元的检测结果;
步骤七:上位检测系统向漏洞检测引擎下达生成检测报告的指令;漏洞检测引擎接收到生成检测报告的指令后,结合检测结果和相应的漏洞描述文件生成最终检测报告,并将最终检测报告通过通信链路发回上位检测系统,供用户查看。
进一步的,还包括步骤八:上位检测系统自动删除安装的app程序,断开与被检测安卓终端的连接,检测完成。
进一步的,采用增量式网络爬虫的方式爬取公开漏洞的网站,获取漏洞信息。
进一步的,待检测安卓终端包括手机、平板、智能手表、机顶盒。
进一步的,通信链路为链路。
进一步的,建立adb桥与app程序的通信链路的步骤包括:
3.1:启动线程,并以管道的方式与adb创建链接;
3.2:启动工作者线程,负责发送adb命令;
3.3:创建两个,并启动adb服务;
3.4:执行“”列举设备;
3.5:获取设备的序列号;
3.6:将服务器apk安装到设备上,如果设备上已预置,此步骤忽略;
3.7:启动服务器;
3.8:启动一个后台服务代码;
3.9:创建连接,完成adb桥建立与app程序的通信链路搭建。
综上所述,由于采用了上述技术方案,本发明的有益效果是:
1.本发明采用爬虫的方式获取漏洞信息,有利于加快检测速度,又采用检测设备(上位检测系统)来安装app程序的方式检测,解决了现有技术中检测效率低,检测内容不全面和用户操作体验不佳的技术问题;本发明公开的方法不仅检测效率高,稳定性强,检测内容全面,而且二次开发门槛低,漏洞维护工作量少,可方便地应用于安卓系统漏洞检测平台建设或独立检测终端的集成。
2.上位检测系统自动删除安装的app程序,断开与被检测安卓终端的连接,不在被检测安卓终端中留下该app程序,提高用户体验。
3.采用通信的方式,能够有效减少检测时间。
附图说明
图1为一种基于漏洞poc实现安卓系统漏洞检测方法的流程图。
具体实施方式
本说明书中公开的所有特征,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合。
下面结合图1对本发明作详细说明。
一种基于漏洞poc实现安卓系统漏洞检测的方法,属于主动检测范畴,检测的执行者为app程序,包括以下步骤:
步骤一(s1):从cve等公开漏洞网站爬取所需漏洞信息,使用yaml建立具体信息的漏洞描述文件;
步骤二:从公开漏洞网站爬取所需的poc文件,并针对性的转化为c或java版本的poc代码,使用yaml及poc代码建立检测所用的漏洞库;
步骤三:开发用于检测的app程序,该app程序具备漏洞库管理、漏洞执行、报表生成、通信等功能,并将步骤二获得的poc代码集成到app程序中;
步骤四:用户通过上位检测系统将app程序安装到被检测安卓终端(包括手机、平板、智能手表、机顶盒等)上;
步骤五:app程序启动,并通过adb桥建立与上位检测系统的通信链路(链路),基于该链路,app程序可以接受检测命令,反馈检测过程,返回检测报表;
步骤六:上位检测系统向安装在待检测安卓终端上的app程序发送开始检测指令;
步骤七:app程序接收开始检测指令后,初始化漏洞库管理引擎和漏洞检测引擎,准备实际检测;
步骤八:app程序获取被检测安卓终端安卓系统的版本等信息,漏洞库管理引擎根据安卓系统信息加载相应的漏洞检测单元列表;
步骤九:漏洞检测引擎逐一执行加载后的漏洞检测单元,执行检测任务;
步骤十:每一个漏洞检测单元执行相应的检测代码(即poc代码),并记录检测结果;
步骤十一:漏洞检测引擎收集每个漏洞检测单元的检测结果;
步骤十二:上位检测系统向漏洞检测引擎下达生成检测报告的指令;
步骤十三:漏洞检测引擎接收到上位检测系统下达的生成检测报告的指令后,结合检测结果和相应的漏洞描述文件生成最终检测报告,并将最终检测报告通过通信链路(链路)发回上位检测系统,供用户上位检测系统中查看最终检测报告;
步骤十四:上位检测系统自动删除安装的app程序,断开与被检测安卓终端的连接,检测完成。
漏洞检测引擎收集每个漏洞检测单元的检测结果,为生成检测报告做数据准备整个检测过程中,app程序与上位检测系统,保持连接状态,上位检测系统下达具体指令,app程序执行具体指令,反馈检测过程,返回检测结果;
所述方法中,检测对象只适用于安卓系统,不适用于、ios等系统的漏洞检查;
所述方法中,检测方法属于主动检测范畴,检测的执行者为检测app;
所述方法中,检测依赖通过cve等漏洞网站建立的poc漏洞库。
所述方法中,检测应用具有漏洞库管理、漏洞检测单元管理、通信通道、检测报表动态生成等功能。
所述方法中,漏洞检测引擎负责检测指令的接收和执行,以及检测结果的汇总收集工作,并可根据检测结果和对应的漏洞信息,动态生成检测报表。
所述方法中,漏洞库管理引擎负责漏洞库的加载、过滤、添加、删除等工作,为漏洞检测引擎提供用于检测的漏洞列表,并提供poc代码和相应漏洞信息的关系维护功能;
所述方法中,通过方式提供检测应用与上位检测系统等第三方系统的通信链路。
所述方法中,提供了友好的人机界面,大大降低了使用者的操作难度。
通过此方法可以完成安卓系统漏洞检测,该方法操作系统兼容性好,检测效率高,稳定性强,检测内容全面,二次开发门槛低,系统维护工作量少,可方便地应用于安卓系统漏洞检测平台建设或独立检测终端的集成。
所述从公开漏洞的网站爬取所需漏洞信息,采用增量式网络爬虫的方式爬取公开漏洞的网站,获取漏洞信息。
增量式网络爬虫(r)是指对已下载网页采取增量式更新和只爬行新产生的或者已经发生变化网页的爬虫,它能够在一定程度上保证所爬行的页面是尽可能新的页面。和周期性爬行和刷新页面的网络爬虫相比,增量式网络爬虫只会在需要的时候爬行新产生或发生更新的页面,并不重新下载没有发生变化的页面,可有效减少数据下载量,及时更新已爬行的网页,减小时间和空间上的耗费,但是增加了爬行算法的复杂度和实现难度。增量式网络爬虫的体系结构包含爬行模块、排序模块、更新模块、本地页面集、待爬行url集以及本地页面url集。
增量式网络爬虫有两个目标:保持本地页面集中存储的页面为最新页面和提高本地页面集中页面的质量。为实现第一个目标,增量式网络爬虫需要通过重新访问网页来更新本地页面集中页面内容,常用的方法有:1)统一更新法:爬虫以相同的频率访问所有网页,不考虑网页的改变频率;2)个体更新法:爬虫根据个体网页的改变频率来重新访问各页面;3)基于分类的更新法:爬虫根据网页改变频率将其分为更新较快网页子集和更新较慢网页子集两类,然后以不同的频率访问这两类网页。
增量式网络爬虫需要对网页的重要性排序,策略有:广度优先策略、优先策略等。ibm开发的是一个功能强大的增量式网络爬虫,它采用一个优化模型控制爬行过程,并没有对页面变化过程做任何统计假设,而是采用一种自适应的方法根据先前爬行周期里爬行结果和网页实际变化速度对页面更新频率进行调整。北京大学的天网增量爬行系统旨在爬行国内web,将网页分为变化网页和新网页两类,分别采用不同爬行策略。为缓解对大量网页变化历史维护导致的性能瓶颈,它根据网页变化时间局部性规律,在短时期内直接爬行多次变化的网页,为尽快获取新网页,它利用索引型网页跟踪新出现网页。
网络爬虫的基本工作流程如下:
(1)首先选取一部分精心挑选的种子url;
(2)将这些url放入待抓取url队列;
(3)从待抓取url队列中取出待抓取在url,解析dns,并且得到主机的ip,并将url对应的网页下载下来,存储进已下载网页库中。此外,将这些url放进已抓取url队列。
(4)分析已抓取url队列中的url,分析其中的其他url,并且将url放入待抓取url队列,从而进入下一个循环。
从爬虫的角度对互联网进行划分:
对应的,可以将互联网的所有页面分为五个部分:
(1)已下载未过期网页;
(2)已下载已过期网页:抓取到的网页实际上是互联网内容的一个镜像与备份,互联网是动态变化的,一部分互联网上的内容已经发生了变化,这时,这部分抓取到的网页就已经过期了;
(3)待下载网页:也就是待抓取url队列中的那些页面;
(4)可知网页:还没有抓取下来,也没有在待抓取url队列中,但是可以通过对已抓取页面或者待抓取url对应页面进行分析获取到的url,认为是可知网页;
(5)还有一部分网页,爬虫是无法直接抓取下载的。称为不可知网页。
poc文件为一段说明或者是一个攻击样例,将之转换为c或java代码所采用的方法为:首先poco读取配置文件:
使用yaml把poc文件建立漏洞文件库,其特征在于:
(1)所有的消息都被存储并通过类poco::传递:
消息源用来描述日志消息的源。通常状态下,使用poco::的名字来命名。因此应该合理的命名poco::的名字。
a.一个新的将继承它的上级日志组件的级别和通道。比如说,上例中"..cgi"会继承"."的日志级别和通道。
b.一个被完全创建,它就将与它的上级无关。完全创建指,拥有自己的和日志级别,而不是和其它共用。换句话说,改变日志级别和通道将不会影响的到其他的已经存在的对象。
c.尽可能的对日志对象一次设置所有的参数,比如说日志级别和通道。
访问日志对象:
poco库在内部管理了一个全局的日志map。用户不需要自己创建对象,用户可以向poco库申请一个对象的引用。poco会根据需要创建新的日志对象。
&get(::&name)
使用上面函数可以获取到给定名称所关联的对象的引用,如果有必要,poco库会在内部创建一个对象。出于效率上的考虑,poco使用文档推荐用户保存所使用的对象的引用,而不是频繁的调用此函数。理所当然的,poco库能保证对象的引用始终有效。
(2)通道的子类负责传递消息给最终目的地。比如说控制台或者日志文件等。
每一个poco::类对象都对应着一个poco::类对象。在poco库内部已经实现了各种poco::子类,用于向不同的目标输出日志,比如说控制台,日志文件,或者系统日志工具。用户可以定义自己的类。在内部poco::使用了引用计数技术来实现内存管理。
(3)控制台通道把消息内容写入了标准输出流,并且不支持配置属性,它是根默认关联的通道。
(4)控制台通道把消息内容写入控制台,并且不支持配置属性。向控制台输出时,支持utf-8编码。
(5)空白通道会抛弃所有发向它的消息,并且忽略所有()函数设置的属性。
(6)简单文件通道实现了向日志文件输出的简单功能。对于每一个消息,其内容都会被添加到文件中,并使用一个新行输出。简单日志文件支持文件循环覆盖,一旦主日志文件超过确定的大小,第二个日志文件会被创建,如果第二个日志文件已经存在,会被截断。而当第二个日志文件超过大小限制,主日志文件将被覆盖。如此循环。
(7)文件通道提供了完整的日志支持。每一个消息的内容都会被添加到文件中,并使用一个新行输出。支持按文件大小和时间间隔对日志进行循环覆盖,支持自动归档(使用不同的文件命名策略),支持压缩(gzip)和清除(根据已归档文件的日期或数量)归档日志文件。
(8)事件日志通道使用于操作系统中,它将把日志写到"事件日志"中,使用事件查看器来查看系统事件日志时,事件查看器必须要找到.dll,否则记录的日志消息将不能够被正常显示。
(9)统日志通道()会把日志输出到本地系统日志守护程序。
包含类的网络库,可以通过基于udp的系统日志协议()把日志输出到远程的日志守护程序上。
(10)异步通道:
poco::允许在另外一个分离的线程中去记录通道的日志。这可以把产生日志的线程和记录日志的线程分开而实现解耦。所有的消息先被存储在一个先进先出的消息队列中,然后由一个单独的线程从消息队列中获取,并最终把消息发送到输出通道。
(11)拆分通道使用poco::可以把消息发送给一个或者多个其他的通道,即输出日志在多个目标中。使用下面的函数可以在中加入一个新通道:
poco::类提供了一个日志的输出流接口。可以在日志流中,格式化输出日志记录消息。日志消息必须以std::endl(或cr和lf字符)结尾。
在完成adb桥接并与app程序建立通信后,开始向app发送指令。具体操作如下:
当app程序收到发送的命令时,初始化漏洞管理引擎,漏洞管理引擎主要完成把之前收集到的漏洞打包成库,待检测时完成匹配工作。程序的机密性检测:有代码混淆检测、dex保护监测、so保护监测、程序签名检测、完整性校验、权限管理检测。组件安全检测:有安全、安全、安全、安全、安全、安全。数据安全检测:有调试信息、输入检查、数据传输完整性、远程数据通讯协议、证书验证、数据访问控制、重放攻击、会话安全。业务安全检测:包括用户登录、密码管理、支付安全、身份认证、超时设置。其他检测:模拟器检测、键盘记录、界面劫持、进程保护、动态调试。
设备中存在的漏洞可能涉及到有关内部的层面。例如,就是一个存在于内核的漏洞,其也可能存在于特定的框架。有时一些内核漏洞很难进行检测,且可能导致系统不稳定。这款工具所承担的任务并不包括检测可能导致用户设备不稳定的问题,因此可能忽略检查可能会导致这些类型的问题。目前的框架十分简单,包含一个漏洞检测向量。对于漏洞的具体实现方法大相径庭。
本发明未详细阐述的部分属于本领域公知技术,本领域技术人员根据已有的描述已能够在不付出创造性劳动的前提下进行实施,因此,不再赘述。
技术特征:
技术总结
本发明公开了一种基于漏洞poc实现安卓系统漏洞检测的方法,包括以下步骤:建立漏洞描述文件和漏洞库;开发APP程序;将APP程序安装到被检测安卓终端上;上位检测系统通过ADB桥建立与APP程序的通信链路;APP程序接收开始检测指令后,开始检测工作;APP程序根据安卓系统信息加载相应的漏洞检测单元列表;漏洞检测引擎逐一执行加载后的漏洞检测单元,执行检测任务和收集检测结果;漏洞检测引擎结合检测结果和相应的漏洞描述文件生成最终检测报告,并将最终检测报告通过通信链路发回上位检测系统;删除APP程序,断开连接,检测完成。本发明解决了现有技术中检测效率低、检测内容不全面和用户操作体验不佳的技术问题,弥补了现有方案的不足。
技术研发人员:甘刚
受保护的技术使用者:成都联宇云安科技有限公司
技术研发日:2017.05.23
技术公布日:2017.10.20
~
网络安全学习,我们一起交流
~