1)安全性测试是什么?

安全性测试(Security Testing)是指有关验证应用程序的安全等级和识别潜在安全性缺陷的过程,其主要目的是查找软件自身程序设计中存在的安全隐患,并检查应用程序对非法侵入的防范能力安全指标不同,测试策略也不同。

但安全是相对的,安全性测试并不能最终证明应用程序是安全的,而只能验证所设立策略的有效性,这些对策是基于威胁分析阶段所做的假设而选择的。例如,测试应用软件在防止非授权的内部或外部用户的访问或故意破坏等情况时的运作。

  • 安全性测试一般分为应用程序级别和系统级别:

    • 应用程序级别:包括对应数据或业务功能的访问,核实应用程序的用户权限只能操作被授权访问的那些功能或数据。

    • 操作系统级别:包括操作系统的目录或远程访问,主要核实具备系统和应用程序访问权限的操作者才能访问系统和应用程序。

    • 软件漏洞,设计上的缺陷或程序问题;

    • 数据库的安全性,这也是系统安全性的核心。

2)为什么要进行安全性测试?

为什么进行安全性测试,或者说,安全性到底会引起哪些问题、后果:

1、数据库

提到安全,一个产品或一个网站最需要加强安全防范的就是数据库。如果缺少了安全性测试,在高手的sql盲注下,数据库就会逐步展现在黑客的面前,无论是数据库类型、表结构、字段名或是详细的用户信息,都有无数种手段可以让人“一览无余”。

2、权限

网站一般都规定了什么样的用户可以做什么事。比如版主可以修改所有人的帖子,而普通用户只能编辑自己的帖子,同样游客只能看大家的帖子,这就是简单的权限。如果少了安全性保证,那么就容易有人跳出权限做他不该做的事情。

简单举个小例子,一个登录模块,让你输入用户名密码。我们会老老实实的输入我们的用户名密码,比如"风落几番"-“password”。如果我们刻意的去绕过登录认证呢?
猜想一下这个sql,单说用户名,开发人员很可能会这样去数据库里对比:
Select count(id) from sys_user where username=‘XXX’
当然可能更复杂。如果我们在输入框里输入一段特殊的字符会如何?
‘or’1=1
这是段神奇的字符,因为这样这个sql就变成:
Select count(id) from sys_user where username=’‘or’1=1’
这样,我们就跳过了用户名的验证。。。

3、修改提交数据信息

举例:一个关于在线支付的商城,在安全性测试过程中,通过抓包抓到的提交价格,经过修改再发包可以通过。简单来说就是本来100块钱买的东西,抓包修改为1块就能成功购买。这就成为了一个巨大的隐患。

4、跨站脚本的安全隐患

  1. HTML注入。所有HTML注入范例只是注入一个JavaScript弹出式的警告框:alert(1)。
  2. 做坏事。如果觉得警告框还不够刺激,当受害者点击了一个被注入了HTML代码的页面链接时攻击者能作的各种的恶意事情。
  3. 诱捕受害者,可能会redirect到另一个钓鱼网站之类的,使其蒙受损失。

3)如何进行安全测试?

3.1 安全测试流程

1、提交申请
2、准备测试环境
3、收集基础信息
4、执行渗透测试
5、测试结果分析
6、编写报告

3.2 安全测试的常用方法

可能涉及到的基本知识:

  • 软件基本知识:例如http协议、http状态码、数据库操作、中间件、服务器、linux、python、dns、nginx等基础知识。
  • 基本的编程语言(c/java/python)、操作系统(windows/linux)、数据库知识(mssql/mysql)。
  • 安全漏洞的原理:各种注入、跨站、绕过等等黑客技术的原理和实现。
  • 安全漏洞的测试方法:基于原理,了解学习最简单有效的安全漏洞测试方法,可以结合使用部分半自动化工具等。
  • 安全漏洞的防范知识:不仅要知道如何去测,还要知道如何去改。
  • 监控:更多时候要用监控的方式来查看脚本到底在用什么方式尝试攻击系统,从而采取最合理的方式去避免攻击。

3.2.1 静态代码检查

静态代码检查主要是通过代码走读的方式对源代码的安全性进行测试,常用的代码检查方法有数据流、控制流、信息流等,通过这些测试方法安全规则库进行匹配,进而发现潜在的安全漏洞。静态代码检查方法主要是在编码阶段进行测试,尽可能早地发现安全性问题。

3.2.2 动态渗透测试

动态渗透测试法主要是借助工具或手工来模拟黑客的输入,对应用软件安装、运行过程的行为监测和分析,进而发现系统中的安全性问题。动态渗透测试一般在系统测试阶段进行,但覆盖率较低,因为在测试过程中很难覆盖到所有的可能性,只能是尽量提供更多的测试数据来达到较高的覆盖率。

3.2.3 扫描程序中的数据

系统的安全性强调,在程序运行过程中数据必须是安全的,不能遭到破坏,否则会导致缓冲区溢出的攻击**。数据扫描主要是对内存进行测试,尽量发现诸如缓冲区溢出之类的漏洞**,这也是静态代码检查和动态渗透测试很难测试到的。

3.3 进行安全性测试的四个角度

