描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302501275
目录
第1章概述/
1.1网络安全的定义
1.2网络系统面临的安全威胁
1.2.1恶意代码
1.2.2远程入侵
1.2.3拒绝服务攻击
1.2.4身份假冒
1.2.5信息窃取和篡改
1.3网络安全的研究内容
1.3.1网络安全体系
1.3.2网络攻击技术
1.3.3网络防御技术
1.3.4密码技术应用
1.3.5网络安全应用
1.4小结
习题
第2章信息收集/
2.1Whois查询
2.1.1DNS Whois查询
2.1.2IP Whois查询
2.2域名和IP信息收集
2.2.1域名信息收集
2.2.2IP信息收集
2.3Web挖掘分析
2.3.1目录结构分析
2.3.2高级搜索
2.3.3邮件地址收集
2.3.4域名和IP收集
2.4社会工程学
2.5拓扑确定
2.6网络监听
2.7小结
习题
第3章网络隐身/
3.1IP地址欺骗
3.2MAC地址欺骗
3.3网络地址转换
3.4代理隐藏
3.5其他方法
3.6小结
习题
第4章网络扫描/
4.1端口扫描
4.1.1全连接扫描
4.1.2半连接扫描
4.1.3FIN扫描
4.1.4ACK扫描
4.1.5NULL扫描
4.1.6XMAS扫描
4.1.7TCP窗口扫描
4.1.8自定义扫描
4.1.9UDP端口扫描
4.1.10IP协议扫描
4.1.11扫描工具
4.2类型和版本扫描
4.2.1服务扫描
4.2.2操作系统扫描
4.3漏洞扫描
4.3.1基于漏洞数据库
4.3.2基于插件
4.3.3OpenVAS
4.4弱口令扫描
4.5Web漏洞扫描
4.6系统配置扫描
4.7小结
习题
第5章网络攻击/
5.1口令破解
5.1.1口令破解与破解工具
5.1.2破解工具
5.2中间人攻击(MITM)
5.2.1数据截获
5.2.2欺骗攻击
5.3恶意代码
5.3.1生存技术
5.3.2隐蔽技术
5.3.3主要功能
5.4漏洞破解
5.4.1漏洞分类
5.4.2破解原理
5.4.3实施攻击
5.5拒绝服务攻击
5.5.1攻击原理
5.5.2DDoS原理
5.5.3DoS/DDoS工具
5.6小结
习题
第6章网络后门与痕迹清除/
6.1网络后门
6.1.1开放连接端口
6.1.2修改系统配置
6.1.3安装监控器
6.1.4建立隐蔽连接通道
6.1.5创建用户账号
6.1.6安装远程控制工具
6.1.7系统文件替换
6.1.8后门工具
6.2痕迹清除
6.2.1Windows痕迹
6.2.2Linux痕迹
6.3小结
习题
第7章访问控制与防火墙/
7.1访问控制
7.1.1实现方法
7.1.2自主访问控制
7.1.3强制访问控制
7.1.4角色访问控制
7.2防火墙
7.2.1包过滤防火墙
7.2.2代理防火墙
7.2.3体系结构
7.2.4防火墙的缺点
7.3防火墙软件实例
7.3.1Windows个人防火墙
7.3.2CISCO ACL列表
7.3.3iptables
7.3.4CCProxy
7.4小结
习题
第8章入侵防御/
8.1IPS概述
8.1.1工作过程
8.1.2分析方法
8.1.3IPS分类
8.1.4IPS部署和评估
8.1.5发展方向
8.2基于主机的IPS
8.3基于网络的IPS
8.4小结
习题
第9章密码技术基础/
9.1概述
9.1.1密码编码学
9.1.2密码分析学
9.1.3密钥管理
9.2加/解密技术
9.2.1对称加密
9.2.2公钥加密
9.2.3散列函数
9.2.4通信加密
9.2.5密钥分配
9.3认证技术
9.3.1消息认证码
9.3.2散列消息认证码
9.3.3数字签名
9.3.4身份认证
9.4PKI
9.5常用软件
9.6小结
习题
第10章网络安全协议/
10.1802.1X和EAP
10.1.1802.1X
10.1.2EAP
10.2IPSec
10.2.1IPSec概述
10.2.2AH协议
10.2.3ESP协议
10.2.4IKE协议
10.2.5IPSec应用
10.3SSL协议
10.3.1SSL记录协议
10.3.2SSL握手协议
10.3.3SSL协议的安全性
10.4802.11i
10.4.1加密机制
10.4.2安全关联
10.4.3无线破解
10.5小结
习题
第11章网络安全应用/
11.1虚拟专用网
11.1.1IP隧道
11.1.2远程接入
11.1.3虚拟专用局域网
11.1.4IPSec VPN示例
11.2电子邮件安全协议
11.2.1PGP
11.2.2S/MIME
11.3安全电子交易协议
11.3.1SET工作过程
11.3.2SET的优缺点
11.4小结
习题
第12章恶意代码防范与系统安全/
12.1恶意代码防范
12.1.1病毒及其防范方法
12.1.2蠕虫及其防范方法
12.1.3木马及其防范方法
12.1.4不同恶意代码的区别
12.2系统安全机制
12.2.1Windows 7安全机制
12.2.2Windows安全配置
12.2.3Linux安全机制
12.2.4Linux通用安全配置
12.3计算机取证
12.3.1取证方法
12.3.2取证原则和步骤
12.3.3取证工具
12.4小结
习题
第13章Web程序安全/
13.1安全问题与防御机制
13.1.1安全问题
13.1.2核心防御机制
13.2Web程序技术
13.2.1HTTP
13.2.2Web程序功能
13.2.3编码方案
13.3验证机制的安全性
13.3.1设计缺陷
13.3.2实现缺陷
13.3.3保障验证机制的安全
13.4会话管理的安全性
13.4.1令牌生成过程的缺陷
13.4.2令牌处理过程的缺陷
13.4.3保障会话管理的安全性
13.5数据存储区的安全性
13.5.1SQL注入原理
13.5.2防御SQL注入
13.6Web用户的安全性
13.6.1反射型XSS
13.6.2持久型XSS
13.6.3基于DOM的XSS
13.7小结
习题
参考文献/
前言
随着计算机网络的迅速发展,电子商务和网络支付等关键业务剧增,对网络安全的需求不断提高,与此同时,互联网中的网络攻击事件持续不断,网络安全面临的威胁变化多样。因此,网络安全已经成为人们普遍关注的问题,网络安全技术也成为信息技术领域的重要研究方向。
当前有关计算机网络安全的图书各有特色,总体上可以分为三类。第一类着重讨论加/解密技术和安全协议等网络安全基础理论,特别是深入讨论各种具体算法和协议机制,但是没有与主流的网络安全工具和实际的网络攻防实践相结合,使得图书较为抽象和生涩难懂,读者很难学以致用。第二类专注于探讨网络攻击手段和对应的网络防御技巧,不对这些手段和技巧背后的技术原理做详细解释,同时也不对网络安全理论和技术做详细介绍,使得图书内容过于浅显,读者无法深入理解网络攻防过程中出现的各种现象的产生原因,也无法解决在实际工程实践中出现的各种问题。第三类则把各种安全机制放在一起讨论,类似于大杂烩,但是所有内容却都是浅尝辄止。上述三类图书的共同问题在于一是没有对当前主流的网络攻防技术进行深入探讨,二是空泛地介绍基本概念和方法,没有与具体的网络、系统和安全问题相结合,因此使得读者很难提高实际解决网络安全问题的能力。
本书以将读者领进计算机网络安全技术的大门为目标。首先,系统地介绍网络攻击的完整过程,将网络攻击各个阶段的理论知识和技术基础与实际的攻击过程有机结合,使读者能够深入理解网络攻击工具的实现机制。其次,详细地介绍各种网络防御技术的基本原理,主要包括防火墙、入侵防御系统、恶意代码防范、系统安全和计算机取证等,同时结合当前主流开源防御工具的实现方法和部署方式,以图文并茂的形式加深读者对网络防御技术原理和实现机制的理解。最后,全面地介绍网络安全的基础理论,包括加/解密技术、加/解密算法、认证技术、网络安全协议等,将基础理论和主流工具的应用实践紧密结合,有利于读者理解抽象的理论知识及各种主流工具背后的实现机制。
全书共13章。第1章概述,全面介绍网络安全的目标、威胁和研究内容; 第2章信息收集,详细讨论各种信息收集技术的原理和使用方式; 第3章网络隐身,综合介绍IP地址欺骗和MAC欺骗、代理隐藏和NAT技术等隐藏主机的原理及主流工具的使用方法; 第4章网络扫描,详细阐述端口扫描、服务和系统扫描、漏洞扫描、配置扫描、弱口令扫描等扫描技术的基本原理,同时结合开源工具的实际扫描过程和扫描结果进行验证; 第5章网络攻击,结合主流攻击工具的使用方法,详细说明各类网络攻击的技术原理,包括弱口令攻击、中间人攻击、恶意代码攻击、漏洞破解和拒绝服务攻击等; 第6章网络后门与痕迹清除,结合实际工具和目标环境详细介绍如何设置各种系统后门,针对Windows和Linux系统环境,分别介绍不同的痕迹清除方法; 第7章访问控制与防火墙,详细讨论各类访问控制方法以及包过滤防火墙、代理防火墙、有状态防火墙等技术的基本原理,结合Cisco ACL、Linux iptables、Windows个人防火墙和CCProxy等主流工具的配置方法和应用实践,分析它们的实现机制和相应的技术原理; 第8章入侵防御,在详细说明基于主机的IPS和基于网络的IPS的工作流程及基本原理的基础上,分别结合开源软件OSSEC和Snort的配置方式和应用实践,进一步讨论有关技术原理; 第9章密码技术基础,全面讨论密码学体制、加/解密算法、认证技术和PKI架构等理论知识,结合加/解密工具GnuPG的应用实践说明加/解密技术的使用方式; 第10章网络安全协议,详细介绍链路层安全协议802.1X和EAP、网络层安全协议IPSec、传输层安全协议SSL和无线安全协议802.11i的实现机制,结合在Windows系统中应用IPSec协议的实践,进一步说明IPSec协议的原理,结合使用无线破解工具aircrackng破解WPA/PSK口令的应用实践,进一步说明802.11i协议的密钥交换机制; 第11章网络安全应用,详细说明常见的应用层安全协议的实现机制,包括VPN、电子邮件安全协议PGP和S/MIME、安全电子交易协议SET,结合Cisco路由器的IPSec VPN应用实践说明IP隧道的实现原理,结合详细的加/解密流程图说明SET协议的工作过程; 第12章恶意代码防范与系统安全,首先详细讨论病毒、木马和蠕虫的防范方法,并结合Windows自带工具说明常用的木马防御手段,然后展开讨论Windows和Linux操作系统的安全机制及有关安全配置方法,最后详细说明计算机取证的定义、步骤和技术原理,结合主流取证工具的配置方式和使用方法说明计算机取证的作用; 第13章Web程序安全,首先详细介绍Web程序安全的核心安全问题和防御机制,以及与安全有关的HTTP内容和数据编码,然后结合DVWA项目着重讨论验证机制、会话管理、SQL注入和XSS漏洞等常见安全威胁的产生原因、攻击方法和防御技术。
作为一本理论和实践紧密结合的图书,正如网络的设计和部署可能存在漏洞一样,限于作者的水平,本书难免存在各种错误和不足。作者殷切希望读者批评指正,也希望读者能够就图书内容和叙述方式提出意见和建议。作者Email地址为: [email protected]。
作者
2018年7月
学习要求:
理解IP地址欺骗技术的基本原理。
掌握MAC地址欺骗技术的基本原理,掌握相应系统配置方法和工具使用方法。
掌握各种网络地址转换技术的基本原理。
掌握代理隐藏技术的基本原理,熟悉各种代理工具的使用方法。
了解网络隐身的其他方法。
IP地址是计算机网络中任何联网设备的身份标识,MAC地址是以太网终端设备的链路层标识,所谓网络隐身就是使得目标不知道与其通信的设备的真实IP地址或MAC地址,当安全管理员检查攻击者实施攻击留下的各种痕迹时,由于标识攻击者身份的IP或MAC地址是冒充的或者不真实的,管理员无法确认或者需要花费大量精力去追踪该攻击的实际发起者。因此,网络隐身技术可以较好地保护攻击者,避免其被安全人员过早发现。常用的网络隐身技术主要包括IP地址欺骗(或IP盗用)、MAC地址欺骗(或MAC盗用)、网络地址转换、代理隐藏、账户盗用和僵尸主机等技术。
3.1IP地址欺骗
因为TCP/IP协议路由机制只检查报文目标地址的有效性,所以攻击者可以定制虚假的源IP地址,有效避免安全管理员的IP地址追踪。另外,目标的访问控制组件可能使用IP地址列表的方式来设置允许或禁止对网络服务的访问,攻击者可以盗用其他IP地址,从而绕过访问控制的设置,对目标服务实施攻击。
IP欺骗(IP Spoofing)就是利用主机间的正常信任关系,通过修改IP报文中的源地址,以绕开主机或网络访问控制,隐藏攻击者的攻击技术。IP地址欺骗的示意图如图31所示,在网络中假设有三台主机A、B、C,其中A和B可以直接通信(或者相互信任且无须认证),攻击者C冒充主机A实现与主机B通信,A可能在线也可能不在线。
图31IP欺骗示意图
当C与A在同一个局域网内,实施IP欺骗相对容易,因为攻击者可以观察B返回的报文,根据有关信息成功伪造A发出的报文。当C和A分属不同网络时,如果冒充A与B进行UDP通信,C只需要简单修改发出的IP报文的源IP地址即可。但是如果A与B建立TCP连接进行通信,C实施IP欺骗就非常困难,因为C无法获得响应报文,因此无法得知该连接的初始序列号,而TCP通信是基于报文序号的可靠传输,所以C伪造的TCP报文很大概率被拒绝,攻击欺骗成功的概率较低。
一次成功的IP欺骗通常需要三个步骤(见图32)。
图32IP欺骗实现过程
1. 使A停止工作
由于C要假冒A,C必须保证A无法收到任何有效的TCP报文,否则A会发送RST标记的报文给B,从而使得TCP连接被关闭。可以通过拒绝服务攻击、社会工程学或中间人攻击等方法使得A停止工作。
2. 猜测初始序列号
C必须知道B与A建立连接时的TCP报文的初始序列号(ISN),即第二路握手报文中的SEQ字段值。C只有在第三路握手报文中将确认号设置为ISN 1,才能通过B的验证,成功建立连接。在无法截获第二路握手报文时,如何正确猜测ISN值是欺骗成功与否的关键。
TCP的ISN使用32位计数器,通常难以猜中,但是由于某些操作系统协议栈实现时,ISN的选择存在一定规律,有的基于时间,有的随机增加,还有的固定不变,因此可以预先对某个端口进行多次连接,采样其ISN基值和变化规律,作为猜测未来连接的ISN的参考信息。当采集的信息足够对ISN进行预测时,即可开始建立假冒连接。当C发送的报文在到达B时,根据猜测ISN的不同结果,B有以下四种处理方式:
(1) ISN正确,C的报文被B成功接收。
(2) ISN小于B期望的数字,B丢弃该报文。
(3) ISN大于B期望的数字,且在B的滑动窗口内,B认为这是乱序到达的报文,将报文放入缓冲区中并等待其他报文。
(4) ISN大于B期望的数字,且超出B的滑动窗口,B将丢弃该报文并重发确认报文给A。
3. 建立欺骗连接
IP欺骗之所以能够实施是因为通信主机之间仅凭IP地址标识对方身份,并且攻击者可以正确猜测TCP连接的初始序列号(ISN)。
对于IP欺骗可采取的防范措施包括:
(1) 使用基于加密的协议如IPSec或SSH进行通信,通信时使用口令或证书进行身份验证。
(2) 使用随机化的ISN,攻击者无法猜测正常连接的序列号。
(3) 在路由器上配置包过滤策略,检测报文的源IP地址是否属于网络内部地址,如果来自外部网络的报文的源IP地址属于内部网络,那么该报文肯定是伪造的。
(4) 不要使用基于IP地址的信任机制。
3.2MAC地址欺骗
MAC地址欺骗(或MAC盗用,MAC Spoofing)通常用于突破基于MAC地址的局域网访问控制(图33),例如在交换机上限定只转发源MAC地址在预定义的访问列表中的报文,其他报文一律拒绝。攻击者只需要将自身主机的MAC地址修改为某个存在于访问列表中的MAC地址即可突破该访问限制,而且这种修改是动态的并且容易恢复。还有的访问控制方法将IP地址和MAC进行绑定,目的是使得一个交换机端口只能提供给一位付费用户的一台主机使用,此时攻击者需要同时修改自己的IP地址和MAC地址去突破这种限制。
图33基于MAC地址的访问控制
在不同的操作系统中修改MAC地址有不同的方法,其实质都是网卡驱动程序从系统中读取地址信息并写入网卡的硬件存储器,而不是实际修改网卡硬件ROM中存储的原有地址,即所谓的“软修改”,因此攻击者可以为了实施攻击临时修改主机的MAC地址,事后很容易恢复为原来的MAC地址。
在Windows中,几乎所有的网卡驱动程序都可以从注册表中读取用户指定的MAC地址,当驱动程序确定这个MAC地址有效时,就会将其编程写入网卡的硬件寄存器中,而忽略网卡原来的MAC地址。以下以Windows 7 SP1家用版为例,说明Windows系统中修改MAC地址的两种方法。一种方法是直接在网卡的“配置→高级→网络地址”菜单项中修改修改网卡地址时需要注意前三个字节表示网卡厂商,如果修改后的网卡地址不属于该厂商,修改后的地址可能会无效。系统只会设置有效的地址,所以必须检查修改后的地址是否生效。(图34),系统会自动重启网卡,修改后可以在控制台窗口中键入“ipconfig /all”命令检查网卡地址是否已成功更改,如果选择“不存在”则恢复为原有MAC地址。该方法针对有线网卡有效,但是无线网卡默认没有“网络地址”,无法使用这种方法修改。
图34网卡属性中修改网络地址
另一种方法是直接修改注册表,生成与第一种方法相同的针对无线网卡的“网络地址”设置。运行注册表编辑器(regedit.exe),在“\HKEY_LOCALMACHINE\SYSTEM\ControlSet001\Control\Class”键下搜索网卡的描述信息,定位网卡配置选项在注册表中的位置,本例中无线网卡的对应配置选项在注册表项“[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972E32511CEBFC108002BE10318}\0015”内(图35)。然后在“Ndi\params”子项下新建子项“NetworkAddress”,并新增如图36所示的所有键值,即可在无线网络连接的配置选项中生成“网络地址”菜单项,并可自由修改MAC地址。当地址修改成功后,注册表会自动在上述表项(即0015项)中增加一个“NetworkAddress”的键值(图37)。也可以将以下文本导入注册表(保存为.reg后缀的文件名),产生与图36相同的效果:
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972E32511CEBFC108002BE10318}\0015\Ndi\params\NetworkAddress]
“default”=”000000000000”
“Optional”=”1”
“ParamDesc”=”网络地址”
“type”=”edit”
“UpperCase”=”1”
“LimitText”=”12”
图35注册表中网卡的配置选项
图36新增NetworkAddress项及键值前后的网卡连接菜单项对比
图37修改后的MAC地址在注册表中的存放位置
在Linux系统下修改MAC地址十分方便,只要网卡的驱动程序支持修改网卡的物理地址,即可应用三条“ifconfig”命令完成地址修改任务: ①禁用网卡; ②设置网卡的MAC地址; ③启用网卡。如图38所示,eth0是网卡名,ether表示是以太网类型的网卡,“0000aabbccff”是随机设置的一个地址,使用“ifconfig eth0”即可查看地址修改是否已经生效。不过使用该方法有一点不方便,即用户需要自行保存原有的MAC地址,然后再用相同的方法恢复。
笔者推荐使用经典地址修改工具macchanger(图39)完成Linux下的MAC地址修改,它不需要用户保存原有地址即可自动恢复。macchanger不但可以修改为与原有MAC地址为同一个厂家的随机MAC地址、修改为不同厂家但是与原有地址属于同一类型的随机MAC地址、修改为不同厂家不同类型的随机MAC地址或修改为完全随机的MAC地址,而且还支持查询各知名厂家的MAC地址段。
图38ifconfig命令修改MAC
图39macchanger工具修改MAC地址
3.3网络地址转换
网络地址转换(Network Address Translation,NAT)是一种将私有地址转换为公有IP地址的技术,对终端用户透明,被广泛应用于各类Internet接入方式和各类网络中。NAT不仅解决了IP地址不足问题,而且还能有效避免来自网络外部的攻击,同时它可以对外隐藏网络内部主机的实际IP地址。攻击者使用NAT技术时,管理员只能查看到经过转换后的IP地址,无法追查攻击者的实际IP地址,除非他向NAT服务器的拥有者请求帮助,而且NAT服务器实时记录并存储了所有的地址转换记录。在同一时刻,可能有很多内网主机共用一个公有IP地址对外访问,所以攻击者可以将自己隐藏在这些IP地址中,减少被发现的可能性。NAT有三种实现方式,即静态转换、动态转换和端口地址转换。
静态转换指将内网的私有IP地址转换为公有IP地址,转换方式是一对一且固定不变,一个私有IP地址只能固定转换为一个公有IP地址。使用静态转换可以实现外网对内网的某些特定设备或服务的访问。
动态转换指将内网的私有IP地址转换为公用IP地址时,有多种选择,NAT会从公用IP地址池中随机选择一个。只要分别指定可转换的内部地址集合和合法的外部地址集合,就可以进行动态转换,它可以适用于没有传输层的IP报文。
端口地址转换(Port Address Translation,PAT)指既改变外部报文的IP地址,也改变报文的端口。内网的所有主机均可共享一个合法外部IP地址实现对外访问,从而可以最大限度地节约IP地址资源,同时又可隐藏网络内部的所有主机,有效避免来自外部的攻击。由于是对端口进行转换,所以只能适用于基于UDP/TCP协议的网络通信。
NAT服务器中有一张地址转换表,其中每一项与一个通信过程绑定,每个表项称为会话。当内网主机的第一个报文发给外网时,会话即被建立,此后该会话的所有报文都采用相同的地址转换过程,也就是说,属于同一会话的报文,转换后的源IP地址和端口号必须相同。当通信结束时,NAT将该会话从地址转换表中删除。NAT的地址转换表与操作系统的TCP/IP协议栈没有关联,只限于转换IP报文的源或目标IP地址。
静态NAT的地址转换表项在配置后即固定不变; 动态NAT的表项在每次会话新建立后保持不变,它们记录原始IP地址和替换IP地址的映射关系; 而PAT的表项包括原始IP地址、原始端口、替换IP地址和替换端口四部分内容。
图310给出了一个动态地址转换示例,内网IP地址“192.168.1.2”在NAT出口被转换为IP地址“192.168.2.100”,端口号没有变化,该转换表项的映射关系在会话存续期间不会改变。图311给出的PAT示例说明了端口和IP地址同时被PAT转换,如“192.168.1.2:5001”被转换为“192.168.2.100:8210”。静态NAT的映射关系与图310相同,但是静态NAT表项必须预先静态配置,当外部主机希望访问内网某台主机时,只需要访问在转换表中映射的外部IP地址即可。也就是说,静态NAT只在外部主机发起通信时,才会绑定会话和相应的转换表项; 而动态NAT和PAT只有当内部网络主机发起会话时,才会绑定对应的转换表项。
图310动态地址转换示例
对于NAT转换,必须注意它对于终端用户是透明的,即用户感觉不到NAT的存在。例如对于图311的示例,如果在“192.168.1.2”上使用“netstat an”命令检查其活动网络连接或使用嗅探工具监听其收发的报文,无法发现任何与IP地址“192.168.2.100”有关的报文。同样,在服务器“192.168.2.2”上,只能观察到自身与转换后的IP地址“192.168.2.100”建立网络连接并进行通信,与原始IP“192.168.1.2”无关。而在NAT服务器上,并没有建立与“192.168.1.2”或“192.168.2.2”的任何网络连接,仅仅维护一张网络地址转换表,用于转换和转发报文,所以使用“netstat an”命令看不到任何活动网络连接。
图311端口地址转换示例
3.4代 理 隐 藏
代理隐藏指攻击者不直接与目标主机进行通信,而是通过代理主机(或跳板主机)间接地与目标主机通信,所在在目标主机的日志中只会留下代理的IP地址,而无法看到攻击者的实际IP地址。但是管理员可以进行IP回溯,即访问代理主机去进一步追踪。许多防御工具如防火墙或入侵防御系统就提供追溯功能,可以反向查询代理跳板主机以追踪到真实IP地址。但是这种功能通常有追溯层数的限制,一旦代理的层数超过追溯层数的设置时,管理员依然无法发现地址。所以攻击者通常使用多个代理主机以构成多层次的代理网络,而防御工具也应该设置更高的追溯层数来追踪攻击者。
代理主机的原理是将源主机与目标主机的直接通信分解为两个间接通信进程,一个进程为代理主机与目标主机的通信进程,另一个为源主机与代理主机的通信进程。代理主机可以将内网与外网隔离,即外网只能看到代理主机,无法看到内网其他任何主机,在代理主机上可以施加不同的安全策略,过滤非法访问并进行监控等。
在互联网中有很多运行代理服务的主机并没有得到很好的维护,它们因为没有及时打上安全补丁或者没有实施访问控制,已经被非法控制或者可以被随意使用,称为“网络跳板”或者“免费代理”,攻击者通常利用这些免费代理进行隐身。
按照代理服务的对象不同,可分为正向代理和反向代理两种。通常所说的代理默认是正向代理(图312),客户主机访问目标服务器时,必须向代理主机发送请求(该请求中指定了目标主机),然后代理主机向目标主机转发请求并获得应答,将应答转发给客户主机,客户主机必须知道代理主机的IP地址和运行代理服务的端口号。反向代理(图313)为目标服务器提供服务,相当于实际服务器的前端,通常用于保护和隐藏真正的目标服务器。与正向代理不同,客户主机无须做任何设置也不知道代理主机的存在,它直接向代理主机提供的服务发起请求,代理主机根据预定义的映射关系判定将向哪个目标服务器转发请求,然后将收到的应答转发给客户主机。
图312正向代理示意图
图313反向代理示意图
如果正向代理不需要配置代理主机的IP地址和端口,则称为透明代理(见图314)。即用户无须任何设置,只要向目标服务器发起的请求经过了代理主机(透明代理通常放置在网关的位置),代理主机就会自动建立与服务器的连接并转发客户请求和接收应答,然后再转发给客户。与NAT不同,代理主机工作在传输层或应用层,无论是否是透明代理,它都会分别与客户和服务器建立TCP连接或UDP套接字进行通信。
图314透明代理示意图
常见代理按用途分类,可分为:
(1) HTTP代理: 主要作用是代理浏览器访问Web服务器,端口一般为80、8080、3128等。
(2) SSL代理: 代理访问https://开头的Web网站,SSL的标准端口为443。
(3) HTTP CONNECT代理: 用户向代理发起HTTP CONNECT请求,代理主机为用户建立TCP连接到目标服务器的任何端口,不仅可用于HTTP,还包括FTP、IRC、RM流服务等。
(4) HTTP TUNNEL代理: 与HTTP CONNECT代理类似,但是转发隧道报文,通常是加密的SSL通信,可以代理任何基于TCP的保密通信。
(5) FTP代理: 代理FTP客户机软件访问FTP服务器,其端口一般为21、2121。
(6) POP3代理: 代理邮件客户机软件用POP3协议接收邮件,其端口一般为110。
(7) Telnet代理: 代理Telnet客户程序访问Telnet服务器,用于远程控制和管理,其端口一般为23。
(8) Socks代理: 传输层套接字代理,有Socks 4和Socks 5两个版本,Socks 4只支持TCP协议而Socks 5同时支持TCP/UDP协议,它支持所有应用层协议以及各种身份验证协议等,其标准端口为1080。
按请求信息的安全性划分,可以分为非匿名代理和匿名代理。通常默认的代理服务是非匿名代理,即远端服务器可以根据代理主机发出的请求报文中的信息,识别客户主机的真实IP地址,而匿名代理则会隐藏真实的客户主机地址。以HTTP代理为例,有三个HTTP请求字段与代理主机和客户主机IP地址有关,“REMOTE_ADDR”表示这个HTTP请求的发起者的地址,“HTTP_VIA”表示这个请求经过哪几个代理,“HTTP_X_FORWARDED_FOR”表示这个请求是代理了哪个IP地址的请求,表31列出了各种可能的配置情况。高匿名代理隐藏最好,服务器无法知道是否是代理在发出请求,其他三种情况服务器都可以识别是代理发出的请求,区别只是服务器是否知道真实的客户IP地址。
表31各种代理的匿名配置
匿名配置REMOTE_ADDRHTTP_VIAHTTP_X_FORWARDED_FOR匿名效果
正向/透明代理代理主机的IP地址代理主机的IP地址真实客户主机IP地址可识别客户IP
匿名代理代理主机的IP地址代理主机的IP地址代理主机的IP地址无法识别客户IP
混淆代理代理主机的IP地址代理主机的IP地址伪造的IP地址伪造的客户IP地址
高匿名代理代理主机的IP地址无无无法识别代理请求
代理软件主要有以下7类。
(1) Burpsuite: 一款用Java语言编写的用于Web攻击的集成平台,包括一个HTTP和HTTPS代理服务器,可以拦截、修改和查看客户机与Web服务器之间的所有报文,但是仅支持透明代理和正向代理功能(图315)。
图315Burpsuite代理设置
(2) OWASP Zap: OWASP组织开发的一款免费Web安全扫描器,与Burpsuite类似,也集成了一个HTTP和HTTPS的代理服务器,简单易用,仅支持正向代理功能(图316)。
图316ZAP代理设置
(3) Subgraph Vega: Subgraph公司出品的免费Web安全扫描器,主要集成了Socks和HTTP代理,仅支持正向代理功能。
(4) CCProxy: 国内出品的Windows代理软件,配置简单,功能十分强大,支持所有常见代理协议。它支持正向和反向代理,但自身不支持透明代理,需要与其他工具如SocksCap64配合实现透明代理功能。图317给出了反向代理的配置示例,将本地主机的80端口映射为“www.jxnu.edu.cn”的80端口,当客户主机输入“http://192.168.2.103”访问本机的80端口时,其实是由代理访问远端服务器并把网页返回给客户主机。
图317CCProxy反向代理设置
(5) Squid: 一个高性能的代理服务器,支持所有常见代理协议,支持正向、反向和透明代理,可在Windows、Linux和各类UNIX平台下运行。和一般的代理软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
图318SockCaps64与ZAP代理配合产生透明代理的效果
(6) SocksCap64: Taro Lab开发的一款免费软件,借助SocksCap64可以使Windows网络应用程序通过Socks代理来访问网络而不需要对这些应用程序做任何修改,即使本身不支持Socks代理的应用程序通过SocksCaps64都可以实现代理访问,它支持Socks4、Socks5和HTTP协议。它与其他代理软件配合,即可实现透明代理功能,用户无须做任何设置,只需从SocksCaps64中运行有关程序即可通过代理访问。图318显示了与ZAP代理配合访问“www.jxnu.edu.cn”的网络连接情况。在SockCaps64中指明ZAP代理所在位置为“192.168.2.200:8080”,然后从SockCaps64中运行Chrome浏览器程序访问“www.jxnu.edu.cn”,该域名对应的IP是“202.101.194.153”,使用“netstat an”分别读取客户机(192.168.2.103)和ZAP主机(192.168.2.200)的TCP连接,可以看到客户机的53777端口通过SockCaps64自动连向ZAP主机的8080端口,然后ZAP代理选择端口49168与实际的服务器相连,获取网页,再返回给客户主机。在此过程中,Chrome浏览器自身并没有配置任何代理服务器。
(7) Proxychains: 与SocksCap64功能类似,允许不支持代理的应用程序通过代理访问,但是比SocksCap64强大得多,因为它支持利用多层代理服务跳转,并且可以灵活选择其中的一个或几个代理,因此攻击者可以动态选择多个代理去访问目标主机。它是一款命令行工具,可以在Linux和所有UNIX平台下运行,支持HTTP、Socks 4和Socks 5协议,主要通过配置文件“/etc/proxychains.conf”进行配置,配置选项如表32所列。
表32proxychains参数设置
参 数 表 示参数值意义参 数 说 明
chain_len =数值,默认为2,只有random_chain配置生效时才有效从代理列表中随机选择代理的层数strict_chain选项值
strict_chain/random_chain/dynamic_chain只能有一个值生效严格按代理列表中的顺序转发报文,并且所有代理必须在线
random_chain选项值
strict_chain/random_chain/dynamic_chain只能有一个值生效从列表中随机选择代理
dynamic_chain选项值
strict_chain/random_chain/dynamic_chain只能有一个值生效严格按代理列表的顺序转发报文,代理如果不在线,则跳过该代理,转发给下一个
[ProxyList]每行表示一个代理,如:
http 192.168.2.200 8080
socks4 192.168.2.103 1080 fguo fguo格式为: typehostport [user pass]
分别指明代理类型、IP地址、端口号、代理服务器的账号和密码
图319Proxychains示例
图319给出了Proxychains的具体用法示例,示例中使用了两个代理,一个HTTP代理在“192.168.2.200:8080”监听,另一个Socks 5代理在“192.168.2.101:1080”监听,账号名和密码均为“fguo”。该示例使用Proxychains从命令行调用浏览器“Iceweasel”访问江西师范大学新闻网站“202.101.194.153”,从Proxychains打印的连接信息以及使用“netstat n”查看客户主机“192.168.2.200”的连接信息可以清楚看到每层代理的连接过程,客户主机首先与Socks 5代理建立连接(192.168.2.200:37323→192.168.2.101:1080),然后Socks 5代理与HTTP代理建立连接(192.168.2.101:50455→192.168.2.200:8080),最后HTTP代理访问目标主机(192.168.200:49992→202.101.194.153:80)。结合该工具和网络中的免费代理,攻击者可以轻松实现“网络隐身”。
3.5其 他 方 法
身份冒充是指攻击者盗用其他用户的账号进行攻击,管理员会误以为是真实用户正在访问,从而推迟被管理员发现真相的时间。账户盗用的前提是获得用户口令或其他证明用户身份的令牌,可以使用社会工程学(见2.4节)、网络监听(见2.6节)或弱口令扫描(见4.4节)等方法来获取目标系统上的用户和口令。还可以利用身份认证协议存在的漏洞,利用截获的已知信息直接冒充合法用户访问目标系统。
使用僵尸主机(Zombie)或“肉鸡”(可以被攻击者远程控制的机器)访问目标主机,然后在访问结束时,在Zombie上清除一切访问痕迹,管理员则无法发现真实攻击者的IP地址。攻击者也可以利用Zombie安装代理服务程序,使用多台Zombie即相当于多层代理隐藏,极大提高了攻击者的隐身性。
3.6小结
基于TCP连接的IP地址欺骗(IP Spoofing)难度相对较大,需要猜测目标主机的TCP ISN序号,而且要对受害主机进行拒绝服务攻击使其无法工作(如果受害主机不在线,则无须攻击)。冒充局域网内的其他IP地址相对比较容易(见5.2节),只有使用加密通信的方式才能较好地避免IP地址欺骗。
MAC地址欺骗(MAC spoofing)只能用在局域网中,主要用于突破基于MAC地址列表的访问控制方法。Windows系统修改注册表即可修改MAC地址,Linux系统使用ifconfig命令或者macchanger工具可以方便地修改和还原。
网络地址转换(NAT)分为端口地址转换、动态转换和静态转换,它使得攻击者可以将自己隐藏在众多的局域网主机中,避免被管理员发现。NAT使用地址转换表来跟踪每条通信的地址转换情况,静态转换是在外网向内网发起连接时登记转换表项,其他两种都是内网向外网发起连接时登记转换表项。
代理隐藏使得攻击者可以经过多个代理主机转发报文后,间接地对目标主机进行访问,当代理主机的层数较多时,管理员基本无法回溯攻击者的实际IP。常见代理技术有正向代理、反向代理、透明代理、匿名代理等。攻击者常用代理软件包括CCProxy、Squid、SocksCaps64和Proxychains等。
现有网络隐身的各种方法中,最难追踪的方法是多层代理隐藏结合Zombie主机。因为Zombie受攻击者完全控制,攻击者完全可以在攻击结束后彻底销毁Zombie上记录的任何信息,甚至破坏掉Zombie的系统,因此安全管理员根本无法找到真实攻击者。
习题
31请说明在局域网中如何使用IP欺骗中断内网一台主机与外网一台具体服务器的TCP连接。
32在局域网中,如果两台在线的主机设置成相同的MAC地址,它们是否能同时正常通信?为什么?
33练习在Windows下直接使用注册表修改和恢复主机的网卡地址。
34搭建包含三台主机两个局域网的虚拟网络,其中一台Windows Server 2003或2008作为NAT网关,分别尝试配置PAT、动态NAT和静态NAT,观察不同网络的主机通信时,地址转换表的变化及各表项的信息,同时使用netstat命令观察三台主机的网络连接情况并解释原因。
35练习如何配置CCProxy作为正向代理和反向代理,并用netstat命令观察它们的网络连接情况。
36应用SocksCap64和CCProxy配合实现透明代理上网,即浏览器无须配置代理,即可通过CCProxy上网,使用netstat命令观察网络连接情况,与CCProxy作为正向代理时的网络连接情况做比较,并解释原因。
37练习应用Proxychains和至少两个免费代理,实现多层代理访问互联网。
38测试3.4.1节提到的代理程序,通过网络监听方法,检测它们在代理HTTP请求时,具体属于哪类匿名代理。
评论
还没有评论。