信息安全期末复习

2021-04-02  本文已影响0人  Assassin007

一、米特尼克的圣诞攻击

1、攻击背景

在Unix世界中,可以很容易地给予信任。 假设用户在机器A和机器B上都有一个帐户,为了使两者之间的麻烦最小,就可以在它们之间建立全双工的信任关系。 在A的主目录中,创建一个 .rhosts 文件:echo "hostB 用户名" > .rhosts,在B的主目录中做同样的操作,现在,用户可以使用任何 r* 命令来操作另一台服务器,这些命令将只验证地址。

1994年圣诞节,Kevin Mitnick 攻击了下村勉的机器,主要用到了两种技术:IP源地址欺骗和TCP序列号预测

2、攻击过程

这次攻击主要涉及四个对象:

首先来捋一遍攻击思路:

apollo 需要获得对 target 的访问,此时 x-terminal 已有对 target 的受信任连接,攻击者的目的是劫持这个连接。劫持这个连接,需要先控制 x-terminal,如何控制x-terminal呢?需要被它信任,如何被它信任?需要修改 .rhosts 文件,如何远程修改.rhosts文件呢?需要以它信任的机器的身份,建立一个TCP连接,在TCP连接中传递命令,所以最终是要冒充 server 与 x-terminal 建立连接

开始攻击:

  1. apollo 利用 SYN 洪泛填充 server 上端口513的“半开”连接队列达到阻塞的目的,使得它不会再响应任何新的连接要求
  2. apollo 向 x-terminal 发送一串 SYN 请求来预测 x-terminal 生成初始序列号的规律
  3. apollo 冒充 server 向 x-terminal 发起连接,虽然收不到 SYN-ACK(发到 server 了,但 server 由于阻塞不会响应也不会发送拒绝包),但是预测了序列号,就可以继续回复 ACK 来建立连接
  4. 以 server 身份向 x-terminal 发命令,修改 rhosts 文件,让它信任任何来源
  5. apollo 连接 x-terminal,植入内核模块,劫持与 target 的连接
  6. 成功访问 target,随后发送 RST 到 server 释放阻塞的连接

3.、问题思考

1、为什么说ip传输协议是不可靠的?

2、详细描述一下TCP三次握手

3、port的作用是什么?

4、SYN/ACK/RST分别在什么时候使用?

5、进行 SYN flooding 以实现 DoS 的可信server的端口号是多少?为什么要选择这个端口?能不能换用一个其他端口?

6、在成功添加后门后,攻击者为何要发送RST释放可信Server中的TCP连接?

二、网络命令

1、route(可加 -n 不解析名字而直接显示ip)

v2-fc928733d7035e4c4b9a7f360ddbe2b9_r

2、ping:发送 icmp 包来测试可达性

3、traceroute(路由跟踪)

4、nslookup:域名查询

5、whois

6、netstat

三、ARP协议安全

ARP 协议

ARP用于通过目标机 ip 获取目标机 MAC 地址

arp 请求封装在数据链路层报文中:

2012041215590890

在发送 arp 请求时,以太网首部的目的地址为全1,表示广播,而 arp 报文部分的目的mac为全0,因为还不知道目的主机的mac地址,正要通过以太网广播询问

有一种ARP包叫做 Gratuition ARP(无故ARP或者免费ARP),作用有:

1、引入ARP缓存的目的是什么

每一台主机维护了一张 ARP 缓存表,其中存储着 <ip, mac> 的映射,该表内的每一个条目都是有有效期的,且它为无状态的,即,只要收到新的ARP信息,ARP缓存表就会更新

在向外发包时,可以直接通过 ARP 缓存来获取目的 IP 和目的 MAC 的映射关系,而不用通过ARP协议来获取

2、ARP缓存中毒的攻击方法和效果是什么

向目标主机发送 ARP 响应报文,效果是,更新目标机器的 ARP 缓存,目标机器发送数据包到指定 ip 时,该包会被发送到我们指定的机器上

四、IP协议安全

针对IP分片的攻击

1、为什么需要IP分片?

