一台Web应用服务器开放到公网上,几分钟之内,就会产生访问流量。如果该服务器开放的端口是常见的443或者80,被发现的速度更快,被探测的频率也会非常频繁。这些扫描和探测服务器的流量中,绝大部分都是由自动化的工具生成的。
被自动化工具扫描、监控和攻击是Web应用开放到互联网上需要面对的最常见的问题。
互联网的核心在于连接,基础在于数以亿万级的机器设备。面对如此庞大的设备资产,黑客单纯利用手工测试的方式,无法高效完成探测和攻击行为,所以利用工具实现自动化的扫描和攻击是达到快速提高攻击效率的必由之路。
常见的Web应用的自动化探测类型有目录扫描、文件扫描、接口探测和应用识别等。
目录扫描,也常叫做目录爆破,是一种基于目录字典对目标的网站目录进行访问尝试的方法。目录扫描的目的主要有查找目标站点的后台管理地址、确定某些组件是否使用和探索网站的整体结构等。
有很多目录扫描工具且这些工具的获取比较容易,如DirBuster、御剑、BBScan等,它们的基本功能相差不大,如自带字典及支持自定义字典、递归扫描、状态码过滤、多Payload及自定义User-Agent等。
图2-1 某目录扫描工具
目录扫描的判断依据,主要是基于服务端HTTP响应里Status,通常200代表存在,404代表不存在。
Web服务器管理员常常会对服务器上的重要文件或目录进行压缩备份,避免重要文件的丢失。如果文件目录或备份文件管理不规范,这些重要文件或目录可能会被未授权访问,甚至造成敏感文件及信息泄露。
对文件进行扫描,常见的目标包括.ZIP类备份文件、.SVN类的隐藏文件和安装后的遗留文件等。
图2-2 目录扫描
通过对目标主机的端口进行探测,了解目标服务器开放的端口情况,便于对目标主机开放端口上的服务,再次进行漏洞利用。网络上接口探测的频率非常频繁,相关的接口探测技术也非常成熟,当前已有不少工具可以实现接口探测,如Nmap和MassCAN,支持多种端口探测模式,并且能够快速对大量的目标和端口进行扫描。
图2-3 Nmap端口扫描
网络上对外提供Web服务的服务器所面对的威胁流量粗略可分为两类,一类是对整个网络边界资产的盲扫,将某漏洞的利用报文发送到不同的网络目标,至于是否打中谁,主要看天意。另一类是有针对性的攻击流量,针对某服务器上不同的端口和不同的服务,发送特定的攻击报文,如对MySQL服务进行弱口令爆破尝试,就会在精准识别MySQL服务器之后,在进行弱口令尝试。
对于Web应用,很多服务将自己部署于非80和非443端口,逃避外部对其Web服务的发现,实现简单的服务隐藏。
在识别端口上运行着Web应用之后,攻击方会尝试对Web应用做进一步的识别,如判断目标应用采用的是哪种语言开放、使用的中间件架构和后端数据库等等。
图2-4 某在线Web应用识别网站
常见的针对Web应用的攻击方式包括SQL注入、对Web中间件的漏洞利用和对Web内容中敏感数据进行批量爬取等,都可以利用程序代码实现自动化的攻击流程。很多攻击者将对漏洞点的探测和利用程序自动执行,不需要人去介入,大幅度提升了攻击的速度和能力。
SQL注入攻击利用Web服务端的漏洞,在HTTP(S)请求字符串中加入SQL语句,以访问目标的后端数据。目前很多工具会自动爬取目标站点的内容,提取API,在各个位置上自动注入,模糊测试可能存在的注入点。
很多Web中间件和依赖项存在安全问题,可被黑客远程利用,如FastJson和XStream。以FastJson为例,通过API接口,以POST方式往目标服务器传送特定构造的Json格式Payload,以此尝试触发目标的反序列化问题。
图3-1 FastJson探测请求
业务的某些API接口响应内容里,泄露了用户敏感数据,是Web服务端面临的常见问题。对于大型网站而言,其存量的API接口数量众多,增量的API接口不断增多,这种情况下的数据外泄风险会一直持续。
相较于常规Web攻击,爬虫流量隐藏在正常业务流量里,不易被发现,对包含敏感数据接口的访问,不会有明显的攻击特征。
传统的Web应用防护方式,按照防护位置,大略可分为隐藏、访问限制和检测与拦截。
(1)隐藏策略用于应对常见端口和常见目录的自动化扫描。一些比较关键或者敏感的Web服务,会将自身部署在非常规的80或443端口上,减少被端口扫描到的概率。并将应用的访问入口,部署在不易猜解的目录下。这样保证了业务不被轻易发现,也就降低了业务敏感数据被爬取和泄露的风险。
(2)访问控制策略只允许指定来源的对象可访问,将访问来源收束到一个很小的范围,很大程度上减少Web应用面对的威胁范围。业务应用服务器无法访问,自动化扫描和自动化的攻击流量也就没有了用武之地。这种策略需要依据业务的安全需求决定,一旦某业务应用服务器在商业模式角度的考量之下必须对所有公网用户开放,该策略就完全失效。
图4-1 Web应用访问来源控制
(3)对于恶意的访问请求,可以在将请求发往后端服务器之前,通过对流量内容进行分析、检测和拦截攻击请求。
上述第(1)种和第(2)种方式实现的成本很小。与(1)和(2)的实施难易程度比较,第(3)种策略实现对Web请求进行拦截和请求,需要很高的技术要求和持续不断的运营能力和成本。WAF是这种方式的具体实现形式,通过WAF在边界上,对用户侧的Web请求进行检测和拦截,是目前很多企业的标配。
上述传统的Web应用防护方式,依然不能有效解决来自互联网侧持续不断的自动化攻击威胁。
以WAF为例,目前主流的WAF,大多是以“规则”的方式,检测和拦截不同的请求。对WAF规则的绕过和对新攻击方式的检测,是攻防双方持续对抗的一个过程。部分WAF尝试通过语法和语义分析的方式,解析请求,查找攻击请求,这种方式有利用防守方脱离对具体规则的维护,但无法避免被绕过,毕竟语言太灵活,语义解析无法完全覆盖所有可能的情况。
对于API的安全,目前已有不少厂家具有对应的防护解决方案,如全知科技、永安和阿里云等等。现有防护解决方案主要实现对Web业务的全流量分析,如分析业务流量中的响应报文内容、持续梳理API资产和检测是否有数据泄露的情况存在等等。
图4-2 API通用安全解决方案架构
这类的防护解决方案有助于了解自身的API资产情况和数据风险情况,并可对数据外泄事件进行溯源,但这需要覆盖所有业务流量和场景,然而在当下大型企业业务分散的场景下,难以实现完全覆盖,原因在于系统部署结构复杂且系统的输出,如敏感接口的发现和访问需要持续不断的运营。
4.3.1 Web应用隔离防护架构
当前Web应用面临的自动化扫描与攻击,钛星数安提出了区别于传统的安全防护方式——钛星Web应用隔离系统。该系统将用户与实际的Web应用服务器进行隔离,以另一种“语言”与用户侧进行交互,获取用户端的输入发往服务端,并将服务端的服务以与原有方式相同的视觉效果展现给用户。
图4-3 Web应用隔离架构
Web应用隔离系统获取用户在浏览器上的鼠标键盘操作,转换为Web服务器可以接受的HTTP(S)请求;将Web服务器所有的活动脚本及API在Web应用隔离平台执行后,隐藏原有代码,重构网页内容,返回给用户侧浏览器。从用户侧看,用户浏览器展示的Web页面,与用户直接访问原网站相同,但是不含源网站活动脚本及API等信息。
4.3.2 Web应用隔离防护原理
基于上述Web应用隔离架构,可以有效防护来自网络的自动化扫描和攻击,主要运用以下的思路来实现:
(1)源码隐藏
Web应用隔离系统会将源网站所有的活动脚本及API在隔离平台执行,用户侧无法获取可用的服务端API接口,同时,隔离平台对于Web服务器的响应内容,进行了重构,用户侧无法对接口的响应内容进行过滤,获取敏感数据。使用这种原理,传统的基于API接口的攻击,都无法生效,如针对特定API接口内容的爬取问题,客户端将无法获取到可用的API接口,也无法对响应包内容进行提取。
该原理可完全防护利用API对网站内容进行自动化爬取、API接口敏感内容泄露和对网站的自动化攻击等安全问题。
(2)用户侧浏览器与隔离系统间的交互
用户侧与Web应用隔离系统的交互是基于隔离系统的特定协议。隔离系统只接受用户侧发送的GET请求和用户产生的鼠标键盘操作事件,其它类型如POST、OPTION、HEAD等,隔离平台不能接受并丢弃。以FastJson漏洞利用为例,其利用方式为以POST方式发送特定Json数据,这类请求发送到Web应用隔离系统,系统将直接丢弃掉;隔离系统与用户侧交互的URL,以特定的方式进行加密和排序,非加密的URL,隔离系统不予处理。SQL注入类的攻击,由于不满足于隔离系统间的URL交互要求,其请求将无法抵达真正的Web应用服务器。
4.3.3 Web应用隔离防护效果
对于自动化扫描和攻击中常见的场景,在隔离和非隔离状态下的对比,有着非常明显的差异。
(1)防爬虫
利用Web应用隔离进行防护前,使用Burp Suite的爬虫模块可以直接获取到网站的目录架构和具体的文件路径。
图4-4 获取目标网站目录架构及文件
防护后,工具已经无法获取到网站的目录架构和文件路径。
图4-5 无法获取目标的目录及文件
(2)防目录扫描
防护前,使用扫描工具可以直接扫描出网站的一些文件路径。
图4-6 目录扫描成功
防护后,工具已经无法扫描出网站的目录和文件信息。
图4-7 目录扫描无有效结果
(3)敏感信息泄露防护
防护前,使用Fiddler可以直接获取到客户端发送到服务器的数据包,HTTP的整个头部参数信息都能正常显示,开启防护后,网页通过私有协议加密传输网页数据和鼠标键盘点击事件信息,从而有效避免敏感信息的泄露。
图4-8 防护后页面数据
(4)对SQL注入的防护
对某站GET请求头中的参数进行SQL注入测试,注入效果如下所示:
图4-9 SQL注入成功
进行隔离后,浏览器与隔离系统间的URL采用加密字符串的方式,注入Payload无法有效传递到后端的Web应用服务器,可防护SQL注入。
图4-10 对SQL注入的防护
(5)防漏洞利用
以 JBoss的Java反序列化漏洞为例,通过自动化工具用 JBoss中间件反序列化漏洞攻击,查看攻击情况。
图4-11 JBoss反序列漏洞利用对比
使用Web应用隔离进行防护前,可成功执行系统命令。开启隔离防护后,使用自动化工具对隔离后网站进行 JBoss反序列化漏洞攻击,结果显示网站无 JBoss反序列化漏洞。
综上,由于彻底改变了用户侧浏览器与Web应用服务器间的交互方式,使得基于传统HTTP(S)协议的自动化攻击,失去了利用的基础,完全无法执行攻击行为。
本文作者:北京钛星数安科技有限公司, 转载请注明来自FreeBuf.COM
欢迎关注LemonSec
本文作者:Lemon
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/178915.html