安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程 。
安全测试的几个特点:
- 与常规的功能测试相比,目标不同,功能测试以发现Bug为目的,安全测试则以发现安全隐患为目标
- 它是站在防护者角度思考问题,模拟常规的漏洞攻击,尽量发现所有可能被攻击者利用的安全隐患,并指导其进行修复
- 它的范围较广,不但包括系统的功能,还有系统的机制、外部环境、应用与数据自身安全风险与安全属性等
- 比较依赖工具,扫描、分析、定位、解决
简单的安全测试,可以通过一些基础的技术能力和业务测试能力去发现,无需借助于工具,比如一些经典案例:
- 注册
密码加密传输、加密校验,防止恶意注册,前后端分别做行为验证。
- 短信验证码
随机生成、加密提交、和手机号的一致性校验、有效时长、发送频率,从成本和安全考虑,还要防止用户使用脚本频繁提交,设置单日的手机号发送次数,对恶意用户,可以设置黑名单拦截等。
- 支付
资金账户的操作,自身就是一个安全行为极高的业务。充值、提现,要防止用户篡改请求,在后端需要做金额验证,校验余额是否不足,或校验该请求不是合法的请求(不是前端系统行为,前后端做统一验签)。
多账户操作或高并发下,要对账户做加锁处理。
-
权限管理
避免越权行为,业务上要做权限的强校验,避免用户URL拼接跳过权限检查。
- 敏感数据,
加密传输(密码、金额、用户信息),有特别合规要求的,要加密存储。
- 灰度开关
新版功能发布后,存在漏洞,被用户大量刷单,需要立刻下掉止损,通过后台开关,关闭功能。
系统级别的安全防护,还是需要借助一些强大的工具,常用的一些安全测试工具有很多:
- AppScan(AppScan standard edition)
- Sonar Qube,简单的安全漏洞扫描
- Fotify Static Code Analyzer
- Findbugs
本文主要以AppScan为例,它是IBM公司的Web应用安全测试工具,操作环境为windows。
Appscan操作不复杂,主要有以下步骤:
- 设置网站主页地址
- 授权登录账号和密码
- 基于以上2点,appScan会探索式爬虫网站所有的路径
AppScan的主要原理为:
- 通过搜索(爬行)发现整个 Web 应用结构;
- 根据分析,发送修改的 HTTP Request 进行攻击尝试(扫描规则库);
- 通过对于 Respone 的分析验证是否存在安全漏
- 生成测试报告文件,记录漏洞详情
它扫描的对象是网站等 Web 应用,而网站规模的大小和使用的技术,都需要针对性的进行扫描设置(设计安全测试用例)。一般来说,网站页面越多、参数越多(AppScan 产生测试用例的时候,也是根据每个参数来产生的)、越复杂,扫描的测试用例样本越多,耗时会越长,报告文件会变大。
复杂的web网站(可能同时有php、aspx页面),可能包括不同的技术栈,从性能和效率出发,扫描策略可参照如下:
- 选择合适的,最小化的扫描规则
- 分解扫描任务,把一个大的扫描任务分解为多个小的扫描任务
- 根据页面特点,设置可以过滤的类似页面(冗余页面)
由于AppScan扫描时,会自动产生测试用例,真实的发送请求到当前测试环境。所以它在运行时,会影响到测试环境的性能以及数据,建议在执行安全测试前备份测试库数据,扫描完成后,恢复数据。
重点讲下AppScan的扫描报告,格式为PDF文档,可以长达几十页,按照严重程度分高,危,参三种类型。高危级别的问题,属于必须解决的,可能会衍生其他一些中低的其他漏洞问题。
如下,为常见的安全漏洞:
- SQL注入
SQL注入(SQL Injection),是最常见影响非常广泛的漏洞。攻击者通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,从而入侵数据库来执行未授意的任意查询。
SQL注入可能造成的危害有:网页、数据被篡改,核心数据被窃取,数据库所在的服务器被攻击,变成傀儡主机。用户可模拟一些关键字拼接如:;分隔符 + delete/drop 等。
测试方法,在需要进行查询的页面,输入正确查询条件 and 或or 1=1等简单sql语句,查看应答结果,如与输入正确查询条件返回结果一致,表明应用程序对用户输入未进行过滤,可以初步判断此处存在SQL注入漏洞。
解决方式有:过滤用户输入参数里的特殊字符;使用预编译,不要通过字符串拼接Sql语句;合理使用数据库访问框架提供的防注入机制,如Mybatis提供的#{}绑定参数,防止sql注入。
- XSS攻击
SS(Cross Site Script),与SQL注入相似,XSS是通过网页插入恶意脚本,主要用到的技术也是前端的HTML和JavaScript脚本。当用户浏览网页时,实现控制用户浏览器行为的攻击方式。
一次成功的XSS,可以获取到用户的cookie,利用该cookie盗取用户对该网站的操作权限;也可以获取到用户联系人列表,利用被攻击者的身份向特定的目标群发送大量的垃圾信息,等等。
测试方法,在数据输入界面,输入:<script>alert(/123/)</script>,保存成功后如果弹出对话框,表明此处存在一个XSS 漏洞。
解决方式有:一个基本的思路是渲染前端页面(不管是客户端渲染还是服务器端渲染)或者动态插入 HTML 片段时,任何数据都不可信任,都要先做 HTML 过滤,然后再渲染。
- CSRF攻击
CSRF(Cross Site Request Forgery),利用已登录的用户身份,以用户的名义发送恶意请求,完成非法操作。
例如:用户如果浏览并信任了存在CSRF漏洞的网站A,浏览器产生了相应的cookie,用户在没有退出该网站的情况下,访问了危险网站B 。
危险网站B要求访问网站A,发出一个请求。浏览器带着用户的cookie信息访问了网站A,因为网站A不知道是用户自身发出的请求还是危险网站B发出的请求,所以就会处理危险网站B的请求,这样就完成了模拟用户操作的目的。这就是CSRF攻击的基本思想。
测试方法,同个浏览器打开两个页面,一个页面权限失效后,另一个页面是否可操作成功,如果仍然能操作成功即存在风险。或使用工具发送请求,在http请求头中不加入referer字段,检验返回消息的应答,应该重新定位到错误界面或者登录界面。
解决方式:防止 CSRF 攻击需要在服务器端入手,基本的思路是能正确识别是否是用户发起的请求。CSRF Token验证,后端做令牌校验;人机交互,例如账户转账时,做短信验证阿妈校验。
- URL跳转漏洞,越权
URL跳转漏洞,即未经验证的重定向漏洞,是指Web程序直接跳转到参数中的URL,或者在页面中引入了任意开发者的URL,将程序引导到不安全的第三方区域,从而导致安全问题。
钓鱼攻击,模拟网站或者软件,几乎与官方的软件完全相同,连域名也非常相似。
恶意用户完全可以借用URL跳转漏洞来欺骗安全意识低的用户,从而导致”中奖”之类的欺诈,这对于一些有在线业务的企业如淘宝等,危害较大,同时借助URL跳转,也可以突破常见的基于“白名单方式”的一些安全限制,如传统IM里对于URL的传播会进行安全校验,但是对于大公司的域名及URL将直接允许通过并且显示会可信的URL,而一旦该URL里包含一些跳转漏洞将可能导致安全限制被绕过。
测试方法,使用抓包工具抓取请求,抓取302的url,修改目标地址,查看是否能跳转。
模拟:https://mp.youkuaiyun.com?redirect=www.baidu.com
加入Referer的限制,或加入有效性验证Token。
- 文件上传漏洞
文件上传攻击是指攻击者上传了一个可执行文件到服务器上,并执行。
这种攻击方式是最直接有效的。上传的文件可以是病毒、木马、恶意脚本或者是webshell等等。
Webshell是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以说是一种网页后门。攻击者在受影响系统防止或插入webshell后,可以通过webshell方便进入系统,达到控制网站服务器的目的。
测试方法,对上传的文件类型、大小等进行严格校验,禁止上传恶意代码的文件。对相关目录的执行权限进行校验,可以通过浏览器访问Web 服务器上的所有目录,检查是否返回目录结构,如果显示的是目录结构,则可能存在安全问题。
解决方式:在开发网站及应用程序过程中,需严格限制和校验上传的文件,禁止上传恶意代码的文件。限制相关目录的执行权限,防范 webshell
攻击。
- 加密
隐私信息要加密传输,同时密码要足够复杂、隐蔽,避免暴力破解。
- DDoS攻击
DoS 攻击全称拒绝服务(Denial of Service),简单的说就是让一个公开网站无法访问,而 DDoS 攻击(分布式拒绝服务 Distributed Denial of Service)是 DoS 的升级版。
原因,攻击者不断地提出服务请求,让合法用户的请求无法及时处理,这就是 DoS 攻击,攻击者使用多台计算机或者计算机集群进行 DoS 攻击,就是 DDoS 攻击。
解决方式:防止 DDoS 攻击的基本思路是限流,限制单个用户的流量(包括 IP 等)。
- XXE漏洞
XE 漏洞全称 XML 外部实体漏洞(XML External Entity),当应用程序解析 XML 输入时,如果没有禁止外部实体的加载,导致可加载恶意外部文件和代码,就会造成任意文件读取、命令执行、内网端口扫描、攻击内网网站等攻击。
这个只在能够接收 XML 格式参数的接口才会出现。
解决方式:禁用外部实体,过滤用户提交的XML数据。
- HTTP报头追踪漏洞
HTTP/1.1(RFC2616)规范定义了 HTTP TRACE 方法,主要是用于客户端通过向 Web 服务器提交 TRACE 请求来进行测试或获得诊断信息。
当 Web 服务器启用 TRACE 时,提交的请求头会在服务器响应的内容(Body)中完整的返回,其中 HTTP 头很可能包括 Session Token、Cookies 或其它认证信息。攻击者可以利用此漏洞来欺骗合法用户并得到他们的私人信息。
解决方式:禁用 HTTP TRACE 方法。
- 目录遍历漏洞
攻击者向 Web 服务器发送请求,通过在 URL 中或在有特殊意义的目录中附加 ../
、或者附加 ../
的一些变形(如 ..\
或 ..//
甚至其编码),导致攻击者能够访问未授权的目录,以及在 Web 服务器的根目录以外执行命令。
- 命令执行漏洞
命令执行漏洞是通过 URL 发起请求,在 Web 服务器端执行未授权的命令,获取系统信息、篡改系统配置、控制整个系统、使系统瘫痪等。
-
业务漏洞,业务实现的漏洞,如短信攻击、账户支付等
-
其他漏洞有:证书管理、SSLStrip 攻击、OpenSSL Heartbleed安全漏洞、CCS 注入漏洞、证书有效性验证漏洞。
以上常见安全漏洞,摘录自这里,原文戳此处:https://www.jianshu.com/p/0b30d7bc276d。