保证信息的机密性、完整性、不可否认性和可用性:1.机密性:可以通过加密来处理2. 完整性:不允许数据在传输过程中被修改3. 不可否认性:防止时候抵赖,可以通过数字签名解决4. 可用性:通过冗余方式
保护(Protect):采用可能采取的手段保障信息的保密性、完整性、可用性、可控性和不可否认性。
检测(Detect):利用高技术提供的工具检查系统存在的可能提供黑客攻击、白领犯罪、病毒泛滥的脆弱性。
反应(React):对危及安全的事件、行为、过程及时作出响应处理,杜绝危害的进一步蔓延扩大,力求系统尚能提供正常服务。
恢复(Restore):一旦系统遭到破坏,尽快恢复系统功能,尽早提供正常的服务。
物理层, 只支持数据保密服务,保证信息流安全;
链路层, 只支持数据保密服务,实现链路层的面向连接和无连接两种服务的加密;
网络层, 对等实体认证服务、访问控制服务、数据保密服务、数据完整性服务、数据源点认证服务等;
会话层, 不提供安全服务;
表示层, 除信息流安全服务、有恢复连接完整性和无恢复连接完整性之外所有其他服务;
应用层, 原则上能够支持所有安全服务。
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 B
1. CLOSED LISTEN
2. SYN-SENT --> <SEQ=100><CTL=SYN> --> SYN-RECEIVED
3. ESTABLISHED <-- <SEQ=300><ACK=101><CTL=SYN,ACK> <-- SYN-RECEIVED
4. ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK> --> ESTABLISHED
5. 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
状态,此时双方还没有完全建立连接。服务器会把这种状态下请求连接放在一个队列里,我们把这种队列称之为半连接队列。
当然还有一个全连接队列,就是已经完成三次握手,建立起连接的就会放在全连接队列中。如果队列满了就有可能会出现丢包现象。
网络层核心协议 IP 以分组转发的方式从源主机向目的主机传送数据,在整个过程中网络上传输的都是明文的数据,并且它仅依赖 IP 地址来验证源主机和目的主机,缺乏更有效的安全认证和保密机制;在传输层提供TCP和UDP两种协议,面向连接的TCP在建立连接时虽然采用了“三次握手”的机制,但TCP 连接也能被欺骗、截取和操纵;UDP 协议则更容易受到 IP 源路由和拒绝服务的攻击;应用层的 Finger、 FTP、 Telnet、 SMTP、 DNS、 SNMP、 HTTP 等协议也都存在着与安全有关的认证、访问控制、完整性、保密性等问题;
互联网的开放性是导致网络安全威胁最根本的原因。
根据攻击针对的 TCP/IP 参考模型的不同层次,可分为:
根据攻击时是否主动修改信息,可分为:
度)推断出有用的信息,比如主机的位置,业务的变化等等。
以太网卡的 MAC 地址在系统初始化时被读入寄存器,发送数据帧时自动作为源物理地址,在接收到数据帧时同样自动比较该物理地址与数据帧的目的物理地址。因此,如果通过底层的 I/O 操作修改寄存器中的 MAC 地址,即把机器的 MAC 地址改为其它被信任的友好主机的 MAC 地址,就可以以其友好主机的身份与其他主机通信,这就是“MAC 地址欺骗”。有多种方法来修改 MAC 地址:
追踪综合布线以确定没有非授权的机器挂接在网络上;
确保线路上已授权的机器使用自身的MAC地址,即配置MAC地址和端口的映射。
电磁信息泄漏:指电子设备的杂散(寄生)电磁能量通过导线或空间向外扩散。
防范:只有强度和信噪比满足一定条件的信号才能够被截获和还原。因此,只要采取措施,弱化泄漏信号的强度,减小泄漏信号的信噪比,就可以达到电磁防护的目的。
电磁防护措施:屏蔽、滤波、隔离、合理的接地与良好的搭接、选用低泄漏设备、合理的布局和使用干扰器等。
网络监听是指获取在网络上传输的、并非发给自己计算机的信息。传统以太网:共享信道,任何主机发送的每一个以太网帧都会到达别的与该主机处于同一网段的所有主机的以太网接口。使用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协议。
重放攻击(Replay Attacks)又称重播攻击、回放攻击或新鲜性攻击(Freshness Attacks)等,是指攻击者向目的主机(A)发送一个或多个 A 已接收过的包(特别是在认证的过程中,用于认证用户身份所接收的包,这个包往往是其他主机所发出的合法认证包)。重放攻击会不断恶意或欺诈性地重复发起一
个有效的数据传输,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的安全性。
防范:
常用的网络相关命令:
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 序列号。
防范:路由设置、捆绑、防止源路由
在具体物理网络中,数据链路层协议对于帧的最大长度都有限制,即存在最大传输单元(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碎片,一些老的系统内核在处理的时候就会出现问题,导致崩溃或者拒绝服务。另外,如果分片之间偏移量经过精心构造,一些系统就无法处理,导致死机。所以说,漏洞的起因是出在重组算法上。
防范:
如果ip数据报太大,超过MTU,数据包就会分片,然后通过ip首部的片偏移来标识各个片段的顺序。
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|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
防范:
1.禁止不必要的ICMP, 严格限制ICMP报文的作用范围2.禁止未经请求主动提供的ICMP应答数据包3.严格限制ICMP重定向报文的应用范围, 即如果主机目前没有数据要发送到相应站点,就不按照收到的重定向报文改变路由表4.主机与其他路由器的全局路由表也不能以重定向报文为依据修改等。
Internet 中 IP 包的传输路径完全由路由表决定,主机的路由表可以依据 ICMP 重定向报文而改变,路由器的路由表则要依据路由协议的路由更新报文来修改。前者属于 ICMP 攻击,后者则属于路由欺骗。
RIP(Routing information Protocol)协议是早期用于自治域内传播路由信息的路由协议,路由器需要定时向它的相邻路由器们发送本地的 RIP 路由更新信息。由于 RIP v1.0 中没有提供对 RIP 数据包发送者的认证机制,所以其他路由器在收到更新 RIP 数据包时一般不作检查,这也给了攻击者可趁之机。攻击者可以声称他所控制的路由器 A 可以最快地到达某一站点 B,从而诱使发往 B 的数据包由 A中转。由于A受攻击者控制,攻击者可侦听、篡改数据。
防范:
1.路由器在接受新路由前应先验证其是否可达,降低受此类攻击的概率。
2.路由信息在网上可见,随着假路由信息在网上的传播范围扩大,其被发现的可能性也在增大。经常检查日志文件会有助于发现此类问题
3.对RIP包进行身份认证,杜绝假冒路由器,但在广播型的协议中比较难实现
如果发送方进行了源路由欺骗,比如说,C进行源路由欺骗,伪装成B的ip地址,给服务器A发送了一个包。此时A收到包后发现要返回信息,正常的话因为发送栏地址是B,应该返回给B 但是由于源路由信息记录了来时的路线,反推回去就把应该给B的信息给了C,而A没有意识到问题,B对此一无所知,C拿到了B才能拿到的信息
防范:
1.配置好路由器,抛弃那些由外部网进来的却声称是内部主机的报文;
2.关闭主机和路由器上的源路由功能。
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? - 华为
假设在一个LAN里,只有三台主机A、B、C,且C是攻击者。
有三台主机:
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缓存来达到欺骗的目的。
具体步骤如下:
原理:端口是TCP/IP体系中传输层的服务访问点,传输层到某端口的数据都被相应绑定到该端口的进程接收。
攻击者试图和目标主机的一系列端口(一般是保留端口和常用端口)建立连接或请求通信,若目标机有回应,则打开了相应的应用程序或服务,攻击者就可以使用应用层的一些攻击手段。
端口扫描技术有:
TCP扫描优点: 1.入侵者不需要任何权限,系统中的任何用户都有权利使用这个调用2. 速度快。如果对每个目标端口以串行的方式使用单独的connect()调用,需要较长的时间;然而,人侵者可以通过同时打开多个套接字加速扫描。使用非阻塞I/O允许人侵者设置一个低的时间用尽周期,同时观察多个套接字。
缺点:1. 很容易被发觉,并且被过滤掉2. 目标计算机的日志文件也会记录一连串的连接和连接是否出错的服务消息,并且能很快地关闭连接。
一般扫描检测器的实现原理是通过监视某个时间段里一台特定主机被连接的数目来决定是否在被扫描,攻击者可以通过使用扫描速度慢一些的扫描软件进行扫描,使检测软件判断不出它在进行扫描。
端口扫描防范:1.需要进行统计分析,即在单位时间内发现接收到超过上限数目的以扫描端口为目的的数据包请求时,判断为发现端口扫描攻击。2.可以在一段较长时间内对此类请求数据包进行联合分析,若发现某特定时间段内主机较为均匀地接受到此类数据包请求,则判断为慢速扫描。
原理:TCP协议采用确认重传机制保证数据流的可靠性,确认以TCP的序号字段为基础。
TCP在使用三次握手机制建立连接时的初始序号有一定的随机性,但是依据其实现机制不同,可对TCP初始序号进行预测。
产生初始序列号的方法:
1.64K规则:每秒用一常量(12800)增加初始序列号,如果有某一个连接启动,则用另一个常量(64000)增加序列号计数器。2. 与时间相关的产生规则:允许序列号产生器产生与时间相关的值。在计算机自举时产生初始值,依照每台计算机各自的时钟增加。由于各计算机上的时钟并不完全相等,增大了序列号的随机性3. 伪随机数产生规则:操作系统使用伪随机数产生器产生初始序列号,此方法无法预测
原理:利用TCP连接三次握手过程,打开大量的半开TCP连接,使得目标机器不能进一步接受TCP连接。每个机器都需要为这种半开连接分配一定的资源,并且,这种半开连接的数量是有限制的,达到最大数量时,机器就不再接受进来的连接请求。
防范:
分类:
1.非盲攻击:攻击者和被欺骗的目的主机在同一个网络上,攻击者可以简单地使用协议分析器(嗅探器)捕获TCP报文段,从而获得需要的序列号。攻击步骤如下:
2.盲攻击:由于攻击者和被欺骗的目标主机不在同一个网络上,攻击者无法使用嗅探器捕获TCP报文段。攻击步骤与非盲攻击几乎相同,在第三步用TCP初始序列号预测技术得到初始序列号。第五步,攻击者X可以发送第一个数据包,但收不到A的响应包,难实现交互。
防范:1.使用伪随机数发生器产生TCP初始序号2.路由器拒绝来自外网而源IP是内网的数据包3. TCP报文加密
FIN flooding:攻击者利用僵尸网络发送大量的变源变端口FIN报文攻击,这些攻击到达依靠会话转发的设备上,很容易导致转发设备性能降低甚至会话耗尽造成网络瘫痪,从而拒绝正常服务。
预防FIN flooding:启动会话检查。如果检查到FIN报文没有命中会话,直接丢弃报文。如果检查到FIN报文命中会话,则根据会话创建原因和会话检查结果来判断该报文是否通过
FIN攻击:攻击者构造好TCP报文段后向目标主机发送,目标主机接收之后,将不再接收被欺骗主机以后发送来的数据,认为在FIN包之后的数据是由网络错误造成的。
缓冲区溢出是指计算机向缓冲区内填充数据位数超过缓冲区本身的容量,溢出的数据覆盖了其他程序或系统的合法数据。缓冲区可以设在堆栈(stack,自动变量)、堆(heap,动态分配的内存区)或静态资料区。最为危险的是堆栈溢出危害:1.在函数返回时改变返回程序的地址,跳转到任意地址,执行恶意代码2. 系统崩溃导致拒绝服务3. 执行非授权指令4. 取得系统特权。预防:严格申请足够的缓冲区长度,检查数据长度,不允许超过缓冲区长度的数据存入缓冲区。
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 连接等。
当程序中发生函数调用时,步骤如下:
在上面的小例子中,从 buf 开始的 256 个字节都将被str 的内容 A 覆盖,包括 sfp、 ret,甚至str。而A的十六进值为 0x41,所以函数的返回地址变成了 0x41414141,超出了程序的地址空间,所以会出现段错误 Segmentation fault (core dumped) 。
下一步,在溢出的缓冲区中写入想执行的代码,再覆盖返回地址( ret)的内容,使它指向缓冲区的开头,就可以达到运行其它指令的目的 。如果攻击者想要执行的代码已经在被攻击的程序中了,他只要对代码传递一些参数。例如,攻击代码要求执行 exec(”/bin/sh”) ,而在 libc 库中的代码执行 exec(arg),其中 arg 是字符串的指针参数,攻击者只要把传入的参数指针改向指向“/bin/sh”即可。
程序员层面: 大多数程序员习惯于假设数据长度总是与所分配的储存空间相匹配。
程序层面:结合原理作答
1.栈保护措施 canary机制 2.栈不可执行(NX)3.地址随机化(PIE、ASLR)机制。
获得用户口令的方法还有猜测、字典攻击、暴力破解、利用工具破解等字典攻击:字典攻击的做法是将字典中的大量单词送到函数 crypt()中,看看是否有与/etc/passwd 文件中加密口令相匹配的单词。如果有一个单词与目标口令匹配,则认为口令被破解,并将其相应的明码正文单词保存到文件。
欺骗方法:将用户想要浏览的网页的URL改写为指向攻击者自己的服务器,当用户浏览目标网页的时候,实际上是向攻击者服务器发出请求DNS协议不对转换或信息的更新进行身份认证,攻击者可以将不正确的信息掺进来并把用户引向攻击者自己的主机
防范:用DNS转换得到的IP地址或域名再次作反向转换进行验证
SQL 注入攻击最常见的原因是动态构造了 SQL 语句,却没有使用正确的参数。
寻找容易受到 SQL 注入攻击的网站的步骤如下:
注入攻击步骤:判定 SQL 注入漏洞2. 分析数据库服务器类型3. 确定 XP_CMDSHELL 可执行情况4. 发现 WEB 虚拟目录5. 上传 ASP 木马6. 得到系统的管理员权限
IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。IIS的安全脆弱性曾长时间被业内诟病,一旦IIS出现远程执行漏洞威胁将会非常严重。远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 HTTP 请求时会导致此漏洞。成功利用此漏洞的攻击者可以在系统帐户的上下文中执行任意代码,可以导致IIS服务器所在机器蓝屏或读取其内存中的机密数据。
2.6 网络病毒与木马
计算机病毒是指编制或者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机使用并且能够自我复制的一组计算机指令或者程序代码
病毒的特征可以概括为:人为的特制程序,具有自我复制能力,很强的感染性,一定的潜伏性,特定的触发性,很大的破坏性。
木马的特点包括隐蔽性、顽固性、潜伏性
拒绝服务(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)技术。
1.自主访问控制(discretionary access control)
DAC缺点:1. 访问控制资源比较分散2. 用户关系不易管理3. 访问授权是可传递的4. 在大型系统中,主、客体的数量庞大,造成系统开销巨大。
MAC弱点:①对用户恶意泄露信息无能为力;②基于MAC的应用领域比较窄;③完整性方面控制不够;④过于强调保密性,对系统的授权管理不便,不够灵活。
RBAC的基本概念包含:把角色集分配给用户集;把许可集分配给角色集;用户集作为角色集的成员获得许可集。一个用户可以分配给不同的角色,一个角色可以拥有多个用户;一个许可权可以拥有不同的角色,一个角色可以拥有不同的许可权。核心RBAC定义了实现RBAC系统所需元素、元素集以及关系的最小集。
RBAC(Rule Based Access Control)优点:1.与策略无关的访问控制技术,可以描述任何安全策略2.容易将现实中的管理方式和安全策略映射到信息系统中 3.便于实施整个组织的的系统安全策略,提高网络服务安全性
缺点:1. 不能防止内部的攻击2. 会限制或者关闭有用而又存在安全隐患的服务3. 不能防止数据驱动型攻击 4. 不能防止绕过防火墙的攻击5. 不能防止带毒文件6. 不能防止新出现的网络安全问题7. 不能解决信息保密性问题
原理:包过滤防火墙用路由器实现对所接收的每个数据包做允许或拒绝的决定。路由器审查每个数据包,以便确定其是否与某一条包过滤规则匹配。包的进入接口和出接口如果有匹配并且规则允许该数据包,那么该数据包就会按照路由表中的信息被转发。如果匹配并且规则拒绝该数据包,那么该数据包就会被丢弃。如果没有匹配规则,用户配置的缺省参数会决定是转发还是丢弃数据包。
数据包过滤检查网络层的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层通信。网络间的通信可通过应用层数据共享或应用层代理服务实现。
双宿主机的服务方式:1. 用户直接登录到双重宿主主机上,要在双宿主机上开许多帐号,不安全2. 在双重宿主主机上运行代理服务器,要访问外部站点时,必须先经过代理服务器认证,才可以通过代理访问因特网。如HTTP,SMTP这些存储转发型服务很适合于进行代理。
优点:节约IP地址、缓存,加快速度、安全可靠、过滤日志
缺点:灵活性差、对主机的依赖性高
原理:屏蔽主机防火墙由包过滤路由器和堡垒主机组成。包过滤路由器配置在内部网和外部网之间,堡垒主机配置在内部网络上。在路由器上进行规则配置,使得外部系统只能访问堡垒主机,到内部系统其他主机的信息全部被阻塞。内部系统是否允许直接访问Internet,或者是要求使用堡垒主机上的代理服务来访问Internet由机构的安全策略来决定。
优点:安全性更高,双重保护:实现了网络层安全(包过滤)和应用层安全(代理服务)
缺点:1. 过滤路由器能否正确配置是安全与否的关键2. 过滤路由器的路由表应严格保护,如果遭到破坏,则数据包就不会被路由到堡垒主机上,堡垒主机将被绕过,整个内部网络对侵袭者就是开放的。
原理:用两个包过滤路由器和一个堡垒主机。周边网络是处于Internet和内部网络之间的防护层。包含堡垒主机和一些信息服务器,可能会受到攻击,因此又被称为非军事区网络(DMZ网络)。堡垒主机位于DMZ内,是整个防御体系的核心,可被认为是应用层网关,可以运行各种代理服务程序。屏蔽子网体系结构在本质上与屏蔽主机体系结构一样,但添加了额外的一层保护体系——边界网络。堡垒主机位于边界网络上,边界网络和内部网络被内部过滤路由器分开。
内部路由器提供第二层防御,管理DMZ网络到内部网的访问,只接受来自堡垒主机的数据包。
优点:安全性更高,支持网络层和应用层安全功能。
DMZ网络的作用:即使堡垒主机被入侵者控制,也只能侦听周边网络的数据,而不能侦听到内部网的数据。因为内部路由器会阻止内部网络上的数据包流入DMZ网络。
集中式防火墙的缺陷:1. 防外不防内:传统防火墙一般位于网络的入口处,对于外来的攻击可以有效地抵制,但是对于网络内部的攻击却是无能为力。传统防火墙是基于这样一个假设,即每一个外部用户都是一个潜在的敌人,而内部用户均是可信任的。然而实际环境中,大多数的攻击来自于内部,即使用户是诚实可靠的,一些恶意的病毒,蠕虫代码亦会将诚实的用户变成一个不知情的攻击者。
分布式防火墙的提出:传统防火墙的很多缺陷主要集中在依赖于网络拓扑结构和单一接入控制。在这种模式下,策略仍是由一个中心统一定义,而策略的执行却是由各个端结点完成。如此便消除了单一接入点,内网外网的划分并不依赖于网络的拓扑结构,因此内网的定义具有更多的逻辑意义,可以包含局域网内无线接入的用户、拨号用户、通过 VPN 连接的用户,而不仅限于传统意义上某个房间或某栋建筑中的网络。相应地,防火墙的策略也不需按照网络拓扑结构来制定访问控制列表,管理员可以更专注于对被保护的对象来制定规则。
分布式防火墙解决的问题:这种分布式防火墙最大的优点是防火墙不再受限于拓扑结构,并且将单点防护变成了多点防护,即全民皆兵,从而大大提高了防护能力和数据交换效率。同时,分布式防火墙不会再有边界防火墙存在的瓶颈问题,吞吐量不再受防火墙的速率限制,某一点的连接失败不再会隔离整个网络。
所有返回数据包目的IP都是200.0.0.1,防火墙如何识别并送回真正主机?
1、防火墙记住所有发送包的目的端口2、防火墙记住所有发送包的TCP序列号
内联网VPN服务器主要功能:1. 认证用户的身份。保证只有合法用户才能通过VPN隧道进行数据访问2. 信息加密,VPN服务器之间形成加密隧道,保证信息传输的机密性。
第二层(数据链路层)隧道协议:L2TP 、PPTP
第三层(网络层)隧道协议: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提供了完整的安全解决方案。
SOCKS v5服务器检查服务器安全策略,如果客户端提供的认证方法列表中有适合服务器已经定义好的安全策略的方法,SOCKS 服务器选择一个认证方法;如果没有,放弃本次通信
缺点:1. 冗余的安全,每个层次进行加密处理2. 不支持ICMP报文转发,Ping 将不会通过SOCKS防火墙工作,防火墙将SOCKS和其他的安全特性结合起来使用,增加了一个“ICMP代理”来透明的传递Ping(或其它的ICMP报文)消息3. 错误的状态将不会被广播给正在执行的应用程序4. 不支持多路广播,不支持IP/UDP多路广播。IP多路广播技术在一台主机加入或者离开一个“多点传送地址组”的时候使用Internet组管理协议(IGMP:位于网络层)发出通知。解决方法:创建一个真正的多点广播代理,用它作为一个多点广播通信的特别通道。
入侵检测是指对入侵行为的发觉。通过在计算机网络或系统中的若干关键点收集信息并进行分析,判断网络或系统中是否有违反安全策略的行为和被攻击的迹象。入侵检测系统(IDS, Intrusion Detection System),是完成入侵检测功能的软件、硬件及其组合,试图检测、识别和隔离“入侵”企图或计算机的不恰当未授权使用。
监视并分析主机的审计记录和日志文件。
检测内容:系统调用、端口调用、系统日志、安全审记、应用日志、敏感文件、目录
优点:性价比高 检测全面 能够快速定位 视野集中 易于用户自定义 保护更加周密 对网络流量不敏感
通过网络适配器或其他特殊硬件监视并分析所有原始网络包。
检测内容:包头信息+有效数据部分(数据包=包头信息+有效数据部分)
优点:在共享网段上对通信数据进行侦听采集数据 主机资源消耗少 提供对网络通用的保护 检测速度快 隐蔽性好 攻击者不易转移证据 与操作系统无关
存在问题:如何适应高速网络环境、非共享网络上如何采集数据
基于主机入侵检测系统的特例。用监控传感器监控某软件应用程序的日志文件。
类型:1. 防火墙与IDS联动:策略制定模块首先接受入侵检测系统检测出的事件,并参照策略知识库中的规则,决定对安全事件的响应策略,然后将用某种中间语言描述的响应策略发送给防火墙,防火墙作为策略执行模块负责对其解释并执行2. 在线网络入侵检测系统:传统NDS工作在旁路,监听网络流量副本,而在线NIDS位于内外网之间,对所有进出网络的数据进行检查。3. 七层交换机
比较:1. NIPS与NIDS相比,NIPS根据特定的服务和特定的操作系统设置一系列的规则,其构建的规则链表效率大为提高。NIDS大多采用将网卡设置成混杂模式进行数据包的接收,而NIPS根据规则的设定,只需要检测通过其系统的数据包,能够提高入侵检测的资源利用率,减少误报,便于系统维护。2. NIPS与传统防火墙相比,NIPS对数据包的控制能力大大加强,对应用层和高层协议的检测能力有了质的飞跃。同时人侵检测技术能实时、有效地和防火墙的阻断功能结合,大大简化了系统管理员的工作,提高了系统的安全性。
采用TCP Connect方式扫描,如果能与目标端口成功建立连接则目标端口开放。
//创建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);
Int fd = socket(AF_INET, SOCK_PACKET, htons(0x800));
S = Ioctl(fd, SIOCGIFFLAGS, &ifr);
If (seccess)
receive_packet()
read_packet();
close(fd);
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)
1)打开一个socket(或者通过open打开一个设备)
2)通过ioctl() 或者setsockopt()设置为混杂模式
采用RAW SOCKET方式获取二层数据包,随后拆开数据链路层输出双方mac地址,并将payload传入下一层拆包拆出IP头和IP层payload。随后根据IP头中解析出来的Protocol选择合适的协议解析过程进行具体的解析。
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);//具体操作看结构体