-------html
转载请注明出处,博客园-lasgalen-http://www.cnblogs.com/lasgalen/p/4555648.html linux
-------web
进行这个实验的目的是得到TCP/IP协议缺陷和基于这些缺陷的攻击的经验。在TCP/IP协议上的缺陷是一种在协议设计和实现出现的漏洞。这给咱们上了很宝贵的一课,关于为何安全应当在一开始的时候就被考虑设计,而不是在过后加入。此外,学习这些缺陷,帮助学生理解在网络安全上的挑战和为何许多网络安全测评是必须的。TCP/IP协议的缺陷在几个不一样的层次发生。算法
三台机器的操做系统为 Ubuntu,版本号12.04。ubuntu
由于实验中间虚拟机的虚拟网络链接出现问题,从新加载了网络模块,所以在任务一中使用的是表1的IP和MAC地址。任务2、三中因为改变了拓扑结构,使用的是表3的IP地址。缓存
表1 任务一中的IP和MAC地址安全
|
A服务器 |
B网络 |
Cssh |
IP |
*.*.65.132 |
*.*.65.133 |
*.*.65.134 |
MAC |
*:*:*:*:11:11 |
*:*:*:*:01:aa |
*:*:*:*:fc:0e |
表2 任务3、四中的IP和MAC地址
|
A |
B |
C |
IP |
*.*.47.128 |
*.*.47.129 |
*.*.47.130 |
MAC |
*:*:*:*:11:11 |
*:*:*:*:01:aa |
*:*:*:*:fc:0e |
表3 任务2、五中的IP和MAC地址
|
A |
B |
C |
IP |
Eth0:*.*.220.128 Eth1:*.*.205.129 |
Eth0:*.*.220.129 |
Eth0:*.*.205.128 |
MAC |
*:*:*:*:11:11 |
*:*:*:*:01:aa |
*:*:*:*:fc:0e |
首先安装伪造、发送数据包须要的工具netwox,语句
sudo apt-get install netwox
而后安装用于抓取查看数据包的软件wireshark,仍然使用终端安装
sudo apt-get install wireshark
Wireshark也能够在软件中心经过图形界面进行下载安装。
打开wireshark以后,在左上角出现找不到网卡的状况,如图2.1。
图2.1
为了解决这个问题,我在网络上进行搜索,参考了下面网页的步骤,详细过程如图2.二、图2.3。
http://www.dickson.me.uk/2012/09/17/installing-wireshark-on-ubuntu-12-04-lts/
把下图的YOUR_USER_NAME 改成 ***(用户帐号)。
图2.2
图2.3
重启系统以后,再打开wireshark,发现能够找到网卡。
继续安装vsftpd和openbsd-inetd。
根据实验指导书中的步骤,首先开启vsftpd,出现问题
vsftpd:unrecongnized service
Vsftpd服务没有找到,说明系统中并无安装相应的软件包。所以,我使用以下命令来安装vsftpd服务。
sudo apt-get install vsftpd
安装到最后出现提示“vsftpd start/running, process 3283”,说明安装完成后服务已经自动启动,运行端口号3283。
继续安装openbsd-inetd,出现了安装vsftpd出现的一样的问题。解决方法与上面相同,安装openbsd-inetd服务
sudo apt-get install openbsd-inetd
安装到最后出现提示,网络超级服务没有打开。
Setting up openbsd-inetd (0.20091229-1ubuntu1) ... * Stopping internet superserver inetd [OK] * Not starting internet superserver : no services enabled
抱着侥幸的心理再次尝试开启openbsd-inetd服务,发现仍然找不到服务。网上查阅相关资料后得知,还须要安装一个telnetd软件包。
sudo apt-get install telnetd
安装完成以后还须要一些操做来打开这个服务。
sudo gedit /etc/inetd.conf //添加 //telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd sudo /etc/init.d/openbsd-inetd restart //出现 //* Restarting internet superserver inetd netstat -a | grep telnet //出现 //tcp 0 0 *:telnet *:* LISTEN
到此为止,全部须要的实验环境配置已经完成,能够开始实验。
实验是七选五,所以我选择了下面五个任务。
-------
转载请注明出处,博客园-lasgalen-http://www.cnblogs.com/lasgalen/p/4555648.html
-------
ARP缓存是ARP协议的重要的一部分。做为一个ARP协议执行结果,一旦一个在MAC地址和IP地址之间的映射被决定,这个映射就被缓存。所以,若是影射已经存在在缓存中,就没有必要再重复ARP协议。然而,由于ARP协议是无状态的,缓存能够被轻易的经过恶意的ARP信息修改。这样的一种攻击叫作ARP欺骗。
在这样一个攻击中,攻击者使用欺骗ARP信息来哄骗受害者接受一个无效的MAC-IP映射,而且在缓存中保存这个映射。取决于攻击者的目的不一样,这里可能出现各类类型的后果。例如,攻击者将一个不存在的MAC地址关联受害者的默认网关的IP地址,经过此来启动一个Dos攻击。
ICMP重定向被路由器用来向更新主机的路由信息,最开始只有最少的路由信息。当一台主机接收到一个ICMP重定向信息,他将会根据接收到的信息来修改路由表。由于缺乏确认,若是攻击者但愿受害者设置它的路由信息为一个特别形式,他们能够发送欺骗ICMP重定向信息给受害者,而且欺骗受害者修改它的路由表。
SYN洪流攻击是Dos攻击的一种形式,攻击者发送许多SYN请求给受害者的TCP端口,可是攻击者没有完成三次握手的意向。攻击者或者使用虚假的IP地址,或者不继续过程。在这个攻击中,攻击者可使受害者的用于半开链接的队列溢出,例如,一个完成SYN,SYN-ACK但没有收到最后的ACK回复的链接。当这个队列满了的时候,受害者不可以在进行更多的链接。
SYN 缓存策略:SYN缓存是是对抗SYN洪流攻击的一种防护机制。若是机器检测到它正在被SYN洪流攻击,这种机制将会kick in。
TCP RST攻击能够终止一个在两个受害者之间已经创建的TCP链接。例如,若是这里有一个在A和B之间已经创建的telnet链接,攻击者能够伪造一个A发向B的RST包,打破这个存在的链接。
ICMP信息一样能够被用于达成链接重置攻击。为了达到这个目的,攻击者发送一条显示“硬错误”的ICMP的错误信息给TCP链接两端的任意一方。链接将会被当即中断,由于在RFC1122中主机在接收到这样一个TCMP错误包时,应当当即中断相关的链接。RFC1122定义“硬错误”为一个目的不可达且协议无效、端口无效、标志位缺失和DF位设置的ICMP错误信息
ICMP源端关闭信息被拥塞路由器用于告知TCP发送者减缓发送包的速度。攻击者能够制定这样的信息来实施对TCP发送者的拒绝服务攻击。
ARP。当发送方B须要向接收方C发送一个数据时,B会从本身的ARP表中经过C的IP地址来查找相应的C的MAC地址。若是C的MAC地址不在B的ARP表中,B就向全网发广播包,要求C主机返回它的MAC地址。当B接收到C返回的MAC地址时,B就将更新它的ARP表。同时,C主机也将B主机和它对应的MAC地址记录到C的ARP表中。ARP表的更新采用牛奶原则,也就是说,ARP表将无条件接受最后一次收到的ARP包做为ARP更新的数据。鉴于此,攻击者A能够利用一些工具伪造一个ARP包,将C的IP对应的MAC地址修改成本身的MAC地址,并将这个数据包发送给B。B在更新了ARP表以后,新的发往C的数据包就会被发送到A。其流程示意如表4.1.1。
表4.1.1 ARP包的信息
|
源IP |
源MAC |
目的IP |
目的MAC |
正常状况 |
||||
B主机广播包,请求C的MAC信息 |
*.*.65.133 |
*:*:*:*:01:aa |
*.*.65.255 |
ff:ff:ff:ff:ff:ff |
C向B返回本身的MAC信息 |
*.*.65.134 |
*:*:*:*:fc:0e |
*.*.65.133 |
*:*:*:*:01:aa |
A做为攻击机,对B和C进行ARP欺骗 |
||||
B主机广播包,请求C的MAC信息 |
*.*.65.133 |
*:*:*:*:01:aa |
*.*.65.255 |
ff:ff:ff:ff:ff:ff |
C向B返回本身的MAC信息 |
*.*.65.134 |
*:*:*:*:fc:0e |
*.*.65.133 |
*:*:*:*:01:aa |
A向B返回ARP欺骗信息 |
*.*.65.134 |
*:*:*:*:11:11 |
*.*.65.133 |
*:*:*:*:01:aa |
A向C返回ARP欺骗信息 |
*.*.65.133 |
*:*:*:*:11:11 |
*.*.65.134 |
*:*:*:*:fc:0e |
注意,在欺骗过程当中,ARP欺骗信息的包要屡次重复发送,由于要保证ARP欺骗信息在正确的ARP信息以后被发送到被攻击机。
详细的实验过程以下:
查询netwox说明后得知,33号工具用于伪造ARP包。使用命令查看该工具的详细使用方法。
netwox 33 --help2 //以后的不一样号的工具均可以用这个命令来查看使用方法及参数信息
在进行攻击以前,先在三台主机上互相ping。而后使用arp –a命令查看ARP表,图4.1.1是A的ARP表,图4.1.2是B的ARP表,图4.1.3是C的ARP表。
图4.1.1 攻击机A的ARP表
图4.1.2 被攻击机B的ARP表
图4.1.3 被攻击机C的ARP表
以后,在三台主机所有开启的状况下,攻击机A发动攻击如图4.1.4。
图4.1.4
以后在B主机上查看ARP表,发现C主机对应的MAC地址已经被更改。如图4.1.5。
图4.1.5
以后,使用一样的方法,给C主机发送ARP欺骗包。
这样,B发送给C的数据将会被链路层转发到A,而C发送给B的数据也将会被链路层转发到A。可是这种状况下,A若是想插入到BC的通讯间,必需要再次将收到的包进行转发,并假装源地址。
并且,A若是想持续这种攻击,就必须保证ARP欺骗包的发送频率大于正确的ARP包的发送频率,不然被攻击机的ARP表将会被更新,且在下一个ARP欺骗信息到来以前一直保持正确的MAC--IP映射关系,在这期间,A将不能收到想获得的包。
在这个任务及第五个任务中,我在虚拟机上搭建了以下网络拓扑结构,如图4.2.1。
图4.2.1
在三台机器上搭建的路由指令
A的路由配置指令
sudo ifconfig eth0 *.*.220.128 netmask 225.225.225.0 sudo ifconfig eth1 *.*.205.129 netmask 255.255.255.0 sudo route add -net *.*.220.0/24 gw *.*.220.128 sudo route add -net *.*.205.0/24 gw *.*.205.129 sudo sysctl -w net.ipv4,ip_forward=1
B的路由配置指令
sudo ifconfig eth0 *.*.205.128 netmask 255.255.255.0 sudo route add default gw *.*.220.128 sudo sysctl -w net.ipv4.ip_forward=1
C的路由配置指令
sudo ifconfig eth0 *.*.205.128 netmask 255.255.255.0 sudo route add default gw *.*.205.129 sudo sysctl -w net.ipv4.ip_forward=1
B的网关是*.*.220.128,C的网关是*.*.205.129。经过traceroute指令能够跟踪包通过的主机和路由器,看到详细的转发过程,这可以更好的看出网关的做用。
在我设计的ICMP重定向攻击中,我想让主机B没法联网,即B链接任何主机时,都将失败。
所以,我须要将B的网关地址改成*.*.220.0/24网段中一个未被使用的IP地址,这样,B向网络中发送的全部包,都将被发送到这个“黑洞”中,得不到回复,至关于不能链接网络。这个IP地址我选择了*.*.220.130。同时,为了避免让B发现这次攻击是A发起的,要将源地址改成*.*.220.131。
使用netwox86号工具能够完成这个攻击。攻击机A指令
sudo netwox 86 -f "host *.*.220.129" -g *.*.220.130 -c 1 -i *.*.220.131
-f “host 被攻击机的IP” –g 但愿对方网关修改后的IP –c 类型 –i 源IP
这个指令只有在按下ctrl+c时才会结束,不然一直发送ICMP包。
此时,在被攻击机B中使用WIRESHRK监听eth0,发现不断收到ICMP包,如图4.2.2。
图4.2.2
从上图能够看出发送包的类型是ICMP,源IP地址是*.*.220.131,目标IP地址是*.*.220.129,网关地址是*.*.220.130。
若是一个TCP链接没有完成三次握手,它将被放入半开链接队列,而半开链接队列有最大长度,若是链接数量达到最大容量时,新的链接就不可以被创建。SYN洪泛攻击就是经过未完成的TCP请求来试图充满半开链接队列,使得正常的链接不可以被创建,达到攻击的效果。
在这个实验中,使用telnet服务做为攻击目标,在23号端口发起SYN洪泛攻击。
首先,尝试在主机B和C之间创建telnet链接,说明网络联通。主机B远程登陆主机C的帐户,如图4.3.1。
图4.3.1
在主机C上,经过命令netstat –na | grep tcp 命令查看当前的TCP相关端口的状态,发现23号端口处于联通状态,如图4.3.2标黄部分。
图4.3.2
在主机C上查看C的半开链接队列的最大长度为128,缓冲保护开启。如图4.3.3。
图4.3.3
在主机B中使用exit命令断开与C的telnet链接。以后在主机A中使用netwox76号工具发动针对主机C23号端口的SYN攻击。
sudo netwox 76 -i "*.*.47.130" -p "23"
注意,这个命令会一直执行直到按ctrl+C中止。
回到主机B中,尝试与主机C进行telnet远程链接,如图4.3.4。
图4.3.4
从上图及实验过程能够看出,虽然链接的速度很慢,可是是能够链接上的。我在主机B上开启了两个终端,同时试图进行telnet链接。
到主机C中查看端口链接状况,如图4.3.5和图4.3.6。发现,队列中充斥着大量半开链接,目的端口号都是C机的23号端口,可是源主机IP和端口却不一致,并且端口号都是不经常使用端口,能够判断出,这极有多是一次SYN攻击。
图4.3.5
图4.3.6
从第二张图能够看出,大部分的链接都是SYN半开链接,可是在最后有一个B主机的成功完成的telnet链接,图中黄色部分。
而后,在主机C中关闭缓冲保护,如图4.3.7。
图4.3.7
在主机A上重复SYN洪泛攻击。在主机B上尝试链接主机C。如图4.3.8。
图4.3.8
发现一直停留在尝试链接这一步,说明此时已经不可以访问主机C的23号端口了。
在主机C中查看端口链接状况,如图4.3.9。
图4.3.9
发现所有是未知主机和不经常使用端口创建的SYN半开链接,没有B主机的任何链接存在。
首先完成主机B与主机C的telnet链接,如图4.4.1。
图4.4.1
在C上查看端口链接状况,如图4.4.2,已经完成主机B与主机C23端口的链接。
图4.4.2
这时,在主机A中经过netwox78号工具发起针对B主机的RST攻击。
sudo netwox 78 -i "*.*.47.129"
回到B主机中,发现没有什么变化,可是当回车以后,出现链接已经被其余主机断开,并退回到主机B的帐户下(个人主机B和主机C中的帐户都是chengli*,所以在图片中分不大清)。如图4.4.3。
图4.4.3
在主机C中查看此时的链接状况,如图4.4.4。能够看出BC主机的23端口的链接已经被断开,处于监听状态。
图4.4.4
注意,此时主机A的攻击并无中止。
回到主机B中,再次尝试链接主机C,发现最开始是链接上了,可是还没来得及显示后续内容,链接就被中断。如图4.4.5。
图4.4.5
实验中使用的是任务4.2中的拓扑结构及IP地址。
首先在B和C见创建telnet链接
A是攻击机,A试图伪造一个ICMP错误信息的包,发送给B或C(实验中发送给了B),来终止BC见的链接。
sudo netwox 82 -f "host *.*.220.129 and tcp port 23" -i *.*.205.128
接下来,在C主机中查看端口链接信息,如图4.5.1,发现链接并无终止。
图4.5.1
在B机中查看wireshark抓取的eth0的流量,如图4.5.2,发现ICMP错误信息包B收到了。
图4.5.2
出现这种状况的缘由多是在高版本的ubuntu中已经制订了一些策略来防止这些攻击。
-------
转载请注明出处,博客园-lasgalen-http://www.cnblogs.com/lasgalen/p/4555648.html
-------
当TCP链接正在创建时,服务器用一个惟一的32位初始序列号的应答报文来确认用户请求,TCP协议规范要求美妙更换序列号25万次,但大多数实际系统更换频率远小于此,并且下一次更换的数字每每是可预测的[1]。这个增长值在许多版本比较旧的操做系统中都是一个常量,在FreeBSD4.3中是125000次每秒[2],PacketShaper的序列号每秒增长128000,每次链接增长64000[3]。还可以找到不少类似的例子。
因此初始序列号的可预测性是其增长值固定、更新频率固定所致使的。
如今有不少ISN的生成算法,试图经过增长ISN的随机性来解决这个问题。RFC1948中提出了一个较好的初始化序列号ISN随机生成算法:ISN = M + F(localhost, localport, remotehost, remoteport)。M是一个计时器,这个计时器每隔4毫秒加1。F是一个Hash算法,根据源IP、目的IP、源端口、目的端口生成一个随机数值。
可是,严格符合RFC1948的ISN生成方法有一个潜在的危机:一个攻击者若是之前合法拥有过一个IP地址,他经过对ISN进行大量的采样,能够估计到随后的ISN的变化规律。在之后,尽管这个IP地址已经不属于此攻击者,但他仍然能够经过猜想ISN来进行IP欺骗。ISN自身的值是按照一个常数值稳定增长的,因此F()须要保持相对的稳定性。而根据Bellovin 所提出的,这是一个系统特定的值,这些值并不会常常变。
若是Hash函数在实现上存在漏洞,攻击者就能够经过大量的采样,来分析,其中,源IP地址,源端口,目的IP地址,目的端口都是不变的,这减小了攻击者分析的难度。
Linux TCP的ISN生成器避免了这一点。它每5分钟计算一次值,把泄漏的风险降到了最低。
有一个方法能够作得更好,取M = M + R(t),ISN = M + F(sip, sport, dip, dport, )。其中,R(t) 是一个关于时间的随机函数。颇有必要这样作,由于它使攻击者猜想ISN的难度更大了(弱点在理论上仍是存在的)。
构造TCP ISN生成器的一些更直接的方法是:简单地选取一些随机数做为ISN。这就是给定一个32位的空间,指定ISN = R(t)。(假设R()是彻底的非伪随机数生成函数)。当然,对于彻底随机的ISN值,攻击者猜想到的可能性是1/232,随之带来的一个问题是ISN空间里面的值的互相重复。这违反了许多RFC(RFC 793, RFC 1185, RFC 1323, RFC1948等)的假设----ISN单调增长。这将对TCP协议的稳定性和可靠性带来不可预计的问题。
其它一些由Niels Provos(来自OpenBSD 组织)结合彻底随机方法和RFC 1948解决方案:ISN = ((PRNG(t)) << 16) + R(t)。其中,PRNG(t) 是一组随机指定的连续的16位数字 0x00000000 -- 0xffff0000,R(t) 是16位随机数生成器(它的高位msb设成0)0x00000000 -- 0x0000ffff。上面的公式被用于设计OpenBsd的ISN生成器,相关的源代码能够从下面的网址得到http://www.openbsd.org/cgi-bin/cvsweb/src/sys/netinet/tcp_subr.c。
Provos的实现方法有效地生成了一组在给定时间内的不会重复的ISN的值,每两个ISN值都至少相差32K,这不但避免了随机方法形成的ISN的值的冲突,并且避免了由于哈希函数计算带来的性能上的降低,可是,它太依赖于系统时钟,一旦系统时钟状态给攻击者知道了,就存在着系统的全局ISN状态泄密的危机。[4]
为了限制任一时刻可发送的数据量,并为接收端提供流量控制,TCP 对等方使用窗口实现这些目的。该窗口是接收端容许发送端发送的字节流的数据范围。发送端只能发送位于窗口内的字节流中的字节。该窗口随着发送端的出站字节流和接收端的入站字节流而滑动。为了表示接收窗口的大小,TCP 报头包含了一个 16 位的“窗口”字段。接收窗口是用于控制可从发送端传送给接收端的未确认数据数量的窗口。
为了提供可适应高速传输路径的更大窗口尺寸,RFC 1323定义了容许接收端通告大于 65,535 字节的窗口大小的窗口缩放。“TCP 窗口缩放”选项包括一个窗口缩放因子,该因子与 TCP 报头中的 16 位窗口字段结合时,能够将接收窗口大小最大增长到 1GB。
在网上,这方面的资料不是不少。从我阅读的资料的信息来看,源端口可预测与不可预测是这样的:
A试图经过X链接到B。则当链接到B时,A必须使用可预测可知的端口来确保A继续按照X能预测的方式来分配端口。AX之间创建两个链接,若是X收到的A的端口号是连续的,或者有必定的规律,则源端口是可预测的。不然,不可预测。一样X要用一样的方法对B进行检测。若是尝试了两种端口预测方法后,X不能可靠地预测A分配的端口,这时X必须假定A是随机的分配端口。以后就能够用协议进行AXB的链接了。这一点在NAT上被使用。[5]
这个实验让我学会了netwox工具的使用方法,加深了对Dos等类型的攻击的理解,对linux系统中的一些防护这类攻击的策略有了必定的认识。
除此以外,我对ubuntu的网络路由配置,进行学习,,并选择搭建了一个合适的网络拓扑结构。
此次实验的大部分任务都完成的比较顺利,可是在几个攻击上始终没有出现理想的效果。开始时觉得是本身的指令有问题,或者是环境哪里没配置对。后来经过反复的学习、比较,查找相关资料,发现是ubuntu已经有预防这类攻击的策略,所以我可以收到包,可是相关内容并无被改变。
和上一个实验同样,我会把报告修改以后放在博客中,由于我以为里面的一些小问题我仍是不太明白,须要保留下来,之后研究学习一下。
[1] 吕艳丽,李肖坚.初始序列号生成算法的安全性研究.计算机研究与发展,2005,42(11);1940-1945
[2] 黄兆勤. 关于TCP/IP序列号生成方法的研究.http://blog.sina.com.cn/s/blog_4b5039210100gku7.html.
[3] 连天科技.Packeteer PacketShaper TCP协议栈可预测初始序列号漏洞.http://www.ltsec.com/show.aspx?id=745&cid=37.
[4] 渗透与攻击.http://www.cnblogs.com/justwannaloveyou/archive/2010/12/03/1895097.html.
[5] 参考学习文章:P2P 之 TCP穿透NAT的原理,P2P穿透UDP/TCP原理
-------
转载请注明出处,博客园-lasgalen-http://www.cnblogs.com/lasgalen/p/4555648.html
-------