• 如何实时监测分析X-Forwarded-For伪造——其实就是看XFF和源IP是否存在多对一关系


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

    什么是X-Forwarded-For

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

    X-Forwarded-For位于HTTP协议的请求头部,属于HTTP的头部扩展。在HTTP/1.1(RFC 2616)协议规范中并没有对X-Forwarded-For有明确的定义。最开始由著名的代理软件Squid(见www.squid-cache.org)引入,用来传递HTTP请求端的真实IP地址。如今,X-Forwarded-For已成为事实上的标准,各大HTTP代理、负载均衡等转发服务都在广泛使用它,并在RFC 7239(Forwarded 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-For中IP可以伪造。那么,这种伪造会带来什么危害呢,下面列举几种:

    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伪造行为。

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

  • 相关阅读:
    【链接】idea没有svn
    移动端适配解决方案
    项目中多个文件引入同一份公共样式less文件导致编译打包后有多份样式
    2020最新编辑器集成eslint、prettier、stylelint,git提交预检查代码配置
    eslint+prettier学习
    artTempate模版继承父模版之后再引入子模版不生效?
    iOS底层原理开篇
    iOS应用千万级架构:安全与加密
    使用RabbitMQ实现延迟任务
    JAVA三元运算符空指针引用的坑
  • 原文地址:https://www.cnblogs.com/bonelee/p/14701861.html
Copyright © 2020-2023  润新知