网站安全的“体检项目表”

2019-06-28 03:45上海陈峻
网络安全和信息化 2019年6期
关键词:漏洞账号密码

■ 上海 陈峻

编者按: 对网络安全的防护工作需要系统有序进行,否则将会被攻击者有机可乘,本文是笔者单位针对自身情况建立的系统性的网站安全防护,实现了标准化和流程化工作。

长期以来,在对各类目标网站系统进行日常渗透测试的过程中,笔者单位安全部门的各位同事往往处于守口相传、各自为政的状态。因此大家产生和提交的报告,时常也是参差不齐、因人而异。

近期,我们在内部对此进行了“专项整治”。大家在一起经过集思广益和反复讨论,整理出了一整套关键性检测要点与方法的集合。

作为阶段性交付成果,这是一张既参考了业界常用实践工具,又融合了部门过往经验总结的“体检项目表”。如图1所示,它一份较为全面的、且具备标准化和流程化的递进式清单。下面我们根据此表来进行详细解读。

配置与扫描

1.通过使用Wget或一些在线工具对目标网站上的robots.txt文件进行检索和分析,重点考察以下内容。(1)Disallow:是否罗列了不允许外部用户登录的页面。

(2)Allow:是否仅允许sitemap.xml。

(3)Crawl-Delay:是 否明确了允许访问目录数量,包括子目录。

2.通过请求非法/无效的页面,审查后台应用、组件或数据库所反馈的错误代码,以及所包含的软件名称、或版本之类的详细信息。

3.使用代码审查工具,查找页面上那些为了存储信息而隐藏的字段、被注释掉但尚存的信息、以及默认标识性的内容。

4.使 用Viewdns.info和Whois之类工具,对目标网站进行反向 IP、NS、MX、DNS的查询,针对DNS域的传送(DNS zone Transfer)、以及基于Web的DNS进行搜索,检查是否能够获取网站相关信息。

5.运用指纹之类的工具对目标网站进行各种扫描。例如:

(1)使用 Nmap(Zenmap)来判断后台在线的活跃主机,推测相应的操作系统与网络服务的种类。

(2)使用Amap来侦测对应的应用类型。

(3)使用Nessus来扫描和分析系统上敞开的端口漏洞。

6.扫描外部防火墙上是否开启了数据库服务端口。如已开启,则可利用经典的SQL查询分析器(如Isqlw.exe)和数据库命令行工具(如 Osql.exe),同数据库的侦听端口(TNS)建立连接,进而发送控制命令。

图1 网站安全的“体检项目表”

残留与泄漏

1.通过自查的方式,确认是否存在曾用于测试用途、备份目的、以及过时无用的文件,以免泄露网站的任何特有信息。

2.鉴于JSP和ASP之类的文件扩展名,不但能够被识别出目标应用程序所使用的技术,而且可能暴露与该应用相连接的其他系统特征。因此,可以使用curl和Wget等工具,来进行有针对性的检测。

3.检查是否已对目标网站的管理后台(Console)、以及管理接口进行了安全加固。

身份与登录

1.使 用John the Ripper(针对 Unix/Linux)、L0phtcrack(针对 Windows)和Hydra之类的暴力破解工具、以及其他“撞库”工具,对账号与密码进行如下测试:

(1)枚举与遍历各种账号,特别是那些常见的默认与测试性账号。

(2)检查各类账号在系统及数据库中的唯一性。

(3)考察用户界面,是否存在默认显示上一次登录账号信息的漏洞。

(4)测试对各种(特别是已禁用)账号的恢复功能。

(5)检查密码的设定规则与复杂程度。

(6)核验“忘记密码”和“记住密码”两种不同的流程与机制。

(7)测试是否有密码输入出错次数的限制,以及能否以锁定的方式抵御密码猜测的攻击。

认证与授权

1.使用Kali Linux之类的集成工具,测试目标网站如下的基本认证与授权服务:

(1)是否配置并启用了包括验证码(Captcha)、外发短信等服务在内的多因素认证(MFA)方式。

(2)是否启用了SSL和TLS之类的安全信道协议,能否对传输信息以及证书提供加密保护。

(3)检查证书的分发与交换过程是否安全。

(4)是否存在认证机制被绕过的可能,以及在认证失效之后是否会出现安全防范的缺失(即 :fail-open,应满足fail-secure的逻辑)。

(5)检查认证交互的逻辑与功能,确保用户不能采用特权提升的方式修改自己在网站内部的特权与角色。

连接与保持

在用户与目标网站进行相互验证的过程中,双方会用到令牌(token)、并建立会话(session),因此有必要通过 JWT、SessionUtil、以 及Cookie Editor等工具进行如下方面的检查:

