前言

摆弄软件,难免需要一些基础技能,对网络数据包及软件行为监控都需要一定的了解.

对软件行为监控首选SYSINTERNALS SOFTWARE出品的系列工具:

  • regmon:可以监控系统注册表读写
  • filemon:用于监控文件读写
  • procexp:用于监控进程以及进程关系
  • tcpview:监控进程监听端口,网络连接行为

鉴于以上软件功能上互有交集,SYSINTERNALS SOFTWARE收归微软后,以上工具除了procexp和tcpview,文件和注册表监控工具都已不支持vista以上版本,系统取而代之的是集以上软件功能为一体的procmon,具体可以到微软网站下载,或者搜索引擎搜索即可下载到,具体用法自己打开软件看了就会了。 基本使用可在本站搜索: 系统监控必备工具

本次介绍搞网络或者网络相关软件人士必备基本技能:网络抓包。网络抓包可以在路由上进行,这个需要特殊硬件支持,一般路由或者交换机能看到的也只是个概况,基本上还是将所有数据流过滤,然后提取感兴趣的部分。

同类软件

常见抓包软件有:

  • wireshark:顶尖的抓包工具,不同的是此软件开源,免费,而且有绿色版本。
  • sniffer pro:大名鼎鼎的老牌抓包工具,国内有不少破解版,可用的也就4.75版本吧,我这提供一个本人收藏版,可以点击超链接下载。
  • 科来网络分析系统:国内还算做的比较好的吧,对咱来说主要是都汉化了,看得明白点,具体可以网上搜索,官方有比较多的使用资料。

还有一些诸如wirepark,netspy,SmartSniff 等都是比较优秀的抓包软件,在此就不一一列举了,今日重点推荐wireshark。

wireshark使用

此软件基于winpcap支持,安装完成无需重启即可使用。当然,官方也提供绿色版本,但绿色版本无法实现同时多窗口运行,所以推荐安装版。可能个别系统为了防止arp攻击做了免疫,导致winpcap无法正确安装,如wireshark提示错误请先下载Npptools.dll恢复到Windows目录即可

打开wireshark我们可以看到整个软件功能明了的界面,整个软件界面为标准的Windows软件排布,顶部将常用及主要功能按钮摆放一排。

