一、渗透测试是什么
渗透测试(PenetrationTest)是对安全情况最客观、最直接的评估方式,主要是模拟黑客的攻击方法对系统和网络进行非破坏性质的攻击性测试,在保证整个渗透测试过程都在可以控制和调整的范围之内尽可能的获取目标信息系统的管理权限以及敏感信息,并将入侵的过程和细节产生报告给用户,由此证实用户系统所存在的安全威胁和风险,并能及时提醒安全管理员完善安全策略。
渗透测试是工具扫描和人工评估的重要补充。工具扫描具有很好的效率和速度,但是存在一定的误报率,不能发现高层次、复杂的安全问题;渗透测试需要投入的人力资源较大、对测试者的专业技能要求很高(渗透测试报告的价值直接依赖于测试者的专业技能),但是非常准确,可以发现逻辑性更强、更深层次的弱点。
二、渗透测试的流程
三、渗透测试内容
《代码层安全》
应用程序及代码在开发过程中,由于开发者缺乏安全意识,疏忽大意极为容易导致应用系统存在可利用的安全漏洞。一般包括SQL注入漏洞、跨站脚本漏洞、上传漏洞、CSRF跨站请求伪造漏洞等。
1) SQL注入漏洞
SQL注入漏洞的产生原因是网站程序在编写时,没有对用户输入数据的合法性进行判断,导致应用程序存在安全隐患。SQL注入漏洞攻击就是利用现有应用程序没有对用户输入数据的合法性进行判断,将恶意的SQL命令注入到后台数据库引擎执行的黑客攻击手段。
2) 跨站脚本漏洞
跨站脚本攻击简称为XSS又叫CSS (Cross Site Script Execution),是指服务器端的CGI程序没有对用户提交的变量中的HTML代码进行有效的过滤或转换,允许攻击者往WEB页面里插入对终端用户造成影响或损失的HTML代码。
3) 会话管理漏洞
会话管理主要是针对需授权的登录过程的一种管理方式,以用户密码验证为常见方式,通过对敏感用户登录区域的验证,可有效校验系统授权的安全性,测试包含以下部分:
4) 用户口令易猜解
通过对表单认证、HTTP认证等方式的简单口令尝试,以验证存在用户身份校验的登录入口是否存在易猜解的用户名和密码
5) 是否存在验证码防护
验证码是有效防止暴力破解的一种安全机制,通过对各登录入口的检查,以确认是否存在该保护机制
6) 是否存在易暴露的管理登录地址
某些管理地址虽无外部链接可介入,但由于采用了容易猜解的地址(如:admin)而导致登录入口暴露,从而给外部恶意用户提供了可乘之机
7) 是否提供了不恰当的验证错误信息
某些验证程序返回错误信息过于友好,如:当用户名与密码均错误的时候,验证程序返回“用户名不存在”等类似的信息,通过对这一信息的判断,并结合HTTP Fuzzing工具便可轻易枚举系统中存在的用户名,从而为破解提供了机会。
会话管理主要是针对验证通过之后,服务端程序对已建立的、且经过验证的会话的处理方式是否安全,一般会从以下几个角度检测会话管理的安全性:
8) Session是否随机
Session作为验证用户身份信息的一个重要字符串,其随机性是避免外部恶意用户构造Session的一个重要安全保护机制,通过抓包分析Session中随机字符串的长度及其形成规律,可对Session随机性进行验证,以此来确认其安全性。
9) 校验前后Session是否变更
通过身份校验的用户所持有的Session应与其在经过身份验证之前所持有的Session不同
10) 会话储存是否安全
会话存储是存储于客户端本地(以cookie的形式存储)还是存储于服务端(以Session的形式存储),同时检测其存储内容是否经过必要的加密,以防止敏感信息泄露
11) 不安全的对象引用
不安全的对象引用是指程序在调用对象的时候未对该对象的有效性、安全性进行必要的校验,如:某些下载程序会以文件名作为下载程序的参数传递,而在传递后程序未对该参数的有效性和安全性进行检验,而直接按传递的文件名来下载文件,这就可能造成恶意用户通过构造敏感文件名而达成下载服务端敏感文件的目的。
12) 跨站请求伪造
跨站请求伪造(Cross-site request forgery,缩写为CSRF),也被称成为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
《应用层安全》
由于应用系统和数据库系统开发配置的具体过程中,可能由于管理员缺乏安全意识或疏忽大意导致应用层存在安全隐患。
1) 弱口令
弱口令通常有以下几种情况:用户名和密码是系统默认、口令长度过短、口令选择与本身特征相关等。系统、应用程序、数据库存在弱口令可以导致入侵者直接得到系统权限、修改盗取数据库中敏感数据、任意篡改页面等。
2) 敏感信息泄露
敏感信息泄露漏洞指泄露有关WEB应用系统的信息,例如,用户名、物理路径、目录列表和软件版本。尽管泄露的这些信息可能不重要,然而当这些信息联系到其他漏洞或错误设置时,可能产生严重的后果。例如:某源代码泄露了SQL服务器系统管理员账号和密码,且SQL服务器端口能被攻击者访问,则密码可被攻击者用来登录SQL服务器,从而访问数据或运行系统命令。
3) 安全配置错误
某些HTTP应用程序,或第三方插件,在使用过程中由于管理人员或开发人员的疏忽,可能未对这些程序或插件进行必要的安全配置和修改,这就很容易导致敏感信息的泄露。而对于某些第三方插件来说,如果存在安全隐患,更有可能对服务器获得部分控制权限。
4) 链接地址重定向
重定向就是通过各种的方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。
而某些程序在重定向的跳转过程中,对重定向的地址未进行必要的有效性和安全性检查,且该重定向地址又很容易被恶意用户控制和修改,这就可能导致在重定向发生时,用户会被定向至恶意用户事先构造好的页面或其他URL,而导致用户信息受损。
《移动安全》
测试类型 |
测试项 |
测试项描述 |
安装包 |
反编译 |
测试app安装文件是否能被反编译 |
重打包 |
测试app安装文件是否能被重打包并签名发布 |
|
本地存储 |
内存修改 |
测试app内存是否可被修改,比如修改内存中的金额 |
明文存储 |
测试app是否在本地明文存储敏感文件,如:帐号、协议结构等 |
|
数据传输 |
封包篡改 |
测试app数据包被拦截下来后修改内容重新发送,服务端是否能识别 |
封包重放 |
测试app数据包被拦截下来后重复发送,服务端是否能识别 |
|
业务相关 |
验证码绕过 |
测试app的验证码是否能被绕过 |
暴力破解 |
测试app的登录口是否能进行暴力破解、撞库攻击。 |
|
订单篡改 |
测试app的订单是否能被篡改,比如:订单被新增、修改、删除等。 |
|
订单重放 |
测试app的订单是否能被重放,比如:转帐订单数据包重新提交,是否能再一次转帐。 |
|
逻辑安全 |
测试app是否存在逻辑上的安全漏洞,比如:付款金额为负数,实际上不但没有扣款,反而给买家增加了余额。 |
|
自我保护 |
完整性校验 |
测试app相关组件是否能被篡改,有无完整性校验机制。 |
动态调试 |
测试app能否被IDA等工具动态调试;有无加壳保护 |
|
软件源替换 |
测试app更新源是否可被替换,比如:修改hosts文件将域名定位到指定IP;修改升级文件为自定义文件。 |
|
键盘记录 |
测试app密码是否能被键盘记录工具明文记录 |
|
服务端安全 |
web安全 |
测试app服务端是否存在web安全漏洞 |
接口安全 |
测试app连接的接口是否存在安全漏洞 |