徐绍飞 龚家瑜,2 杨亚萍
(1.上海计算机软件技术开发中心 上海 201112)(2.上海产业技术研究院 上海 201206)
随着信息技术的快速发展,国内越来越多的医院正加速实施信息化平台、HIS系统等的整体信息化建设,以提高医院的服务水平与核心竞争力。但在信息化建设的同时,越来越多网络攻击、网络入侵行为,诸如网页篡改、病人信息泄露等事故发生的频率也不断上升,造成的损失难以估量。如何在信息化建设过程中和后期系统运行维护过程中及时发现问题、规避风险、保证信息系统运行安全,也是信息化建设的重要保障。传统安全防护措施均为被动防御,无法及时发现系统中的安全隐患,而漏洞扫描工具深度又不足,无法全面地、细致地、针对性地评估系统安全隐患。因此,可采用渗透测试方法对现阶段医疗行业的Web应用程序进行系统安全评估。
渗透测试是通过模拟黑客的攻击方法和漏洞发掘技术来评估计算机系统安全的一种评估方法,该方法通过从攻击者角度发现分析系统的缺陷及漏洞,进而尝试利用某些漏洞对信息系统实现主动攻击的过程,评估系统存在的可能安全风险问题[1]。相较于传统的安全防护措施,渗透测试具有以下优点:1)针对性强,由于渗透测试是模拟黑客攻击过程,可在测试过程中及时评估系统安全防护情况,在测试结束后又可全面评估系统总体安全状况;2)覆盖面广,由于渗透测试采用黑客攻击思路,对系统各个方面的漏洞均能较好覆盖。
本文主要依据开放式Web应用程序安全项目(Open Web Application Security Project,OWASP)的OWASP TOP 10安全风险列表中的问题对医疗行业Web应用程序进行渗透测试,以三家医院的Web应用程序为实例,采用工具扫描、代码审查、数据抓包、人工 POC 等方法,利用 Appscan、AWVS、sqlmap、NMAP、Burpsuite、fiddler、CSRFTester等常用工具配合人工渗透的方式给出相应的实施实例,分析医疗行业Web应用程序是否存在常见的安全风险。
在Web应用程序渗透测试过程中,将整个测试流程分为以下五个阶段[2]:准备阶段、前攻击阶段、模拟攻击阶段、后攻击阶段、后续阶段。具体流程如图1所示。
图1 Web应用程序渗透测试常规流程
渗透测试不同于黑客入侵,其目的是依据用户需求发现系统中的安全风险,因此需要获得客户或相关部门认可后,方可在规定时间内进行实施。该阶段主要包括客户委托授权、测试需求分析、制定渗透测试方案等内容。
该阶段主要进行信息收集和分析工作,即通常所说的“踩点”阶段[3]。测试人员采用端口扫描,搜索引擎信息收集、企业备案查询、GitHub源码查询、旁站查询、必应查询、社工库查询、C段查询等各种方式,尝试收集Web应用程序相关的各类信息,包括:域名、IP、Web基本信息、中间件信息、端口信息、编写语言、网站目录结构、关键和敏感目录、开发维护人员信息等内容。这类内容经分析筛选后,为后续模拟攻击阶段提供了信息基础。
该阶段主要利用前一阶段收集到的相关信息,通过自动化工具或人工POC等方式对Web应用程序实施攻击,尝试发现可被利用的漏洞。在此,主要依据OWASP给出的OWASP TOP 10安全风险列表作为攻击的主要目标。需要注意的是,由于Web应用程序仍然是依托于网络环境和操作系统上,渗透测试过程中可能同时发现网络、操作系统等的安全漏洞,在此阶段同时扩大攻击范围,尝试漏洞是否被利用。
该阶段利用前一阶段发现的能被攻击者利用的漏洞,尝试口令破解、用户提权、后门植入等长期潜伏攻击。由于该阶段是整个模拟攻击阶段具体实施过程中的最后阶段,因此在渗透测试具体实施完成后,需要清除所有的攻击后门。
该阶段主要包括结果分析和汇总,对整个Web应用程序渗透测试的结果进行分析和汇总,形成相应的报表、总结或报告,并针对问题提供相应的解决方案。
OWASP组织的OWASP TOP 10主要依据缺陷风险评估的基础理论和模型,对Web应用程序安全风险的威胁代理、攻击向量、安全漏洞、技术影响、业务影响等方面进行综合考量,通过风险的可利用性、普遍性、可检测性、影响程度和影响后果等指标对风险进行定性综合评估,从而总结了Web应用程序可能的、常见的、危险的10类安全隐患,主要包括:注入、失效的身份认证和会话管理、跨站脚本(XSS)、不安全的对象直接引用、安全配置错误、敏感信息泄露、功能级访问控制缺失、跨站请求伪造(CSRF)、使用含有已知漏洞的组件、未验证的重定向和转发。
注入攻击类漏洞,包括SQL注入、OS注入和LDAP注入等漏洞。攻击者将不可信数据作为命令或者查询语句的一部分发送给解释器,由于未进行相应的输入过滤,解释器被攻击者恶意构造的数据欺骗,导致解释器执行计划外的命令或者未被授权时访问数据。
失效的身份认证和会话管理漏洞是指身份认证和会话管理相关的应用程序功能未得到正确的实现,导致攻击者破坏密码、密匙、会话或攻击其他的漏洞去冒充其他用户的身份。此类漏洞主要产生的原因包括:1)用户鉴别信息没有使用加密保护;2)用户鉴别信息和会话ID传输过程中未进行加密保护;3)用户鉴别信息可被暴力猜测;4)会话ID管理不当,会话ID暴露在URL中、没有会话超时。
跨站脚本攻击是攻击者利用网站漏洞,通过在网站链接中插入恶意代码,在用户访问该链接时即可获取用户信息的一种攻击方法,主要分为反射型XSS、存储型XSS、DOM型XSS等。
不安全的直接对象引用是指开发人员暴露一个对内部实现对象的引用时,例如,一个文件、目录或者数据库密匙,就会产生一个不安全的直接对象引用。在没有访问控制检测或其他保护时,攻击者会操控这些引用去访问未授权数据。
安全配置错误漏洞是由于某些应用程序、框架、应用程序服务器、WEB服务器、数据库服务器默认值不安全而导致的问题。
敏感信息泄露漏洞是指弱保护的重要数据,如用户名、口令、银行卡号、银行卡密码、姓名、身份证号、手机号、邮箱、医保卡号、医疗记录、个人详细信息等敏感数据被窃取,进而导致其他攻击行为。
功能级访问控制缺失漏洞是指应用程序功能级访问控制缺失,未在每个功能被访问时在服务器端执行相同的访问控制检查策略,进而导致攻击者能够伪造请求以在未经适当授权时访问功能。
跨站请求伪造攻击是指攻击者将伪造的HTTP请求(包括会话、cookie和其他认证信息等)发送到Web应用程序。由于Web应用程序存漏洞,伪造的请求会被Web应用程序认为是用户的合法请求,进而造成对Web应用程序的攻击。
使用含有已知漏洞的组件是指Web应用程序使用带有已知漏洞的组件,会导致该漏洞被利用,进而导致一系列的攻击和影响成为可能。
未验证的重定向和转发漏洞是指Web应用程序将用户重定向和转发到其他网页和网站未没有得到适当验证,攻击者可以重定向受害用户到钓鱼软件或恶意网站,或使用转发去访问未授权的页面。
本章主要依据OWASP TOP 10安全风险列表中的问题对医疗行业Web应用程序进行渗透测试,主要关注第3章中所述的模拟攻击阶段,采用工具扫描、代码审查、数据抓包、人工POC等方法,利用Appscan、AWVS、sqlmap、NMAP、Burpsuite、fiddler、CSRFTester等常用工具[3]配合人工渗透的方式给出相应的实施实例,分析三家医院的Web应用程序是否存在常见的安全风险。
尝试对某医院网站进行该类漏洞分析[5],通过Appscan、AWVS等工具扫描后发现某URL(http://example/noticeDetail.jsp?noticeID=)的 noticeID 参数存在SQL注入点,利用sqlmap工具对注入点进行攻击,构造如 1‘or’1‘=’1等的SQL注入语句,发现存在SQL注入漏洞,可获取该医院系统的相关数据库名,如图2所示。
图2 某医院网站SQL注入漏洞导致数据库名泄露
进而还可以获取指定数据库中的表名、用户名、用户口令(哈希值),利用密码字典可以对数据库用户口令进行猜解,如图3所示。
图3 某医院网站后台数据库用户口令哈希值
尝试对某医院网站进行该类漏洞分析[6],发现在找回密码功能中,用户名、口令、短信验证码等未进行加密保护,通过Burpsuite、fiddler等工具对找回密码过程发送的HTTP请求进行抓包,可获取发送的短信验证码明文。通过该明文的短信验证码进行验证,可修改管理员口令,进而获取进入系统后台的权限,如图4所示。
同时,通过Appscan、AWVS工具扫描网站后发现网站管理后台存在弱口令(口令可被暴力猜解),可通过弱口令(admin)直接登录网站管理后台,如图5所示。
图4 某医院网站找回密码中用户名、口令、短信验证码未加密
图5 某医院网站管理后台弱口令
尝试对某医院网站进行该类漏洞分析[7],通过Appscan、AWVS工具进行扫描,发现网站存在跨站脚本攻击漏洞[4],通过构造脚本语句http://example/news.aspx? ClassId=30%27%22()%26%25%3Cacx%3E%3CScRiPt%20%3Ealert(975682)%3C/ScRiPt%3E执行了JavaScript弹出式的警告框alart(975682),如图6所示。
图6 某医院网站存在跨站脚本攻击漏洞
尝试对某医院网站进行该类漏洞分析,通过Appscan、AWVS工具扫描后发现网站部分URL存在越权访问漏洞,通过直接修改URL中的tel参数,可以遍历注册病人检查报告,如图7所示。
图7 某医院网站存在不安全的直接对象引用
尝试对某医院网站进行该类漏洞分析,发现其服务器(已获取权限)中web.config明文存储了SQL数据库的sa账户连接信息,如图8所示。
图8 某医院网站web.config中明文存储数据库连接信息
尝试对某医院网站进行该类漏洞分析,4.2节中所述漏洞导致用户名、口令、短信验证码未加密传输也属于敏感信息泄露漏洞。此类漏洞也较为常见,通过BurpSuite、fiddler工具进行数据抓包,能够直观地发现传输过程中是否存在敏感信息泄露漏洞,进而与其他漏洞结合利用,实现对Web应用程序的攻击。又如,通过社工库可以搜索可能的QQ、手机号、邮箱等的用户名和口令。利用该类漏洞,可以便于对Web应用程序进行直接或间接的攻击。
尝试对某医院网站进行该类漏洞分析,通过Appscan、AWVS工具扫描后发现管理后台URL存在越权访问漏洞,可以未经认证访问管理后台,并可添加后台用户,进而侵入后台系统。
图9 某医院网站管理后台越权访问
进而利用任意文件上传等漏洞[8],通过上传webshell脚本,实现服务器提权,对应用服务器进行越权访问,如图10所示。
随着实践项目的推进,不难发现会有低年级学生在领导力方面脱颖而出,也会有高年级学生导师开始浑水摸鱼。因此,朋辈导师要及时发现并进行合理引导,取其精华,去其糟粕,不断提升团队的管控能力。强化实践进程的监控和管理,能够确保团队朝着预期的方向推进。
图10 某医院网站管理后台越权访问
尝试对某医院网站进行该类漏洞分析[9],管理后台创建test用户时,利用CSRFTester工具伪造请求,创建fly用户,如图11所示。
图11 某医院网站管理后台CSRF漏洞
尝试对某医院网站进行该类漏洞分析[10],主要通过获取的信息与CVE等漏洞库中的已知库文件、框架和其它软件模块的漏洞进行比对。“心脏滴血”漏洞就是OpenSSL组件漏洞,诸如IIS Apache、Nginx等文件名解析漏洞、Struts2框架任意代码执行漏洞、中间件的源代码泄漏漏洞等均是常见的组件漏洞。
尝试对某医院网站进行该类漏洞分析,通过Appscan、AWVS等工具进行扫描后发现网站存在重定向,对重定向进行分析,发现网站重定向时未进行redirectUrl限制,可能进入钓鱼网站和恶意网站等,如图12所示。
图12 某医院网站未验证的重定向漏洞
作为对象的三家医院渗透测试发现的漏洞数量如表1所示。
表1 渗透测试结果汇总
通过表1和渗透测试的结果可以分析发现,作为对象的三家医院普遍存在OWASP TOP 10的安全漏洞,其中以注入、失效的身份认证和会话管理和敏感信息泄露这三类问题漏洞数量较多,对系统的安全运行影响程度较大。注入类漏洞导致了数据库信息泄露;失效的身份认证和会话管理导致明文的用户身份鉴别信息被攻击者恶意获取,进而侵入系统;敏感信息泄露直接导致攻击者收集信息、攻击系统更加便捷,甚至直接通过泄露的敏感信息侵入系统。
5.2.1 注入
主要防范措施有:1)对用户输入进行校验,过滤非法输入;2)参数化查询或直接使用存储过程进行数据查询存取;3)应用程序使用所需最小权限与数据库连接;4)重要数据采用加密算法存储;5)严格限定输入类型、输入边界。
5.2.2 失效的身份认证和会话管理
5.2.3 跨站脚本(XSS)
主要防范措施有[2]:1)对用户输入进行校验,过滤非法输入;2)浏览器关闭JavaScript;3)对输入数据进行基于HTML上下文(主体、属性、JavaS-cript、CSS或URL)的解码和转义;4)使用内容安全策略(CSP)抵御跨站脚本攻击。
5.2.4 不安全的直接对象引用
主要防范措施有:1)使用非直接的对象引用;2)访问控制功能,即对每一个来自于不信任的源的直接对象引用都必须包含访问控制检查,从而确信该用户对该对象拥有访问权。
5.2.5 安全配置错误
主要防范措施有:1)配置所有的安全机制,如口令复杂度、会话时间、并发会话数和开发框架、中间件等安全配置;2)关闭所有不必要的功能,如端口、服务、默认用户、页面等;3)为用户分配最小的角色权限。
5.2.6 敏感信息泄露
主要防范措施有:1)敏感信息加密存储;2)敏感信息加密传输;3)采用强加密算法;4)加密密钥的恰当管理机制;5)传输敏感数据时,浏览器进行安全校验。
5.2.7 功能级访问控制缺失
主要防范措施有:1)确保用户无法直接访问敏感目录、URL;2)完善服务器端的身份认证机制;3)服务器端采用多因素对传递的参数进行校验。
5.2.8 跨站请求伪造(CSRF)
主要防范措施有:1)HTTP请求附加Token值验证;2)HTTP header的 Referer验证;3)自定义HTTP header验证;4)图形验证码。
5.2.9 使用含有已知漏洞的组件
主要防范措施有:1)及时更新组件至安全版本;2)建立组件使用的安全策略和相应配置;3)在适当情况下增加对组件的安全封装和定制,去除不需要的、脆弱的功能。
5.2.10 未验证的重定向和转发
主要防范措施有:1)尽量避免使用重定向和转发;2)重定向和转发尽可能不涉及用户参数;3)每个参数都必须进行验证以确保它的合法性和正确性,或在服务器端提供用户参数转化为目标页面的映射机制。
本文主要针对医疗行业Web应用程序进行了基于OWASP TOP 10常见安全风险的渗透测试分析和实施,给出了响应实例,并分析了测试结果,最后给出了相应类型漏洞的常规防范措施。实际情况中,每一类漏洞或风险对应的情况和被利用的方式错综复杂,需要渗透测试人员时刻跟踪业界最新动态。后续工作将主要集中在以下方面:一是考虑引入不同风险评估模型对漏洞进行重新归类和风险评估;二是针对漏洞发生情况,采用基于场景模拟的测试方法,针对如登录、支付、修改权限等重要功能模块进行针对性渗透测试;三是为主要漏洞寻找行之有效的解决方案,发现和弥补系统漏洞,保障系统的安全稳定运行。