安全开发之IP地址伪造

1.1  IP地址伪造漏洞

1.1.1  漏洞挖掘

1.1.1.1  漏洞描述

漏洞描述:

IP地址伪造通常是伪造来源IP,为了绕过服务器端IP地址过滤,使非授权IP地址可以获取更多的防问权限。但是在正常的TCP/IP通信中,伪造数据包来源 IP会让发送出去的数据包返回到伪造的IP上,无法实现正常的通信。既然无法实现TCP/IP层级别的IP伪造,那么可以在应用层HTTP协议通过X-Forwarded-For这个扩展头部来实现。X-Forwarded-For位于HTTP协议的请求头,是一个扩展头部简称 XFF 头,只有在传输过程中经过 HTTP 代理或者负载均衡服务器时才会添加该项。

XFF 格式如下:

X-Forwarded-For: client1, proxy1, proxy2

可以看出,XFF 头信息可以有多个,中间用逗号分隔,第一项为真实的客户端ip,剩下的就是经过的代理或负载均衡服务器的ip地址。

       那么在代码中获取XFF 头信息中的第一个元素即为真实客户端IP,但是X-Forwarded-For作为HTTP协议头中的一部分通常是可以伪造的,很多系统简单的获取XFF头中定义的IP地址设置为来源地址,进行访问控制,攻击者可以篡改HTTP请求包中XFF项进行IP地址伪造。

注意:此类问题漏洞不能在代码中见到X-Forwarded-For就判断为IP地址伪造,应该结合上下文是否存在IP过滤或者IP访问控制的业务逻辑,否则尽量不要提此类漏洞。本身利用X-Forwarded-For是业务需要,为了应对传输过程中经过多层代理或者负载均衡服务器也能获取到真实IP的情况。

1.1.1.2  漏洞场景复现

获取IP地址的代码如下:

    public static String getIpAddr(HttpServletRequest request) {

        String ip = request.getHeader("X-Real-IP");

 

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

            ip = request.getHeader("X-Forwarded-For");

        }

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

            ip = request.getHeader("Proxy-Client-IP");

        }

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

            ip = request.getHeader("WL-Proxy-Client-IP");

        }

   // Proxy-Client-IP 字段和 WL-Proxy-Client-IP 字段只在 ApacheWeblogic Plug-In Enable+WebLogic 搭配下出现,其中“WL就是 WebLogic 的缩写。

即访问路径是:Client -> Apache WebServer + Weblogic http plugin -> Weblogic Instances,只为兼容,可以直接忽略

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

            ip = request.getRemoteAddr();

        }

       //EMOTE_ADDR 是客户端跟服务器“握手”时的IP,但如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的ip,或者最后一个代理服务器的ip

        if (ip != null) {

            if (ip.indexOf(',') > 0) {

                // 获取split中的第一个元素,如果使用代理(或者是多级)从代理中取出真实IP地址

                ip = ip.split(",")[0];

            }

        } else {

            ip = "0.0.0.0";

        }

        return ip;

    }

 

综上,在代码中获取到的IP,很有可能是伪造的IP地址。服务端系统会根据获取到的IP地址,进行IP过滤或者权限控制,代码如下:

/**

     * 校验指定IP是否被禁用

     *

     * @param ip

     * @return

     */

    public boolean verifyIP(String ip) {

        if (StringUtils.isBlank(ip)) {

            return true;

        }

        return securityDAO.countIPBan(ip) > 0 ? false : true;

    }

如果攻击者通过篡改X-Forwarded-For的IP地址,即可绕过IP禁用的限制

 

1.1.1.3  漏洞修复建议

针对IP伪造漏洞的修复方案需要考虑如下两种情况:

1.   客户端直接访问的web应用情况,中间不存在代理或者负载均衡,这种情况可以直接在代码层面利用ip = request.getRemoteAddr();获取客户端真实IP,不需要通过其它项进行获取。

2.   客户端需要经过多层代理或者负载均衡才能访问到web应用,在这种情况下如果还是在代码层面利用ip =request.getRemoteAddr();进行获取,获取到的是代理的IP。那么就需要获取XFF的split第一个元素IP作为真实IP,但是这里存在被伪造的风险。下面针对Nginx 进行安全配置:

在默认情况下,Nginx并不会对X-Forwarded-For头做任何的处理,除非用户使用proxy_set_header参数设置:

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

$proxy_add_x_forwarded_for变量包含客户端请求头中的"X-Forwarded-For",与$remote_addr用逗号分开,如果没有"X-Forwarded-For"请求头,则$proxy_add_x_forwarded_for等于$remote_addr。

nginx 配置
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-For $remote_addr;

$remote_addr变量的值是客户端的IP