(1)通过编写专有程序,对令牌的可预测性、传输中的安全性、以及日志中可能留下的泄密信息进行获取与检查。

(2)在用户关闭浏览器、更新密码、或出现违规事件的情况下,分别对会话ID的产生、是否有哈希的执行、保持时长的设定、存储的环境、以及终止的条件进行检验。

(3)对cookie实 施 反向工程,进而尝试通过篡改cookie的属性来劫持目标会话。

架构与逻辑

1.针对常见的开源框架与平台,进行如下渗透测试:

(1)使 用 struts-scan来扫描Struts2。

(2)检查Spring MVC的过滤器与拦截器的相关代码。

(3)对 ThinkPHP进 行getshell等相关测试。

(4)利用WPScan来扫描Wordpress的潜在漏洞。

2.针对不同的中间件与应用,进行如下核查:

(1)IIS:WebDAV是否已禁用,或是否已配有权限验证。

(2)WebLogic:是否删除了远程部署文件、并限制了登录IP地址。

(3)Jboss:是否存在反序列化漏洞,是否关闭了控制管理页面、以及Servlet调用。

(4)Tomcat:是否删除了远程部署页面,以及关闭了控制管理台。

3.使用AppScan和AWVS之类的工具,对目标网站上所有与用户交互有关的功能,包括:留言、登入、下单、退出、退货、以及付款等操作,进行真实业务逻辑的极端测试。

4.使 用TamperIE和Webscarab,以代理的方式截获并修改Web请求、调试会话、模拟产生注入攻击,以确定目标应用的切入点。

注入与攻击

1.运用测试程序,通过操纵产生特殊的应用输入参数,观察目标系统在各种恶意攻击下的状态,并检验后台应用的输出与后续行为。如果应用程序对输入数据的过滤或验证不到位,那么我们就能发现并判定网站自身存在的各种漏洞。下面是需要模拟和测试的攻击类型:

(1)使用OWASP ZAP和Burpsuite Proxy,通过截断代理和主动扫描,来查找目标应用的安全漏洞。

(2)使用WFuzz之类的工具,通过随机产生的数据,进行模糊输入测试(Fuzz testing)。

(3)使用Sqlmap之类的工具,通过创建和拼装SQL语句,利用数据库管理系统(DBMS)在验证上的脆弱性,进行SQL注入测试。

(4)同理,检查后台应用对于LDAP查询语句的过滤、以及正则替换等LDAP类注入攻击的防御能力。

(5)运用DVWA等工具,通过在正常输入中夹杂调用命令、函数或代码,以模拟产生命令注入(Command injection)、路 径 遍 历(Path traversal)、文件包含(File Inclusion)、以 及邮件头注入(SMTP header injection)攻击。

(6)通过模拟缓存污染和密码重置的攻击方式,来对HTTP host头进行漏洞测试。

(7)使用Metasploit之类的框架(MSF),对目标网站所用到的第三方应用、以及操作系统上那些未及时更新补丁的漏洞,开展以获取Webshell为目的的攻击。

(8)通过发送变形的SOAP消息请求,以插入可执行代码的方式篡改后台数据库,从而测试XML注入。

(9)使 用 Beef-XSS和XSSer等工具,来发起对目标网站构造的重定向式跨站脚本攻击(XSS)。

(10)使用BurpSuite生成某个CSRF类型的PoC,或直接利用CSRFTester抓取浏览器中访问过的目标网站链接、及相关的表单信息。通过修改,进而提交伪造的客户端请求。倘若网站服务器成功接受,则说明存在着CSRF漏洞。

(11)试着对目标网站发送经过特殊构造的、符合XPath语法的查询请求,以获取目标网站所使用的XML文档数据及结构,进而绕过认证机制实现提权。

(12)利用动态和静态应用安全测试(DAST/SAST)工具,查找并定位目标网站潜在的缓冲区溢出(buffer overflow),进而定位泄露敏感与控制信息的风险。

上面和大家逐条探究的这张“体检项目表”。虽谈不上疏而不漏毫不留死角,且并未用到那些高深莫测的渗透技巧,但是它的确能够在一定程度上,消除我们过去全凭单打独斗和个人经验主义的窘境。如今,整个部门都能够针对各种不同类型的目标网站,有条不紊地开展系统性、且较为精准的渗透测试了。

猜你喜欢
漏洞账号密码
漏洞
密码里的爱
玩游戏没账号租一个就行
施诈计骗走游戏账号
基于selenium的SQL注入漏洞检测方法
密码抗倭立奇功
密码藏在何处
漏洞在哪儿
Google Play游戏取消账号绑定没有Google账号也能玩
夺命密码