关键词:全流量分析、网络安全、X-Forwarded-ForHTTP协议分析

什么是X-Forwarded-For

如果要问当下最走红的应用层协议,当HTTP莫属,一个无状态维护协议,其连接基于TCP,在HTTP协议头部没有IP地址字段。所以,如果要在应用层保存IP地址信息(应用服务器统计访问者信息的主要来源之一),只能通过X-Forwarded-For头部字段来实现。

X-Forwarded-For位于HTTP协议的请求头部,属于HTTP的头部扩展。在HTTP/1.1RFC 2616)协议规范中并没有对X-Forwarded-For有明确的定义。最开始由著名的代理软件Squid(见www.squid-cache.org)引入,用来传递HTTP请求端的真实IP地址。如今,X-Forwarded-For已成为事实上的标准,各大HTTP代理、负载均衡等转发服务都在广泛使用它,并在RFC 7239Forwarded HTTP Extension)标准中收录。

下图是X-Forwarded-For格式,越靠近左边的地址距离服务器越远,每经过一层代理就在后面加上该代理地址。X-Forwarded-For信息除了在真实代理环境中被正常使用外,其信息也可以通过伪造形成

网深科技NetInside HTTP协议分析

如何获取真实的客户端IP地址

X-Forwarded-For地址可以伪造,那该如何获取客户端真实IP地址呢?

开发层面,在开发语言中能够获取Remote Address,该地址就是真实的客户端IP地址,用来与应用服务器建立TCP连接,该地址无法伪造,如果伪造则连接无法成功建立,继而不会后面的HTTP访问存在。

运维层面,全流量分析系统实时采集和分析TCP五元组,对所有访问服务器的客户端地址统计和记录,并按需显示访问行为特征。

真实的客户端IP地址就是我们常说的TCP三步握手中发起连接请求的IP地址。

X-Forwarded-For伪造访问有什么危害

前面已说过,X-Forwarded-ForIP可以伪造。那么,这种伪造会带来什么危害呢,下面列举几种:

  1. 通过伪造IP地址,绕过后台访问地址限制;
  2. 当前端服务器通过X-Forwarded-For信息判断来访地址时,通过修改X-Forwarded-For信息可实现撞库和爆破;
  3. 恶意爬虫X-Forwarded-For伪造,造成服务器负荷过重,甚至无法正常提供服务;
  4. X-Forwarded-For伪造也可用于某些CTF题目作弊;
  5. 某些点赞投票系统,如果是基于访问者IP地址统计投票数量,那么通过修改X-Forwarded-For地址,可进行刷票行为;
  6. 还有更多

如何实时分析X-Forwarded-For伪造访问

既然X-Forwarded-For伪造危害如此之大,在系统运维和安全防御中该如何实时分析和发现呢就显得尤为重要。

对于X-Forwarded-For伪造行为的监测分析主要从2个层面进行。

首先,获知IP与应用系统之间的连接信息,这里的IP地址为上文中提及的Remote Address,即真实IP地址,伪造地址的客户端连接服务器的数量会明显高于其它地址的对象。

下图显示服务器在一段时间内的运行状况,其中连接的IP地址信息部分,显示连接服务器最多的IP地址信息。

网深科技NetInside HTTP协议分析

其次,查看该地址访问系统的应用信息,网深科技全流量分析系统可自动发现该地址伪造的IP地址及这些伪造地址访问的应用内容信息。

网深科技NetInside HTTP协议分析

随机打开上图中任意一个应用访问数据包,即可查看真实的访问信息。

NetInside系统HTTP解码分析

或者使用一键导出内容功能,在文本编辑工具打开查看。

下图为另一个X-Forwarded-For伪造访问例子。

网深科技NetInside系统分析

如何防御

鉴于X-Forwarded-For伪造存在诸多危害,其防御工作绝对不可轻视。以下是X-Forwarded-For伪造行为的主流防御方法,供参考。

  • 直接对外提供服务的 Web 应用,为了安全起见,只能通过 Remote Address 获取 IP,不能相信任何HTTP请求头部信息;
  • 使用了 Nginx Web服务器反向代理的 Web 应用,在配置正确的前提下,要用 X-Forwarded-For 最后一节 或 X-Real-IP 来获取 IP(因为 Remote Address 得到的是 Nginx 所在服务器的内网 IP);同时还应该禁止 Web 应用直接对外提供服务;
  • 在某些特定应用场景,例如通过IP地址显示所在区域天气等,可从 X-Forwarded-For 靠前的位置获取 IP,但必须需要校验 IP 格式合法性。

目前很多Web 应用(例如获取用户所在地区,基于 IP 做访问频率控制,禁止某些IP访问等等),为了获取用户真正的 IP,如果从 HTTP 请求头中获取 IP地址。这些情况下,必须确保获取到的IP地址是真实可靠的。

文中使用的工具除Wireshark外,还有网深科技全流量分析系统,该系统通过旁路采集网络流量,实时解码2-7层协议信息,智能分析所有应用系统访问情况,精确发现异常X-Forwarded-For伪造行为。

欲获取更多信息咨询,请关注公众号“数字化性能管理”。