[转载一篇好文,敬请各位大佬关注:小谢取证]
近来发现很多涉网案件开始使用CDN技术来隐藏源服务器IP,对司法机关取证封锁源头IP造成一定的难度,那么如何对这种使用CDN技术的网站找到其背后搭建的那台源服务器的IP?本期特邀黑产研究专家阿辉将介绍CDN的一些相关知识和取证思路。
1.引言
随着互联网网络信息技术的高速发展,对可扩展和高性能WEB应用程序的需求不断增加,CDN加速已成为确保这些应用程序能够处理繁重流量并提供无缝用户体验的重要工具。涉案域名直接做A记录解析到搭建平台的主服务器上,未经过负载均衡或CDN加速处理,如果在业务量大的时候就会出现堵塞通信甚至宕机的可能,而且这种解析的方式通过简单的技术侦查就能暴露出服务器IP是多少。
CDN技术的原理使得它具有抵御一定的流量gongji,根据负载情况分流到不同的节点服务器从而减轻主服务器负载,加上主服务器位于CDN边缘缓存服务器背后,常规的ping请求能看到这条域名做了CDN解析的IP,这样就有隐匿主服务器IP等优点,侦办此类网站,需要挖掘出源服务器IP,从而直接准确有效的进行封堵或调证。下面介绍下CDN是什么?CDN的原理及CDN下如何取证?
2.CDN是什么
CDN的全称是Content Delivery Network翻译成中文就是内容分发网络。CDN依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取内容,降低网络延迟,提高访问速度。简单来讲,它就是通过内容缓存存储和分发技术让用户就近更快获得所需的数据。
图1 CDN系统
举个例子,某个网站的服务器在北京,如果深圳的用户想要访问服务,就需要跨越很远的距离,由于传输速度和路由转发等因素,就会导致访问速度非常缓慢。但如果在深圳建立一个CDN服务器,上面缓存了一些服务器数据,那么深圳用户只需要访问这个CDN的服务器就能获取相关的内容。
3.CDN的原理
3.1在没有使用CDN应用时,访问一个站点的域名流程如下:
图2 未引入CDN前的典型用户传统访问流程
1)用户在浏览器中输入要访问的网址域名。
2)浏览器向本地 DNS 服务器请求对域名的解析。
3)如果本地 DNS 服务器有域名的解析结果,那么直接响应用户请求,返回该域名对应的 IP 地址。
4)如果本地 DNS 服务器没有域名的解析结果,那么则会递归地向 DNS 系统请求解析,随后将该结果返回给用户。
5)浏览器得到域名解析结果后,其实也就是域名对应的 IP 地址。
6)随后浏览器向服务器请求内容。
7)服务器将用户请求内容返回给浏览器。
图3 简化图示未引入CDN前的典型用户传统访问流程
3.2使用了CDN应用时,访问一个站点的域名流程如下:
图4 引入CDN后的典型用户访问流程
1)浏览器URL 请求,经过本地 DNS 解析,会将域名解析权交给域名 CNAME 指向的 CDN 专用 DNS 服务器。
2)CDN 的 DNS 服务器将 CDN 的全局负载均衡设备 IP 地址返回给浏览器。
3)浏览器向 CDN 全局负载均衡设备发起 URL 请求。
4)CDN 全局负载均衡设备根据用户 IP 地址,以及用户请求的 URL,选择一台用户所属区域的区域负载均衡设备,向其发起请求。
5)区域负载均衡设备会为用户选择最合适的 CDN 缓存服务器(考虑的依据包括:服务器负载情况,距离用户的距离等),并返回给全局负载均衡设备。
6)全局负载均衡设备将选中的 CDN 缓存服务器 IP 地址返回给用户。
7)用户向 CDN 缓存服务器发起请求,缓存服务器响应用户请求,最终将用户所需要的内容返回给浏览器。
8)如果该节点缓存服务器没有用户想要获取的内容,则通过内部路由访问上一节点缓存服务器,直到找到文件或到达源站为止。
9)CDN节点缓存该数据,下次请求该文件时可以直接返回。
图5 简化图示引入CDN后的典型用户访问流程
4.CDN的取证
如果使用了CDN技术,对域名进行ping请求,能看到这条域名的CDN解析出来的IP,但不是实际搭建的源服务器IP(以下简称真实IP)。下面通过以下几种办法进行尝试查找真实IP。
4.1先普及了解下常见CDN服务商有哪些!
图6 国内的CDN服务厂商
图7 国外的CDN服务厂商
4.2 CDN判断
在进行前期侦办时,可以先ping域名,如果ping出来确定是使用CDN加速,并且获取到解析的IP。有了该IP在国内的情况下就可以联系这家CDN服务商调取域名解析的真实IP。知道了真实IP后就可以进行下一步的调证侦查等。如果使用的是国外的CDN服务商,或自架设型的CDN,大多情况下只能进行封堵。下面介绍怎么判断网站域名是否使用CDN技术。
•多ping
通过多地ping目标域名,如果没有使用CDN,只会显示一个IP地址,或者双线接入情况的两个不同运营商IP。
多ping在线站点:
1)http://ping.chinaz.com/
2)https://ping.aizhan.com/
3) http://www.webkaka.com/ping.aspx
如图,不同地区访问有不同IP,一般存在CDN:
图8 多地ping
•nslookup
获取到的DNS域名解析结果中返回多个IP的,一般都是存在CDN服务。
图9 Nslookup检测
•header头信息
1)请求响应包header头中是否存在CDN服务商信息
2)报错信息
3)若asp或者asp.net网站返回头的server不是IIS、而是Nginx,则多半使用了Nginx反向代理到CDN
•在线检测工具
1) https://www.cdnplanet.com/tools/cdnfinder
2) https://myssl.com/cdn_check.html
3) https://tools.ipip.net/cdn.php
图10 CDN检测
4.3获取真实IP
•DNS历史绑定记录
查询域名历史解析记录,可能会存在未使用CDN之前的真实IP记录:
2) https://securitytrails.com/
4) http://toolbar.netcraft.com/site_report?url=
5) https://viewdns.info/iphistory/?domain=
6) https://site.ip138.com/www.xxx.com/
判断存在CDN,利用工具查询获取历史记录,然后将每个IP都验证测试一遍,通过源代码判断,确定其真实IP。
真实IP使用:
• 通过修改 hosts 文件,将域名和 IP 绑定。
• 如使用 burpsuite 测试,可以在 Project options —> Connections —> Hostname Resolution 中增加域名和 IP 记录。
• 使用 view-source:xxx.xxx.xxx.xxx,表明这是真实IP,如果是真,则返回网站源代码。
如果是假,则返回CDN服务商默认页信息。
当然也有返回打开的是报错代码,因为IP端口没有开放,或显示无法访问,或显示Nginx默认信息,因为Nginx可以用作代理,所以以上情况都不是真实IP。
图11 Nginx默认页
•网络空间测绘搜索引擎
网络空间测绘,一般都会定时把全网资产扫一遍存在数据库里。
通过网络空间测绘搜索引擎搜索其收录的目标相关信息,有概率获取到目标真实IP。
相关引擎有:
4) https://quake.360.net/quake/#/index
例如fofa可以从以下几个关键因素去搜索验证:IP/域名/title/logo/icp/body/js/css/html等静态特征值,搜索其相同的主机结果,进一步探测真实IP。
图12 Fofa搜索
•子域名
考虑到CDN成本问题,一些重要站点会采用CDN加速,而一些子域名则没有使用。一般情况下,一些子域名与主站的真实IP在同一c段或同一台服务器上,这时就可以通过发现子域名c段IP、端口信息,逐个探测定位主站真实IP地址。
常见查找方法和工具:
1)各大搜索引擎
2)oneforall
3)ksubdomain
4)Jsinfo-scan
•异地ping
部分国内CDN厂商只做了国内的线路,而没有铺设对国外的线路,这时就可以通过海外解析直接获取到真实IP。
可以使用:
1)http://ping.chinaz.com/
2)https://asm.ca.com/zh_cn/ping.php
3)http://host-tracker.com/
4)http://www.webpagetest.org/
5)https://dnscheck.pingdom.com/
6) https://www.host-tracker.com/v3/check/
图13 海外ping
•SSL证书
证书颁发机构 (CA) 必须将他们发布的每个 SSL/TLS 证书发布到公共日志中,SSL/TLS 证书通常包含域名、子域名和电子邮件地址。因此可以利用 SSL/TLS 证书来发现目标站点的真实 IP 地址。
CDN在提供保护的同时,也会与服务器之间进行加密通信(SSL)。当通过服443端口去访问服务器IP或域名时,就会暴露其SSL证书,还有浏览器地址栏加锁的中的证书信息也可以查看到,就可以通过证书SHA-256、SHA-1指纹比对发现服务器的真实IP地址。
在线:
1)https://crt.sh/
通过 https://crt.sh 进行快速证书查询收集
图14浏览器地址栏锁中的证书信息
图15 Crt证书反查
2)Censys 引擎
Censys 搜索引擎能够扫描整个互联网,每天都会扫描 IPv4 地址空间,以搜索所有联网设备并收集相关的信息,可以利用Censys进行全网方面的SSL证书搜索,找到匹配的真实 IP 。
通过Censys引擎搜索证书信息,有些域名可以发现多个有效或无效的证书:
https://search.censys.io/certificates?q=XXXX.com
ps: 并不是有效的证书才是有价值的,无效的证书中也会有很多服务器配置错误依然保留着的信息。
精准定位有效SSL证书,减少结果:
parsed.names: xxx.com and tags.raw: trusted
图16 Censys搜索
图17 Hosts反查是否存在真实IP记录
逐个打开,可以看到使用了CloudFlare的CDN,如果是国内厂家就可以进一步进行侦查与调证,直接取到背后解析的源IP。
图18 CloudFlare CDN
3)命令行
通过 openssl 和 curl 等常见的基础命令,也同样可以达到反查 SSL 证书的效果
Openssl :openssls_client -connect IP:443| grep subject
Curl:curl-v 域名 | grep 'subject'
4)使用工具脚本和网站
通过工具脚本和网站,进行SSL证书爬取
CloudFlair项目地址: https://github.com/christophetd/CloudFlair
脚本兼容 python2.7 和 3.5,需要配置 Censys API,针对目标网站是否使用 CloudFlare服务进行探测。
使用来自 Censys 的全网扫描数据查找 CloudFlare 背后网站的源服务器。
•敏感文件泄露
如:服务器日志文件、探针文件,例如 phpinfo、网站备份压缩文件、.DS_Store、.hg、.git、SVN、Web.xml
图19 phpinfo探针
•CDN配置问题
某些站点只做了www CNAME到CDN上,导致www.xxx.com和xxx.com是两条独立的解析记录,所以可以通过直接ping域名xxx.com获取到未加入CDN的真实IP,同理HTTP协议和HTTPS协议配置也是有可能出现这种问题。
•loudong
1)网站本身存在一些loudong时,如XSS/SSRF/XXE/命令执行等,通过带外服务器地址注入,使服务器主动连接,被动获取连接记录。
2)部分本身功能,如url采集、远程url图片、编辑器问题等。
3)异常信息、调试信息等都有可能泄露真实IP或内网IP的。
4)ThinkPHP 报错/SpringBoot变量/phpinfo。
图20 Debug反馈
•邮件头信息
一般邮件系统都在内部,没有经过CDN解析,通过邮件发送、RSS订阅等sendmail功能去获取到服务器与邮箱系统交互的邮件源码,在源文件头信息或者源代码中就会包含服务器真实IP。但需注意该IP是否第三方邮件服务器(如腾讯企业邮箱、阿里企业邮箱),一般只有应用与网站在同一服务器上时,才获取到当前服务器的真实IP。
常见交互功能点:RSS 订阅、邮箱注册、激活处、邮箱找回密码处、产品更新的邮件推送、某业务执行后发送的邮件通知、员工邮箱、邮件管理平台等入口处的忘记密码。
可以通过查mx记录确定下是否第三方邮件服务器,当然这里这个邮箱很明显了。
图21 邮箱
通过发送邮件给一个不存在的邮箱地址,比如 XXXSSS@domain.com ,因为该用户不存在,所以发送将失败,并且还会收到一个包含发送该电子邮件给你的服务器的真实 IP 通知。
foxmail导出的邮件可以用编辑器打开查看其内容。
•vhost碰撞
只要字典够强大,数据够多,通过 IP 和子域的碰撞,总会有所收获。
在线工具:
https://pentest-tools.com/information-gathering/find-virtual-hosts#
•应用程序
一些app、小程序会直接采用IP进行通信交互,也可以通过一些历史版本探测真实IP。
工具:HttpCanary、Fiddler、CharlesProxy
图22 HttpCanary分析APP网络通讯
•通过 F5 LTM 解码
一般常用的负载均衡实现方式:
1)基于cookie的会话保持
2)基于session的会话保持,如weblogic session复制机制
3)基于四层的负载,IP+端口。
4)LTM 是将所有的应用请求分配到多个节点服务器上。提高业务的处理能力,也就是负载均衡。F5 LTM也就是5公司旗下的一种负载均衡方案。
5)当服务器使用 F5 LTM 做负载均衡时,通过对 set-cookie 关键字的解码,可以获取服务器真实 IP 地址。
例如:基于cookie会话保持情况:
F5在获取到客户端第一次请求时,会使用set cookie头,给客户端标记一个特定的cookie。
图23
后续客户端请求时,F5都会去校验cookie中得字段,判断交给那个服务器处理。那么就可以利用此机制,获取处理服务器的IP地址,大概率也是网站服务器真实IP。具体解法如下:
• 先把第一小节的十进制数,即 2388933130 取出来
• 将其转为十六进制数 8e643a0a
• 接着从后至前,取四个字节出来:0a.3a.64.8e
• 最后依次转为十进制数 10.58.100.142,即是服务器的真实IP地址。
一般来说基本都是内网IP,但也有例外,得看部署情况,无意间找到一个:
图24
自动化解码工具:
https://github.com/ezelf/f5_cookieLeaks
图25
•其他
1)扫全网
•https://github.com/superfish9/hackcdn
2)流量gongji
对不设防的CDN发起大量访问,导致出错或服务器更换时可能会泄露真实IP。
3)长期关注
定期访问记录IP变化,业务变更或架构调整可能会有更换服务器更换IP的情况。
4)流量包问题
部分开发者会将真实IP记录到一些header响应头或者响应包中。
5)403绕过
当目标地址放在标头(如Location头)中时,可通过抓包将HTTP协议改为1.0并将请求中除第一行外的所有数据删掉,再发送请求有机会在相应包中Location头获取到真实IP地址。
5.总结
CDN技术原本目的是为了改善互联网的服务质量,通俗一点说其实就是提高访问速度,然而互联网高速发展技术给我们带来便利的同时,黑灰产业技术也在不断迭代更新,在取证网络违法犯罪行为的道路上,更是任重道远,所以需要各界人员共同努力,发挥各自的职能,强强联手,强强合作。
参考文献
[1] 安胜ANSCEN. (2018). 网站真实IP发现手段浅谈 [Blog post]. 安全客.
https://www.anquanke.com/post/id/163348
[2] binmaker. (2021). CDN 2021 完全gongji指南 [Blog post]. 安全客.
https://www.anquanke.com/post/id/227818
敬请各位大佬关注:小谢取证