一个 IP 报文最长可以达到 65535 字节,但网络硬件限制了帧的大小,以太网限制为 1500 字节

2、IP分片如何重组?

IP分片中有 id 字段和 offset 以及 flag 字段,id 相同表示属于同一个IP报文,offset 则表示某分片在原 IP 报文中的偏移量,flag 则有是否分片、更多分片等标志位

3、包过滤防火墙,通过过滤SYN包,防止外部连接。攻击者如何绕过该过滤规则?

五、ICMP协议安全

ICMP是网际报文控制协议,主要是因为IP协议有可能出现报文发送过程中的错误。譬如目标不可达,TTL过期等,需要通知发送方错误原因

有多种不同的ICMP报文,每种报文都有自己的格式,但是所有的ICMP报文都有三个共同的字段:type,code,checksum,不同类型的 icmp 报文通过 type 和 code 来区分:

icmp-format-general

一些常见的 icmp 报文:

其中,type=5 的重定向报文,是路由器用来向主机通知网络拓扑的变化,在以下情况下, 路由器会向主机发送重定向报文:

img

在上面的情况中,主机的IP地址是10.0.0.100,主机的路由表中默认网关是10.0.0.1,现在主机100要向 网络X 发送数据包。根据自己的默认网关,100将数据发给了G1。G1检查自己的路由表,发现要到达 网络X,需要经过G2,G1会将数据包转发给G2,同时发现数据包的源地址 10.0.0.100 和 G2 在同一个网段上,这时 G1 会向 Host 发送重定向报文,告诉它下次直接发给 G2 会快一点

主机总会假设路由器的信息更权威,路由器总是对的,所以它会更新自己的路由表,但无论是 icmp 报文还是封装它的 ip 报文都是可以伪造的,这就出现了安全问题

1、什么是Smurf攻击?如何防止?

一种分布式拒绝服务攻击,冒充目标机 IP,向网络中广播 ICMP回送请求报文,那么目标机器就会收到大量的 ICMP回送应答报文,这使得受害者忙于处理 ping 包而无法正常工作

可以用以下方式防止攻击:

2、什么是ICMP重定向攻击?如何防止?

在同一个局域网下,攻击机 A 伪造成目标机的网关 B,对目标机器发送重定向报文,使得目标机器报文被重定向到指定主机上,从而可以达到无法上网或劫持流量的目的

可以不允许重定向来防止这样的攻击

六、TCP协议安全

1、什么是SYN flooding攻击?效果是什么?如何防止?

主机会维持一个 TCP 半开连接队列,该队列大小有限,一旦满了,主机就会丢弃其他的 TCP 连接报文

那么 SYN flooding 攻击的本质就是用大量的虚假 IP,对目标机器发送 SYN 报文,使得对方的连接队列被占满,从而使得目标机无法处理新的TCP连接

防止:设置tcp_syncookie=1(这也是系统默认值)。在TCP三次握手过程中,在ACK报文未到达之前,主机不为此次连接分配内存空间,而用序列号识别三次握手

2、端口扫描的原理是什么?

使用 nmap 扫描目标地址,它会首先一个个地尝试与一些端口的连接,如果端口有响应,并且能够建立起连接,那么nmap就能够判断得出来,这个端口是open的

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报文,可以检测端口是否被过滤

配合 nmap -sF 扫描(发送 FIN 报文,端口开放或被过滤不会有响应,端口关闭会收到 RST)就可以准确知道端口状态

5、nmap -idle扫描原理是什么?

通过僵尸主机(zombie)查看目标机器端口状态,zombie 需要满足攻击期间不会自己向外发送报文,且最好能与靶机具有信任关系

七、防火墙

防火墙,置于内部网络和外部网络之间,内部网络与外部网络通信的必经之地

1、防火墙有哪些种?

2、NAT的作用是什么?

网络地址转换,使得一个整体机构以一个公用 IP 地址出现在Internet上。因为IPv4地址不够用,才产生了NAT,即内网中的主机想要访问互联网时,会经过NAT路由器将源地址转化为公网ip后进行访问

3、正向代理和反向代理

4、iptables语句作用分析

