水坑攻击(Watering Hole Attack)是一种网络攻击方法,其名称来源于自然界的捕食方式。
攻击者会通过前期的调查或各种社会工程手段,分析被攻击者的网络活动规律,确定被攻击者(往往是一个特定群体)经常访问的一些网站,并在网站上部署恶意程序,等待被攻击者来访时实施攻击,当受害者访问被部署了恶意程序的网站时即会被感染。此类攻击行为类似于:捕食者埋伏在水里或者水坑周围,等其他动物前来喝水时发起攻击猎取食物。
水坑攻击属于APT攻击的一种,与其他社会工程手段(例如网络钓鱼)相比,水坑攻击的危险性来源于其利用的是不会被列入黑名单的合法网站。黑客无需耗费精力制作钓鱼网站,而是利用合法网站的弱点,隐蔽性比较强,更难被发现。访问者出于对这些网站的一贯信任,更容易放松警惕,继而落入水坑陷阱之中。
由于水坑攻击的实现需要具备很多条件(比如被攻击者访问的网站存在漏洞,浏览器或者其他程序存在漏洞等),因此目前并不常见。通常情况下,攻击低安全性目标以接近高安全性目标是其典型的攻击模式。低安全性目标可能是业务合作伙伴、连接到企业网络的供应商,或者是靠近目标的咖啡店内不安全的无线网络。
通常来说,水坑攻击的目的是通过感染受害者的电脑,以获得对受害者公司网络的访问权。
水坑攻击一般分为如下四个阶段:
(1)信息收集
信息收集阶段,攻击者会对他们的目标受害者群体进行“画像”,收集信息,了解受害者最常用的网站。
这些“画像”信息一般来源于搜索引擎或受害者社交媒体主页的公开信息,和通过非法手段(如社会工程、间谍软件、键盘记录仪等)获得的信息。
通常来说,攻击者会选择安全程度较低的网站作为目标,如一些中小型网站,或者技术和资金并不雄厚的网站。由于大型网站非常注意网络安全,所以会部署大量的专业安全设备,并雇佣专门的网络安全人员来维护网络,这大大提高了攻击者的成本。
(2)分析
在选定目标网站之后,攻击者往往会对这些网站开展分析,寻找他们可以利用的域名和子域名的漏洞。零日漏洞是一类较易被攻击者利用的漏洞,因为零日漏洞是还没有补丁的安全漏洞,作为首先挖掘出漏洞的攻击者,可以借此轻松越过严密的网络防护措施,渗透入网络。
(3)准备
准备阶段,攻击者通过代码注入或DNS欺骗等各种手段来感染网站,改变网站的执行进程或目标网址。一些攻击者会选择在受害者访问原网站时将受害者重定向至假网站,其中包含攻击者所部署的恶意软件;另一些攻击者会选择路过式下载(Drive-by Download)的手段,将恶意软件嵌入到原网页,让受害者在使用原网站时不知不觉地下载并安装恶意软件。
(4)执行
一旦网站被感染,攻击者便可以等待着受害者落入他们的陷阱了。当受害者访问已被感染的网站时,浏览器即会从这些网站上下载恶意软件,恶意软件就这样进入了用户电脑。由于攻击者部署的恶意软件往往是远程访问木马病毒(Remote Access Trojan),攻击者此时便可远程操控用户电脑,获取用户个人信息、账户信息等种种敏感个人数据,并以用户电脑作为跳板,获取权限进入用户的企业网络。
水坑攻击者感染网站的方式多种多样,以下列举一些水坑攻击中常用到的技术,以及常见的应对措施:
(1)跨站脚本攻击(Cross-site Scripting)
跨站脚本攻击又称XSS攻击,是代码注入攻击的一种。利用XSS漏洞,攻击者可以窃取Cookies或劫持会话,或注入恶意 HTML 或 JavaScript 代码到页面中,又或者将当前页面重定向至一个攻击者搭建的恶意网站。XSS漏洞的产生多是因为网站开发者没有将用户输入文本中的特殊字符进行合适的过滤,就贸然插入到 HTML 中,给了攻击者以提交恶意代码的可乘之机。在开发过程中谨慎地使用HTML转义字符,能够一定程度上降低XSS漏洞产生的风险。
(2)SQL注入(SQL Injection)
SQL 注入是一种危险的安全漏洞,攻击者利用Web应用程序没有正确过滤用户输入的数据,向数据库服务器发送恶意 SQL 查询语句。攻击者可以利用这些恶意查询语句执行未经授权的操作,如删除、修改或者读取数据,甚至可以完全接管受影响的应用程序。预防 SQL 注入的方法包括使用参数化查询、对输入数据进行检查和过滤、使用最小权限原则以及定期安全检查和更新。
(3)DNS欺骗(DNS Spoofing)
在DNS欺骗攻击中,攻击者通过冒充域名服务器,劫持网络浏览器对网站的DNS请求,从而将用户引导至一个不同的网站。改变用户的DNS设置一般有两种方法,暴力破解或者利用系统漏洞。DNS欺骗相较其他攻击会更难识别,因为多数受害者并不能直接感知到自己的DNS服务器已经被篡改了,只有待在仿冒网页上的操作带来糟糕的后果时,才能后知后觉地意识到攻击的发生。因此,提高安全意识,使用最新版本的DNS服务器,及时安装补丁,并使用入侵防御检测系统来预防DNS欺骗的发生是重中之重。
(4)路过式下载(Drive-by Download)
通过路过式下载,攻击者将恶意软件嵌入到正常网站的界面中,使得受害者在不知道的情况下下载这些软件到本地,攻击者便可进一步通过用户网络在用户的组织内广泛散布恶意软件,寄生其他电脑。攻击者实施路过式下载的典型方式包括安装恶意插件,或编写Shellcode到内存。因为路过式下载的攻击目标往往是过时的系统或软件服务,所以持续更新系统与软件版本可以有效避免路过式下载的危害。
(5)恶意广告(Malvertising)
恶意广告是一种常被攻击者用来散播恶意软件的方式。当用户在浏览网页的时候有意无意点击到页面上的恶意广告时,便会下载恶意软件,或被重定向至恶意网站。防范恶意广告需要安装防病毒软件和广告拦截器,避免访问未知网站,并定期更新浏览器和操作系统。
(6)零日攻击(Zero-day Attack)
零日漏洞通常是指还没有补丁的安全漏洞,零日攻击则是指利用零日漏洞对系统或软件应用发动的网络攻击。由于零日漏洞的严重级别通常较高,所以零日攻击往往也具有很大的破坏性。攻击者一般会使用自动化测试工具和逆向工程技术来寻找漏洞,凭借挖掘到的零日漏洞,可以轻松越过严密的网络防护措施,渗透入网络,最终实施零日攻击。零日攻击很难防御,但是,通过建设完善的防御体系,提升人员的防范意识,可以有效减少被零日攻击的机率,降低零日攻击造成的损失。
相对而言,水坑攻击并不是最常见的社会工程攻击。然而,水坑攻击的成功率很高,一旦成功,具有强大的破坏力。以下列举了一些近年来著名的水坑攻击事件:
(1) Flash攻击
2015年,攻击者利用微软IE浏览器和Adobe Flash中的漏洞将恶意代码植入福布斯新闻网“今日遐思(Thought of the Day”)”专栏页面。任何使用Flash特定版本的用户只要访问“今日遐思”页面,都将面临感染恶意代码的风险。在此次攻击中,国防和金融领域从业者是高风险人群。
(2)NotPetya攻击
2017年,攻击者通过感染某国政府网站,使得用户从网站上下载了恶意软件NotPetya,并很快蔓延至整个国家的网络。NotPetya会清空受害者硬盘上的所有内容,整场攻击造成了总计100亿美金左右的损失。
(3)CCleaner攻击
2017年,攻击者渗入某公司网站,并将恶意软件藏于该公司旗下软件产品CCleaner的安装文件中。当含有恶意软件的CCleaner版本发布后,修改的安装文件被全球227万名CCleaner客户下载。
(4)Adobe Flash水坑攻击
2019年,攻击者在一些慈善网站上设置了水坑。当受害者访问这些受感染的网站时,将触发一个仿冒的Adobe Flash下载窗口。当恶意软件被下载后,受害者的电脑上会出现后门,使得攻击者得以远程控制受害者的电脑,修改文件,获取个人数据与计算机活动数据。