3.3.1 用户认证

  • 系统中不同用户权限设置;
  • 系统中用户是否出现冲突;
  • 系统不应该因用户权限改变而造成混乱;
  • 系统用户密码是否加密、是否可复制;
  • 是否可以通过绝对途径登录系统;
  • 用户退出后是否删除其登录时的相关信息;
  • 是否可以使用退出键而不通过输入口令进入系统。

3.3.2 网络安全性测试

  • 防护措施是否正确装配完成,系统补丁是否正确;
  • 非授权攻击,检查防护策略的正确性;
  • 采用网络漏洞工具检查系统相关漏洞(常用的两款工具为NBSI 和IPhackerIP);
  • 采集木马工具,检查木马情况;
  • 采用各种防外挂工具检查程序外挂漏洞。

3.3.3 数据库安全性测试

  • 数据库是否具备备份和恢复的功能;
  • 是否对数据进行加密;
  • 是否有安全日志文件;
  • 无关IP 禁止访问;
  • 用户密码使用强口令;
  • 不同用户赋予不同权限;
  • 是否使用视图和存储过程。

3.3.4 Web 安全性测试

  • 部署与基础结构;
  • 输入验证;
  • 身份验证;
  • 授权;
  • 配置管理;
  • 敏感数据;
  • 会话管理;
  • 加密;
  • 参数操作;
  • 异常管理;
  • 审核和日志记录。

3.4 安全测试常用工具

3.4.1 IBM AppScan

一个领先的web应用安全工具,可自动进行安全漏洞评估、扫描和检测所有常见的web应用安全漏洞,如:SQL注入、跨站点脚本攻击(CSS)、缓冲区溢出等。

3.4.2 Burp Suite

一个用于攻击web应用程序的集成平台,包含大量的安全测试工具,并为这些工具设计了对外访问接口,以加快攻击应用程序的过程。

3.4.3 Metasploit

一款开源的安全漏洞检测工具,可以帮助安全人员和IT专业人士识别安全性问题,挖掘漏洞,攻击漏洞,并评估漏洞风险级别。

3.4.4 Wireshark

适用于Windows和Linux的网络协议分析工具,也是一个很出名的数据包分析工具,可以检查网络流量,是观察TCP/IP异常流量的很好的工具。

3.4.5 Kail Linux

目前比较流行的安全渗透测试平台,包含了最新的安全测试工具,允许用户从CD或者U盘启动,通过U盘来实施安全渗透测试。

3.4.6 HTTP(s)监听工具

如 Fiddle、Burpsuite、Charlies、Postman。

3.4.7 Sqlmap

SQL注入。

3.5 漏洞等级

3.5.1 严重

  • 直接获取重要服务器(客户端)权限的漏洞,包括但不限于:
    • 远程任意命令执行、上传 webshell
    • 可利用远程缓冲区溢出、ActiveX 堆栈溢出、浏览器 use after free 漏洞、远程内核代码执行漏洞以及其它因逻辑问题导致的可利用的远程代码执行漏洞
  • 直接导致严重的信息泄漏漏洞,包括但不限于:
    • 重要系统中能获取大量信息的SQL注入漏洞
  • 能直接获取目标单位核心机密的漏洞。

3.5.2 高危

  • 直接获取普通系统权限的漏洞,包括但不限于:
    • 远程命令执行、代码执行、上传webshell、缓冲区溢出等
  • 严重的逻辑设计缺陷和流程缺陷,包括但不限于:
    • 任意账号密码修改、重要业务配置修改、泄露
  • 可直接批量盗取用户身份权限的漏洞,包括但不限于:
    • 普通系统的SQL注入、用户订单遍历
  • 严重的权限绕过类漏洞,包括但不限于:
    • 绕过认证直接访问管理后台、cookie欺骗
  • 运维相关的未授权访问漏洞,包括但不限于:
    • 后台管理员弱口令、服务未授权访问。

3.5.3 中危

  • 需要在一定条件限制下,能获取服务器权限、网站权限与核心数据库数据的操作,包括但不限于:
    • 交互性代码执行
    • 一定条件下的注入
    • 特定系统版本下的getshell等
  • 任意文件操作漏洞,包括但不限于:
    • 任意文件写、删除、下载,敏感文件读取等操作
  • 水平权限绕过,包括但不限于:
    • 绕过限制修改用户资料、执行用户操作。

3.5.4 低危

  • 能够获取一些数据,但不属于核心数据的操作;
  • 在条件严苛的环境下能够获取核心数据或者控制核心业务的操作;
  • 需要用户交互才可以触发的漏洞,包括但不限于:
    • XSS漏洞、CSRF漏洞、点击劫持。

内测重点漏洞类型:

1、文件上传(webshell 可请求类型html htm shtml txt)
2、越权(无、平行越权、垂直越权)
3、公民敏感信息泄露(姓名、身份证、IP、电话)
4、目录穿越任意文件下载
5、存储型XSS跨站脚本
6、防护措施失效(无防护、验证码,IP验证、登录验证码等)
7、Id可遍历可预测,导致信息泄露,文件泄露

3.6 常见的安全测试用例

在这里插入图片描述



【部分内容参考自】

  • 为什么要进行安全性测试?(安全性测试启蒙教育):https://blog.51cto.com/jacksonren/1052306
  • 安全性测试|安全测试的常用方法:https://baijiahao.baidu.com/s?id=1639738035018300361&wfr=spider&for=pc
  • 安全测试概述和用例设计:https://www.cnblogs.com/imyalost/p/8243128.html
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