iptables/netfilter 是Linux内置的防火墙,通过一些表和规则链过滤包,每张表拥有的规则链数目不同,包进来时按顺序通过每张表上的某条链:

img img

我们可以为每条链指定规则,常用参数有:

基本链管理:

基本规则管理:

# 使用 -t 指定表,默认为 filter 表
# 指定 INPUT 链丢弃所有包
$ sudo iptables -P INPUT DROP

# 在 INPUT 链上添加规则,源端口为80的tcp报文可以进来 
$ sudo iptables -A INPUT -p tcp --sport 80 -j ACCEPT

八、rootkit

unix下的安全模型

用户管理机制

1、什么是rootkit?

Rootkit中的root来自于unix。在unix主机系统管理员账号为root账号,该账号拥有最小的安全限制,完全控制主机并拥有了管理员权限被称为“root”了这台主机。然而,能够暂时性的控制住主机还不够,因为管理员可以采取一定的安全措施,譬如打补丁。因此Rootkit的作用在于“能维持root权限的一套工具”。它的目的是隐藏自己以及恶意程序,达到长期在目的主机存在并收集信息的目的。

2、LKM的好处是什么?

3、 请描述系统调用劫持的过程

4、为何Unix可以做到一切皆文件?

虚拟文件系统(VFS)是这样一种特性的关键所在。它是 Linux 内核中的一个软件层,用于给用户空间的程序提供文件系统接口,同时,它也提供了内核中的一个抽象功能,允许不同的文件系统共存。

为了能够支持各种实际文件系统,VFS 定义了所有文件系统都支持的基本的、概念上的接口和数据 结构;同时实际文件系统也提供 VFS 所期望的抽象接口和数据结构,将自身的诸如文件、目录等概念在形式 上与VFS的定义保持一致。换句话说,一个实际的文件系统想要被 Linux 支持,就必须提供一个符合VFS标准 的接口,才能与 VFS 协同工作

img

因此,VFS 的意义如下:

  1. 向上,对应用层提供一个标准的文件操作接口
  2. 对下,对文件系统提供一个标准的接口,以便其他操作系统的文件系统可以方便的移植到Linux上
  3. VFS内部则通过一系列高效的管理机制,比如 inode cache, dentry cache 以及文件系统的预读等技术,使得底层文件系统不需沉溺到复杂的内核操作,即可获得高性能
  4. 此外VFS把一些复杂的操作尽量抽象到VFS内部,使得底层文件系统实现更简单

九、缓冲区溢出

1、什么是缓冲区

因为计算机程序频繁地需要操作从文件、网络等各种来源读入的一段数据,因此程序经常需要分配一段有限大小的内存空间,以便将数据存储在其中。这段内存空间便成为缓冲区。缓冲区溢出就是写入到缓冲区或者从缓冲区读取的数据超出了缓冲区可以容纳的范围。

缓冲区溢出包括各种类型,如栈溢出、堆溢出等。我们主要关注的类型是栈缓冲区溢出。

2、什么是返回地址

当在一个函数中调用另一个函数,被调用的函数结束时需要返回原函数,接着执行调用语句的下一条指令,那么下一条指令的地址就是被调用函数的返回地址

3、汇编语言中,call指令的作用是什么?

通过修改指令指针寄存器eip实现跳转,用于实现子程序,具体来说,调用 call 时:

与之相配合的还有一个 ret 指令,用于在子程序中返回,调用时:

4、请描述当函数调用发生时,进程地址空间中栈帧的变化

首先,把函数调用的参数压栈,然后eip(返回地址)压栈,ebp(栈底)压栈。接下来,更新ebp的值为esp的值(栈对齐),将esp减少一个特定的值(与调用函数内部申请空间相关),为调用函数获取一定的栈空间。

5、如何防止缓冲区溢出攻击

字符串存储时是从低地址向高地址增长,那么缓冲区溢出攻击的主要思路就是:将shellcode(生成shell的代码,执行它可以得到一个shell)置于内存的某处,然后通过缓冲区溢出覆盖将函数的返回地址指向shellcode,防范方法有:

上一篇下一篇

猜你喜欢

热点阅读