一、米特尼克圣诞攻击
1、前提环境介绍
A:目标机
B:被目标机信任的主机
X:不可到达的主机
Z:攻击机
2、Z
对B
进行DOS
攻击
Z
利用SYN
包洪泛使得B
的内存空间被占满。
具体原理如下:
每一台主机会维护一个TCP连接队列,这个队列里面存放的是未完成的连接和已完成但尚未取出的连接,其大小由
backlog
控制,如果队列满,那么该主机会丢弃之后发过来的SYN
包。那么
Z
利用虚假的ip X
对B
大量发送SYN
包,而X
并不会对B
发过来的SYN + ACK
包进行响应,所以该连接就一直会处在未完成状态占用B
的连接池,最终导致主机B
的连接池满,从而会拒绝其他连接请求。
3、Z
测试A
的RTT
以用来预测序列号
4、Z
伪造成B
的ip
对A
发送TCP连接请求,并使用正确的序列号对其进行ACK
回复,从而建立连接
注:
ip
欺骗之所以能够成功,是因为A
与B
之间建立起了信任关系,之后的连接仅需要ip
身份认证
问题及回答
1、为什么说ip传输协议是不可靠的?
- 从网络方面,ip协议的不可靠是因ip协议是无连接的,尽最大努力交付的,并且只对头部进行校验。
- 而从安全方面,ip协议的不可靠在于其ip可由发送方任意设置
2、详细描述一下TCP三次握手
- A --> SYN --> B
- B --> SYN + ACK --> A
- A --> ACK --> B
3、port的作用是什么?
- 复用/分用
4、SYN/ACK/RST分别在什么时候使用?
-
SYN:
请求建立连接 -
ACK:
确认号是否有效 -
RST:
复位因某种原因出现的错误连接,也可以用来拒绝非法数据和请求
5、进行SYN flooding以实现DoS的可信server的端口号是多少?为什么要选择这个端口?能不能换用一个其他端口?【513,因为,作为客户端,使用socket通信,端口号一般是较大的数字】
6、在成功添加后门后,攻击者为何要发送RST释放可信Server中的TCP连接?
- 打扫作案现场
二、网络命令
1、路由表
- default默认路由,当一个数据包的目的网段不在路由记录中,该数据包就会发送到默认路由
- link-local为链路本地地址,是设备在本地网络中通讯时使用的地址,网段为169.254.0.1~169.254.254.255。主要作用于DHCP服务器故障时,或DHCP超时,用于和网段内或广播域中的设备通信。不通过路由器转发,故其Gateway为0.0.0.0
- 直连网段的路由记录,当数据包发到直连网段时,数据包该如何处理,不经路由转发,故网关为0.0.0.0
- Flag标志解释
- U:有效
- G:连接路由,无该标志表示直连目的地址
- H:具体主机,而非网段
2、ping / ifconfig / route / traceroute / nslookup / whois / nmap
三、ARP安全
ARP作用于在知道目标机ip时获取目标机MAC地址。(同属于一个局域网内)
每一台主机维护一张ARP缓存表,其中存储着<ip, mac>映射,该表内的每一个条目都是有有效期的,且它为无状态的,即,只要收到新的ARP信息,ARP缓存表就会更新。
目的MAC | 源MAC | 帧类型 | 硬件类型 | 硬件地址长度 | 协议地址长度 | op | 发送方MAC | 发送方ip | 目的MAC | 目的ip |
---|---|---|---|---|---|---|---|---|---|---|
6 bit | 6 bit | 2 | 2 | 2 | 1 | 2 | 6 | 4 | 6 | 4 |
ARP请求包:arp部分的目的MAC字段全0(待填充);第一个目的MAC为全1,表示向全网广播
有一种ARP包叫做Gratuition ARP(无故ARP),它的第一个作用就是告知其他主机本机的<ip, MAC>,所以我们可以利用这种类型的ARP来修改其他主机的ARP缓存。具体操作即为自定义<发送方mac, 发送方ip>,可使用netwox 80
工具
引入ARP缓存的目的是什么?
在向外发包时,可以直接通过ARP缓存来获取目的IP和目的MAC的映射关系,而不用通过ARP协议来获取,从而减轻了网络负担。
ARP缓存中毒的攻击方法和效果是什么
netwox 80
攻击,设置<IP, MAC>,效果是,靶机发送数据包到某ip时,该包会被发送到我们指定的机器上
四、IP协议安全
针对IP分片的攻击
- DOS攻击:攻击者构造两个分片,一个分片偏移为0,第二个分片偏移为64800。因为IP分片乱序到达,接收方会等待其他分片,同时为其他分片分配空间,这就意味着一个数据包会使用64K的空间,这段空间会持续保留15-225秒。
- TearDrop:攻击者构造两个分片,第二个分片被完整包含在第一个分片中,即第二个分片偏移量小于第一个分片长度,且偏移量+分片2总长度小于第一个分片长度
假设两个分片分别为A,B。那么在发生重叠时,若采取用前者覆盖后者的方式来处理,则有:
$$ 剩余需要复制的长度remainLength = len(B) - (len(A) - offset(B)) $$
又 $ len(A) - offset(B) > len(B) $,故 \(remainLength<0\),又因为它为无符号数,所以\(remainLength\)变成了一个很大的数,那么该攻击会造成在处理分片时,将内存中以\(ptr(B)+(len(A)-offset(B))\)为起始地址的长度为\(remainLength\)的信息复制到了A的后面。
1、为什么需要IP分片?
以太网MTU限制,其限制为1500字节
2、IP分片如何重组?
IP分片中有id
字段和flag
以及off
字段,id
相同表示属于同一个IP报文,off
则表示某分片在原IP报文中的偏移量,flag
则有是否分片、更多分片等标志位。
3、泪滴攻击的原理
分片重叠时用前者覆盖后者,且剩余长度是无符号数。具体细节见上。
4、包过滤防火墙,通过过滤SYN包,防止外部连接。攻击者如何绕过该过滤规则?
-
可以使用微小碎片攻击,因为防火墙过滤包时,只会将过滤规则应用于初始片段,所以我们可以利用微小碎片攻击,第一个片段长度最小为68B,IP首部长度最长可达到60B,这样,第一个片段只包含8B的内容,而8B的内容无法检测到TCP首部的标志位,从而使得SYN包绕过过滤规则。
-
重叠碎片攻击。即第一个片段标志位
SYN=0,ACK=1
且足够长,此时可以顺利通过过滤,第二个片段与第一个片段有重叠,且标志位为SYN=1
,如果主机使用RFC 791中的算法(后面的覆盖前面的),此时就成功绕过。
五、ICMP协议安全
1、什么是Smurf攻击?如何防止?
伪造成靶机IP,向网络中广播ICMP请求报文,那么靶机就会收到大量的ICMP回复报文,也叫分布式拒绝服务攻击,这可能会使得靶机的速度变慢,甚至无法工作。
可以用以下方式防止攻击:
- 配置各个主机和路由不响应ICMP请求或广播
- 配置路由不转发定向到广播地址的数据包
2、什么是ICMP重定向攻击?如何防止?
在同一个局域网下,攻击机A伪造成靶机的网关B,对靶机C发送重定向报文,使得靶机C的报文被重定向到指定主机上,从而可以达到无法上网或劫持流量的目的。
可以不允许重定向来防止这样的攻击。
六、TCP协议安全
1、什么是SYN flooding攻击?效果是什么?如何防止?
主机会维持一个TCP半开连接池,该连接池大小有限,一旦连接池满了,主机就会丢弃其他的TCP连接报文
那么SYN flooding攻击的本质就是用大量的虚假IP,对靶机发送SYN报文,使得靶机的连接池被占满,从而使得靶机无法建立新的TCP连接。
防止:设置tcp_syncookie = 1。也即,在TCP三次握手过程中,在ACK报文未到达之前,主机不为此次连接分配内存空间。
2、端口扫描的原理是什么?
通过向靶机发送报文,从而通过响应状态来获取端口状态。
3、nmap -sT 和 nmap -sS的区别?
nmap -sT <ip> # connect扫描, 发送SYN报文,若对方回复SYN+ACK,则会回复ACK建立连接
nmap -sS <ip> # 半开扫描,发送SYN报文,若对方回复SYN+ACK,则会回复RST中断连接, 需要sudo权限
4、nmap -sA扫描原理是什么?
向靶机发送ACK报文,若端口被过滤,则不会有任何响应,否则,无论端口是开放还是关闭,均会返回RST报文,可以检测端口是否被过滤。
5、nmap -idle扫描原理是什么?
通过僵尸主机(zombie),需要满足攻击期间不会自己向外发送报文。且最好能与靶机具有信任关系
- 攻击机向zombie发送SYN|ACK报文,得到RST报文并获取到IP ID
- 攻击机伪造成zombie向靶机发送SYN报文,靶机该端口若开放,则会向zombie发送SYN|ACK报文,否则会发送RST报文。
- 攻击机向zombie发送SYN|ACK报文,得到RST报文并获取到IP ID
- 比较两次IP ID,若相隔为1,说明靶机该端口未开放,若相隔为2,说明靶机端口开放。若相隔更大,说明zombie并不是好的僵尸主机
七、防火墙
防火墙,置于内部网络和外部网络之间,内部网络与外部网络通信的必经之地。
1、防火墙有哪些种?
-
包过滤防火墙
也被成为无状态防火墙,静态防火墙。通过ACL规则控制数据流,最核心的五元素为:源IP,目的IP,源端口,目的端口,协议,在一次会话中,这五个元素是不会变化的,所以也叫静态防火墙。
优点:实现简单,处理速度快
缺点:难以处理分片,不支持复杂协议,不能防止应用层的恶意攻击(因为它无法检测应用层数据)
-
应用级网关代理防火墙
客户端与服务器并不建立真正的连接,都是客户端通过访问代理服务器来访问服务器,通信时,数据包均要通过代理服务器的检测。
优点:对数据的控制上升到应用层
缺点:每个服务均要实现一个特定的安全代理服务。
-
状态防火墙
会话过程中的数据包并不独立,而是有前后连接状态的。在同一个会话中,五元组不会变化,但是各种状态标识、分片等都是可以变化的。
例如:TCP三次握手的过程,若是突然收到一个ACK报文,那么该报文需要丢弃
2、NAT的作用是什么?
网络地址转化,因为IPv4地址不够用,才产生了NAT,即内网中的主机想要访问互联网时,会经过NAT路由器将源地址转化为公网ip后进行访问。
3. 正向代理和反向代理
-
正向代理
正向代理代理客户端,主要作用可以是*之类。
-
反向代理
反向代理代理服务器,主要为了防止服务器的ip地址直接暴露,同时也可以在反向代理上实现请求过滤,在内网安全领域起到很大的作用。
4、iptables语句作用分析
# 指定INPUT链丢弃所有报文
$ sudo iptables -P INPUT DROP
# 在INPUT链上添加规则,源端口为80的tcp报文可以进来
$ sudo iptables -A INPUT -p tcp --sport 80 -j ACCEPT
八、rootkit
unix下的安全模型
-
DAC
自主访问控制,即文件拥有者能够决定文件的访问权限。
-
MAC
强制访问控制
用户管理机制
-
真实UID:当前登录的 uid
-
有效UID:当前进程以哪个用户ID来运行的
-
保存的UID:有效用户ID的一个副本,与SUID权限有关
-
SUID权限:若一个文件有SUID权限,那么若某用户对它有执行权限,那么执行时就以root权限执行
-
setuid(uid)
详解ruid:
真实uid
euid:
有效uid
suid:
saveduid
- 若
euid
为0,那么setuid(uid)
可将三者均置为uid
- 若
euid
不为0,那么setuid(uid)
只能将euid
置为ruid
或suid
中的一个 - 若不满足上述情况,报错
- 若
-
seteuid(uid)
详解seteuid(uid)
将euid
置为uid
如果调用
seteuid(uid)
时,euid
为0,那么会将suid
置为0,这就保证了可以重新获得root权限 -
举例:
若以maple身份登录系统并打开shell,然后在shell中打开一个文件,这个文件有s位,那么此时
ruid
为maple的uid
,euid
应该为0
1、什么是rootkit
?
一套能够隐藏后门踪迹的工具,典型的木马。作用在于长期的维持root权限。
2、LKM的好处是什么?
- 定义:LKM是Linux内核为了扩展其功能所使用的可加载内核模块
- 优点:动态加载,无须实现整个内核。基于此特性,LKM常被用做特殊设备的驱动程序
3、 请描述系统调用劫持的过程
-
系统调用过程
- 应用程序代码调用系统调用xyz,该函数为一个包装系统调用的库函数
- 库函数xyz负责准备向内核传递的参数(系统调用号),并触发软中断切换到内核态
- CPU进入到中断处理函数,即系统调用处理函数
- 系统调用处理函数通过传进来的系统调用号来调用系统调用服务例程。
那么在上述过程中,linux内核空间中存储一张表叫做系统调用表(system_call_table),该调用表存储着系统调用号对应的系统调用服务例程的地址。
-
劫持过程
根据上述过程,那么如何劫持系统调用就很清晰明了。我们要做的就是修改系统调用表,使目标系统调用号对应的系统调用服务例程变为我们自己写的函数即可。
- 找到系统调用表(SCT)的首地址
- 修改SCT中目标系统调用服务例程的地址(修改时需要关闭写保护,写完需要恢复写保护)
如何寻找SCT地址?
- 在旧版本的linux内核中,SCT是直接被导出的,也就是符号表中是存储了SCT符号的,这样内核程序就可以直接使用。
- 在2.6版本内核后,SCT就不再被直接导出了,于是另外一种查找SCT的方法是通过
/boot/System.map
来查找 - 然而在更高版本中,
System.map
也没有了。这时可以通过/proc/kallsyms
来查询,这个文件中保存了所有linux内核符号。