wireshark开始使用之前可以将鼠标移至各按钮上看下其基本功能,使用之前也有必要了解下tcp-ip相关基础知识,根据具体用途及使用目的不同,也有必要对相关知识做相应的了解。 如想诊断局域网内arp攻击(随便举个例,诊断arp工具目前市面上有不少傻瓜工具,如WinArpAttacker这种集诊断与防御攻击于一身,关于WinArpAttacker可以参考本人另外一篇文章:局域网攻击神器:WinArpAttacker,那么就需要对arp相关流程有一定的了解,才能在众多的数据包中分析出哪些是正常的arp请求应答,哪些是恶意所为,其他如http等,在此不做讨论。

下面就以抓取网页访问行为为例实际操作示范

开始第一步:选择需要过滤的协议

点击工具栏左边第一或者第二个按钮,将打开设置界面。默认会直接将本机所有的网络适配器列出,点击start将直接开始抓取所有能够监听到的数据包,点击option将回到设置界面。

一般选择物理网卡,然后设置过滤规则(capture filter)。 本次要抓取的是网页访问行为,那么选择http tcp port(80)就可以了。当然,如果要抓取https协议,那么相应的 添加and tcp port 443

实际上wireshark会将所有与已选的协议匹配的数据包保留,所以后期开始抓包后还可以再次选择需要过滤的协议。

设置好协议后就可以开始了,我们可以看到其中包含了在过滤规则内的所有的监听到的数据包,在数据量较大时,一个个数据包查看将是个巨大的工程,且对你的眼睛也是巨大的挑战。

针对此情况,我们有必要对已经过滤过的协议再次进行信息展示过滤。 我们可以看到界面上有个输入框,我们可以选择左边的filter按钮进入,这就是之前提过的可以再次选择过滤协议的地方。

对已经抓取到的数据,我们可以对输出信息再次筛选。如果对http协议或者行为有了解,那么你可以直接在输入框中输入需要过滤的信息,格式如http.request....,输入的过程中软件会相应的给出引导提示,最终完成自己需要过滤的信息,按右边的apply按钮应用过滤信息。

另外一种如图6所示,选择自己想要展示的信息,右边可以选择匹配或者包含等关系。

通过定制各种过滤规则,可以最大可能地过滤掉一些垃圾信息。当然,很多时候我们不知道自己需要什么信息,这个时候就不得不费神费力费眼睛去找了。

最终多个过滤条件用"and"连接。

以上为简单的使用介绍,更多细节还需要亲自使用才能有所发现。总之使用方法不难,难在抓到后的数据整理分析,从监听到的杂乱数据中发掘自己需要的部分。

本站空间不在墙内,速度不是很好,可能有同学看不到图片,保存了个pdf文件,点击下载:wireshark使用简介.pdf

必要知识补充

三次握手Three-way Handshake

一个虚拟连接的建立是通过三次握手来实现的

1
(Client) –> [SYN] –> (Server)

假如Client和Server通讯。 当Client要和Server通信时,Client首先向Server发一个SYN (Synchronize) 标记的包,告诉Server请求建立连接。
注意: 一个 SYN包就是仅SYN标记设为1的TCP包(参见TCP包头Resources)。 认识到这点很重要,只有当Server收到Client发来的SYN包,才可建立连接,除此之外别无他法。因此,如果你的防火墙丢弃所有的发往外网接口的 SYN包,那么你将不 能让外部任何主机主动建立连接。

1
(Client) <– [SYN/ACK] <–(Server)

接着,Server收到来自Client发来的SYN包后,会发一个对SYN包的确认包(SYN/ACK)给Client,表示对第一个SYN包的确认,并继续握手操作。
注意: SYN/ACK包是仅SYN 和 ACK 标记为1的包。

1
(Client) –> [ACK] –> (Server)

Client收到来自Server的SYN/ACK 包,Client会再向Server发一个确认包(ACK),通知Server连接已建立。至此,三次握手完成,一个TCP连接完成。
Note: ACK包就是仅ACK 标记设为1的TCP包。 需要注意的是当三此握手完成、连接建立以后,TCP连接的每个包都会设置ACK位。

这就是为何连接跟踪很重要的原因了。 没有连接跟踪,防火墙将无法判断收到的ACK包是否属于一个已经建立的连接。一般的包过滤(Ipchains)收到ACK包时,会让它通过(这绝对不是个 好主意)。 而当状态型防火墙收到此种包时,它会先在连接表中查找是否属于哪个已建连接,否则丢弃该包。

四次握手Four-way Handshake

四次握手用来关闭已建立的TCP连接

  1. (Client) –> ACK/FIN –> (Server)
  2. (Client) <– ACK <– (Server)
  3. (Client) <– ACK/FIN <– (Server)
  4. (Client) –> ACK –> (Server)

注意: 由于TCP连接是双向连接, 因此关闭连接需要在两个方向上做。ACK/FIN 包(ACK 和FIN 标记设为1)通常被认为是FIN(终结)包。然而, 由于连接还没有关闭, FIN包总是打上ACK标记。 没有ACK标记而仅有FIN标记的包不是合法的包,并且通常被认为是恶意的。

连接复位Resetting a connection

四次握手不是关闭TCP连接的唯一方法。 有时,如果主机需要尽快关闭连接(或连接超时,端口或主机不可达),RST (Reset)包将被发送。 注意在,由于RST包不是TCP连接中的必须部分, 可以只发送RST包(即不带ACK标记)。 但在正常的TCP连接中RST包可以带ACK确认标记

请注意RST包是可以不要收到方确认的?

无效的TCP标记Invalid TCP Flags

到目前为止,你已经看到了 SYN, ACK, FIN, 和RST 标记。 另外,还有PSH (Push) 和URG (Urgent)标记。

最常见的非法组合是SYN/FIN 包。 注意:由于 SYN包是用来初始化连接的, 它不可能和 FIN和RST标记一起出现。 这也是一个恶意攻击。

由于现在大多数防火墙已知 SYN/FIN 包, 别的一些组合,例如SYN/FIN/PSH, SYN/FIN/RST, SYN/FIN/RST/PSH。很明显,当网络中出现这种包时,很你的网络肯定受到攻击了。

别的已知的非法包有FIN (无ACK标记)和”NULL”包。如同早先讨论的,由于ACK/FIN包的出现是为了关闭一个TCP连接,那么正常的FIN包总是带有 ACK 标记。”NULL”包就是没有任何TCP标记的包(URG,ACK,PSH,RST,SYN,FIN都为0)。

到目前为止,正常的网络活动下,TCP协议栈不可能产生带有上面提到的任何一种标记组合的TCP包。当你发现这些不正常的包时,肯定有人对你的网络不怀好意。

UDP (用户数据包协议User Datagram Protocol)

TCP是面向连接的,而UDP是非连接的协议。UDP没有对接受进行确认的标记和确认机制。对丢包的处理是在应用层
来完成的。(or accidental arrival)。

此处需要重点注意的事情是:在正常情况下,当UDP包到达一个关闭的端口时,会返回一个UDP复位包。由于UDP是非面向连接的, 因此没有任何确认信息来确认包是否正确到达目的地。因此如果你的防火墙丢弃UDP包,它会开放所有的UDP端口(?)。

由于Internet上正常情况下一些包将被丢弃,甚至某些发往已关闭端口(非防火墙的)的UDP包将不会到达目的,它们将返回一个复位UDP包。

因为这个原因,UDP端口扫描总是不精确、不可靠的。

看起来大UDP包的碎片是常见的DOS (Denial of Service)攻击的常见形式 (这里有个DOS攻击的例子,http://grc.com/dos/grcdos.htm ).

ICMP (网间控制消息协议Internet Control Message Protocol)

如同名字一样, ICMP用来在主机/路由器之间传递控制信息的协议。 ICMP包可以包含诊断信息(ping, traceroute - 注意目前unix系统中的traceroute用UDP包而不是ICMP),错误信息(网络/主机/端口 不可达 network/host/port unreachable), 信息(时间戳timestamp, 地址掩码address mask request, etc),或控制信息 (source quench, redirect, etc) 。

你可以在http://www.iana.org/assignments/icmp-parameters 中找到ICMP包的类型。

尽管ICMP通常是无害的,还是有些类型的ICMP信息需要丢弃。

Redirect (5), Alternate Host Address (6), Router Advertisement (9) 能用来转发通讯。

Echo (8), Timestamp (13) and Address Mask Request (17) 能用来分别判断主机是否起来,本地时间 和地址掩码。注意它们是和返回的信息类别有关的。 它们自己本身是不能被利用的,但它们泄露出的信息对攻击者是有用的。

ICMP消息有时也被用来作为DOS攻击的一部分(例如:洪水ping flood ping,死 ping ?呵呵,有趣 ping of death)?/p>

包碎片注意A Note About Packet Fragmentation

如果一个包的大小超过了TCP的最大段长度MSS (Maximum Segment Size) 或MTU (Maximum Transmission Unit),能够把此包发往目的的唯一方法是把此包分片。由于包分片是正常的,它可以被利用来做恶意的攻击。

因为分片的包的第一个分片包含一个包头,若没有包分片的重组功能,包过滤器不可能检测附加的包分片。典型的攻击Typical attacks involve in overlapping the packet data in which packet header is 典型的攻击Typical attacks involve in overlapping the packet data in which packet header isnormal until is it overwritten with different destination IP (or port) thereby bypassing firewall rules。包分片能作为 DOS 攻击的一部分,它可以crash older IP stacks 或涨死CPU连接能力。

Netfilter/Iptables中的连接跟踪代码能自动做分片重组。它仍有弱点,可能受到饱和连接攻击,可以把CPU资源耗光。

更多wireshark的规则,可以参考:http://openmaniak.com/cn/wireshark_filters.php

(以上相关补充知识引自:http://www.clxp.net.cn/article.asp?id=2288