2017-2018-2 20179215 《密码与安全新技术》第5周作业
2017-2018-2 20179215 《密码与安全新技术》第5周作业
课程:《密码与安全新技术》
班级: 1792
姓名: 袁琳
学号:20179215
上课教师:谢四江
上课日期:2018年5月10日
必修/选修: 必修
学习内容总结
1.概念
安全漏洞:是指信息系统在设计、实现或者运行管理过程中存在的缺陷或不足,从而使攻击者能够在未授权的情况下利用这些缺陷破坏系统的安全策略。安全漏洞是网络攻击和防御的关键点。
- 攻击:根据目标存在的漏洞,编写攻击程序(exploit)。
- 防御:提前挖掘出漏洞,并修复。
2.常见漏洞挖掘技术
(1)手工测试
手工测试是由测试人员手工分析和测试被测目标,发现漏洞的过程,是最原始的漏洞挖掘方法。
- 优点:能发挥人的主观能动性
- 缺点:人无规律可循、不可大规模
(2)补丁比对
补丁对比是一种通过对比补丁之间差异来挖掘漏洞的技术。
- 优点:发现速度快
- 缺点:只能发现已知的漏洞
常见工具:PatchDiff2、bindiff
(3)程序分析
包括静态和动态。
定义:是指在不运行计算机程序的条件下,通过词法分析、语法分析、语义分析、控制流分析、污点分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性等指标的一种代码分析技术。
- 优点:覆盖率100%,自动化程度高
- 缺点:漏报和误报(RICE,程序分析问题不可判定)
工具:
- 数据流分析:Fortify SCA、Coverity Prevent、FindBugs等
- 污点分析:Pixy、TAJ(基于WALA)
- 符号执行:Clang、KLEE
- 模型检测:BLAST、MAGIC、MOPS
(4)二进制审核
定义:源代码不可得,通过逆向获取二进制代码,在二进制代码层次上进行安全评估
- 优点:同静态审核
- 缺点:逆向导致信息丢失,理解困难,甚至引入逻辑错误。
二进制及编辑工具:IDA Pro、Ollydbg、UltraEdit、Hex Workshop以及WinHex
(5)模糊测试
定义:通过向被测目标输入大量的畸形数据并监测其异常来发现漏洞
关键:测试用例构造,自动化。
- 优点:无须源码、误报低、自动化程度高
- 缺点:覆盖率低
工具:Peach、Sulley、Autodafe、SPIKE等
3.漏洞挖掘示例
- 路由器协议漏洞挖掘
- NFC漏洞挖掘
(1)路由器协议漏洞挖掘
-
目标选择:Cisco为例
-
系统架构
- 实验
- 结果
当远程向路由器的161端口发送大量畸形SNMP Get/Set请求报文时,Cisco路由器和华为路由器的进程Agent出现CPU使用率异常,分别为98%和100%。
当远程发送SNMP空数据包时,Cisco路由器和华为路由器的CPU使用率出现异常,但远小于100%,发生“轻度拒绝服务”。
当远程发送一个畸形ASN.1/BER编码(超长字符串)的SNMP数据包时,wireshark捕获并解析数据包,导致wireshark 1.4等多个版本栈溢出,导致空指针引用并崩溃。
当向SNMP协议端口(161)远程发送一个使用“\x”等字符构造的畸形UDP数据包,科来网络分析系统7.2.1及以前版本均会因边界条件检查不严导致崩溃。
(2)NFC漏洞挖掘
- 目标选择:手机
NFC(Near Field Communication)技术是一种近距离的双向高频无线通信技术,能够在移动终端、智能标签(Tag)等设备间进行非接触式数据交换。
NFC技术具有通信距离短、一次只和一台设备连接(1V1)、硬件安全模块加密等特点,具有较好的保密性和安全性
- 系统架构
- 实验
- 结果
4.常见工具-Android
(1)静态分析工具
Androguard是一个静态工具集。
包含Androaxml、Androapkinfo、Androcsign、Androdd、Androdump、Androgexf、Androlyze、Andromercury、Androrisk、Androsign、Androsim、Androxgmml、Apkviewer;
功能:反汇编/反编译/静态分析apk/相似度对比/测试混淆程度/恶意代码检测/………………………
http://code.google.com/p/androguard
(2)动态分析工具
-
DroidBox—Android应用程序动态分析工具
-
Mercury—是一个开源的Android APP应用安全评估框架,它最赞的功能是可以动态的与android设备中的应用进行IPC(组件通信)包括Activity。
-
TaintDroid —是一动态实时的隐私监控工具。它是利用动态污点分析技术检测隐私数据的。http://appanalysis.org/index.html
(3)逆向分析工具
- Smali/Baksmali:DEX文件汇编和反汇编工具。
.dex .smali
assembler/disassembler!
http://code.google.com/p/smali/
- Apktool:是GOOGLE提供的APK编译工具:
APK Smali/…. 可用于修改APK文件后,重新打包
http://code.google.com/p/android-apktool/
- Dex2Jar:把apk文件转换成.jar包,配合JD-GUI工具查看和分析java源代码。
http://code.google.com/p/dex2jar
- JD、Dedexer、Redexer…
5.攻防示例
- 路由器例子
- NFC
从被动防御方面来看:
路由器:
- 过滤特殊字符,eg. 科来网络分析系统对\x的处理;
- 限制特定端口的传输速率;
- 阻塞SNMP请求的端口;
- 折中:编写ACL
NFC:
- 协议解析:检查长度字段、数值范围、格式化字符串、特殊字符等;
- 设计缺陷:修改设计逻辑,例如,蓝牙、wifi、屏幕亮度等;
- 被动防御:滞后性
主动防御:
- 针对路由器和软件
- 成熟产品
- 入侵检测(Snort/OSSEC HIDS/BASE/Sguil……)
- 防火墙
- 杀毒软件
学习中的问题和解决过程
模糊测试的框架有哪些?
1、antiparser
antiparser框架以python语言编写,是一个专门帮助模糊测试器创建随机数据的API。该工具可以跨平台,仅仅要求有python解释器就行。
你可以在这个网站得到该框架的源码和一些文档:http://antiparser.sourceforge.net/
说明:
该框架很简单,且缺少一些自动化功能,文档较少。总的来说,他不适合做一些复杂的工作。
2、Dfuz
该框架是Diego Bauche用C开发的,经常更新。该框架已经发现了很多漏洞。Dfuz是开源的,可以下载。但是该框架的源代码采用了一种严格的开原许可,未得到作者的允许不可以使用复制该框架的源代码。
网站:http://www.genexx.org/dfuz/
说明:
该框架学习曲线比较平坦,开发效率比较高,Dfuz要求开发者完全使用框架的脚本语言来进行编程,没法利用成熟的语言发挥更大的威力。不过总的来说还是可以的。
3、SPIKE
最广泛使用最知名的一个框架。使用C语言编写,提供了一系列允许快速和高效的开发网络协议模糊测试器的API。在SPIKE中,数据结构被分解表示成块,也叫SPIKE,这个块同时包含二进制数据和块大小。
说明:
SPIKE只有零星的文档,一些还是废弃的,但是我们可以找到很多工作样例。SPIKE缺乏对windows的支持。最大的贡献就是基于块的模糊测试方法。很多其他的模糊测试框架也采用了这样的方法。
4、Peach
python编写的,是一个开源的框架。
Peach体系结构允许研究者聚焦于一个个的特定的协议的子组件,然后组合起来创建完整的模糊测试器。这种方法可能不如基于块的开发速度,但是对代码的复用的支持比其他模糊测试工具好。
说明:
Peach处于活跃开发中,但是文档少,学习起来比较困难。
5、通用目的模糊测试器(GPF)
GPF可以产生无数个测试,无数个变异。(其他的根据规则不会是无数个),该框架主要的有点是可以用很低的成本建立并运行一个模糊测试器,通过GPF的多种模式对外提供功能。
6、Autodafe
这个框架可以简单的描述成下一带的SPIKE,该框架能够对网络协议和文件格式进行模糊测试。他最吸引人的就是调试组件。
其他
通过这一次基于模糊测试的漏洞挖掘与攻防技术的学习,对漏洞挖掘相关的一些基本概念有了一定了解。在未来的若干年中模糊测试技术仍将会是软件测试领域的一个研究热点,甚至可能延伸到硬件测试领域,该领域将会有大量的技术问题值得研究工作者开展进行一步的研究和探讨。