代码扫描
参考:https://www.toutiao.com/article/6697188900344955404/?channel=&source=search_tab
安全性测试工具很多,还包括黑客常用的一些工具,如暴力破解口令工具、端口扫描工具、防火墙渗透工具、渗透测试平台等。从某种意义看,它们超出软件范畴,更多属于网络空间安全、密码学等范畴,在此就不展开了。概括起来最受欢迎的软件安全性测试工具有:
- Java/C/C++:IBM AppScan Source Edition、Fotify Static Code Analyzer、C++Test、Findbugs(Java)
- JavaScript:Google's Closure Compiler、JSHint
- Python:Pychecker、PyCharm
- Web应用:IBM AppScan、Firebug、OWASP ZAP
- Android App:Android Tamer
- 网络状态监控与分析:Wireshark
- SQL注入:SQLInjector、SQL Power Injector、OWASP SQLiX
模糊测试
模糊测试 (fuzz testing, fuzzing)是一种软件测试技术。其核心思想是自动或半自动的生成随机数据输入到一个程序中,并监视程序异常,如崩溃,断言(assertion)失败,以发现可能的程序错误,比如内存泄漏。模糊测试常常用于检测软件或计算机系统的安全漏洞。
模糊测试的实现是一个非常简单的过程:
1、准备一份插入程序中的正确的文件。
2、用随机数据替换该文件的某些部分。
3、用程序打开文件。
4、观察破坏了什么。
可以用任意多种方式改变该随机数据。例如,可以将整个文件打乱,而不是仅替换其中的一部分,也可以将该文件限制为 ASCII 文本或非零字节。不管用什么方式进行分割,关键是将大量随机数据放入应用程序并观察出故障的是什么。
黑盒测试
黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。
黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。很明显,如果外部特性本身设计有问题或规格说明的规定有误,用黑盒测试方法是发现不了的。
以上是度娘的概念,简单来说,黑盒测试就是在不知道程序具体内容的情况下,按规定内的数据(格式)输入,检查是否能达到预期的经过程序正常处理的效果,找到出现非预期结果的那些错误。(一般不会穷举,所以没找到并不等于完全安全)
黑盒测试的主要作用:
黑盒测试法注重于测试软件的功能需求,主要试图发现下列几类错误。
1.功能不正确或遗漏;
2.界面错误;
3.输入和输出错误;
4.数据库访问错误;
5.性能错误;
6.初始化和终止错误等。
白盒测试
- 又称为透明盒测试、逻辑驱动测试
- 是测试被测单元内部如何工作的一种测试方案(单元测试)
- 根据程序内部逻辑结构及相关信息来设计和选择测试用例,对程序的逻辑结构进行测试
-
可覆盖全部代码、分支、条件和路径等
白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
渗透测试
渗透测试是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析,这个分析是从一个攻击者可能存在的位置来进行的,并且从这个位置有条件主动利用安全漏洞。
换句话来说,渗透测试是指渗透人员在不同的位置(比如从内网、从外网等位置)利用各种手段对某个特定网络进行测试,以期发现和挖掘系统中存在的漏洞,然后输出渗透测试报告,并提交给网络所有者。网络所有者根据渗透人员提供的渗透测试报告,可以清晰知晓系统中存在的安全隐患和问题。
打一个比方来解释渗透测试的必要性。假设你要修建一座金库,并且你按照建设规范将金库建好了。此时是否就可以将金库立即投入使用呢?肯定不是!因为还不清楚整个金库系统的安全性如何,是否能够确保存放在金库的贵重东西万无一失。那么此时该如何做?可以请一些行业中安全方面的专家对这个金库进行全面检测和评估,比如检查金库门是否容易被破坏,检查金库的报警系统是否在异常出现的时候及时报警,检查所有的门、窗、通道等重点易突破的部位是否牢不可破,检查金库的管理安全制度、视频安防监控系统、出入口控制等等。甚至会请专人模拟入侵金库,验证金库的实际安全性,期望发现存在的问题。 这个过程就好比是对金库的渗透测试。这里金库就像是我们的信息系统,各种测试、检查、模拟入侵就是渗透测试。
渗透测试方法分类
1、黑箱测试
黑箱测试又被称为所谓的“Zero-Knowledge Testing”,渗透者完全处于对系统一无所知的状态,通常这类型测试,最初的信息获取来自于DNS、Web、Email及各种公开对外的服务器。
2、白盒测试
白盒测试与黑箱测试恰恰相反,测试者可以通过正常渠道向被测单位取得各种资料,包括网络拓扑、员工资料甚至网站或其它程序的代码片断,也能够与单位的其它员工(销售、程序员、管理者……)进行面对面的沟通。这类测试的目的是模拟企业内部雇员的越权操作。
3、隐秘测试
隐秘测试是对被测单位而言的,通常情况下,接受渗透测试的单位网络管理部门会收到通知:在某些时段进行测试。因此能够监测网络中出现的变化。但隐秘测试则被测单位也仅有极少数人知晓测试的存在,因此能够有效地检验单位中的信息安全事件监控、响应、恢复做得是否到位。