1、攻击原理
造成XSS漏洞的原因就是,对攻击者的输入没有经过严格的控制,使得攻击者通过巧妙的方法注入恶意指令代码到网页,进行加载并执行。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java, VBScript, ActiveX, Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、个人网页内容、会话和cookie等各种内容。
1)非持久型:
通过 GET、POST、referer 等参数未加处理直接输出到页面执行。该类型是最为常见的,攻击者主要利用此类型通过email、热度非常大的论坛、或者有针对性的某一用户发送一个隐藏性的链接,让受害者进行点击触发。
2)持久型:
由攻击者输入恶意数据保存在数据库,再由服务器脚本程序从数据库中读取数据,然后显示在公共显示的固定页面上,那么所有浏览该页面的用户都会被攻击。该类型攻击性非常大,危险也非常大。
3)DOM型:
由Javascript 脚本动态创建、输出到页面造成的。该类型不容易发现,具有隐藏性的特点,必需手工去发现。
4)浏览器漏洞造成:
在某个浏览器版本造成的漏洞,由浏览于用户浏览历史、页面交互等方式,未加处理,所造成的。该漏洞攻击危害非常大,一旦存在,基本可以实现跨域操作,严重者可以以本地权限执行 javascript 脚本,访问读取本地文件。
2、常见场景:
1)回帖,评论,用户输入在页面直接进行显示,没有进行过滤。
2)用户反馈,客服提问,输入的恶意脚本在后台进行了执行,窃取后台管理员cookie等信息。
3)搜索展示搜索结果的时候直接展示用户输入。
3、危害影响
1、攻击者可能利用XSS攻击获取业务系统服务器账号权限登
4、防御方法
1)htmlspecialchars() 函数:用于转义处理在页面上显示的文本。
2)htmlentities() 函数:用于转义处理在页面上显示的文本。
3)strip_tags() 函数:过滤掉输入、输出里面的恶意标签。
4)header() 函数:使用header("Content-type: application/json"); 用于控制 json 数据的头部,不用于浏览。
5)urlencode() 函数:用于输出处理 字符型参数带入页面 链接中。
6)intval() 函数:用于处理数值型参数输出页面中。
7)自定义函数:大多情况下,要使用一些常用的 html 标签以美化页面显示,如留言、小纸条。在这样的情况下,要采用白名单的方法使用合法的标签显示,过滤掉非法的字符。
5、研判思路
1、判读是否为规则误报
1)基于漏洞特征检测:查看是否在请求中包含明文或转义/转码后的执行语句,比如<script>alert()</script>等;
2)排除业务导致的误报:需要排除业务系统不规范导致的误报情况,比如业务请求中包含alert等字段时的误报
2、判断是否为恶意行为
1)需要确认是否为分析和研究人员的测试行为;
2)需要排除是否为内网已授权漏洞扫描器的扫描行为
3、判断是否攻击成功
1)如果来源IP为内网,则说明内网已存在失陷服务器,可以认为攻击成功,该告警的处置优先级高;
2)如果来源IP为外网,返回值中包含攻击者已执行成功/获取到有效信息,则认为是攻击成功。
6、应急响应-事中处置
1、已失陷主机
1)隔离和处置失陷机器:及时联系机器负责人,对感染的机器采取断网操作,并且修改相关账户的口令,下载杀毒软件或者专杀软件进行清除;
2)内部通告和培训:及时进行内部通告和培训,增强企业员工安全意识,对不明邮件附件和不明站点可疑连接谨慎点击访问,从正规渠道下载程序,不安装来自不明来源的应用程序;
3)端口限制:根据业务情况,在不影响的情况下可选择在安全策略中限制如下端口,3306(MYSQL)、1521(ORACLE)、1433(SQL SERVER)、5432(PG)、6379(REDIS)、9200(ES)
4)漏洞修补:对存在漏洞的主机进行安全漏洞修复,及时对设备系统进行安全更新和应用安全补丁更新
2、已失陷账户
1)修改密码:建议采用数字、符号及大小写字母混合的方式,设置8位以上的密码;
2)账户封禁
3)账户权限收回
3、外部攻击遏制
1)封禁IP:在防火墙上配置IP黑名单,封堵攻击源主机
7、应急响应-事后加固
1)更新网络安全管理措施:根据该事件中暴露的问题,针对性修订完善网络安全管理制度,做好攻击预警和处置,同时对攻击事件进行复盘,并更新网络安全突发事件应急预案;
2)加强网络安全隐患修补:在消除该事件攻击影响的情况下,开展网络安全隐患排查和修补。例如,在权限管理方面,重点排查弱口令、账户权限、口令更新和共用等问题;在漏洞修补方面,及时更新系统、软件、硬件等漏洞补丁;
3)自动化封禁:使用SOAR或其他自动化手段将此类告警外网源IP在第一时间进行边界防火墙的封禁;
4)保持网络安全设备特征库更新:日常运维过程中需要保持特征库为最新版本