信息安全课程:复习纲要
问答题[60分]:
一、ARP协议问题。
- ARP协议的作用是什么。
- 引入ARP缓存的功能是什么。
- ARP缓存中毒的攻击方法和效果是什么。
二、IP协议安全问题
- 为什么IP要进行分片?
- IP分片如何进行重组?
- 泪滴攻击(teardrop)的原理是什么?
- 包过滤防火墙,通过过滤SYN包,防止外部链接。攻击者可以如何绕过这个过滤?
三、ICMP协议安全。
- 什么是SMURF攻击?如何防止?
- 什么是ICMP重定向攻击?如何防止?
四、TCP协议安全。
- 什么是SYN flooding攻击?效果是什么?如何防止?
- 端口扫描的原理是什么?
- nmap -sS和nmap -sT的区别是什么?
- nmap -sA扫描的原理是什么?
- nmap idle扫描的原理是什么?
五、防火墙。
- iptables是状态防火墙。状态防火墙相比于包过滤防火墙的优点是什么?
- NAT的作用是什么?
- sudo iptables –P INPUT DROP; iptables -A INPUT -p tcp --sport 80 -j ACCEPT 这两条语句的作用是什么?
六、Rootkit。
- 什么是rootkit?
- LKM的好处是什么?
- 请描述系统调用劫持的过程。
- 请解释,为何Unix可以做到一切皆文件。
七、缓冲区溢出。
- 什么是返回地址?
- 汇编语言中,call指令的作用是什么?
- 请描述当函数调用发生时,进程地址空间中栈帧的变化。
- 如何防止缓冲区溢出攻击。
一、ARP协议相关
Dos攻击:netwox 80 使用ARP攻击,阻止局域网内系统正常联网
ARP:IP-->MAC
主机广播IP来寻找MAC,返回是单播;
然后(所有主机都)缓存IP--MAC的对应关系到ARP表,
但ARP表不是一成不变的,因为IP--MAC对应关系不断改变。(比如:虚拟机中的IP地址,多启动几回可能就换掉了)
局域网(以太网)帧格式:
帧类型 Frame types: 0800 IP 0806 ARP 8035 RARP
了解以太网帧的格式之后,就可以根据帧的结构发包;也可以借助netwox 80发ARP包,导致同在一个局域网的另一个主机不能联网。
1)ARP协议的作用是什么?
地址解析,根据IP地址获取对应的mac地址。
2)引入ARP缓存的功能是什么?
将ip和mac的映射保存在本地,防止每次发送ip数据包之前都要进行一次ARP解析。
3)ARP缓存中毒的攻击方法和效果是什么?
因为ARP缓存是无状态的,只要每次接收到ARP信息就对ARP缓存进行更新。
攻击方法:用netwox 80发包,对主机X 发送一个假的ARP应答报文,将X 的ARP缓存中的ip映射到一个错误的mac地址。
效果:使得被攻击主机不能联网。
二、IP协议安全问题
以太网帧:frame_head+frame_data(ip数据报:iphead+ipdata)
ip头部:
1)为什么IP要进行分片?
主要是因为硬件环境的MTU限制。
单个IP报文65565的最大长度;
但是网络硬件限制了帧的大小(限制以太网1500字节)。
2)IP分片如何进行重组?
1.标识(IDENT,用于标识IP报文段的唯一标识符,具有同一IDENT的片段属于同一个IP报文)、
2.标志(FLAGS,第一位保留,不使用;第二位为DF(Don't Fragment)位,DF=1时不分片;第三位为MF(More Fragments)位,DF=0的情况下,除了最后一个分段的IP包的包头,其他分段的MF位都设为1)
3.片偏移(FO:FRAGMENT OFFSET,指明当前片段在原始完整的IP报文中的位置(偏移)。该偏移的单位是8个字节。)
3)泪滴攻击(TearDrop)的原理是什么?
构造两个分片,满足以下两个条件:
1、第二个分片完全包含在第一个分片中。(第一个分片的FO+len > 第二个分片的FO+len)
2、发生重叠时,使用第一个分片来覆盖第二个分片的重叠内容。
由于第二个分片完全包含在第一个分片中,计算第二分片剩余部分的长度 len= end- pre_end 为负数,
又因为剩余长度的数据结构为unsigned,导致产生一个特别大的数。
导致拷贝超多无关数据,导致内存占用过多以及系统崩溃。
( 解决方法:加上一个 if 判断语句,来保证 end-pre_end>0 )
4)包过滤防火墙,通过过滤SYN包,防止外部链接。攻击者可以如何绕过这个过滤?
1. 微小碎片攻击:使得第一个分片不包含SYN字段。第二个分片包含TCP的SYN=1字段。这样两个分片都能通过防火墙,然后在上层进行重组SYN包。
2. 重叠碎片攻击:如果系统采用的重叠方式后一片覆盖前一片的情况下,可以使用碎片重叠攻击,使得第一个分片的SYN字段不为1,第二个分片的FO!=0并包含TCP的SYN=1字段。这样两个分片也都能通过防火墙,然后在上层重组,第二个分片覆盖第一个分片后就能重新组成SYN包。
【详细版——分片攻击】
防火墙通过数据包包头信息,进行拦截(包过滤器防火墙)
RFC:互联网国际标准机构 Request For Comment
原有协议:有些端口阻止 外部访问请求,但是接受 对本机请求的回复(本机先发出请求)
漏洞是:只检查FO=0(第一个)数据片。
只要第一个混过去(包装成无害的样子),后面(具有同样IDentifier标识符的)分片可以跟着全部通过防火墙
(1)微小碎片攻击
攻击方法
强迫TCP头部进入第二个分片,从而躲过防火墙过滤器的匹配(SYN)
通过许多IP实现,可以在发出数据包上形成异常小的片段大小。如果片段大小足够小以迫使某些TCP数据包的TCP头字段进入第二个片段,则指定这些字段的模式的过滤规则将不匹配。如果过滤实现没有强制执行最小片段大小,则可能会通过不允许的数据包,因为它在过滤器中没有得到匹配。
防止措施
- 直接法:FO=0的包长度
- 间接法:若存在FO=1的分片,丢之 (ps:FO=2以上就可以了)
(2) 重叠碎片攻击
攻击方法
用第二个分片(有害),覆盖第一个无害分片(用于顶包接受检查)。
例如:第一个分片 SYN = 0,ACK = 1(应答)
第二个分片 SYN = 1,ACK = 0 (请求连接)
这样在重组之后就是有害的报文。
防止措施
丢掉FO==1,且protocal==TCP 的包(此方法不彻底够用)
三、ICMP协议安全
ICMP: 互联网消息控制协议
明确一点信息,本身就是ICMP差错报文的情况下,不会产生ICMP差错报文。但是,ICMP查询报文可能会产生ICMP差错报文。
ICMP报文格式:
1)什么是SMURF攻击?如何防止?
Smurf攻击是一种DDOS攻击。
冒充受害者的IP地址,将大量ICMP的ECHO REQUEST广播到有大量主机的网络。默认情况下,网络上的大多数设备都会通过向源IP地址发送回复ECHO REPLY来对此做出响应。 如果网络上接收和响应这些数据包的机器数量非常大,受害者的计算机将忙于处理 ping 回复包。 这可能会使受害者的计算机变慢,无法继续工作。
(DDOS==分布式拒绝服务;DOS==拒绝服务;ICMP==互联网控制消息协议)
如何防止Smurf攻击呢?
1. 配置各个主机和路由器,不响应ICMP请求或广播;
2. 配置路由器不转发定向到广播地址的数据包。
2)什么是ICMP重定向攻击?如何防止?【考试重点,应该会展开考实验细节】
A:攻击者
B:受害者
C:受访问的网络
首先,当B要访问C网络的时候,会向当前网关发送访问请求。A通过pcap网络嗅探等工具捕获这一请求的时候,A冒充B的网关向B发送ICMP重定向报文,将网关地址重定向为虚假地址。当B收到A发送的重定向报文的时候,就会修改B的路由表,将访问C网络的网关地址改为重定向的地址。这样B上网会发生部分失败(因为路由器会更新正确的路由给B,但A会改成错的,两者互相改,造成部分对部分错)
防御手段:过滤掉ICMP重定向报文。
实验流程:1.pcap抓包得到受害者ip 2. 使用raw socket来手动修改ip、icmp里面的内容 3.开始发包,攻击受害者
四、TCP协议安全问题
这里说明一下校验和的一些内容:TCP的校验和计算和IP头部的校验和计算方法是一致的,但是覆盖的数据范围不一样。TCP校验和覆盖TCP首部和TCP数据,而IP首部中的校验和只覆盖IP的头部。TCP的校验和是必需的,而UDP的校验和是可选的。TCP和UDP计算校验和时,都要加上一个12字节的伪首部。伪首部包含:源IP地址、目的IP地址、保留字节(置0)、传输层协议号(TCP是6)、TCP报文长度(报头+数据)。伪首部是为了增加TCP校验和的检错能力:如检查TCP的源和目的IP地址、传输层协议等。
1)什么是SYN flooding攻击?效果是什么?如何防止?
A:攻击者
B:被攻击服务器
C:其他访问者
首先,B开放一个端口,进行侦听。A构造大量的TCP的SYN包发给B。
B一旦接收到SYN包就需要为即将建立的TCP连接分配TCB(Transmission Control Block),并进入半连接状态。由于B最多可开启的半开连接个数是一定的,受内存限制,当半开连接的个数过多,就会消耗掉可用的内存,使得新的正常的连接请求不能被处理。此时C对B进行访问,建立TCP连接的请求就不能被正常处理。
效果:Dos攻击--占用资源(内存、CPU、带宽),deny of service,拒绝正常的服务。(SYN flooding可以以小博大)
防止:
1. SYN Cookie:在(第三握)ACK到达之前不分配任何资源。
SYN Cookie关键在于:如何在不分配资源的同时,能够识别是否是一个完整的TCP三次握手。 SYN cookie精心构建初始序列号:t、m、s来验证。
2. SYNCache:四元组<源ip,源port,目的ip,目的port>,那么可以在接收到SYN包时,仅仅分配有限的空间,来维持其后可能需要的信息,而不是分配整个的TCP控制块。到第三步才分配。
2)端口扫描的原理是什么?
nmap的工作原理:首先尝试与一个个的端口连接:
- 没有任何回复是被过滤了:filtered
- 收到 SYN+ACK 就是开着的:open
- 收到 RST 就是关闭的:close
3)nmap -sS和nmap -sT的区别是什么?
sS:发SYN包,无连接发RST(不建立连接、无痕迹;但需要root权限 =》最常用)
nmap -sS:向目标主机发送TCP的SYN包,
当目标主机返回SYN/ACK包的时候,直接发送RST包。
不与目标主机建立完整的TCP连接。可以不留下扫描痕迹,但需要特殊权限。
sT:连接后发RST包 (建立连接、不隐蔽 =》不推荐使用)
nmap -sT:与目标主机建立完整的TCP连接后,
再向目标主机发送RST包。不需要特殊权限,但是会留下扫描痕迹。
4)nmap -sA扫描的原理是什么?
sA:发ACK包
ACK数据包不会启动会话建立,所以比较隐蔽;同时,因为ACK数据包不会单独出现。
所以,对于端口,不管是开放的还是关闭的,如果收到一个不请自来的ACK数据包,都会发一个RST包。(只能判断是否被过滤)
5)nmap idle扫描的原理是什么?
A:攻击者
B:Zombie主机
C:目标主机
首先A先向B发送SYN/ACK包,然后B返回一个RST包,并记录该包的IPID。
然后A冒充B向C发送SYN包。如果C的端口开放,则返回SYN/ACK包,B收到后会回复一个RST包,并且IPID+1。如果C的端口不开放,则直接返回RST。
之后A再向B发送一个SYN/ACK包,查看B返回的IPID的值,如果IPID的值增加了2,则可知C的端口开放。
idle无法区分关闭和被过滤的情况。
知识点:
- 如果没有发送SYN情况下,收到SYN|ACK包(不请自来),那么会回复RST。
- 一个不请自来的RST,会被忽略。
- 每个IP包都有Identifier(IPID),用于标识属于同一数据包的所有IP碎片
- 每发一个数据包,大部分操作系统简单地进行:Identifier+1
- 因此,从Identifier可以知道,主机在上一次发包后又发了几个数据包
利用网络里空闲的Zombie僵尸主机:
攻击者idle扫描:
通过IPID的值判断,目标主机端口状态:
- 如果IPID+1: 关闭 or 过滤 +1 就是A又去探测了一次 所以加了1
- 如果IPID+2: 开 +2是除了A探测,又加了一个B回复C的RST
五、防火墙
防火墙分为三类:1. 包过滤防火墙(packet filter);2. 应用层网关代理(Application level Gateway)3. 状态防火墙(stateful firewall)。
包过滤防火墙也可以成为无状态防火墙,静态防火墙。最核心的五元素就是源地址、目标地址、协议、源端口、目标端口。优点:实现简单,规则也简单,所以包过滤防火墙的处理速度快,并且易于配置。缺点:难以处理分片【IP碎片攻击】; 不支持某些复杂的协议;不能防止应用层等恶意攻击(原因很简单,因为它根本不识别应用层的数据)。
1)iptables是状态防火墙。状态防火墙相比于包过滤防火墙的优点是什么?
- 包过滤防火墙(packet filter):无状态、静态。易于设置、处理速度快;
缺点:无法分析上下文,难以处理分片【IP碎片攻击】,不支持某些复杂的协议,不能防止应用层等恶意攻击。
- 状态防火墙。优点为:建立连接状态表,结合上下文状态进行过滤,可以实现较好的过滤效果。
在同一个会话中,五元组不会变化;但是各种状态标识(SYN、SYN+ACK以及ACK)、分片(FO)等都是可以变化的。
2)NAT的作用是什么?
NAT:网络地址转换。
一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。在一定程度上,能够有效的解决公网IP地址不足的问题。
- 内网主机向外发出数据包时,NAT服务负责将数据包的源IP地址改成公网IP地址(SNAT); S->Source 发包时:转换源地址
- 当外网对内网主机的回复到达时,NAT服务将回复包的目的IP再改成内网IP地址(DNAT)。 D->Destination 收包时:转换目的地址
3)sudo iptables –P INPUT DROP;
iptables -A INPUT -p tcp --sport 80 -j ACCEPT;
这两条语句的作用是什么?
- 第一句,将iptables的策略制定为:丢弃所有传入的数据包。
- 第二句,添加INPUT策略,允许tcp 源端口号 为80的数据包通过防火墙。==》允许HTTP包传入
六、Rootkit
1)什么是rootkit?
黑客安装后门backdoor,获取长期root权限后,
便于之后回访,安装rootkit,隐藏踪迹,收集信息,便于长期回访以及获得对其他系统的访问权限。
rootkit一般和后门backdoor配合着使用,一前一后
(短暂的root权限+backdoor+rootkit==>长期的root权限)
2)LKM的好处是什么?
LKM: 可加载内核模块(Loadable Kernel Module)
优点是动态加载:内核进行修改和扩展时,不需要重编译内核和重启系统。
( LKM 包含 entry 和 exit 函数,分别用于插入、删除)
3)请描述系统调用劫持的过程。
首先,当进行一次系统调用的时候,会触发软中断(INT $0x80)==》进入内核的系统调用处理程序。
然后在系统调用处理程序的代码中寻找到sys_call_table的地址。
接下来,根据系统调用表sys_call_table地址 和 eax中存放的系统调用号,
找到真正的 系统调用例程的地址,
将其替换为 攻击者的 系统调用处理函数地址。
4)请解释,为何Unix可以做到一切皆文件?
虚拟文件系统(VFS)
- 向上,对应用层 (的System Call) 提供一个标准的文件操作接口 (如read/write);
- 对下,对文件系统提供一个标准的接口,以便其他操作系统的文件系统可以方便的移植到Linux上;
VFS内部则通过一系列高效的管理机制,比如inode cache, dentry cache 以及文件系统的预读等技术,使得底层文件系统不需沉溺到复杂的内核操作,即可获得高性能;此外VFS把一些复杂的操作尽量抽象到VFS内部,使得底层文件系统实现更简单。
Linux中,一切皆文件。现在一般使用 Ext4 文件系统。
FAT(File Allocation Table文件分配表):FAT占用内存过多,难以管理较大的硬盘存储。
七、缓冲区溢出
缓冲区:分配一段有限大小的内存空间
缓冲区溢出:从缓冲区 读/写 的数据超出了缓冲区可以容纳的范围。
1)什么是返回地址?
从子程序返回后,主程序继续执行的指令地址称为“返回地址”。
返回地址就是主程序中CALL指令后面一条指令的地址。函数的返回地址,也就是函数调用语句的下一条语句的地址。
2)汇编语言中,call指令的作用是什么?
转移到调用的程序。
call + 调用函数的地址。
当执行调用(call)时,堆栈指针esp 递减4个字节(32位),
并且调用后的指令地址(返回地址)被写入现在由esp引用的存储器位置,
换句话说,返回地址被压入栈。
然后将 指令指针eip 设置指定为要调用的操作数的地址,并从该地址继续执行。
ret恰恰相反。简单的ret不会占用任何操作数。
处理器首先从esp中包含的内存地址中读取值,然后将esp增加4个字节,它会从堆栈中弹出返回地址。
eip设置为此值,并从该地址继续执行。
3)请描述当函数调用发生时,进程地址空间中栈帧的变化。
首先,把函数调用的参数压栈,然后cs、eip(返回地址)压栈,
ebp(栈底)压栈,接下来,更新ebp的值为esp的值(栈对齐),
将esp减少一个特定的值(与调用函数内部申请空间相关),为调用函数获取一定的栈空间。
4)如何防止缓冲区溢出攻击? [本章重点]
1. 编译器进行了栈保护:canary保护,和防止栈运行。
2. 栈起始地址随机化,不同次运行同一个程序时,栈的起始位置都不一样。(防止猜测 ShellCode 的入口地址)
其他一些内容:
几种典型攻击(可以自己演示的):
1.1 netwox 80 使用ARP攻击,阻止局域网内系统正常联网
1.2 netwox 86 通过ICMP重定向,成为受害者、网关之间的中间人
1.3 netwox 76 TCP里面的SYN Flooding,Dos攻击。
2. 在他人的系统上装上后门backdoor(用于长期控制root权限);通常和rootkit配套使用,rootkit负责消除痕迹
3. stackoverflow 汇编代码...
常用网络相关Linux命令:
ping 发送ICMP请求
- ping www.baidu.com:测试能否正常联网
- ping 192.168.3.33(本机gateway网关)
- ping localhost:测试系统协议栈
ifconfig 配置网络接口
- 查看IP号、网卡等信息 ifconfig
- 启动 网卡(硬件,用于朝外发包) sudo ifconfig ens33 up
netwox 发包工具
- 80 ARP攻击局域网
- 86 ICMP重定向
- 76 TCP里SYN Flooding
traceroute 追踪路由信息(一般最多30跳)类似于 Windows系统-cmd中的tracert命令
nslookup 查看域名对应的IP地址,类似于DNS服务 例子:nslookup www.baidu.com
whois 查看IP属于哪个组织。 例子:whois 219.219.220.1
netstat 显示网络状态:网络连接、路由表。。 例子:netstat -ant 查看tcp路由表、连接状态等
tcpdump 网络抓包工具。 例子:sudo tcpdump -i ens33 -c 20 其中i后面跟接口,c 20表示抓前20个包(packets)
应用软件wireshark 可用于抓包
netcat 用于TCP/UDP中读写数据:文件传输、即时通讯 (网络工具中的瑞士军刀)
- 查看某IP的端口开放状态:例子:查看百度网站的80端口(HTTP) nc -v www.baidu.com 80 显示:连接成功
- 查看端口段:例子:nc -v localhost 20-30 同时查看20-30这11个端口
- 局域网内 群聊:例子:001主机: nc -l 192.168.3.34 80 002主机:nc 192.168.3.34 80 然后就可以聊天了。。
nmap 用于端口扫描(TCP安全相关)
ssh 远程连接
Mitnick米特尼克圣诞节攻击
3个对象说明:
Target是黑客想要的文件,
X-terminal 与Target有连接(互相信任),
Server(X-terminal的服务器)与X-terminal 有TCP信任连接
攻击链条: Target的访问 <---> X-terminal <---> Server
攻击思路:访问 Target文件(最终目标)
--->劫持X-terminal与Target的连接
--->获得X-terminal的root权限,并加载内核STREAMS模块
---> 远程修改X-terminal的.rhosts文件(账户信任关系)
---> 以X-terminal信任的Server,建立TCP连接,在TCP中传递命令
- 对X-terminal:IP源地址欺骗和TCP序列号预测;
- 对Server:Dos攻击,使之不能(对意外SYN-ACK)发出RST;
1.1 SYN、ACK和RST分别在什么时候使用?
SYN:A向B请求建立TCP连接的时候使用。
ACK:B同意与A的TCP连接请求的时候使用。或者A收到B的SYN/ACK报文时,第三次握手的时候。
RST:A-SYN->B,而B不同意与A建立TCP连接的时候使用,B-RST->A。或者,B-SYN/ACK->A,而A拒绝的时候使用,A-RST->B。或者,A-ACK->B(非正常连接),则B-RST->A。
1.2 攻击为什么要选择在圣诞节?
该攻击程序注意到连续的两个数据包之间,初始序列号增长了128,000。因此,该攻击程序破解了序列号生成规则(等差序列)。
下村的机器必须处于闲置状态,攻击才能进行成功。不然的话,其他的连接将改变数据包的初始序列号,并使其更难以预测。这就是黑客选择在圣诞节攻击的原因。
(简版:因为圣诞节的时候放假了,不会对B进行频繁的访问,以便预测B生成的TCP序列号。)
1.3 进行SYN flooding以实现DoS的可信server的端口号是多少?为什么要选择这个端口?能不能换用一个其他端口?
0~1024。因为攻击者是是冒充工作站的服务器进行与server的访问的。客户端的端口号一般大于1024,而服务器的端口号则在0~1024之间。
1.4 在成功添加后门后,攻击者为何要发送RST释放可信Server中的TCP连接?
清除攻击痕迹,使得C能够被正常访问,并不保留连接记录。
drwxrwxr-x d表示directory,文件夹默认权限775
-rw-rw-r-- -表示是文件,文件默认权限664
/usr/bin/passwd:4755==》红字,无法访问(此时eid不等于rid)
chmod改成 755 ==》绿字,可以访问
47==>rws 7==>rwx
引入了真实UID(real UID)、有效UID(effective UID)以及 保存的UID(saved set-user-ID)的概念。
- rid实际用户ID和实际组ID标示我们实际上是谁;这两个字段是在登录时读取口令文件中的登录项。一般情况下,在一个会话期间,实际用户和实际组用户不会改变;但超级用户的进程可能改变它们。
- eid有效用户ID,有效组ID以及附加组ID决定了文件访问权限;
参考:
信息安全课程18:复习 https://zhuanlan.zhihu.com/p/62970150
信息安全复习 https://zhuanlan.zhihu.com/p/63614262