1、名词解释
ARP cache poisoning,ICMP Redirect Attack,SYN Flooding Attack,TCP Session Hijacking。如果想监听局域网内另外一台机器,一般先要进行什么步骤?
(1)ARP cache poisoning:ARP缓存中毒,ARP缓存中毒利用了ARP协议不安全的本质。ARP协议有别于其他协议,例如DNS协议可以配置为仅接受安全动态更新,而使用ARP的设备则可以接受任何时间的更新。这意味着任何机器都可以向另一台主机发送ARP回复数据包,并迫使主机更新其ARP缓存。发送ARP回复而没有生成请求时,此时被成为无效ARP。当恶意攻击者以这种方式放置一些无效ARP时,用户就会认为他们正在与另一用户通信,而实际上是与窃取信息的攻击者通信。 (2)ICMP Redirect Attack:ICMP重定向信息是路由器向主机提供实时的路由信息,当一个主机收到ICMP重定向信息时,它就会根据这个信息来更新自己的路由表。由于缺乏必要的合法性检查,如果一个黑客想要被攻击的主机修改它的路由表,黑客就会发送ICMP重定向信息给被攻击的主机,让该主机按照黑客的要求来修改路由表。从安全的角度来讲,ICMP重定向报文没有协议状态检查,以及合法性机制验证,十分类似ARP报文,可以轻而易举的进行欺骗攻击。异常情况下,攻击者Attacker可以伪造网关向user发送ICMP重定向报文,可以结合ARP欺骗技术,然后用户user主机路由变成流量要通过Attacker来进行转发通信。攻击者可以截获、提取、分析、修改、重放用户user的数据包,造成多种安全威胁。 (3)SYN Flooding Attack:SYN Flood是一种广为人知的DoS(拒绝服务攻击)是DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。问题就出在TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃—即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从正常客户的角度看来,服务器失去响应,这种情况我们称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。 (4)TCP Session Hijacking:TCP会话劫持的攻击方式可以对基于TCP的任何应用发起攻击,如HTTP、FTP、Telnet等。对于攻击者来说,所必须要做的就是窥探到正在进行TCP通信的两台主机之间传送的报文,这样攻击者就可以得知该报文的源IP、源TCP端口号、目的IP、目的TCP端号,从而可以得知其中一台主机对将要收到的下一个TCP报文段中seq和ackseq值的要求。这样,在该合法主机收到另一台合法主机发送的TCP报文前,攻击者根据所截获的信息向该主机发出一个带有净荷的TCP报文,如果该主机先收到攻击报文,就可以把合法的TCP会话建立在攻击主机与被攻击主机之间。带有净荷的攻击报文能够使被攻击主机对下一个要收到的TCP报文中的确认序号(ackseq)的值的要求发生变化,从而使另一台合法的主机向被攻击主机发出的报文被被攻击主机拒绝。TCP会话劫持攻击方式的好处在于使攻击者避开了被攻击主机对访问者的身份验证和安全认证,从而使攻击者直接进入对被攻击主机的的访问状态,因此对系统安全构成的威胁比较严重。 (5)如果想监听局域网内另外一台机器,一般先要进行什么步骤? 第一ARP嗅探,劫持网关,再本地抓包.
2、阅读下面这篇文章
并且了解Netwox/Netwag的基本操作: Netwox/Netwag Troubleshooting guide http://www.cis.syr.edu/~wedu/seed/Documentation/Misc/netwox.pdf
请看下面的工具。在您的项目中可能需要它们: 2.1通用工具 ??本节中提到的工具是工具箱中可用的最通用和最强大的工具。可以使用这些工具执行任何类型的攻击。正确使用这些工具也将增强您对协议的理解。 ?? 7:这个工具用于嗅探数据包。它是一个很重要的工具,在这门课中你会用到它。要有效地使用此工具,您需要具备以下信息 ?? (1)找到你正在使用的嗅探设备。 很可能您将使用vmnet8。 如果在虚拟机和基础机之间有NAT设置,则使用vmnet8作为设备。 通过查看本地信息, 了解如何将其映射到Netwag中的设备名称。我们设它的名字是Eth3。在嗅探时将其用作设备名称。 ?? (2)尽管上面的信息已经足够开始嗅探了,但是您可以通过提供pcap过滤器来细化它。例如“主机1.2.3.4或主机5.6.7 8”将只显示ip地址为1.2.3 4或56.7.8的主机专用或源自主机的数据包。 ?? 38:该工具用于欺骗IP数据包。Netwag所需的输入非常直观。 学生在使用此工具时可能遇到的问题是主机操作系统可能会丢弃包。这是因为一些操作系统(如Linux)验证源的ip地址是否在其ARP缓存中。解决这个问题的方法是在使用此工具之前毒化ARP缓存。但通常情况下,这种工具是有效的。
??工具38可以用来发送假的ip数据包,它让用户完全控制p报头。从理论上讲,只要能准确地提供有效负载的正确值,它本身就足以承受所有其他TCP/CMP攻击,这可能会变得有些混乱。因此, 我们将纯粹使用此工具进行IP攻击,如DoS、眼泪等。 ??41:此工具用于欺骗IP/ICMP包。它允许攻击者使用任意IP参数发送任意 长度的ICMP包。几乎所有ICMP相关的攻击都可以通过这个工具完成。 此工具基于工具38。允许用户指定ICMP标头参数以及IP标头参数。 虽然对于大多数特定ICMP攻击都有特殊的工具,如Source Quench、 ICMP重定向等(参见下一 节),但该工具也可以用于这些攻击。 ??这个工具对于Ping死亡和蓝精灵攻击很有用,其他工具不能执行这些攻击。 ??40:用于欺骗TCP/IP数据包。有了正确的参数集,所有TCP攻击都可以通过这个工完成。它允许用户修改IP报头、TCP报头和数据包的TCP数据。这是用于会话劫持,可以很容易地用来编写操作系统指纹扫描仪。 2.2特殊工具 ??80:此工具发送连续的ARP响应。您需要设备名称(如上所述),以及源和目标IP地址和以太网地址。即使你不知道任何机器的以太网地址, 你可以提供@IP作为参数,Netwox会为你解决它。 ??72:有些系统拒绝ARP的回复,如果他们没有要求的话。这时这个工具就派上用场了。它使用欺骗地址(可以用于ARP缓存中毒 向目标计算机发送ARP请求。这个工具唯一的问题是它不发送连续的数据包。这个问题可以通过在脚本中使用它来解决。
3、解释linux用root执行下面两条命令
sysctl -q net.ipv4.tcp_max_syn_backlog sysctl -w net.ipv4.tcp_syncookies=0 的含义和用途。
??tcp_max_syn_backlog:端口最大 backlog 内核限制。此参数限制 服务端应用程序 可以设置的端口最大 backlog 值 (对应于端口的 syn_backlog 和 backlog 队列长度)。动机是在内存有限的服务器上限制/避免应用程序配置超大 backlog 值而耗尽内核内存。如果应用程序设置 backlog 大于此值,操作系统将自动将之限制到此值。tcp_max_syn_backlog是指定所能接受SYN同步包的最大客户端数量,即半连接上限; ??sysctl -w 临时改变某个指定参数的值, ??tcp_syncookies:在 tcp 建立连接的 3 路握手过程中,当服务端收到最初的 SYN 请求时,会检查应用程序的 syn_backlog 队列是否已满。若已满,通常行为是丢弃此 SYN 包。若未满,会再检查应用程序的 backlog 队列是否已满。若已满并且系统根据历史记录判断该应用程序不会较快消耗连接时,则丢弃此 SYN 包。如果启用 tcp_syncookies 则在检查到 syn_backlog 队列已满时,不丢弃该 SYN 包,而改用 syncookie 技术进行 3 路握手。 ?? sysctl -w net.ipv4.tcp_syncookies=0表示关闭SYN Cookies。net.ipv4.tcp_ syncookies = 1#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭。
4、阅读Smashing C++ VPTRs这篇文章,阐述其原理。
http://www.phrack.org/issues.html?issue=56&id=8 指针(越来越多用于现代编程)在某些特定情况下可能非常危险。
请注意基础技术需要以下内容 成功的条件:一个最小尺寸的缓冲区
- suid计划
- 可执行堆和/或可执行堆栈(根据技术)
- 知道缓冲区开头的地址(在堆上或在堆上)
堆) - 知道VPTR缓冲区开头的偏移量(固定为
所有执行) - 知道指向执行的第一个方法的指针的VTABLE中的偏移量
溢出后(适用于所有执行) - 如果我们想继续执行,要知道VTABLE的地址
程序正确。 我们可以发现,VPTR位于进程内存中Buffer变量之后。即当调用危险的strcpy()函数时有可能覆盖VPTR的内容! 如何突破上面那个有缓冲区溢出漏洞的程序。要达到这个目的,必须能够做到: - 构造我们自己的VTABLE,其中的指针入口将指向我们期望运行的代码(如shellcode等)。 - 使缓冲区溢出,并覆盖VPTR,使其指向我们的VTABLE。 ??也就是说,在被溢出缓冲区的开始构造一个VTABLE,然后使被覆盖后的VPTR能够指向该缓冲区的起始位置(即我们的VTABLE)。至于shellcode的位置,既可以在缓冲区中VTABLE之后,也可以位于被覆盖的VPTR之后。 ??不过,如果我们将shellcode放到VPTR之后,则须确保该部份内存可写,否则会导致段错误。在这里如何选择取决于缓冲区的大小。如果缓冲区足够大,可以容纳VTABLE和shellcode,则可以完全避免段错误。 ??此外还要注意,在每一个对象实例后都有4字节的特定数所(0x29,0x49),同时记住在VPTR后添加字符串结束符00h。
5、考虑Linux环境下如何实现精确计算程序运行的时间,搜索下相关资料。
Linux/Unix环境下计算C程序运行时间可以通过clock, times, gettimeofday, getrusage来实现。 下边分别说明其优缺点: 使用clock的方法: ??clock是ANSI C的标准库函数,关于这个函数需要说明几点。 首先,它返回的是CPU耗费在本程序上的时间。也就是说,途中sleep的话,由于CPU资源被释放,那段时间将不被计算在内。 其次,得到的返回值其实就是耗费在本程序上的CPU时间片的数量,也就是Clock Tick的值。该值必须除以CLOCKS_PER_SEC这个宏值,才能最后得到ss.mmnn格式的运行时间。在POSIX兼容系统中,CLOCKS_PER_SEC的值为1,000,000的,也就是1MHz。 最后,使用这个函数能达到的精度大约为10ms。 使用times的方法: times的用法基本和clock类似,同样是取得CPU时间片的数量,所不同的是要除以的时间单位值为sysconf(_SC_CLK_TCK)。 使用gettimeofday的方法: ??用gettimeofday直接提取硬件时钟进行运算,得到的结果的精度相比前两种方法提高了很多。 ??但是也正由于它提取硬件时钟的原因,这个方法只能计算程序开始时间和结束时间的差值。而此时系统中如果在运行其他的后台程序,可能会影响到最终结果的值。如果后台繁忙,系统dispatch过多的话,并不能完全真实反映被测量函数的运行时间。 使用getrusage的方法: ??getrusage得到的是程序对系统资源的占用信息。只要指定了RUSAGE_SELF,就可以得到程序本身运行所占用的系统时间。 可以说是精度最高的测量方法了。 自己试用了这四种方法,感觉需要高精度测试的话,getrusage和gettimeofday都可以选择。需要长时间测试的话,clock也是不错的,尤其是考虑到它的通用性。 首先接触的是gettimeofday,下边详细介绍这个函数的使用方法: 1.包含头文件sys/time.h. 2.定义两个结构体 struct timeval start、struct timeval end及记录时间的变量timer. 3. 将gettimeofday(&start,NULL)放在需要测的代码的开始部分,将gettimeofday(&end,NULL)放在需要测的代码的结束部分. 4.语句timer = 1000000 * (end.tv_sec-start.tv_sec)+ end.tv_usec-start.tv_usec可以使timer记录代码运行时间(时间单位为us). 5.printf(“timer = %ld”,timer) 打印出timer的值.
|