目录
- Ch1 网络安全基础
- 1.1 网络安全的总的目标
- 1.2 防范技术(主流网络安全技术)
- 1.3 网络安全技术支撑
- 1.4 专业网络安全技术
- 1.5 信息安全保障体系组成(PDRR)
- 1.6 网络体系结构的深入理解、各层加密的作用
- 1.7 帧、IP报文、TCP报文、UDP报文格式
- TCP首部
- 三次握手
- 半连接队列
- OSI七层网络模型 TCP/IP四层概念模型
- Ch2 常见的网络攻击技术
- 2.1 网络攻击
- 2.1.1 目的
- 2.1.2 来源
- 2.1.3 方法
- 2.1.4 过程
- 2.2 物理层和数据链路层
- 2.2.1 MAC地址欺骗
- 2.2.1.1 原理
- 2.2.1.2 防范
- 2.2.2 电磁信息泄露
- 2.2.3 网络监听
- 2.2.4 重放攻击
- 2.3 网络层
- 2.3.1 网络层扫描
- 2.3.2 IP 欺骗
- 2.3.3 碎片攻击
- 片偏移详解
- IP数据报首部
- 分片处理举例
- 2.3.4 ICMP 攻击
- 2.3.5 路由欺骗(课本P43)
- 2.3.5.1 RIP 路由欺骗
- 2.3.5.2 IP 源路由欺骗
- 2.3.6 ARP 欺骗
- 正常的ARP转换
- ARP攻击实例
- 2.4 传输层
- 2.4.1 端口扫描
- 2.4.2 TCP 初始序号预测
- 2.4.3 SYN flooding
- 2.4.4 TCP 欺骗
- 2.4.5 FIN flooding
- 2.5 应用层
- 2.5.1 缓冲区溢出(课本P52)
- 2.5.1.1 概念
- 2.5.1.2 代码示例
- 2.5.1.3 原理
- 2.5.1.4 引起原因
- 2.5.1.5 防止
- 2.5.2 口令攻击
- 2.5.4 DNS 欺骗
- 2.5.5 SQL 注入
- 2.5.6 IIS漏洞
- 2.5.7 常见的应用层安全协议
- 2.6.1 病毒
- 2.6.2 特洛伊木马
- 2.7 拒绝服务攻击
- Ch3 网络身份认证
- Ch4 网络访问控制
- 4.1 访问控制策略
- 4.2 集中式防火墙 -- 访问控制技术
- 4.2.3 防火墙体系结构
- 4.2.3.1 包过滤防火墙
- 4.2.3.2 双重宿主主机防火墙
- 4.2.3.3 屏蔽主机防火墙
- 4.2.3.4 屏蔽子网防火墙
- 4.3 分布式防火墙
- 4.3.2 PPT题目
- Ch5 虚拟专用网技术
- 5.2 VPN连接类型
- 5.3 数据链路层 VPN 协议
- 5.4 网络层 VPN 协议
- 5.6 会话层VPN协议:Socks v5
- Ch6 入侵检测技术
- 6.1 基于主机的入侵检测系统HIDS
- 6.2 基于网络的入侵检测系统NIDS
- 6.3 基于应用的入侵检测系统
- 6.5 入侵防御系统IPS
- 实验
- 1 scanner
- 1.1 思路
- 1.2 核心代码
- 2 sniffer
- 2.1核心代码
- 2.2思路
- 2.3关键接口调用
《网络安全》陈兵 清华大学出版社 NUAA 南航网络安全考试复习总结
Ch1 网络安全基础
1.1 网络安全的总的目标
保证信息的机密性、完整性、不可否认性和可用性:1.机密性:可以通过加密来处理2. 完整性:不允许数据在传输过程中被修改3. 不可否认性:防止时候抵赖,可以通过数字签名解决4. 可用性:通过冗余方式
1.2 防范技术(主流网络安全技术)
- PKI (Public Key Infrastructure)是遵循既定标准的密钥管理平台,它能够为所有网络应用提供加密和数字签名等密码服务及所必需的密钥和证书管理体系。
- 防火墙技术是将内部网与外部网之间的访问进行全面控制的一种机制。
- VPN(Virtual Private Network)技术利用不可信的公网资源建立可信的虚拟专用网,是保证局域网间通信安全的少数可行方案之一。
- 入侵检测技术是一种主动保护自己的网络和系统免遭非法攻击的网络安全技术。
- 反病毒技术是查找和清除计算机病毒的主要技术,其原理就是在杀毒扫描程序中嵌入病毒特征码引擎,然后根据病毒特征码数据库来进行对比式查杀。这种方法简单、有效,但只适用于已知病毒,并且其特征库需要不断升级。
- 网络隔离技术通过特殊硬件实现链路层的断开,使得各种网络攻击与入侵失去了物理通路的基础,从而避免了内部网络遭受外部攻击的可能性。
1.3 网络安全技术支撑
- 密码、认证、数字签名和其它各种密码协议统称为密码技术
- 访问控制保证网络资源不被非法使用和访问
- 数据和网络备份、恢复也属于网络安全的支撑技术范围
1.4 专业网络安全技术
- 系统和网络的扫描和评估:可帮助识别检测对象的系统资源,分析被攻击的可能指数,了解支撑系统本身的脆弱性,评估所有存在的安全风险。一些非常重要的专业应用网络,例如银行,不能承受一次入侵带来的损失,对扫描和评估技术有强烈的需求。
- 监控和审计是与网络管理直接挂钩的技术。
- 安全套接层(SSL,Secure Socket Layer)协议是由Netscape公司1994年设计开发的安全协议,主要在传输层提高应用程序之间的数据安全性。SSL协议保证任何安装了安全套接层的C/S间的事务安全,提供了客户端和服务器的鉴别、数据完整性及信息机密性等安全服务。SSL采用在建立连接过程中采用公开密钥;在会话过程中使用对称密钥。加密的类型和强度由两端建立连接时协商决定。
- HTTPS是建立于SSL上的HTTP安全协议,利用SSL加强HTTP协议的安全性,已经成功应用于电子商务。
1.5 信息安全保障体系组成(PDRR)
保护(Protect):采用可能采取的手段保障信息的保密性、完整性、可用性、可控性和不可否认性。
检测(Detect):利用高技术提供的工具检查系统存在的可能提供黑客攻击、白领犯罪、病毒泛滥的脆弱性。
反应(React):对危及安全的事件、行为、过程及时作出响应处理,杜绝危害的进一步蔓延扩大,力求系统尚能提供正常服务。
恢复(Restore):一旦系统遭到破坏,尽快恢复系统功能,尽早提供正常的服务。
1.6 网络体系结构的深入理解、各层加密的作用
物理层, 只支持数据保密服务,保证信息流安全;
链路层, 只支持数据保密服务,实现链路层的面向连接和无连接两种服务的加密;
网络层, 对等实体认证服务、访问控制服务、数据保密服务、数据完整性服务、数据源点认证服务等;
会话层, 不提供安全服务;
表示层, 除信息流安全服务、有恢复连接完整性和无恢复连接完整性之外所有其他服务;
应用层, 原则上能够支持所有安全服务。
1.7 帧、IP报文、TCP报文、UDP报文格式
- 以太网帧首部第1-14字节:目的地址 1-6源地址 7-12长度/类型 13-14
- Ip 数据报首部第15-34字节:杂项 15-23 协议号24 校验25-26 源ip 27-30 目的ip 31-34
- TCP首部第35-38字节:源端口号35-36 目的端口号37-38
- 协议号:17->UDP 6->TCP 1->ICMP IPv4->4
- 应用层服务常用端口: SMTP->25 HTTP->80 FTP->20/21 HTTPS->443 DNS->53
TCP首部
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Source Port | Destination Port |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Sequence Number |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Acknowledgment Number |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Data | |U|A|P|R|S|F| || Offset| Reserved |R|C|S|S|Y|I| Window || | |G|K|H|T|N|N| |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Checksum | Urgent Pointer |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Options | Padding |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| data |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Sequence Number
是记录包的序号,TCP 会按照报文字节进行编号,它是用来解决包在网络中乱序的问题Acknowledgement Number
确认序列号,是用于向发送方确认已经收到了哪些包,用来解决不丢包的问题Windows
也叫Advertised-Windows
,也就是著名的滑动窗口,主要是用来解决流控的。TCP Flag
就是包的类型,主要是用于操控 TCP 状态机的。位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)
三次握手
TCP A TCP B1. CLOSED LISTEN2. SYN-SENT --> <SEQ=100><CTL=SYN> --> SYN-RECEIVED3. ESTABLISHED <-- <SEQ=300><ACK=101><CTL=SYN,ACK> <-- SYN-RECEIVED4. ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK> --> ESTABLISHED5. ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK><DATA> --> ESTABLISHED
1. 第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。
2. 第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。
3. 第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。
所以,只有三次握手才能确认双方的接收与发送能力是否正常。
淘宝二面,面试官居然把TCP三次握手问的这么详细-面包板社区
第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;
第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包;
第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。
半连接队列
服务器第一次收到客户端的 SYN
之后,就会处于 SYN_RCVD
状态,此时双方还没有完全建立连接。服务器会把这种状态下请求连接放在一个队列里,我们把这种队列称之为半连接队列。
当然还有一个全连接队列,就是已经完成三次握手,建立起连接的就会放在全连接队列中。如果队列满了就有可能会出现丢包现象。
OSI七层网络模型 TCP/IP四层概念模型
Ch2 常见的网络攻击技术
2.1 网络攻击
2.1.1 目的
- 窃取信息2. 控制中间站点3. 获取超级用户的权限
2.1.2 来源
- 网络协议存在大量漏洞
网络层核心协议 IP 以分组转发的方式从源主机向目的主机传送数据,在整个过程中网络上传输的都是明文的数据,并且它仅依赖 IP 地址来验证源主机和目的主机,缺乏更有效的安全认证和保密机制;在传输层提供TCP和UDP两种协议,面向连接的TCP在建立连接时虽然采用了“三次握手”的机制,但TCP 连接也能被欺骗、截取和操纵;UDP 协议则更容易受到 IP 源路由和拒绝服务的攻击;应用层的 Finger、 FTP、 Telnet、 SMTP、 DNS、 SNMP、 HTTP 等协议也都存在着与安全有关的认证、访问控制、完整性、保密性等问题;
- 网络操作系统的漏洞
- 应用系统设计的漏洞
- 网络系统设计的漏洞
- 来自网络的恶意攻击不断
- 来自合法用户的攻击
互联网的开放性是导致网络安全威胁最根本的原因。
2.1.3 方法
根据攻击针对的 TCP/IP 参考模型的不同层次,可分为:
- 数据链路层攻击2. 网络层攻击3. 传输层攻击4. 应用层攻击
根据攻击时是否主动修改信息,可分为:
- 被动攻击(Passive Attack) :被动攻击是指攻击者只是监视着被攻击方的通信,但不进行任何篡改、拦截,通常被攻击方不易察觉。具体方法如下:窃听:采用嗅探软件 Sniffer,或直接 wiretapping(搭线窃听)
- 流量分析( Traffic analysis ):通过对通信业务流的观察(出现、消失、总量、方向与频
度)推断出有用的信息,比如主机的位置,业务的变化等等。
- 主动攻击(Active Attack):主动攻击则是攻击者通过将一些恶意代码(Malicious MobileCode),如病毒(Virus) 、蠕虫(Worm)、特洛伊木马(trojan)、恶意脚本( Java Script,Java Applet, Active X 等)放入受害者的主机,从而达到自己目的的行为,如删除受害者资料、盗取受害者账号和密码、篡改或虚构信息欺诈、对自身行为抵赖(repudiation)等。通常主动攻击的后果更为直接也更严重。
2.1.4 过程
- 确定目标
- 搜集与攻击目标相关的信息,并找出系统的安全漏洞
- 实施攻击
2.2 物理层和数据链路层
2.2.1 MAC地址欺骗
2.2.1.1 原理
以太网卡的 MAC 地址在系统初始化时被读入寄存器,发送数据帧时自动作为源物理地址,在接收到数据帧时同样自动比较该物理地址与数据帧的目的物理地址。因此,如果通过底层的 I/O 操作修改寄存器中的 MAC 地址,即把机器的 MAC 地址改为其它被信任的友好主机的 MAC 地址,就可以以其友好主机的身份与其他主机通信,这就是“MAC 地址欺骗”。有多种方法来修改 MAC 地址:
- 直接修改网卡 MAC 地址
- 利用 MAC 地址克隆
2.2.1.2 防范
追踪综合布线以确定没有非授权的机器挂接在网络上;
确保线路上已授权的机器使用自身的MAC地址,即配置MAC地址和端口的映射。
2.2.2 电磁信息泄露
电磁信息泄漏:指电子设备的杂散(寄生)电磁能量通过导线或空间向外扩散。
防范:只有强度和信噪比满足一定条件的信号才能够被截获和还原。因此,只要采取措施,弱化泄漏信号的强度,减小泄漏信号的信噪比,就可以达到电磁防护的目的。
电磁防护措施:屏蔽、滤波、隔离、合理的接地与良好的搭接、选用低泄漏设备、合理的布局和使用干扰器等。
2.2.3 网络监听
网络监听是指获取在网络上传输的、并非发给自己计算机的信息。传统以太网:共享信道,任何主机发送的每一个以太网帧都会到达别的与该主机处于同一网段的所有主机的以太网接口。使用CSMA/CD协议时,以太网接口在检测到目的MAC不是自己的数据帧时,直接忽略,不交给上层协议。使一个以太网接口接收不属于它的数据帧: 设置为混杂模式,使用Ioctl或使用socket API时通过setsockopt函数进行设置。
监听网络三种方式:1. 如果这个局域网使用集线器连接各个节点,那么攻击者只需要把网卡设置为混杂模式,就可以用链路层的监听获得想要的信息。2. 当局域网采用交换机连接各个节点时, 交换机会根据帧的目标MAC地址查找端口映射表,确定转发的某个具体端口,而不是向所有端口广播。此时,攻击者可以首先试探交换机是否存在失败保护模式(fai-safe mode 交换机的特殊模式状态)。交换机在维护IP地址和MAC地址的映射关系时会花费一定的处理能力,当网络通信时出现大量虚假MAC地址时,某些交换机会出现过载,转换到失败保护模式,其工作方式和集线器相同。工具macof可完成此项攻击。3. 如果交换机不存在失败保护模式,则需要使用ARP(Address Resolution Protocol,地址解析协议,将IP地址转化成物理地址)欺骗技术。
防范:网络分段,利用交换器、动态集线器和桥等设备对数据流进行限制,链路层加密和禁用混杂模式的节点等。
工具:1. Snoop 监听工具2. Sniffit 监听工具3. Sniffer 监听工具
防止网络监听:防止各种监听程序对网络的监听也有多种方法,如加密传输、采用安全拓扑结构等,但系统开销会比较大。最根本方法是增强TCP/IP协议,使用ipv6提供的IPSec可选报头,或者在IPv4网络中使用SSH协议。
2.2.4 重放攻击
重放攻击(Replay Attacks)又称重播攻击、回放攻击或新鲜性攻击(Freshness Attacks)等,是指攻击者向目的主机(A)发送一个或多个 A 已接收过的包(特别是在认证的过程中,用于认证用户身份所接收的包,这个包往往是其他主机所发出的合法认证包)。重放攻击会不断恶意或欺诈性地重复发起一
个有效的数据传输,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的安全性。
防范:
- **挑战应答机制:**1.客户端向系统申请登陆2.系统发送挑战值给客户端;3.客户端计算相应的应答值(可以用 MD5 算法等计算应答值);4.客户端发送应答值给系统;5.系统通过同样的算法判断应答值是否正确;6.如果正确则通过认证,允许用户继续后面的操作,认证结束;7.不正确则断开连接,结束。
- 时间戳:当主机(A)接收到了一个报文,当且仅当该报文包含了一个时间戳,且该时间戳对于 A而言是足够接近当前时刻的, A 才认为该报文是合法的。具体的处理方式是,双方设置大小适当的时间窗(间隔), 该时间窗越大越能包容网络传输延时(即延迟大的报文也被认为是合法的,这对于网络条件不够良好的情况来说较为重要),越小越能防范重放攻击。
- 序号:通信双方通过在报文中添加双方都认可的序列号, 来判断报文的新鲜性,进而判断是否合法。这要求通信双方必须事先协商一个初始序列号,并协商递增方法。这个初始序列号应该尽量避免具有一定的规律性。
2.3 网络层
2.3.1 网络层扫描
常用的网络相关命令:
- ping:检测网络目标主机存在与否以及网络是否正常(能否通达)。 Ping 的原理是通过向目标主机传送小数据包,目标主机接收并将该包反送回来,如果返回的数据包和发送的数据包一致,那就是说 Ping 命令成功了。
- Tracert:用来跟踪一个报文从源主机到目的主机所经过的路径
2.3.2 IP 欺骗
IP 欺骗就是攻击者假冒他人 IP 地址,发送数据包。由于 IP 协议不对数据包中的 IP 地址进行认证,因此任何人不经授权就可伪造 IP 包的源地址。 IP 欺骗是利用不同主机之间的信任关系而进行欺骗攻击的一种手段,这种信任关系以 IP 地址验证为基础。
引例:当用户的主机 A 要与某服务器 B 建立连接时,它的通信方式是先发请求告诉对方主机 B,说“我要和你通信了”,当 B 收到时,就回复一个确认请求包(ACK)给 A 主机。如果 A 是合法地址,就会再回复一个确认(ACK)给 B 主机,然后两台主机就可以建立一个通信渠道了。可是攻击者机器 A 发出包的源地址是一个虚假的 IP 地址,或者可以说是实际上不存在的一个地址,那么B 发出的 ACK 自然无法找到目标地址,即无法获得对方回复的 ACK。而在缺省超时的时间范围以内,主机 B 的一部分资源要用于等待这个 ACK 的响应上,假如短时间内主机 A 接到大量来自虚假 IP 地址的请求包,它就要占用大量的资源来处理这些错误的等待。大量发送这类欺骗型的请求,其结果就是主机 B上的系统资源耗尽以至瘫痪。
目的:
1.只想隐藏自身的 IP 地址或伪造源 IP 和目的 IP 相同的不正常包而并不关心是否能收到目标主机的应答,这样很容易实现,例如 IP 包碎片攻击、 Land 攻击等;2. 伪装成被目标主机信任的友好主机,并且希望得到非授权的服务,这时攻击者还需要使用正确的TCP 序列号。
防范:路由设置、捆绑、防止源路由
2.3.3 碎片攻击
在具体物理网络中,数据链路层协议对于帧的最大长度都有限制,即存在最大传输单元(MTU,Maximum Transmission Unit)。
IP分组分片例题:一个数据报标识为 10000,分组总长度为 4980 字节,其中报文首部长度为 20 字节,数据部分长度为 4960 字节,使用互联网中某局域网进行传送,该局域网允许分片且 MTU为 1420 字节,那么这个数据报在进入这个局域网后会被分成 4 片(数据部分 4960,分成 4片,前 3 片的长度为1400,第 4 片长度为 760。每片传输时再加上 20 字节的首部,形成一个完成的分组传递出去),每个分片的数据不能重叠,这样在目的主机可以把同一标识的所有分片按照段偏移大小顺序排好,并且在看到 MF=0 的分片后进行重组。
更正:标志位 DF=1 时,表示不允许路由器对该数据报分片,因为目的主机不能重组这些分片; DF=0表示允许分段。所以上面的DF标志均为0
原理:
IP首部有两个字节表示整个IP数据包的长度,所以IP数据包最长只能为0xFFFF,就是65535字节。如果有意发送总长度超过65535 的IP碎片,一些老的系统内核在处理的时候就会出现问题,导致崩溃或者拒绝服务。另外,如果分片之间偏移量经过精心构造,一些系统就无法处理,导致死机。所以说,漏洞的起因是出在重组算法上。
防范:
- 确保您的操作系统是最新的,并安装了所有最新的安全补丁,现在的网络操作系统已经完善了 TCP/IP 协议栈的异常处理,并且各种入侵检测系统和防火墙也可以2.及时发现异常的 IP 碎片,从而阻止这种类型的攻击。
如果ip数据报太大,超过MTU,数据包就会分片,然后通过ip首部的片偏移来标识各个片段的顺序。
片偏移详解
IP数据报首部
0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Version| IHL |Type of Service| Total Length |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Identification |Flags| Fragment Offset |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Time to Live | Protocol | Header Checksum |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Source Address |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Destination Address |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Options | Padding |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
其中Fragment Offset为片偏移(13bit),标识被分片的每一个报片相对于原始数据的位置,第一个分片对应的值为0。片偏移以8字节为一个单位。
分片处理举例
IP数据包数据部分长度为3200位,首部为160位,MTU为1200,则发送数据报必须分片
因为首部为160,所以分片后传输的数据部分长度最大为1040
数据报 | 总长度 | 标识 | MF | DF | 片偏移 |
---|---|---|---|---|---|
原始数据报 | 3200+160 | 123 | 0 | 0 | 0 |
数据报片1 | 1040+160=1200 | 123 | 1 | 0 | 0 |
数据报片2 | 1040+160=1200 | 123 | 1 | 0 | 1040/8=130 |
数据报片3 | 1040+160=1200 | 123 | 1 | 0 | 1040/8+130=260 |
数据报片4 | 80+160=240 | 123 | 0 | 0 | 80/8+260=270 |
References
ip协议文档
RFC 791 - Internet Protocol
2.3.4 ICMP 攻击
- IP 地址扫描:经常出现在整个攻击过程的开始阶段,为攻击者收集信息。这种攻击用 ping 命令就能实现,在 TCP/IP 实现中,用户的 ping 命令就是利用回应请求与应答报文(回应请求报文的类型=8,回应请求应答报文的类型=0)测试目的主机是否可以到达;如果攻击者成功接收到应答报文,则说明目的主机处于“活跃”状态,可以作为攻击目标。
- Ping of death:ICMP 报文作为 IP 报文的数据传输,由于 IP 报文的最大总长度为 65535 字节,因此早期路由器也限定 ICMP 包的最大长度为 64KB,并在读取 ICMP 首部后,根据其中的“类型”和“代码”字段判断为何种 ICMP 报文,并分配相应内存作为缓冲区。当出现畸形的 ICMP 包时,例如,声称自己的尺寸超过 ICMP 上限的包也就是加载的尺寸超过 64K 上限时,就会出现内存分配错误,导致 TCP/IP 堆栈崩溃,致使接受方死机。
- Ping flooding:在某一时刻多台主机都对目标主机使用 ping 程序,致力于耗尽目标主机的网络带宽和处理能力。一个网站 1 秒钟收到数万个 ICMP 回应请求报文就可能使它过度繁忙而无法提供正常服务——这就是拒绝服务攻击方法。
- Smurf: Smurf 攻击则是攻击者伪造一个源地址为受害主机的地址、目标地址是反弹网络的广播地址的 ICMP 回应请求数据包,当反弹网络的所有主机返回 ICMP 回应应答数据包的时候将淹没受害主机。它的原理和 ping flooding 类似,若反弹网络规模较大,攻击的威力也很巨大。
- ICMP 重定向报文:初始网关一旦检测到某数据报经非最优路径传输,它一边将该数据报转发出去,一边向主机发送一个路径重定向报文,告诉主机去往相应目的的最优路径。主机开机后经不断积累便能掌握越来越多的最优路径信息。通过 ICMP 重定向报文,能够保证主机拥有一个动态的既小且优的寻径表。但是, ICMP 没有认证功能,攻击者可以冒充初始网关向目标主机发送ICMP 重定向报文,诱使目标主机更改寻径表,其结果是到达某一 IP 子网的报文全部丢失或都经过一个攻击者能控制的网关。
- ICMP 主机不可达和 TTL 超时报文:当数据报传输路径中的路由器发现传输错误时发送报文给源主机,主机接收到此类报文后会重新建立 TCP 连接。攻击者可以利用此类报文干扰正常的通信。
防范:
1.禁止不必要的ICMP, 严格限制ICMP报文的作用范围2.禁止未经请求主动提供的ICMP应答数据包3.严格限制ICMP重定向报文的应用范围, 即如果主机目前没有数据要发送到相应站点,就不按照收到的重定向报文改变路由表4.主机与其他路由器的全局路由表也不能以重定向报文为依据修改等。
2.3.5 路由欺骗(课本P43)
Internet 中 IP 包的传输路径完全由路由表决定,主机的路由表可以依据 ICMP 重定向报文而改变,路由器的路由表则要依据路由协议的路由更新报文来修改。前者属于 ICMP 攻击,后者则属于路由欺骗。
2.3.5.1 RIP 路由欺骗
RIP(Routing information Protocol)协议是早期用于自治域内传播路由信息的路由协议,路由器需要定时向它的相邻路由器们发送本地的 RIP 路由更新信息。由于 RIP v1.0 中没有提供对 RIP 数据包发送者的认证机制,所以其他路由器在收到更新 RIP 数据包时一般不作检查,这也给了攻击者可趁之机。攻击者可以声称他所控制的路由器 A 可以最快地到达某一站点 B,从而诱使发往 B 的数据包由 A中转。由于A受攻击者控制,攻击者可侦听、篡改数据。
防范:
1.路由器在接受新路由前应先验证其是否可达,降低受此类攻击的概率。
2.路由信息在网上可见,随着假路由信息在网上的传播范围扩大,其被发现的可能性也在增大。经常检查日志文件会有助于发现此类问题
3.对RIP包进行身份认证,杜绝假冒路由器,但在广播型的协议中比较难实现
2.3.5.2 IP 源路由欺骗
如果发送方进行了源路由欺骗,比如说,C进行源路由欺骗,伪装成B的ip地址,给服务器A发送了一个包。此时A收到包后发现要返回信息,正常的话因为发送栏地址是B,应该返回给B 但是由于源路由信息记录了来时的路线,反推回去就把应该给B的信息给了C,而A没有意识到问题,B对此一无所知,C拿到了B才能拿到的信息
防范:
1.配置好路由器,抛弃那些由外部网进来的却声称是内部主机的报文;
2.关闭主机和路由器上的源路由功能。
2.3.6 ARP 欺骗
ARP协议用于IP地址到MAC地址的转换,此映射关系存储在ARP缓存表中,若ARP缓存表被他人非法修改,则会导致发送给正确主机的数据包发送给另外一台由攻击者控制的主机。
ARP欺骗的运作原理是由攻击者发送假的ARP数据包到网络上,尤其是送到网关上。其目的是要让送至特定的IP地址的流量被错误送到攻击者所取代的地方。因此攻击者可将这些流量另行转送到真正的网关或是篡改后再转送(中间人攻击)。攻击者亦可将ARP数据包导到不存在的MAC地址以达到拒绝服务攻击的效果。
例如某一的IP地址是192.168.0.254
,其MAC地址为00-11-22-33-44-55
,网络上的电脑内ARP表会有这一笔ARP记录。攻击者发动攻击时,会大量发出已将192.168.0.254
的MAC地址篡改为00-55-44-33-22-11
的ARP数据包。那么网络上的电脑若将此伪造的ARP写入自身的ARP表后,电脑若要透过网络网关连到其他电脑时,数据包将被导到00-55-44-33-22-11
这个MAC地址,因此攻击者可从此MAC地址截收到数据包,可篡改后再送回真正的网关,或是什么也不做,让网络无法连线。
防范:1.可参考MAC地址欺骗的防范;2.使用工具ARPWatch,监视局域网内所有MAC地址和IP地址映射对,一旦有改变将产生告警或日志。3.每台电脑的ARP一律改用静态4.使用DHCP snooping,网络设备可借由DHCP保留网络上各电脑的MAC地址,在伪造的ARP数据包发出时即可侦测到
什么是DHCP Snooping? 为什么需要DHCP Snooping? - 华为
正常的ARP转换
- 主机A192.168.0.4想要与路由器192.168.0.1通信,从而接入Internet
- 主机A以广播的方式发送ARP请求,希望得到路由器的MAC
- 交换机收到ARP请求,并把此请求发送给连接到交换机的各个主机。同时,交换机将更新它的MAC地址和端口之间的映射表,即将192.168.0.4绑定它所连接的端口
- 路由器收到A的ARP请求后,发出带有自身MAC地址的ARP响应
- 路由器更新ARP缓存表,绑定A的IP地址和MAC地址
- 交换机收到了路由器对A的ARP响应后,查找它的MAC地址和端口之间的映射表,把此ARP响应数据包发送到相应的端口。同时,交换机更新它的MAC地址和端口之间的映射表,即将192.168.0.1绑定它所连接的端口
- 主机A收到ARP响应数据包,更新ARP缓存表,绑定路由器的IP地址和MAC地址
- 主机A使用更新后的MAC地址信息把数据发送给路由器,通信通道就此建立
ARP攻击实例
- 实例一
假设在一个LAN里,只有三台主机A、B、C,且C是攻击者。
- 攻击者聆听局域网上的MAC地址。它只要收到两台主机洪泛的ARP Request,就可以进行欺骗活动。
- 主机A、B都洪泛了ARP Request.攻击者现在有了两台主机的IP、MAC地址,开始攻击。
- 攻击者发送一个ARP Reply给主机B,把此包protocol header里的sender IP设为A的IP地址,sender mac设为攻击者自己的MAC地址。
- 主机B收到ARP Reply后,更新它的ARP表,把主机A的MAC地址(IP_A, MAC_A)改为(IP_A, MAC_C)。
- 当主机B要发送数据包给主机A时,它根据ARP表来封装数据包的Link报头,把目的MAC地址设为MAC_C,而非MAC_A。
- 当交换机收到B发送给A的数据包时,根据此包的目的MAC地址(MAC_C)而把数据包转发给攻击者C。
- 攻击者收到数据包后,可以把它存起来后再发送给A,达到偷听效果。攻击者也可以篡改数据后才发送数据包给A,造成伤害。
- 实例二
有三台主机:
A:IP地址 192.168.0.1;硬件地址AA:AA:AA:AA:AA:AA
B:IP地址 192.168.0.2;硬件地址BB: BB: BB: BB: BB: BB
C:IP地址 192.168.0.3;硬件地址CC:CC:CC: CC:CC:CC
一个位于主机B的入侵者想非法进入主机A,可是这台主机上安装有防火墙。通过收集资料得知这台主机A的防火墙只对主机C有信任关系。而入侵者必须要使用telnet来进入主机A,这个时候入侵者应当如何处理?
要telnet到主机A,入侵者可以让主机A相信主机B就是主机C。如果主机A与C的信任关系是建立在IP地址上的。攻击者可以先通过各种拒绝式服务方式让C这台机器暂时宕机,同时将B的IP地址改为192.168.0.3,B就可以成功地通过23端口telnet到A上,而成功地绕过防火墙的限制。
但是,如果AC的信任关系是建立在硬件地址之上,这个时候上述的方式就不行了,需要运用ARP欺骗方式。
入侵者认为地制造一个arp_reply的响应包,发送给想要欺骗的主机A,这是可以实现的,因为ARP协议并没有规定在收到arp_echo请求后才可以发送响应包(这就是能够实现的关键,在一般的情况之下只有路由器进行了arp广播之后,主机才会回复)**。**这样,就可以通过发送虚假的ARP响应包来修改主机A上的动态ARP缓存来达到欺骗的目的。
具体步骤如下:
- 利用工具,进行拒绝式服务攻击,让主机C宕机,暂时停止工作
- 在这段时间里,入侵者把自己的IP改为192.168.0.3(主机C的IP)
- 用工具发一个源地址为192.168.0.3,源MAC地址为BB: BB: BB: BB: BB: BB的包给主机A,要求A更新自己的ARP转换表(ARP缓存)
- 主机A更新了ARP缓存中关于主机C的IP MAC的对应关系
- 防火墙失效了,现在主机B可以telnet到主机A
2.4 传输层
2.4.1 端口扫描
原理:端口是TCP/IP体系中传输层的服务访问点,传输层到某端口的数据都被相应绑定到该端口的进程接收。
攻击者试图和目标主机的一系列端口(一般是保留端口和常用端口)建立连接或请求通信,若目标机有回应,则打开了相应的应用程序或服务,攻击者就可以使用应用层的一些攻击手段。
端口扫描技术有:
- TCP connect() 扫描
TCP扫描优点: 1.入侵者不需要任何权限,系统中的任何用户都有权利使用这个调用2. 速度快。如果对每个目标端口以串行的方式使用单独的connect()调用,需要较长的时间;然而,人侵者可以通过同时打开多个套接字加速扫描。使用非阻塞I/O允许人侵者设置一个低的时间用尽周期,同时观察多个套接字。
缺点:1. 很容易被发觉,并且被过滤掉2. 目标计算机的日志文件也会记录一连串的连接和连接是否出错的服务消息,并且能很快地关闭连接。
- TCP SYN 扫描
- “半开放”扫描,不必打开一个完全的TCP连接。扫描程序发送一个SYN数据包,好象准备打开一个实际的连接并等待反应
- 返回SYN|ACK信息表示端口处于侦听状态。扫描程序必须再发送一个RST信号,来关闭这个连接过程
- 返回RST,表示端口没有处于侦听态
- TCP FIN 扫描
- 结束端口数据传输
- 发送一个FIN=1的报文到一个关闭的端口时,该报文会被丢掉,并返回一个RST报文
- 当FIN报文发送到一个活动的端口时,该报文只是被简单的丢掉,而不回应任何信息
- 更加隐蔽!
- Fragmentation扫描
- UDP ICMP端口扫描
- 向未打开的UDP端口发送数据包时,返回ICMP_PORT_UNREACH错误->发现哪个端口是关闭的,UDP无连接,不可靠。
- 慢速扫描
一般扫描检测器的实现原理是通过监视某个时间段里一台特定主机被连接的数目来决定是否在被扫描,攻击者可以通过使用扫描速度慢一些的扫描软件进行扫描,使检测软件判断不出它在进行扫描。
- 多线程扫描
端口扫描防范:1.需要进行统计分析,即在单位时间内发现接收到超过上限数目的以扫描端口为目的的数据包请求时,判断为发现端口扫描攻击。2.可以在一段较长时间内对此类请求数据包进行联合分析,若发现某特定时间段内主机较为均匀地接受到此类数据包请求,则判断为慢速扫描。
2.4.2 TCP 初始序号预测
原理:TCP协议采用确认重传机制保证数据流的可靠性,确认以TCP的序号字段为基础。
TCP在使用三次握手机制建立连接时的初始序号有一定的随机性,但是依据其实现机制不同,可对TCP初始序号进行预测。
产生初始序列号的方法:
1.64K规则:每秒用一常量(12800)增加初始序列号,如果有某一个连接启动,则用另一个常量(64000)增加序列号计数器。2. 与时间相关的产生规则:允许序列号产生器产生与时间相关的值。在计算机自举时产生初始值,依照每台计算机各自的时钟增加。由于各计算机上的时钟并不完全相等,增大了序列号的随机性3. 伪随机数产生规则:操作系统使用伪随机数产生器产生初始序列号,此方法无法预测
2.4.3 SYN flooding
原理:利用TCP连接三次握手过程,打开大量的半开TCP连接,使得目标机器不能进一步接受TCP连接。每个机器都需要为这种半开连接分配一定的资源,并且,这种半开连接的数量是有限制的,达到最大数量时,机器就不再接受进来的连接请求。
防范:
- 缩短SYN Timeout(连接等待超时)时间2. 根据源IP记录SYN连接3. 负反馈策略4. 容忍策略:基于SYN flooding攻击代码的一个缺陷5. 利用DNS进行负载均衡6. 利用防火墙技术
2.4.4 TCP 欺骗
分类:
1.非盲攻击:攻击者和被欺骗的目的主机在同一个网络上,攻击者可以简单地使用协议分析器(嗅探器)捕获TCP报文段,从而获得需要的序列号。攻击步骤如下:
- 攻击者X要确定目标主机A的被信任主机B不在工作状态,若其在工作状态,也可用SYNflooding等攻击手段使其处于拒绝服务状态。
- 攻击者X伪造数据包:B -> A : SYN(ISN C),源IP地址使用B,初始序列号ISN为C,给目标主机发送TCP的SYN包请求建立连接。
- 目标主机回应数据包:A -> B : SYN(ISN S) , ACK(ISN C),初始序列号为S,确认序号为C。由于B处于拒绝服务状态,不会发出响应包。攻击者X使用嗅探器捕获TCP报文,得到初始序列号S。
- 攻击者X伪造数据包:B ->A : ACK(ISN S),完成三次握手建立TCP连接
- 攻击者X一直使用B的IP地址与A进行通信
2.盲攻击:由于攻击者和被欺骗的目标主机不在同一个网络上,攻击者无法使用嗅探器捕获TCP报文段。攻击步骤与非盲攻击几乎相同,在第三步用TCP初始序列号预测技术得到初始序列号。第五步,攻击者X可以发送第一个数据包,但收不到A的响应包,难实现交互。
防范:1.使用伪随机数发生器产生TCP初始序号2.路由器拒绝来自外网而源IP是内网的数据包3. TCP报文加密
2.4.5 FIN flooding
FIN flooding:攻击者利用僵尸网络发送大量的变源变端口FIN报文攻击,这些攻击到达依靠会话转发的设备上,很容易导致转发设备性能降低甚至会话耗尽造成网络瘫痪,从而拒绝正常服务。
预防FIN flooding:启动会话检查。如果检查到FIN报文没有命中会话,直接丢弃报文。如果检查到FIN报文命中会话,则根据会话创建原因和会话检查结果来判断该报文是否通过
FIN攻击:攻击者构造好TCP报文段后向目标主机发送,目标主机接收之后,将不再接收被欺骗主机以后发送来的数据,认为在FIN包之后的数据是由网络错误造成的。
2.5 应用层
2.5.1 缓冲区溢出(课本P52)
2.5.1.1 概念
缓冲区溢出是指计算机向缓冲区内填充数据位数超过缓冲区本身的容量,溢出的数据覆盖了其他程序或系统的合法数据。缓冲区可以设在堆栈(stack,自动变量)、堆(heap,动态分配的内存区)或静态资料区。最为危险的是堆栈溢出危害:1.在函数返回时改变返回程序的地址,跳转到任意地址,执行恶意代码2. 系统崩溃导致拒绝服务3. 执行非授权指令4. 取得系统特权。预防:严格申请足够的缓冲区长度,检查数据长度,不允许超过缓冲区长度的数据存入缓冲区。
2.5.1.2 代码示例
void fun(char *str) {
char buffer[16];
strcpy(buffer, str);}
Main() {
char buffer[256]; int i;
for (i = 0; I < 256; i++)
buffer[i] = ‘A’;
fun(buffer);
printf(‘%s’, buffer);}
编译执行这段代码后出现这样的提示: Segmentation fault(core dumped),这意味着发生了缓冲区溢出。
如果在 buffer 中保存的不是字符 A,而是攻击者想执行的代shellcode: Unix/Linux 环境下外壳代码,其溢出部分的长度覆盖了调用函数 fun 的返回地址(ret),使它指向缓冲区中 shellcode(其内容是取得高级权限的恶意代码)的开头。那么,在当前执行进程(或函数)返回的时就可以跳转到shellcode 处,并且攻击者会获得管理员权限,这样就可以在目标主机上植入木马,修改建立一个新的socket 连接等。
2.5.1.3 原理
当程序中发生函数调用时,步骤如下:
- 把参数压入堆栈2. 保存指令寄存器(IP)中的内容,作为返回地址(RET)3. 将基址寄存器(FP)压入堆栈4. 把当前的栈指针(SP)拷贝到 FP,做为新的基地址5. 为本地变量分配空间,把 SP 减去适当的数值。
在上面的小例子中,从 buf 开始的 256 个字节都将被str 的内容 A 覆盖,包括 sfp、 ret,甚至str。而A的十六进值为 0x41,所以函数的返回地址变成了 0x41414141,超出了程序的地址空间,所以会出现段错误 Segmentation fault (core dumped) 。
下一步,在溢出的缓冲区中写入想执行的代码,再覆盖返回地址( ret)的内容,使它指向缓冲区的开头,就可以达到运行其它指令的目的 。如果攻击者想要执行的代码已经在被攻击的程序中了,他只要对代码传递一些参数。例如,攻击代码要求执行 exec(”/bin/sh”) ,而在 libc 库中的代码执行 exec(arg),其中 arg 是字符串的指针参数,攻击者只要把传入的参数指针改向指向“/bin/sh”即可。
2.5.1.4 引起原因
程序员层面: 大多数程序员习惯于假设数据长度总是与所分配的储存空间相匹配。
程序层面:结合原理作答
2.5.1.5 防止
1.栈保护措施 canary机制 2.栈不可执行(NX)3.地址随机化(PIE、ASLR)机制。
2.5.2 口令攻击
获得用户口令的方法还有猜测、字典攻击、暴力破解、利用工具破解等字典攻击:字典攻击的做法是将字典中的大量单词送到函数 crypt()中,看看是否有与/etc/passwd 文件中加密口令相匹配的单词。如果有一个单词与目标口令匹配,则认为口令被破解,并将其相应的明码正文单词保存到文件。
2.5.4 DNS 欺骗
欺骗方法:将用户想要浏览的网页的URL改写为指向攻击者自己的服务器,当用户浏览目标网页的时候,实际上是向攻击者服务器发出请求DNS协议不对转换或信息的更新进行身份认证,攻击者可以将不正确的信息掺进来并把用户引向攻击者自己的主机
防范:用DNS转换得到的IP地址或域名再次作反向转换进行验证
2.5.5 SQL 注入
SQL 注入攻击最常见的原因是动态构造了 SQL 语句,却没有使用正确的参数。
寻找容易受到 SQL 注入攻击的网站的步骤如下:
- 首先寻找动态网站,即那些可以带查询字符串的网站,能够与用户进行动态交互的,这样的网站有很多。例如: http://****?id=144581;
- 给这个网站发送一个请求,改变其中的“id=…”语句,带一个额外的单引号,试图取消其中的 SQL 语句,例如 id=144581’ ;
- 分析返回的回复,在其中查找 “SQL”、 “query”这类关键字,这些往往表示应用返回了详细的错误消息;
- 检查错误消息,如果表示了发送到 SQL 服务器的参数没有被正确加码,就意味着可对该网站进行SQL 注入攻击 。
注入攻击步骤:判定 SQL 注入漏洞2. 分析数据库服务器类型3. 确定 XP_CMDSHELL 可执行情况4. 发现 WEB 虚拟目录5. 上传 ASP 木马6. 得到系统的管理员权限
2.5.6 IIS漏洞
IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。IIS的安全脆弱性曾长时间被业内诟病,一旦IIS出现远程执行漏洞威胁将会非常严重。远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 HTTP 请求时会导致此漏洞。成功利用此漏洞的攻击者可以在系统帐户的上下文中执行任意代码,可以导致IIS服务器所在机器蓝屏或读取其内存中的机密数据。
2.5.7 常见的应用层安全协议
- PGP(Pretty Good Privacy),用于邮件安全2. S-HTTP,Web上使用的超文本传输协议(HTTP)的安全增强版本3. 安全电子交易SET,用于电子商务4. SSH,允许用户安全地登录到远程主机上执行命令或传输文件5. Kerberos,用于客户/服务器环境下网络服务的鉴别等。
2.6 网络病毒与木马
2.6.1 病毒
计算机病毒是指编制或者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机使用并且能够自我复制的一组计算机指令或者程序代码
病毒的特征可以概括为:人为的特制程序,具有自我复制能力,很强的感染性,一定的潜伏性,特定的触发性,很大的破坏性。
2.6.2 特洛伊木马
木马的特点包括隐蔽性、顽固性、潜伏性
2.7 拒绝服务攻击
拒绝服务(DoS,Denial of Service)攻击:耗尽目标主机的资源,使目标主机不能对外提供正常的服务。IGMPNuke、Land、smurf、teardrop、SYN flooding、winnuke、UDP flooding等都属于DoS攻击。
分布式拒绝服务(DDoS,Distributed Denial of Service)是DoS的进一步演化。DDoS引进了client/server机制,增加了分布式的概念。集中几百上千台主机向目标主机进行攻击,使DoS的威力以几十几百倍的程度激增。DDoS囊括了已经出现的各种DoS方法,其破坏能力巨大。
防范:1. 优化路由和网络结构,调整路由表以将拒绝服务攻击的影响减到最小2. 应用路由器的带宽分配技术3. 优化可能成为攻击目标的主机,禁止所有不必要的服务4. 定期扫描漏洞,及时安装补丁程序,定期升级系统软件5. 当检测到DoS时,若发现攻击数据包来自某些ISP时应尽快和他们取得联系5. 负载均衡技术和蜜罐(honeypot)技术。
Ch3 网络身份认证
Ch4 网络访问控制
4.1 访问控制策略
1.自主访问控制(discretionary access control)
DAC缺点:1. 访问控制资源比较分散2. 用户关系不易管理3. 访问授权是可传递的4. 在大型系统中,主、客体的数量庞大,造成系统开销巨大。
- 基于身份的访问控制IBAC(Identity Based Access Control)
- 强制访问控制(mandatory access control),系统根据主体被信任的程度和客体所包含的信息的机密性或敏感程度来决定主体对客体的访问权,可通过给主、客体赋以安全标记来实现。
MAC弱点:①对用户恶意泄露信息无能为力;②基于MAC的应用领域比较窄;③完整性方面控制不够;④过于强调保密性,对系统的授权管理不便,不够灵活。
- 基于角色的访问控制(role-based policies)
RBAC的基本概念包含:把角色集分配给用户集;把许可集分配给角色集;用户集作为角色集的成员获得许可集。一个用户可以分配给不同的角色,一个角色可以拥有多个用户;一个许可权可以拥有不同的角色,一个角色可以拥有不同的许可权。核心RBAC定义了实现RBAC系统所需元素、元素集以及关系的最小集。
RBAC(Rule Based Access Control)优点:1.与策略无关的访问控制技术,可以描述任何安全策略2.容易将现实中的管理方式和安全策略映射到信息系统中 3.便于实施整个组织的的系统安全策略,提高网络服务安全性
4.2 集中式防火墙 – 访问控制技术
缺点:1. 不能防止内部的攻击2. 会限制或者关闭有用而又存在安全隐患的服务3. 不能防止数据驱动型攻击 4. 不能防止绕过防火墙的攻击5. 不能防止带毒文件6. 不能防止新出现的网络安全问题7. 不能解决信息保密性问题
4.2.3 防火墙体系结构
4.2.3.1 包过滤防火墙
原理:包过滤防火墙用路由器实现对所接收的每个数据包做允许或拒绝的决定。路由器审查每个数据包,以便确定其是否与某一条包过滤规则匹配。包的进入接口和出接口如果有匹配并且规则允许该数据包,那么该数据包就会按照路由表中的信息被转发。如果匹配并且规则拒绝该数据包,那么该数据包就会被丢弃。如果没有匹配规则,用户配置的缺省参数会决定是转发还是丢弃数据包。
数据包过滤检查网络层的IP头和传输层的头:1.IP源地址2.IP目标地址3.传输层协议类型(TCP包、UDP包和ICMP包)4. TCP或UDP包的目的端口5.TCP或UDP包的源端口6.ICMP消息类型7.TCP包头的确认位(ACK位)8.TCP包的序号、确认序号等
优点:速度快,性能高、对用户透明
缺点: 1. 维护比较困难,定义数据包过滤器比较复杂,需要管理员对TCP/IP深入了解2. 安全性低( IP欺骗:外部主机伪装其他可信任外部主机的IP)3. 不能提供完整的日志4. 不防范数据驱动型攻击5. 无法对网络上流动的信息提供全面的控制6. 吞吐量会受影响7. 不支持用户认证方式
针对包过滤防火墙的攻击:
- IP地址欺骗,假冒内部的IP地址,对策:在外部接口上禁止内部地址,有效防止外部冒充内部的IP欺骗,但还是不能防止内部的IP欺骗
- 源路由攻击,使用源指定路由,对策:禁止源站选路选项
- 小碎片攻击,利用IP分片功能把TCP头部切分到不同的分片中,对策:丢弃分片太小的分片
- 利用复杂协议和管理员的配置失误进入防火墙,例如,利用ftp协议对内部进行探查
4.2.3.2 双重宿主主机防火墙
原理:双重宿主主机至少有两个网络接口,位于内部网络和外部网络之间。双宿主机防火墙体系禁止网络层的转发功能,完全阻止了内外网络之间的IP层通信。网络间的通信可通过应用层数据共享或应用层代理服务实现。
双宿主机的服务方式:1. 用户直接登录到双重宿主主机上,要在双宿主机上开许多帐号,不安全2. 在双重宿主主机上运行代理服务器,要访问外部站点时,必须先经过代理服务器认证,才可以通过代理访问因特网。如HTTP,SMTP这些存储转发型服务很适合于进行代理。
优点:节约IP地址、缓存,加快速度、安全可靠、过滤日志
缺点:灵活性差、对主机的依赖性高
4.2.3.3 屏蔽主机防火墙
原理:屏蔽主机防火墙由包过滤路由器和堡垒主机组成。包过滤路由器配置在内部网和外部网之间,堡垒主机配置在内部网络上。在路由器上进行规则配置,使得外部系统只能访问堡垒主机,到内部系统其他主机的信息全部被阻塞。内部系统是否允许直接访问Internet,或者是要求使用堡垒主机上的代理服务来访问Internet由机构的安全策略来决定。
优点:安全性更高,双重保护:实现了网络层安全(包过滤)和应用层安全(代理服务)
缺点:1. 过滤路由器能否正确配置是安全与否的关键2. 过滤路由器的路由表应严格保护,如果遭到破坏,则数据包就不会被路由到堡垒主机上,堡垒主机将被绕过,整个内部网络对侵袭者就是开放的。
4.2.3.4 屏蔽子网防火墙
原理:用两个包过滤路由器和一个堡垒主机。周边网络是处于Internet和内部网络之间的防护层。包含堡垒主机和一些信息服务器,可能会受到攻击,因此又被称为非军事区网络(DMZ网络)。堡垒主机位于DMZ内,是整个防御体系的核心,可被认为是应用层网关,可以运行各种代理服务程序。屏蔽子网体系结构在本质上与屏蔽主机体系结构一样,但添加了额外的一层保护体系——边界网络。堡垒主机位于边界网络上,边界网络和内部网络被内部过滤路由器分开。
- 对于进来的信息,外部路由器用于防范通常的外部攻击(如IP欺骗),并管理外部网到DMZ网络的访问,它只允许外部系统访问堡垒主机。
内部路由器提供第二层防御,管理DMZ网络到内部网的访问,只接受来自堡垒主机的数据包。
- 对于出去的信息,内部路由器管理内部网到DMZ网络的访问,它允许内部系统只访问堡垒主机。外部路由器管理DMZ网络到外部网的访问,只接受来自堡垒主机的数据包。
优点:安全性更高,支持网络层和应用层安全功能。
DMZ网络的作用:即使堡垒主机被入侵者控制,也只能侦听周边网络的数据,而不能侦听到内部网的数据。因为内部路由器会阻止内部网络上的数据包流入DMZ网络。
4.3 分布式防火墙
集中式防火墙的缺陷:1. 防外不防内:传统防火墙一般位于网络的入口处,对于外来的攻击可以有效地抵制,但是对于网络内部的攻击却是无能为力。传统防火墙是基于这样一个假设,即每一个外部用户都是一个潜在的敌人,而内部用户均是可信任的。然而实际环境中,大多数的攻击来自于内部,即使用户是诚实可靠的,一些恶意的病毒,蠕虫代码亦会将诚实的用户变成一个不知情的攻击者。
- 瓶颈问题:防火墙位于网络的接入口,其吞吐量直接影响网络的性能。虽然计算机硬件的处理能力在不断提高,但是更快的网络速度和更复杂的协议相结合产生的效果对防火墙的计算能力提出了严峻的挑战,使得防火墙易成为网络的瓶颈和单点失效点。
- 易被绕过:现在计算机接入网络的方式多种多样,人们可以很轻易地建立一个非授权的接入点。各种隧道技术、无线接入技术和拨号访问都可以绕过防火墙的安全机制。纵然防火墙的策略定义得很完善,对它无法控制的接入也是无可奈何。对于这种网络外部的远程访问,亟需一种行之有效的保护和防范措施。
- 端到端的加密对传统防火墙也是一个威胁:传统防火墙的分组过滤方法需要察看分组包头的信息来进行过滤,防火墙无法从加密的报文中获取其所需的信息。
- 策略的制定和维护复杂:传统防火墙根据网络的拓扑结构制定规则。在大型的网络中,往往有多个接入点和内部防火墙,这使得策略管理非常复杂,一般没有一种通用的管理机制,通常主要依靠网络管理员的能力和经验。
分布式防火墙的提出:传统防火墙的很多缺陷主要集中在依赖于网络拓扑结构和单一接入控制。在这种模式下,策略仍是由一个中心统一定义,而策略的执行却是由各个端结点完成。如此便消除了单一接入点,内网外网的划分并不依赖于网络的拓扑结构,因此内网的定义具有更多的逻辑意义,可以包含局域网内无线接入的用户、拨号用户、通过 VPN 连接的用户,而不仅限于传统意义上某个房间或某栋建筑中的网络。相应地,防火墙的策略也不需按照网络拓扑结构来制定访问控制列表,管理员可以更专注于对被保护的对象来制定规则。
分布式防火墙解决的问题:这种分布式防火墙最大的优点是防火墙不再受限于拓扑结构,并且将单点防护变成了多点防护,即全民皆兵,从而大大提高了防护能力和数据交换效率。同时,分布式防火墙不会再有边界防火墙存在的瓶颈问题,吞吐量不再受防火墙的速率限制,某一点的连接失败不再会隔离整个网络。
4.3.2 PPT题目
所有返回数据包目的IP都是200.0.0.1,防火墙如何识别并送回真正主机?
1、防火墙记住所有发送包的目的端口2、防火墙记住所有发送包的TCP序列号
Ch5 虚拟专用网技术
5.2 VPN连接类型
- 内联网虚拟专用网络(在公司总部和它的分支机构之间建立VPN)
内联网VPN服务器主要功能:1. 认证用户的身份。保证只有合法用户才能通过VPN隧道进行数据访问2. 信息加密,VPN服务器之间形成加密隧道,保证信息传输的机密性。
- 远程访问虚拟专用网络(在公司总部和远地雇员之间建立VPN)
- 外联网虚拟专用网络(在公司与商业伙伴、顾客、供应商、投资者之间建立VPN)。
5.3 数据链路层 VPN 协议
第二层(数据链路层)隧道协议:L2TP 、PPTP
5.4 网络层 VPN 协议
第三层(网络层)隧道协议:GRE、IPSec、MPLS
IPSec体系结构:IETF IPsec工作组制定。设计目标是在IPv4和IPv6环境中为网络层流量提供灵活的安全服务。IPSec不是某种特殊的加密算法或认证算法,也没有在它的数据结构中指定某种特殊的加密算法或认证算法,IPSec是开放的框架结构,定义在IP数据包格式中,为目前流行的数据加密或认证的实现提供数据结构,为这些算法的实现提供统一的体系结构,有利于数据安全方面的措施进一步发展和标准化,不同的加密算法都可以利用IPSec定义的体系结构在网络数据传输过程中实施
IPSec协议两种模式:
隧道模式:用于安全网关之间的连接,只能用于封装ip协议,不能用于其他协议,对整个原始的ip报文加密,开销大。传输模式:用于点对点连接,仅对净荷进行加密。
IPSec协议安全服务包括:数据加密、数据完整性、数据源认证、重放攻击保护。
IPSec包括安全协议部分(定义对通信的安全保护机制)和密钥协商部分(定义如何为安全协议协商安全参数、对通信实体的身份进行鉴别)
IPSec安全协议部分:
ESP机制为通信提供数据加密,数据完整性,数据源认证,防重放攻击;适合用户保密性要求高的时候,封装安全有效载荷(ESP Encapsulation security payload)确保IP数据包的机密性、数据的完整性以及数据源的身份验证,覆盖了为了包加密(可选身份验证)与ESP的使用相关的包格式和常规问题。
AH机制为通信提供数据完整性,数据源认证,防重放攻击;适合用户保密性要求不高的时候,AH机制不提供加密功能;验证头(AH Authentication Header)包含使用AH进行包身份验证相关的包格式和一般问题,加密算法:描述各种加密算法如何用于ESP中,验证算法:描述各种身份验证算法如何用于AH中和ESP身份验证选项。
**IPSec密钥协商部分:**使用IKE(Internet Key Exchange)协议实现安全协议的自动安全参数协商。安全参数包括加密及鉴别算法、加密及鉴别密钥、通信的保护模式(传输或隧道模式)、密钥的生存期等。
IPSec协议存在问题:1. IKE协议的安全性2. 与现有网络机制的兼容性3. 缺乏对远程拨号接入的支持4. 不支持组播、多协议
IPSec的总体评价:优点:安全性明显优于其它隧道协议,缺点:过于复杂、存在安全漏洞、安全性分析困难,根本的解决方案:IPSec修补不能解决根本问题,必须彻底改变制定IPSec的委员会模式。
几种隧道技术比较:
应用范围:PPTP、L2TP:主要用在远程客户机访问局域网方案中;IPSec:主要用在网关到网关或主机方案中,不支持远程拨号访问。
安全性:PPTP提供认证和加密功能,但安全强度低;L2TP提供认证和对控制报文的加密,但不能对传输中的数据加密;IPSec提供了完整的安全解决方案。
5.6 会话层VPN协议:Socks v5
- 应用客户端向SOCKS v5服务器发送一个认证方法列表,里面包含了它所支持的所有认证方法;
SOCKS v5服务器检查服务器安全策略,如果客户端提供的认证方法列表中有适合服务器已经定义好的安全策略的方法,SOCKS 服务器选择一个认证方法;如果没有,放弃本次通信
- SOCKS服务器选择好一个认证方法后,它发送给客户端一个应答说明它选择了哪一个方法和客户端进行认证,应用客户端和SOCKS服务器之间的认证过程开始
- 认证结束后,应用客户端发送请求给SOCKS服务器,请求中包含了客户端想要连结的应用服务器的地址和端口
- SOCKS服务器开始发送请求给客户请求的应用服务器。如果使用的是TCP的话,SOCKS 服务器和应用服务器进行通信并且在应用客户端和应用服务器之间建立一条代理电路。代理电路建立之后,SOCKS服务器将会通知应用客户端
- 随着代理电路的建立,应用客户端和应用服务器端开始进行通信。SOCKS服务器截获每一次来自客户端和应用服务器端的数据并且在它们之间进行数据的转发
缺点:1. 冗余的安全,每个层次进行加密处理2. 不支持ICMP报文转发,Ping 将不会通过SOCKS防火墙工作,防火墙将SOCKS和其他的安全特性结合起来使用,增加了一个“ICMP代理”来透明的传递Ping(或其它的ICMP报文)消息3. 错误的状态将不会被广播给正在执行的应用程序4. 不支持多路广播,不支持IP/UDP多路广播。IP多路广播技术在一台主机加入或者离开一个“多点传送地址组”的时候使用Internet组管理协议(IGMP:位于网络层)发出通知。解决方法:创建一个真正的多点广播代理,用它作为一个多点广播通信的特别通道。
Ch6 入侵检测技术
入侵检测是指对入侵行为的发觉。通过在计算机网络或系统中的若干关键点收集信息并进行分析,判断网络或系统中是否有违反安全策略的行为和被攻击的迹象。入侵检测系统(IDS, Intrusion Detection System),是完成入侵检测功能的软件、硬件及其组合,试图检测、识别和隔离“入侵”企图或计算机的不恰当未授权使用。
6.1 基于主机的入侵检测系统HIDS
监视并分析主机的审计记录和日志文件。
检测内容:系统调用、端口调用、系统日志、安全审记、应用日志、敏感文件、目录
优点:性价比高 检测全面 能够快速定位 视野集中 易于用户自定义 保护更加周密 对网络流量不敏感
6.2 基于网络的入侵检测系统NIDS
通过网络适配器或其他特殊硬件监视并分析所有原始网络包。
检测内容:包头信息+有效数据部分(数据包=包头信息+有效数据部分)
优点:在共享网段上对通信数据进行侦听采集数据 主机资源消耗少 提供对网络通用的保护 检测速度快 隐蔽性好 攻击者不易转移证据 与操作系统无关
存在问题:如何适应高速网络环境、非共享网络上如何采集数据
6.3 基于应用的入侵检测系统
基于主机入侵检测系统的特例。用监控传感器监控某软件应用程序的日志文件。
6.5 入侵防御系统IPS
类型:1. 防火墙与IDS联动:策略制定模块首先接受入侵检测系统检测出的事件,并参照策略知识库中的规则,决定对安全事件的响应策略,然后将用某种中间语言描述的响应策略发送给防火墙,防火墙作为策略执行模块负责对其解释并执行2. 在线网络入侵检测系统:传统NDS工作在旁路,监听网络流量副本,而在线NIDS位于内外网之间,对所有进出网络的数据进行检查。3. 七层交换机
比较:1. NIPS与NIDS相比,NIPS根据特定的服务和特定的操作系统设置一系列的规则,其构建的规则链表效率大为提高。NIDS大多采用将网卡设置成混杂模式进行数据包的接收,而NIPS根据规则的设定,只需要检测通过其系统的数据包,能够提高入侵检测的资源利用率,减少误报,便于系统维护。2. NIPS与传统防火墙相比,NIPS对数据包的控制能力大大加强,对应用层和高层协议的检测能力有了质的飞跃。同时人侵检测技术能实时、有效地和防火墙的阻断功能结合,大大简化了系统管理员的工作,提高了系统的安全性。
实验
1 scanner
1.1 思路
采用TCP Connect方式扫描,如果能与目标端口成功建立连接则目标端口开放。
1.2 核心代码
//创建socket
connectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// socket设置为非阻塞
int flags = fcntl(connectSocket, F_GETFL, 0);
//尝试连接
int ret = connect(connectSocket, (struct sockaddr *)&clientService, sizeof(clientService));
ret = select(connectSocket + 1, NULL, &writeset, NULL, &tv);
2 sniffer
2.1核心代码
Int fd = socket(AF_INET, SOCK_PACKET, htons(0x800));
S = Ioctl(fd, SIOCGIFFLAGS, &ifr);
If (seccess)
receive_packet()
read_packet();
close(fd);
2.2思路
- 设置混杂模式,用ioctl()函数可以设置
- 打开一个packet socket
Packet_socket = socket(PF_PACKET, int socket_type, int protocol);
int net = socket(AF_INET, SOCK_STREAM, 0);//创建socket标识符
struct sockaddr_in sa;
int err = connect(net, (struct sockaddr *)&sa, sizeof(sa));//建立连接
以前的做法:socket(AF_INET, SOCK_PACKET, protocol)
- 不同的UNIX或者Linux版本可能会有不同的函数调用,本质上分成2步:
1)打开一个socket(或者通过open打开一个设备)
2)通过ioctl() 或者setsockopt()设置为混杂模式
采用RAW SOCKET方式获取二层数据包,随后拆开数据链路层输出双方mac地址,并将payload传入下一层拆包拆出IP头和IP层payload。随后根据IP头中解析出来的Protocol选择合适的协议解析过程进行具体的解析。
2.3关键接口调用
int sr = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); //创建socket标识符
unsigned char *buffer = (unsigned char *)malloc(2048);
struct sockaddr saddr;
int saddr_size = sizeof(saddr);
recvfrom(sr, buffer, 2048, 0, &saddr, (socklen_t *)&saddr_size);//获取数据链路层数据包
/* 获取MAX首部 */
struct ether_header *ethhdr = (struct ether_header *)buffer;//具体操作看结构体
/* 获取IP首部 */
struct iphdr *iph = (struct iphdr *)buffer;//具体操作看结构体
/* 获取TCP首部 */
struct iphdr *iph = (struct iphdr *)buffer;
unsigned short iphdrlen = iph->ihl * 4;
struct tcphdr *tcph = (struct tcphdr *)(buffer + iphdrlen);//具体操作看结构体
/* 获取UDP首部 */
struct iphdr *iph = (struct iphdr *)buffer;
unsigned short iphdrlen = iph->ihl * 4;
struct udphdr *udph = (struct udphdr *)(buffer + iphdrlen);//具体操作看结构体