清空了客户端伪造传入的X-Forwarded-For,保证了使用request.getHeader("x-forwarded-for") 获取的ip为真实ip。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
第1章 计算机网络安全基础知识 计算机网络安全基础知识全文共57页,当前为第1页。 任务一 Ping攻击与防范 任务分析 技能目标 知识链接 操作步骤 计算机网络安全基础知识全文共57页,当前为第2页。 一.真实工作任务分析: 测试特理网络的命令Ping(因特网包探索器)是用于测试网络连接量的程序。它发送一个ICMP响应请求消息给目的地,并报告是否收到所希望的ICMP应答,校验与远程或本地计算机的连接。 计算机网络安全基础知识全文共57页,当前为第3页。 一.真实工作任务分析: 本案例中的攻击只需网中多台电脑同时在Ping后加上参数-t对目标机进行长时间测试,从攻击的意义而言就完成了一次Ping攻击,大量的数据包将会使目标机运行速度越来越慢,甚至瘫痪。在DOS环境中完成这个命令,命令如下: 格式:Ping 目标IP地址 –t 例:Ping 192.168.0.6 –t 计算机网络安全基础知识全文共57页,当前为第4页。 二.技能目标: 1.掌握Ping攻击与防范方法 2.掌握利用工具软件检测系统漏洞的方法 计算机网络安全基础知识全文共57页,当前为第5页。 三.知识链接: 1 计算机网络安全定义 2 3 计算机网络安全特征 网络面临的威胁 计算机网络安全基础知识全文共57页,当前为第6页。 课堂讨论: 你碰到过网络不安全的情况没有?你碰到的情况有什么样的症状?你是怎样解决的?。 计算机网络安全基础知识全文共57页,当前为第7页。 三.知识链接: 随着网络技术的不断发展,网络在人们的生活中已经占有一席之地,为人们的生活带来了很大方便。然而,网络也不是完美无缺的,它在给人们带来惊喜的同时,也带来了威胁。计算机犯罪、黑客、有害程序和后门问题等严重威胁着网络的安全。目前,网络安全问题等严重威胁着网络的安全。 1.网络安全定义 计算机网络安全基础知识全文共57页,当前为第8页。 三.知识链接: 网络的安全策略一般分为三类:逻辑上的,物理上的和政策上的。逻辑上的措施,即研究开发有效的网络安全技术,例如,安全协议、密码技术、数字签名、防火墙、安全管理、安全审计等。 计算机网络安全基础知识全文共57页,当前为第9页。 三.知识链接: 计算机网络安全是指保持网络中的硬件、软件系统正常运行,使它们不因自然和人为的因素而受到破坏更改和泄露。网络安全主要包括物理安全、软件安全、数据安全和运行安全等4个方面。 计算机网络安全基础知识全文共57页,当前为第10页。 三.知识链接: 案例1: 计算机网络安全基础知识全文共57页,当前为第11页。 三.知识链接: 案例2: 计算机网络安全基础知识全文共57页,当前为第12页。 三.知识链接: 案例3: 计算机网络安全基础知识全文共57页,当前为第13页。 三.知识链接: 由于网络安全威胁的多样性、复杂性及网络信息、数据的重要性,在设计网络系统的安全时,应该努力达到安全目标。一个安全的网络具有下面五个特征:可靠性、可用性、保密性、完整性和不可低赖性。 2.计算机网络安全的特征 计算机网络安全基础知识全文共57页,当前为第14页。 三.知识链接: (1)可靠性 可靠性是网络安全最基本的要求之一,是指系统在规定条件下和规定时间内完成规定功能的概率。 可用性是指信息和通信服务在需要时允许授权人或实体使用。 (3)保密性 保密性指防止信息泄漏给非授权个人或实体,信息只为授权用户使用.保密性是面向信息的安全要求。 2.计算机网络安全的特征 计算机网络安全基础知识全文共57页,当前为第15页。 三.知识链接: (4)完整性 完整性也是面向信息的安全要求。它是指信息不被偶然或蓄意地删除、修改、伪造、乱序、重放、插入等破坏的特性。 (5)不可抵赖性 不可抵赖性也称作不可否认性,是面向通信双方(人、实体或进程)信息真实的安全要求。 2.计算机网络安全的特征 计算机网络安全基础知识全文共57页,当前为第16页。 三.知识链接: 1.计算机系统的脆弱性 计算机系统的脆弱性主要来自计算机操作系统的不安全性,在网络环境下,还来源于网络通信协议的不安全性。 2.网络内部的威胁 对网络内部的威胁主要是来自网络内部的用户,这些用户试图访问那些不允许使用的资源和服务器。可以分为两种情况:一种是有意的安全破坏,第二种是由于用户安全意识差造成的无意识的操作失误,使得系统或网络误操作或崩溃。 3.网络面临的内部威胁 计算机网络安全基础知识全文共57页,当前为第17页。 三.知识链接: 除了受到来自网络内部的安全威胁外,网络还受到来自外界的各种各样的威胁。网络系统的威胁是多样的,因为在网络系统中可能存在许多种类的计算机和操作系统,采用统一的安全措施是不容易的,也是不可能的,而对网络进行集中安全管理则是一种好的方案。 安全威胁主要可以归结为物理威胁、网络
网络安全与防范措施 网络安全与防范措施   网络安全与防范措施【1】   摘要:随着计算机网络技术的快速发展,网络安全日益成为人们关注的焦点。   越来越多的计算机用户足不出户就可访问到全球网络系统丰富的信息资源,经济 、文化、军事和社会活动也强烈依赖于网络,一个网络化的社会已呈现在我们面前。   随着网络应用的不断增多,网络安全问题也越来越突出。   由于计算机网络联接形式的多样性、终端分布的不均匀性、网络的开放性和网络 资源的共享性等因素,致使计算机网络容易遭受病毒、黑客、恶意软件和其它不轨行为 的攻击。   为确保信息的安全与畅通,研究网络的安全与防范措施已迫在眉捷。   本文分析了影响网络安全的主要因素及攻击的主要方式,从管理和技术两方面就 加强计算机网络安全提出了针对性的对策。   关键词:网络安全;防范;隐患;措施   引言   随着计算机技术的突飞猛进,计算机网络的新月异,网络已经深入到我们生活的 各个角落。   计算机网络在扮演着越来越重要的角色。   然而,在我们每天通过互联网络与朋友通信,和同行交流,通过互联网了解新闻 获取信息的同时,我们对这个网络究竟了解多少,我们是否能意识到给我们生活、工作 带来快捷、便利的网络所潜伏的不安全因素。   1计算机网络安全的概念   计算机网络安全的具体定义会随着使用者的变化而变化,使用者不同,对网络安 全的认识和要求也就不同。   例如从普通使用者的角度来说,可能仅仅希望个人隐私或机密信息在网络上传输 时受到保护,避免被偷听、篡改和伪造;而网络提供商除了关心这些网络信息安全外,还 要考虑如何应付突发的 自然 灾害、军事打击等对网络硬件的破坏,以及在网络出现异常时如何恢复网络通信,保持 网络通信的连续性。   从本质上来讲,网络安全包括组成网络系统的硬件、软件及其在网络上传输信息 的安全性,使其不致因偶然的或者恶意的攻击遭到破坏,网络安全既有技术方面的问题 ,也有管理方面的问题,两方面相互补充,缺一不可。   人为的网络入侵和攻击行为使得网络安全面临新的挑战。   2、计算机网络安全的隐患及攻击形式   2.1计算机网络硬件安全隐患   计算机网络硬件设施是互联网中必不可少的部分,硬件设施本身就有着安全隐患 。   电子辐射泄露就是其主要的安全隐患问题,也就是说计算机和网络所包含的电磁 信息泄露了,这增加了窃密、失密、泄密的危险;此外安全隐患问题也体现在通信部分的 脆弱性上,在进行数据与信息的交换和通信活动时,主要通过四种线路,即光缆、电话 线、专线、微波,除光缆外其它三种线路上的信息比较容易被窃取;除上述方面外,计算 机的操作系统与硬件组成的脆弱性,也给系统的滥用埋下了隐患。   ?另外,移动存储介质。   移动存储介质比如U盘、移动硬盘等,由于其自身具有方便小巧、存储量大、通 用性强、易携带等特点,应用比较广泛,尤其是涉密单位,这给网络系统的信息安全造 成很大的隐患。   2.2计算机软件漏洞   黑客通过精心构造的恶意代码,攻击某些网站并上传恶意代码到被攻击网站的服 务器。   用户访问被攻击的网站时,可能导致用户隐私信息泄露。   无论多强大的软件在设计之初都难免存在缺陷或漏洞,操作系统软件也不例外。   系统主机之间互异的操作系统具有相对的独立性,同样性质的漏洞,也会由于操 作系统软件设计开发过程的不同,而具有不一样的表现形式。   攻击者可以很"方便"的通过漏洞对计算机系统进行破坏,造成主机瘫痪、重要资 料丢失等,严重影响系统的正常运行。   2.3黑客攻击和计算机病毒攻击   这是一种最严重的网络安全威胁。   攻击者通过各种方式寻找系统脆弱点或系统漏洞,由于网络系统同构冗余环境的 弱点是相同的,多个系统同时故障的概率虽小,但被攻破可能性却大,通过拦截、窃取 等多种方式,向系统实施攻击,破坏系统重要数据,甚至系统瘫痪,给网络安全带来严 重威胁。   网络病毒发病和传播速度极快,而许多计算机用户由于各种各样的原因,没有安 装杀毒软件或不能及时更新杀毒软件病毒库,造成网络病毒泛滥,病毒程序轻者降低系 统工作效率,重者导致系统崩溃、数据丢失,造成无可挽回的损失,不仅严重地危害到 了用户计算机安全,而且极大的消耗了网络资源,造成网络拥塞,给每一个用户都带来 极大的不便。   2.4网络自身的安全缺陷   网络是一个开放的环境,TCP/IP是一个通用的协议,即通过IP地址作为网络节点 的唯一标识,基于IP地址进行多用户的认证和授权,并根据IP包中源IP地址判断数据的 真实和安全性,但该协议的最大缺点就是缺乏对IP地址的保护,缺乏对源IP地址真实性 的认证机制,这就是TCP/IP协议不安全的根本所在。   通过TCP/IP协议缺陷进行的常见攻击有:源地址欺骗、IP欺骗、

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值