信息安全 学习笔记(7)—— 【复习纲要】

被刻印的时光 ゝ 提交于 2020-08-06 15:01:04

信息安全课程:复习纲要

问答题[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的包长度<min,丢之
  • 间接法:若存在FO=1的分片,丢之 (ps:FO=2以上就可以了)

 

(2) 重叠碎片攻击

攻击方法

用第二个分片(有害),覆盖第一个无害分片(用于顶包接受检查)。       

例如:第一个分片 SYN = 0,ACK = 1(应答)

第二个分片 SYN = 1,ACK = 0 (请求连接)

这样在重组之后就是有害的报文。

防止措施

丢掉FO==1,且protocal==TCP 的包(此方法不彻底够用)

 

 

 

三、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、源端口、目的IP和目的端口,那么可以在接收到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) 提供一个标准的文件操作接口
  • 对下,对文件系统提供一个标准的接口,以便其他操作系统的文件系统可以方便的移植到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)请描述当函数调用发生时,进程地址空间中栈帧的变化。

首先,把函数调用的参数压栈,然后eip(返回地址)压栈,ebp(栈底)压栈。

接下来,更新ebp的值为esp的值(栈对齐),

将esp减少一个特定的值(与调用函数内部申请空间相关),为调用函数获取一定的栈空间。

 

4)如何防止缓冲区溢出攻击?  [本章重点]

  1. 编译器进行了栈保护:canary保护,和防止栈运行。

  2. 栈起始地址随机化,不同次运行同一个程序时,栈的起始位置都不一样。(防止猜测 ShellCode 的入口地址

 

 


 

 

 

 其他一些内容:

几种典型攻击(可以自己演示的):

1.1 netwox 80 使用ARP攻击,阻止局域网内系统正常联网

1.2 netwox 86 通过ICMP重定向,成为受害者、网关之间的中间人

1.3 netwox 76 通过内核模块窃取别人的用户名和密码

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 窃取Cookie用户名和密码

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 详细描述一下TCP三次握手?

1 A ---SYN---> B

2 A <---SYN/ACK--- B

3 A ---ACK---> B



1.2 port的作用是什么?

实现进程与进程之间的交互。

1.3 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.4 攻击为什么要选择在圣诞节?

该攻击程序注意到连续的两个数据包之间,初始序列号增长了128,000。因此,该攻击程序破解了序列号生成规则(等差序列)。

下村的机器必须处于闲置状态,攻击才能进行成功。不然的话,其他的连接将改变数据包的初始序列号,并使其更难以预测。这就是黑客选择在圣诞节攻击的原因。

(简版:因为圣诞节的时候放假了,不会对B进行频繁的访问,以便预测B生成的TCP序列号。)

 

1.5 进行SYN flooding以实现DoS的可信server的端口号是多少?为什么要选择这个端口?能不能换用一个其他端口?【因为,作为客户端,使用socket通信,端口号一般是较大的数字】

0~1024。因为攻击者是是冒充工作站的服务器进行与server的访问的。客户端的端口号一般大于1024,而服务器的端口号则在0~1024之间。

1.6 在成功添加后门后,攻击者为何要发送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)的概念。

  1. rid实际用户ID和实际组ID标示我们实际上是谁;这两个字段是在登录时读取口令文件中的登录项。一般情况下,在一个会话期间,实际用户和实际组用户不会改变;但超级用户的进程可能改变它们。
  2. eid有效用户ID,有效组ID以及附加组ID决定了文件访问权限

 

参考:

信息安全课程18:复习    https://zhuanlan.zhihu.com/p/62970150

信息安全复习    https://zhuanlan.zhihu.com/p/63614262

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!