课程:《密码与安全新技术》
班级:1792班
姓名:刘霄
学号:20179223
上课老师:谢四江
上课日期:2018年5月10日
必修/选修:必修
学习总结
本次课程由王志强老师为我们讲解有关——基于模糊测试的漏洞挖掘及攻防技术
引言
安全漏洞:是指信息系统在设计、实现或者运行管理过程中存在的缺陷或不足,从而使攻击者能够在未授权的情况下利用这些缺陷破坏系统的安全策略。
安全漏洞是网络攻击和防御的关键点。
-
攻击:根据目标存在的漏洞,编写攻击程序。
-
防御:提前挖掘出漏洞,并修复。
安全事件层出不穷
-
网络安全事件的根本原因在于:
安全漏洞
-
漏洞挖掘:找漏洞(攻防核心竞争力)
-
漏洞利用:触发漏洞(攻,证)
-
漏洞防御:修复、提前防御
常见漏洞挖掘技术
手工测试
定义:由测试人员手工分析和测试被测目标,发现漏洞的过程,是最原始的漏洞挖掘方法。
优点:人—主观能动性—显而易见和复杂不易见明显没有、没有明显
缺点:人—无规律可循、不可大规模等
补丁对比
定义:一种通过对比补丁之间的差异来挖掘漏洞的技术。文本(难定位,输出难理解),汇编指令(易理解,输出范围大,难定位),结构化(迅速直观,流行)
优点:发现速度快
缺点:已知漏洞
常见工具:PatchDiff2、bindiff
程序分析
静态
定义:是指在不运行计算机程序的条件下,通过词法分析、语法分析、语义分析、控制流分析、污点分析等技术对程序代码进行扫描,验证代码是否满足规范性,安全性带指标的一种代码分析技术。
优点:覆盖率100%,自动化程度高
缺点:漏报和误报(RICE,程序分析问题不可判定)
数据流分析:Fortify SCA、Coverity Prevent、FindBugs等
污点分析:Pixy、TAJ(基于WALA)
符号执行:Clang、KLEE
模型检测:BLAST、MAGIC、MOPS
动态
定义:在运行计算机程序的条件下,验证代码是否满足规范性、安全性等指标的一种代码分析技术。
一般通过插桩
技术分析程序的异常行为。
插桩技术是指在保证被测程序逻辑完整性的基础上在程序的关键位置插入一些“桩”,即加入一些测试代码
,然后执行插桩后的程序,通过“桩”的执行获取程序的控制流和数据流信息,进而分析程序的异常行为。
优点:自动化程度高、覆盖率较高
缺点:漏报和误报(RICE,程序分析问题不可判定)
工具:Android:Xposed
二进制审核
定义:源代码不可得,通过逆向获取二进制代码,在二进制代码层次上进行安全评估。
优点及缺点:同静态审核
逆向导致信息丢失,理解困难,甚至引入逻辑错误。
二进制及编辑工具:IDA Pro、Ollydbg、UltraEdit、Hex Workshop以及WinHex
模糊测试
定义:通过向被测目标输入大量的畸形数据并检测其异常发现漏洞。
关键:测试用例构造,自动化。
优点:无须源码、误报低、自动化程度高
缺点:覆盖低
工具:Peach、Sulley、Autodafe、SPIKE等
漏洞挖掘示例
路由器协议漏洞挖掘
系统架构
实验
协议:SNMP
结果
由老师给我们讲解的过程中,得到以下结果:
(1) 当远程向路由器的161端口发送大量畸形SNMP Get/Set请求报文时,Cisco路由器和华为路由器的进程Agent出现CPU使用率异常,分别为98%和100%
(2) 当远程发送SNMP空数据包时,Cisco路由器和华为路由器的CPU使用率出现异常,但远小于100%,发生“轻度拒绝服务”。该异常并不会造成路由器拒绝服务,但会导致路由器产生一定的丢包和网络的不稳定,并对网络的性能造成影响。
(3) 当远程发送一个畸形ASN.1/BER编码(超长字符串)的SNMP数据包时,wireshark捕获并解析数据包,导致wireshark 1.4等多个版本栈溢出,导致空指针引用并崩溃。此漏洞是由国家计算机网络入侵防范中心渗透测试小组使用PROTOS工具发现(CVE-2010-3445),在本次实验中,使用生成的畸形数据包重现了该漏洞,使用Ollydbg调试发现ESP空指针异常。
(4) 当向SNMP协议端口(161)远程发送一个使用“x”等字符构造的畸形UDP数据包,科来网络分析系统7.2.1及以前版本均会因边界条件检查不严导致崩溃,该漏洞的bugtraq ID为49621,CNNVD编号为CNNVD-201109-233。
NFC漏洞挖掘
目标选择
从数据可以看出,NFC
手机逐渐开始流行和推广
。
NFC(Near Field Communication)技术是一种近距离
的双向高频无线
通信技术,能够在移动终端、智能标签等设备间进行非接触式数据交换
。
NFC技术具有通信距离短
、一次只和一台设备连接、硬件安全模块加密等特点,具有较好的保密性和安全性
。
目标选择:NFC手机系统和应用!
系统架构
实验
实验结果
-
NFC服务拒绝服务
漏洞:Google原生漏洞,影响Android4.4以下支持NFC的所有版本,此外,包含三星、华为、小米、联想等定制系统。 -
打开手电筒
漏洞:华为、小米等定制系统设计缺陷,在启动com.androi d.systemui的包时,可导致MIUI系统在触碰该标签时自动打开系统手电筒。 -
打开蓝牙
漏洞:逻辑漏洞,使用系统版本为Android4.1.3以下等多个版本的NFC手机触碰蓝牙配对标签,导致蓝牙被自动打开。 -
打开wifi
漏洞:逻辑漏洞,受影响的系统是MIUI系统5.30等多个版本。使用手机触碰包含wifi连接报文的标签后,系统wifi会被自动打开。(正常的连接报文) -
应用程序拒绝服务
漏洞:拒绝服务漏洞,报文解析错误。 -
屏幕亮度漏洞
漏洞:设计缺陷,使用NFC手机触碰标签可以将屏幕亮度设置在0-255的任意值,突破应用程序的亮度值限制(5-100)。
攻防示例
路由器例子
NFC
从被动防御方面来看
路由器
- 过滤特殊字符,eg. 科来网络分析系统对x的处理;
- 限制特定端口的传输速率;
- 阻塞SNMP请求的端口;
- 折中:编写ACL
NFC
- 协议解析:检查长度字段、数值范围、格式化字符串、特殊字符等;
- 设计缺陷:修改设计逻辑,例如,蓝牙、wifi、屏幕亮度等;
被动防御:滞后性
主动防御
针对路由器和软件
成熟产品
入侵检测(Snort/OSSEC HIDS/BASE/Sguil……)
防火墙
杀毒软件
问题与解决
何为模糊测试?
模糊测试是一种介于完全的手工渗透测试与完全的自动化测试之间的安全性测试类型。它充分利用了机器的能力:随机生成和发送数据;同时,也尝试将安全专家在安全性方面的经验引入进来。从执行过程来说,模糊测试的执行过程非常简单:
测试工具通过随机或是半随机的方式生成大量数据;
测试工具将生成的数据发送给被测试的系统(输入);
测试工具检测被测系统的状态(如是否能够响应,响应是否正确等);
根据被测系统的状态判断是否存在潜在的安全漏洞。
为了简单起见,假定我们要测试的应用是一个C/S应用的服务端程序。这个程序运行在Unix平台上,名字叫做Tserver。我们唯一知道的信息就是客户端和Tserver之间使用基于TCP/IP的自定义协议进行通讯。
这种情况下,我们该如何尝试找到应用系统中可能的漏洞?
方法1:
如果我们手头上有Tserver的源代码,通过代码审查显然可以找到可能的漏洞。就算没有源代码,通过逆向工程方式,用代码审查的方式也可以达到找到漏洞的目的。当然,这必然要求审查者具有足够好的技能,而且,被测应用规模越大,需要付出的成本也就越高。
方法2:
我们可以在知道产品服务器端和客户端的通信协议后,根据协议的格式、定义,自己准备大量的测试数据,从客户端发送给服务器端,从而试图找到一些安全漏洞。
可以阅读《模糊测试——强制发掘安全漏洞的利器》http://item.jd.com/11350086.html 来了解更多模糊测试。
感想与体会
本次课程的学习,本人也是第一次了解模糊测试的漏洞挖掘及攻防技术相关内容,通过课堂老师的视频演示,此项技术应用在手机上时,我们怎么通过手机上照的照片,及时传输在电脑上,使我对更容易理解课堂内容。
模糊测试能够说明 bug 在程序中的出现。并不证明不存在这样的 bug。而且,通过模糊测试会极大地提高我们对应用程序的健壮性及抵御意外输入的安全性的自信心。如果我们用 24 小时对程序进行模糊测试而其依然无事,那么随后同种类型的攻击就不大可能再危及到它(并不是不可能,提醒只是可能性很小)。如果模糊测试揭示出程序中的 bug,就应该进行修正,而不是当 bug 随机出现时再对付它们。模糊测试通过明智地使用校验和、XML、垃圾收集和/或基于语法的文件格式,更有效地从根本上加固了文件格式。
模糊测试是一项用于验证程序中真实错误的重要工具,也是所有意识到安全性问题且着力于程序健壮性的程序员们的工具箱中所必备的工具。