科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道都有谁想动我的奶酪 深入防火墙记录(下)

都有谁想动我的奶酪 深入防火墙记录(下)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

 本文将向你解释你在防火墙的记录(Log)中看到了什么?尤其是那些端口是什么意思?你将能利用这些信息做出判断:我是否受到了Hacker的攻击?他/她到底想要干什么?本文既适用于维护企业级防火墙的安全专家,又适用于使用个人防火墙的家庭用户。

来源:论坛整理 2008年7月27日

关键字: 安全技术 安全防范 防火墙

  • 评论
  • 分享微博
  • 分享邮件

 五、来自低端口的DNS包

  Q:我看见许多来自1024端口以下的DNS请求。这些服务是“保留”的吗?他们不是应该使用1024-65535端口吗?

  A:他们来自于NAT防火墙后面的机器。NAT并不需要保留端口。(Ryan Russell >http://www.sybase.com/)

  Q:我的防火墙丢弃了许多源端口低于1024的包,所以DNS查询失败。

  A:不要用这种方式过滤。许多防火墙有类似的规则,但这是一种误导。因为Hacker/Cracker能伪造任何端口。

  Q:这些NAT防火墙工作不正常吗?

  A:理论上不是,但实际上会导致失败。正确的方式是在任何情况下完全保证DNS通讯。(尤其在那些“代理”DNS并强迫DNS通过53端口的情况下)

  Q:我以为DNS查询应该使用1024端口以上的随机端口?

  A:实际上,一般DNS客户将使用非保留端口。但是有许多程序使用53端口。在任何情况下,NAT都会完全不同,因为它改变了所有SOCKET(IP+port combo)

  六、一旦我拨号连接到ISP后,我的个人防火墙就开始警告“有人在探测你的xxxx端口”。

  这种情况很常见。因为你使用ISP分配给你的IP,而在你使用之前刚有人使用。你看到的是上一个用户的“残留”信息。

  常见的例子是聊天程序。如果有人刚刚挂断,刚才和他聊天的人会继续试图连接。一些程序的“超时”设置很长。如POWWOW或ICQ。

  另一个例子是多人在线游戏。你会看到来自游戏提供者的通讯(如MPlayer),或其它不知名的游戏服务器。这些游戏通常基于UDP,因此无法建立连接。但为了获得较好的用户感觉,他们对于建立连接又很“执着”。以下是一些游戏的端口:

  7777 Unreal, Klingon Honor Guard

  7778 Unreal Tournament

  22450 Sin

  26000 Quake

  26900 Hexen 2

  26950 HexenWorld
  
  27015 Half-life, Team Fortress Classic (TFC)

  27500 QuakeWorld

  27910 Quake 2

  28000-28008 Starsiege TRIBES (TRIBES.DYNAMIX.COM)

  28910 Heretic 2

  另一个例子是多媒体广播、电视。如RealAudio客户端使用6970-7170端口接收声音数据。

  你需要连接的来源。例如ICQ服务器运行于4000端口,而其客户端使用更高的随机端口。这就是说你会看到你会看到从4000端口到高端随机端口的UDP包。换句话说,不要试图查询端口列表找到随机高端端口的用途。重要的是源端口。

  Sub-7也有类似问题。它使用不同的TCP连接用于不同的服务。如果受害者的机器下线,它会持续企图连接受害者机器的端口,特别是6776端口。

  七、IRC服务器在探测我

  最流行的聊天方式之一是IRC。这种聊天程序的特点之一就是它能告诉你正在和你聊天的人的IP地址。聊天室的问题之一是:人们匿名登陆并四处闲逛,往往会遭遇跑题的评论、粗鲁的话语、被打断谈话、被服务器“冲洗”或被其它客户踢下线。

  因此,服务器端和客户端都默认禁止在聊天室内使用匿名登陆。特别需要指出的是,当有人进入聊天室时要检查他们是否通过其它代理服务器连接。最常见的这种扫描是SOCKS。假设你来的那个地方支持SOCKS,那么你完全有可能有一台完全独立的机器,你试图通过明处的代理服务器隐藏你在暗处的真实身份。Undernet’s关于这方面的策略可参考http://help.undernet.org/proxyscan.

  同时,crackers/hackers会试图扫描人们的机器以确定他们是否运行某种服务,可被他们用做跳板。同样,通过检查SOCKS,攻击者希望发现某人打开了SOCKS,例如一个家庭的个人用户SOCKS实现共享连接,但将其错误设置成Internet上所有用户都能通过它。

  八、什么是“重定向”端口
  
  一种常见的技术是把一个端口重定向到另一个地址。例如默认的HTTP端口是80,许多人把他们重定向到令一个端口,如8080( 这样,如果你打算访问本文就得写成http://www.robertgraham.com:8080/pubs/firewall-seen.html )

  实现重定向是为了让端口更难被发现,从而使Hacker更难攻击。因为Hacker不能对一个公认的默认端口进行攻击而必须进行端口扫描。

  大多数端口重定向与原端口有相似之处。因此,大多数HTTP端口由80变化而来:81,88,8000,8080,8888。同样POP的端口原来在110,也常被重定向到1100。

  也有不少情况是选取统计上有特别意义的数,象1234,23456,34567等。许多人有其它原因选择奇怪的数,42,69,666,31337。近来,越来越多的远程控制木马( Remote Access Trojans, RATs )采用相同的默认端口。如NetBus的默认端口是12345。

  Blake R. Swopes指出使用重定向端口还有一个原因,在UNIX系统上,如果你想侦听1024以下的端口需要有root权限。如果你没有root权限而又想开web服务,你就需要将其安装在较高的端口。此外,一些ISP的防火墙将阻挡低端口的通讯,所以即使你拥有整个机器你还是得重定向端口。

  九、我还是不明白当某人试图连接我的某个端口时我该怎么办?

  你可以使用Netcat建立一个侦听进程。例如,你想侦听1234端口:

  NETCAT -L -p 1234

  许多协议都会在连接开始的部分发送数据。当使用Netcat侦听某个端口时,你能想办法搞清在使用什么协议。如果幸运的话,你会发现是HTTP协议,它会为你提供大量信息,使你能追踪发生的事情。

  “-L”参数是让Netcat持续侦听。正常情况下Netcat会接受一个连接,复制其内容,并退出。加上这个参数后,它可以持续运行以侦听多个连接。

  ICMP

  TCP和UDP能承载数据,但ICMP仅包含控制信息。因此,ICMP信息不能真正用于入侵其它机器。Hacker们使用ICMP通常是为了扫描网络,发动DoS攻击,重定向网络交通。(这个观点似乎不正确,可参考shotgun关于木马的文章,译者注)

  一些防火墙将ICMP类型错误标记成端口。要记住,ICMP不象TCP或UDP有端口,但它确实含有两个域:类型(type)和代码(code)。而且这些域的作用和端口也完全不同,也许正因为有两个域所以防火墙常错误地标记了他们。更多关于ICMP的知识请参考Infosec Lexicon entry on ICMP。

    关于ICMP类型/代码的含义的官方说明请参阅http://www.isi.edu/in-notes/iana/assignments/icmp-parameters。该文献描述官方含义,而本文描述Hacker的企图,详见下文。

  类型 代码 名称 含义

  0 * Echo replay 对ping的回应

  3 * Destination Unreachable 主机或路由器返回信息:一些包未达到目的地

  0 Net Unreachable 路由器配置错误或错误指定IP地址

  1 Host Unreachable 最后一个路由器无法与主机进行ARP通讯

  3 Port unreachable 服务器告诉客户端其试图联系的端口无进程侦听
  
  4 Fragmentation Needed but DF set 重要:如果你在防火墙丢弃记录中发现这些包,你应该让他们通过否则你的客户端将发现TCP连接莫名其妙地断开

  4 * Source Quench Internet阻塞

  5 * Redirect 有人试图重定向你的默认路由器,可能Hacker试图对你进行“man-in-middle”的攻击,使你的机器通过他们的机器路由。

  8 * Echo Request ping

  9 * Router Advertisement hacker可能通过重定向你的默认的路由器DoS攻击你的Win9x 或Solaris。邻近的Hacker也可以发动man-in-the-middle的攻击

  10 * Time Exceeded In Transit 因为超时包未达到目的地

  0 TTL Exceeded 因为路由循环或由于运行traceroute,路由器将包丢弃

  1 Fragment reassembly timeout 由于没有收到所有片断,主机将包丢弃

  11 * Parameter Problem 发生某种不正常,可能遇到了攻击

 (一) type=0 (Echo reply)

  发送者在回应由你的地址发送的ping,可能是由于以下原因:

  有人在ping那个人:防火墙后面有人在ping目标。

  自动ping:许多程序为了不同目的使用ping,如测试联系对象是否在线,或测定反应时间。很可能是使用了类似VitalSign‘s Net.Medic的软件,它会发送不同大小的ping包以确定连接速度。

  诱骗ping扫描:有人在利用你的IP地址进行ping扫描,所以你看到回应。

  转变通讯信道:很多网络阻挡进入的ping(type=8),但是允许ping回应(type=0)。因此,Hacker已经开始利用ping回应穿透防火墙。例如,针对internet站点的DdoS攻击,其命令可能被嵌入ping回应中,然后洪水般的回应将发向这些站点而其它Internet连接将被忽略。

  (二) Type=3 (Destination Unreachable)

  在无法到达的包中含有的代码(code)很重要记住这可以用于击败“SYN洪水攻击”。即如果正在和你通讯的主机受到“SYN洪水攻击”,只要你禁止ping(type=3)进入,你就无法连接该主机。

  有些情况下,你会收到来自你从未听说的主机的ping(type=3)包,这通常意味着“诱骗扫描”。攻击者使用很多源地址向目标发送一个伪造的包,其中有一个是真正的地址。Hacker的理论是:受害者不会费力从许多假地址中搜寻真正的地址。

  解决这个问题的最好办法是:检查你看到的模式是否与“诱骗扫描”一致。比如,在ICMP包中的TCP或UDP头部分寻找交互的端口。

  1) Type = 3, Code = 0 (Destination Net Unreachable)

  无路由器或主机:即一个路由器对主机或客户说,:“我根本不知道在网络中如何路由!包括你正连接的主机”。这意味着不是客户选错了IP地址就是某处的路由表配置错误。记住,当你把自己UNIX机器上的路由表搞乱后你就会看到“无路由器或主机”的信息。这常发生在配置点对点连接的时候。

  2) Type = 3, Code = 3 (Destination Port Unreachable)

  这是当客户端试图连击一个并不存在的UDP端口时服务器发送的包。例如,如果你向161端口发送SNMP包,但机器并不支持SNMP服务,你就会收到ICMP Destination Port Unreachable包。

  解码的方案

  解决这个问题的第一件事是:检查包中的端口。你可能需要一个嗅探器,因为防火墙通常不会记录这种信息。这种方法基于ICMP原始包头包含IP和UDP头。以下是复制的一个ICMP unreachable包:

  00 00 BA 5E BA 11 00 60 97 07 C0 FF 08 00 45 00

  00 38 6F DF 00 00 80 01 B4 12 0A 00 01 0B 0A 00

  01 C9 03 03 C2 D2 00 00 00 00 45 00 00 47 07 F0

  00 00 80 11 1B E3 0A 00 01 C9 0A 00 01 0B 08 A7

  79 19 00 33 B8 36

  其中字节03 03是ICMP的类型和代码。最后8个字节是原始UDP头,解码如下:

  08A7 UDP源端口 port=2215,可能是临时分配的,并不是很重要。

  7919 UDP目标端口 port=31001,很重要,可能原来用户想连接31001端口的服务。

  0033 UDP长度 length=51,这是原始UDP数据的长度,可能很重要。

  B836 UDP校验和 checksum=0xB836,可能不重要。

  你为什么会看到这些?

  “诱骗UDP扫描”:有人在扫描向你发送ICMP的机器。他们伪造源地址,其中之一是你的IP地址。他们实际上伪造了许多不同的源地址使受害者无法确定谁是攻击者。如果你在短时间内收到大量来自同一地址的这种包,很有可能是上述情况。检查UDP源端口,它总在变化的话,很可能是Scenario。

  “陈旧DNS”:客户端会向服务器发送DNS请求,这将花很长时间解析。当你的DNS服务器回应的时候,客户端可能已经忘记你并关闭了用于接受你回应的UDP端口。如果发现UDP端口值是53,大概就发生了这种情况。这是怎么发生的?服务器可能在解析一个递归请求,但是它自己的包丢失了,所以它只能超时然后再试。当回到客户时,客户认为超时了。许多客户程序(尤其是Windows中的程序)自己做DNS解析。即它们自己建立SOCKET进行DNS解析。如果它们把要求交给操作系统,操作系统就会一直把端口开在那里。

  “多重DNS回应”:另一种情况是客户收到对于一个请求的多重回应。收到一个回应,端口就关闭了,后序的回应无法达到。此外,一个Sun机器与同一个以太网中的多个NICs连接时,将为两个NICs分配相同的MAC地址,这样Sun机器每桢会收到两个拷贝,并发送多重回复。还有,一个编写的很糟糕的客户端程序(特别是那些吹嘘是多线程DNS解析但实际上线程不安全的程序)有时发送多重请求,收到第一个回应后关闭了Socket。但是,这也可能是DNS欺骗,攻击者既发送请求由发送回应,企图使解析缓存崩溃。

  “NetBIOS解析”:如果Windows机器接收到ICMP包,看看UDP目标端口是否是137。如果是,那就是windows机器企图执行gethostbyaddr()函数,它将将会同时使用DNS和NetBIOS解析IP地址。DNS请求被发送到某处的DNS服务器,但NetBIOS直接发往目标机器。如果目标机器不支持NetBIOS,目标机器将发送ICMP unreachable。

  “Traceroute”:大多数Traceroute程序(Windows中的Tracert.exe除外)向关闭的端口发送UDP包。这引起一系列的背靠背的ICMP Port Unreachable包发回来。因此你看到防火墙显示这样ICMP包,可能是防火墙后面的人在运行Traceroute。你也会看到TTL增加。

  3) Type = 3, Code = 4 (Fragmentation Needed and Don‘t Fragment was Set)

  这是由于路由器打算发送标记有(DF, 不允许片断)的IP报文引起的。为什么?IP和TCP都将报文分成片断。TCP在管理片断方面比IP有效得多。因此,饯堆趋向于找到“Path MTU”(路由最大传输单元)。在这个过程将发送这种ICMP包。

  假设ALICE和BOB交谈。他们在同一个以太网上(max frame size = 1500 bytes),但是中间有连接限制最大IP包为600 byte。这意味着所有发送的IP包都要由路由器切割成3个片断。因此在TCP层分割片断将更有效。TCP层将试图找到MTU(最大传输单元)。它将所有包设置DF位(Don‘t Fragment),一旦这种包碰到不能传输如此大的包的路由器时路由器将发回ICMP错误信息。由此,TCP层能确定如何正确分割片断。

  你也许应该允许这些包通过防火墙。否则,当小的包可以通过达到目的地建立连接,而大包会莫名其妙的丢失断线。通常的结果是,人们只能看到Web页仅显示一半。

  路由最大传输单元的发现越来越整合到通讯中。如IPsec需要用到这个功能。

  (三) Type = 4 (Source Quench)

  这种包可能是当网络通讯超过极限时由路由器或目的主机发送的。但是当今的许多系统不生成这些包。原因是现在相信简单包丢失是网络阻塞的最后信号(因为包丢失的原因就是阻塞)。

  现在source quenches的规则是(RFC 1122):

  路由器不许生成它们

  主机可以生成它们

  主机不能随便生成它们
  
  防火墙应该丢弃它们

  但是,主机遇到Source Quench仍然减慢通讯,因此这被用于DoS。防火墙应该过滤它们。如果怀疑发生DoS,包中的源地址是无意义的,因为IP地址肯定是虚构的。

  已知某些SMTP服务器会发送Source Quench。

  (四) Type = 8 (Echo aka PING)

  这是ping请求包。有很多场合使用它们;它可能意味着某人扫描你机器的恶意企图,但它也可能是正常网络功能的一部分。参见Type = 0 (Echo Response)

  很多网络管理扫描器会生成特定的ping包。包括ISS扫描器,WhatsUp监视器等。这在扫描器的有效载荷中可见。许多防火墙并不记录这些,因此你需要一些嗅探器捕捉它们或使用入侵检测系统(IDS)标记它们。

  记住,阻挡ping进入并不意味着Hacker不能扫描你的网络。有许多方法可以代替。例如,TCP ACK扫描越来越流行。它们通常能穿透防火墙而引起目标系统不正常的反应。

  发送到广播地址(如x.x.x.0或x.x.x.255)的ping可能在你的网络中用于smurf放大。

  (五) Type = 11 (Time Exceeded In Transit)

  这一般不会是Hacker或Cracker的攻击

  1) Type = 11, Code = 0 (TTL Exceeded In Transit)

  这可能有许多事情引起。如果有人从你的站点traceroute到Internet,你会看到许多来自路由器的TTL增加的包。这就是traceroute的工作原理:强迫路由器生成TTL增加的信息来发现路由器。

  防火墙管理员看到这种情况的原因是Internet上发生路由循环。路由器Flapping(持续变换路由器)是一个常见的问题,常会导致循环。这意味着当一个IP包朝目的地前进时,这个包被一个路由器错误引导至一个它曾经通过的路由器。如果路由器在包经过的时候把TTL域减一,这个包只好循环运动。实际上当TTL值为0时它被丢弃。

  造成这种情况的另一个原因是距离。许多机器(Windows)的默认TTL值是127或更低。路由器也常常会把TTL值减去大于1的值,以便反应诸如电话拨号或跨洋连接的慢速连接。因此,可能由于初始TTL值太小,而使站点无法到达。此外,一些Hacker/Cracker也会使用这种办法使站点无法到达。

  2) Type = 11, Code = 1 (Fragment Reassembly Time Exceeded)

  当发送分割成片断的IP报文时,发送者并不接收所有片断。通常,大多数TCP/IP通讯甚至不分割片断。你看到这种情况必定是采用了分割片断而且你和目的地之间有阻塞。

  (六) Type = 12 (Parameter Problem)

  这可能意味着一种进攻。有许多足印技术会生成这种包。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章