由头.

之前读了很多书籍,但是现在回顾的时候,很多内容仅仅是熟悉,而不是真正掌握。所以尝试一种新的方式,将读书时觉得比较重要的,或者是自己还不理解的东西记录下来。达到这本书我已经不需要再去翻,只要看笔记即可的效果。

第一章 数据包分析技术与网络基础

  1. 数据包分析可以看到除了加密信息之外的所有信息
  2. 流行的数据包分析软件 tcpdump wireshark OmniPeek
  3. 数据包嗅探器的工作原理 将网卡设置为混杂模式从网络线缆上收集二进制数据并转换和分析
  4. 并非每个数据包都是从应用层产生的
  5. 集线器在半双工模式下运行,在所有的端口上转发
  6. 交换机用CAM 内容寻址寄存器 根据MAC地址来唯一确定设备
  7. 路由器 全双工
  8. 网络流量分为广播、多播、单播
    • MAC广播地址 FF:FF:FF:FF:FF:FF
    • IP广播地址 ip范围内最大的地址
  9. 多播的工作原理是将数据包接受者加入多播组的编制方案 #P16

第二章 监听网络线路

本章目标:考虑网络中的设备,决定在哪里安置嗅探器
  1. 混杂模式是从网络线路上查看所有流量的模式,即使流量不是发给本机的。正常的情况可以收到arp协议发送的广播包。
  2. 在集线器连接的网络中嗅探可以看到所有的流量,但是同一时刻只有一个设备可以通信,现在不常见,经常会产生冲突。
  3. 在交换式网络中嗅探:(正常的可视范围是本机数据包和广播数据包)
  • 端口镜像
    • cisco命令 set span <source port > <destnation. port >
    • 最佳方法,不会留下痕迹,不会产生额外数据包
  • 集线器输出
    • 将本机和目标用同一个集线器连接
  • 网络分流器
    • 三口:获得流入流出所有流量
    • 四口:可单独关注某一方向上的流量
  • arp欺骗
    • 工具:Cain&Abel

    • arp协议:

      A想要和B通信,但是A不知道B的mac地址,于是在广播域内发送一个广播包(向mac层的广播地址发送一个数据包),问:“谁知道ip B的mac地址?” B发送一个arp request,A收到B的mac地址,并保存在自己的缓存表中,AB于是可以通信。

    • 可以使用非对称路由的方式避免所有流量经过嗅探器,避免DOS

第三章 wireshark入门

1.主界面:packet list、packet details、packet bytes
2.设置首选项:edit->preferences
3.着色规则:view->coloring rules 可以使用明显的颜色来标记关注的流量

第四章 玩转捕获数据包

  1. 保存和导出捕获的文件:从wireshark1.8以后的版本,都将Save As版本中的Packet Range功能移到File->Export Specified Packets菜单中去了。 来自喝小酒的网摘
  2. 合并捕获的文件:File->Merge with Caputre File
  3. 查找:ctrl+F (Ctrl+B/N 前后切换)
  4. 标记:Ctrl+M (Shift+Ctrl+B/N 前后切换)
  5. 打印:Ctrl+P
  6. 时间显示格式:Ctrl+Alt+1~7
  7. 设置相对时间参考:当时间显示格式为相对于捕获开始的时间时,可以设置*REF*来设定参考值
  8. 设定捕获选项:Capture->options 可以设置先存储再捕获、存储的方式、捕获过滤器、停止捕获的条件、显示方式、名字解析等等。
  9. 过滤器:
  • 捕获过滤器(提升捕获性能) P63
    • Capture->Options
    • 格式: dst host 192.168.1.0 &&[|| !] tcp port 80
    • 还可检查协议头中每一字节
      • tcp[13]&32==32 设置了URG位的TCP数据包
      • tcp[13]&16==16 设置了ACK位的ACK数据包
      • tcp[13]==18 TCP SYN-ACK数据包
  • 显示过滤器
    • 完整列表
    • 常用举例
      • !tcp.port=3389 排除RDP流量
      • tcp.flags.syn==1 具有SYN标志位的TCP数据包
      • tcp.port==23 || tcp.port==21 文本管理流量(Telnet或FTP)
      • smtp || pop ||imap 文本email流量

第五章 wireshark高级特性

本章目标:学习wireshark在分析的时候用到的特性
  1. 查看端点、会话信息 Statistics->endpoints/conversations
  2. 查看协议分布情况、占的比重 Statistics->Protocol Hierarchy
  3. 名字解析即一个用来将其地址转化成名字的协议,可能会失败,会带来额外的开销,额外的流量,每次打开一个捕获文件就要重新解析一次。
  4. 协议解析即将原始的比特流翻译成wireshark程序识别的协议并显示出来。比如员工用了443端口来传输ftp流量,wireshark会以ssl解析器来显示。这时,可以强制更换解析器:右键,decode as。可以查看解析器的源码来了解解析的过程,安装程序目录:epan/dissectors/。
  5. 跟踪TCP流可以将TCP流重组成易读的形式。
  6. 查看数据包的长度可以了解到是控制流量比较多还是上传下载的流量比较多。
  7. 图形显示:
    • IO图IO Graph:看系统某时刻的吞吐量,看不同协议的流量传输的时间走势。
    • 双向时间图TCP->Round Trip Time:显示某个数据包一个RTT占用的时间,用来找到通信中的瓶颈。
    • 数据流图Flow Graph:将ip端口之间的交流可视化,比如可以直观的展示TCP三次握手。
  8. 专家信息:可以用来统计数据包中某些特定状态的警告。如:tcp重传输,重复ack等。

第六章 通用底层网络协议

本章目标:学习TCP、UDP、IP的协议,并且分析其流量。

多种协议数据包结构
###1.arp协议###

1.1 地址解析协议包含两个过程:arp请求和arp响应。

arp请求:操作码为1,源mac、源ip、目的mac(00.00.00.00.00.00表示未知)、目的ip。

请求时,以太网的dst位为ff.ff.ff.ff.ff.ff(表示广播),src位为源mac,type为arp。

arp响应:操作码为2,源mac(请求时未知的mac)、源ip、、目的mac、目的ip。

1.2 无偿的(gratuitous)arp请求:未经请求的arp请求,用来更新别的主机arp缓存表,ip地址改变时会发,当操作系统重启时有可能会发,为了负载均衡的时候也会发。

以太网帧格式和arp请求时一致。
arp数据包格式中和arp请求不一样的地方在于:目的ip和源ip一致。

###2.ip###

  1. ipv4地址由网络位和主机位构成,可以用掩码判断,也可以用CIDR判断。
  2. Type of Service 被路由器用来进行流量优先排序。
  3. 经过一个繁忙的路由器,TTL有可能被减去不止1。TTL还可以防止路由器配置错误导致死循环。
  4. ip分片的原因是若2层的协议是以太网,其MTU为1500字节。分片的数据包拥有相同的identification。分片时,flags中的more fragement set若不是最后一个分片,则要置1,offset也要被置数据,第二个偏移量有可能为1480(1500-20ip头)。
  5. 更多参考RFC791。

###3.tcp###

  1. TCP有两类端口号:1~1023知名端口号,1024~65535临时端口号。通信时,源端口号由操作系统选取,目的端口号是标准的。wireshark会对端口号开启名字解析,可以关闭,也可以手动修改名字解析,在程序目录的services的文件中。通用端口号及其对应的服务
  2. 三次握手
    • A发送一个syn包,seq=i
    • B回复一个syn+ack包,ack=i+1,seq=j
    • A回复一个ack包,ack为j+1*,seq为i+1*
    • ack即接受主机希望得到的下一个数据包的序号,ack=seq+1
    • wireshark中可以用相对端口号显示序号,edit->preferences中修改protocols中的tcp
  3. 四次握手
    • A发送FIN/ACK包告诉B通信已经完成
    • B回复ACK响应 ack的值为fin包中seq的值+1
    • B发送FIN/ACK包告诉A通信已经完成
    • A回复ACK响应
    • 四次握手是由于TCP的半关闭造成的,TCP是一个全双工的连接。A是主动关闭,B是被动关闭。
  4. TCP重置。对未知的系统发起一个http请求时,若80端口未打开,则,目标回复一个RST/ACK包,RST表示对80端口通信无效,ACK为seq+1。
  5. 更多参考RFC793|TCP/IP详解 卷1:协议

###4.udp###

  1. udp不关心数据传输的可靠性,使用udp的协议一般用应用层的协议来保证其可靠性。

###5.icmp###

  1. type类型为3表示目标不可达,code类型为3,表示端口不可达。[更多参考](www.iana.org/assignment/icmp-parameters)
  2. type为8,code为0表示是一个echo请求,type为0,code为0表示是一个echo响应。两者通过可变域中的DATA变量的字符串来匹配。
  3. 此处不理解p122

    可以使用增加ping的数据填充,当检测小网络时,强制将数据包分片。这样有什么用?
    icmp的echo请求中使用的随机文本会引起攻击者兴趣。可以用来推测设备使用的操作系统,还可以在这个域中放置数据位作为反向链接的手段。

  4. windows中的tracert路由跟踪使用icmp,原理是设置逐步增加的ttl,使得在到达每一个路由器的时候ttl减为0,路由器回复一个type为11,code为0的响应,表示不可达。响应的icmp数据包被叫做双头包,结尾部分含有 第一次echo请求数据包的ip层头和icmp数据拷贝。(也就是请求时的ip层及以上的数据包被写在了响应中的可变域中,检修的时候很有用),这样就获得了途中的路由器信息。

第七章 常见高层网络协议

###1.DHCP###

  1. DHCP比Bootstrap Protocol更加复杂,已经取代后者。后者用来给设备分配ip地址,或者用来加载镜像启动等等。前者分配ip地址、dns地址、网关地址。DHCP服务器也支持bp的客户端请求,并分配一个不回收的ip地址给他。了解即可。boopstrap wikipedia
  2. DHCP续租过程(DORA)
    • Discover port 68-> port 67
      • 此时没有ip地址,从0.0.0.0发送到255.255.255.255(还不知道dhcp服务器),请求包type为1
    • Offer
      • DHCP服务器回应,提供子网掩码、续租时间、等信息。此时请求的ip地址还未确定,所以用arp协议获取的mac地址来通信。
    • Request
      • 请求的地址不再是空,而是DHCP offer的ip地址,dhcp服务器的地址也不再是空。
    • Acknowledgement
      • DHCP服务器发送一个ACK确认,并在数据库中记录。
  3. 当在租约内续租的时候,只需要RA两步即可。
  4. dhcp选项完整列表

###2.DNS###

  1. 递归查询即dns服务器之间查询,查询时,递归标志位会被置位。如果dns服务器不知道当前域名的ip地址,那么该服务器会变成dns客户端向上一级dns服务器查询。
  2. 区域传送一般发生在要对dns服务器做冗余备份的时候发生,防止dns服务器挂了,域名解析不成功。
    分为:AXFR和IXFR 整个区域和部分区域两种。传送时使用TCP协议保证可靠性。
  3. 个人总结:所以DNS可以用TCP和UDP的53端口来实现通信,一般是UDP。

3.http

不做过多描述。

第八章 基础的现实世界场景

本章目标:分析一些常见的网络流量
  1. 不理解,twitter和facebook对比分析
  2. 访问网站时,HTTP流量可能需要应用别的站点的资源,这会带来DNS查询。2n个dns会话代表有n个查询。
    可用此法,查看请求的页面总共指向了哪些域名。
  3. 新版本的wireshark不存在summary选项,可以点击左下角的笔记图标查看捕获文件的信息。
  4. 实际案例分析(个人思考为主)
    • 可以访问内网资源,不可以访问internet
      • 正常上网的过程是PC先获得DHCP分配的动态ip(或者手动设置一个ip),然后将数据包发送到默认网关,又网关进一步发送,从而接入internet。若是发送一个http请求,应该由dns服务器解析成正确的ip地址,获得ip地址之后,再由arp协议获得mac地址。之后便可以在物理层通信。(个人总结)
      • 然而遇到的情况是一直在进行dns查询,说明没有获得dns服务器响应的ip地址,而别的用户可以上网,说明dns服务器没问题,可以发送dns查询,说明本身的协议栈没问题,所以问题就在于dns服务器发送的ip地址PC收不到。那么就可能是网关没有把数据包转发过来,所以,可能是网关出了问题。
      • 最后检查发现是本机不接受dhcp配置的网关,而是手动配置了ip和网关。其实在一开始发送arp查询的时候,就应该是发往网关的,如果不是发往网关,说明网关配置错了。
    • 不能上网第二个案例 不能上google
      • 遇到的问题是不能上google,arp直接询问了一个未知ip的mac地址,获得了之后与其通信,发送tcp syn包但是获得了一个rst包。
      • 在发送一个http请求的时候,先检查dns缓存表中时候有域名和ip的映射,再检查hosts文件中时候有映射,没有的话再查询dns服务器。案例中在发送syn包之前进行了arp查询mac地址,没有查ip地址,说明已经建立了映射,所以需要看一下host文件中时候有映射,或者清除一下dns缓存表。
      • windows7下查看 和清除dns缓存表: ipconfig /displaydns [/flushdns]
    • 谁都无法上google
      • 在进行一个http请求的时候,向dns服务器发送了一个请求,然后获得了google的ip地址,假设arp过程已经完成了,存在arp缓存表中,之后向目标发送一个syn包,之后又发了一个syn包,目标什么回复都没有。如果是80端口没开应该回复一个rst,什么回复都没有有可能是对方的协议栈除了问题,有可能是开了防火墙,或者web容器配置错误等等。这就不是我们可以解决的了。
    • 打印机故障
      • 在打印了一段时间之后停止工作,根据抓包发现tcp一段时间之后重传了,窗口满。
      • 说明打印机除了问题,书中指出是打印机的内存出了问题。
    • 分公司之困
      • dns查询一般是udp,但是当域传送备份的时候用tcp。(还有别的情况也是用tcp,待进一步研究。共同之处都是用服务器的53端口)
      • 案例是子公司的pc要访问总公司的服务器,要用dns查询一下ip地址,但是没有返回。子公司的dns查询用子公司的dns服务器,子公司的dns服务器要和权威的总公司的dns服务器通信。但是总公司的防火墙配置了允许访问dns服务器的udp 53端口 但是不允许访问tcp的53端口。所以导致子公司的dns服务器不能和总公司的dns服务器通信,所以导致了问题。修改一下防火墙的配置即可解决问题。
    • 生气的开发者
      • 大量的数据在A和B之间传输的时候,B处将收到的数据插入进数据库。但是数据出了问题。有可能是传输过程中网路不好,有可能是程序员写的插入代码有问题。我们可以在B处抓取收集到的数据,看看是否和A处上传的md5值一样,若一样,则证明是程序员写的代码出错了。
      • 查看Flow Graph发现用的是FTP的协议,在A处上传的时候,我们先查找上传的地方,看看文件名,生产过滤器 ftp.request.command="STOR",得到上传时的开始数据包,得到上传的文件名。在B处接收的时候,找到一个传输的数据包,Flow TCP Stream,然后获取save as文件名,看看md5是否相同。相同,则证明网络是好的,在B处成功的拿到了原始的数据,也就是开发者写的程序有问题。
        -总结:能正确分析出原因的基础是理解各个协议的通信过程,了解正确时数据包的样子。

第九章 让网络不再卡

本章目标:网络卡是什么原因?如何解决?学习TCP的错误恢复和流量控制,学习如何网络慢的根源,了解基线测试。
  1. TCP协议允许我们执行回溯分析,不会产生额外的流量,ICMP会。

  2. TCP的重传机制:TCP在发送一个数据包之后开始计时,第一次默认超过一个RTT就会重传。正常情况下,会根据之前发送的数据包的往返时间,计算出一个平均的RTO,如果超过RTO没有收到ACK,就会重传,再没有收到ACK,RTO则变成两倍。windows默认重传5次,linux默认重传15次,均是可变的。重传的各个数据包之间除了identification和checksum不一致之外其它均一致。

  3. TCP的重复确认:当接收端收到一个非预期的sequenceNum,也就是传输的tcp序号乱序了,那么就会回复一个ack,ack的值为需要的数据包的sequencenum的值。发送方连续收到三个ack的时候,就会停止一切传输,发送一个快速重传。

  4. 选择性ack:若开启选择性ack,也就是在快速重传之前,发送的数据包可以被保留,不需要再次重传。现在的TCP/IP协议栈都支持。

  5. 滑动窗口协议:滑动窗口协议体现了TCP的前瞻性。接收方通过控制ack包的窗口大小来告诉发送方下次发的数据包的量的大小。当窗口大小为0时,暂停传输。这时,发送方可以发送保活数据包来询问接收方是否可以继续发送,而接收方可以继续回复一个ack,窗口大小为0表示继续暂停传输。或者更新窗口大小继续传输。
    疑问是:为什么要发送保活数据包,直接等待接收方的ack不就可以了吗?暂时的解释:保活数据包是用来保证接收方的主机在线的,确保他处于一个繁忙的状态。

  6. 观察重传应该在客户端观察,服务端收不到数据包客户端才会重传。

  7. 可以把重复确认看作是重传的对立面,是从服务端的角度出发的,没有收到数据包就会重复确认发送ack,

  8. 出现零窗口,则可以确定是服务端出了问题。

  9. 如果没有明显的重传数据包或者是ACK数据包或者是零窗口数据包还可以根据时间来判断速度慢的原因:

    • syn和syn/ack对client和server占用的资源很小,如果这两个包之间的时间很长,或者是接下俩服务端回复的ack都很慢,很可能是链路出了问题,可以检查链路过程中的防火墙,路由器,代理服务器等设备。
    • 如果在三次握手之后,客户端若是一个http请求,发送get的时间和三次握手的最后一次握手相差时间很大,那很可能是客户端的出了问题,可能是应用层到传输层之间的问题。
    • 如果是三次握手之后,客户端发送了get请求,服务端回复了ack,之后服务端应该发送数据,如果这段时间很长,那可能是服务端在发送数据段时候出了问题,涉及到服务端的http协议,问题在于服务器。
  10. 网络基线是用来在出问题的时候,所有的努力都尝试过了,还可以和正常时候的流量做对照,防患于未然。

    • 站点基线
      • 使用的协议
      • 广播流量
      • 身份验证序列
      • 数据传播速率
    • 主机基线
      • 查看主机所用的协议
      • 繁忙空闲时候的流量
      • 主机启动和关闭时的流量
      • 身份验证序列
      • 关联了哪些主机(sql服务器等等)
    • 应用程序基线
      • 使用的协议
      • 启动和关闭时候的流量
      • 关联和依赖
      • 数据传输速率
    • 其它
      • 多个时间段创建基线
      • 个人觉得基线没有多大用,现在觉得很难用到

第十章 安全领域的数据包分析

  1. 抓包分析,可实现端口扫描:利用tcp的三次握手,结合conversation窗口查看packet包的数量来查看主机开放了哪些端口。
    • 原理:发送一个syn包,若收到几次ack证明端口开,若收到rst说明端口关,否则可能有防火墙或其它,不确定。
    • syn扫描的优点:快速可靠,准确和协议栈的实现无关,安静不容易被发现。
    • 可以尝试用python写一个端口扫描器
  2. 识别操作系统
    • 被动识别:根据数据包中的特相关域来判断(不通操作系统数据包某些位默认值不一样)

      • ip头中的ttl windows默认128 linux默认64
      • tcp头 windows默认最长段1440 linux默认最长段146
      • 相关软件:p0f
    • 主动识别:主动发起特定的数据包,从响应中判断,不是隐蔽的,但是高效。

      • 参考:《nmap networking scanning》
  3. 识别极光行动的流量,其间提到在span标签内用一个iframe内联帧达到不被用户发现的效果。
  4. arp欺骗原理(arppoison是在受害者上抓包的)。感染过程:
    • [1] 首先收到(ip未知)攻击者的询问:172.16.0.107的地址在哪儿 发送给 172.16.0.1
    • [2] 受害者回复自己的mac地址给攻击者
    • 有疑问,不应该是回复给172.16.0.1吗?为什么回复给攻击者?是根据mac地址给的?那还要172.16.0.1干嘛?
    • [3] 攻击机发送一个未经请求的arp回应,更新受害者arp缓存表,更新172.16.0.1的mac地址
    • 如果需要检测arp欺骗,可以配置IDS,或者要有检测MAC地址变化的软件
  5. CyberEYE是土耳其的工具,一种远程访问木马:Remote-access Trojan RAT
  6. 守护网络安全的人往往靠各种IDS,如果流量出发了IDS的签名,就会产生警报。
  7. 显示每个会话的初始syn数据包:(tcp.flags.syn ==1 ) && (tcp.flags.ack==0) 可以给每个会话着色然后看会话之间的关系。结合各种图像显示,比如IO Graph。
  8. 跟踪TCP Stream还可以恢复出原始的图像,注意要用十六进制编辑器修改。可惜没成功。:(

第十一章 无线网络数据包分析

  1. wlan(无线局域网)遵循802.11标准,有11个信道可以用。一个无线ap一般工作在1 6 11 其中一个信道之上。若为其它的信道,在信道4上嗅探会获得5上的部分流量。如果想在多个信道上切换嗅探,可以使用Kisnet,每秒跳跃10个信道,实现高效嗅探。同样,也可以用metageek公司的Wi-SPY USB硬件设备嗅探整个802.11频谱上的干扰,并用图形化显示分析。

  2. 无线网卡的四个工作模式:

    • 被管理模式 managed model :无线ap和各个pc之间,各个pc的无线网卡驱动依赖无线ap完成通信
    • ad hoc模式:pc 和 pc之间
    • 主模式 master model :一台pc的网卡充当一个wap,为其它pc提供服务
    • 监听模式 moniter model :当一台pc用来做嗅探时,其网卡处于监听模式
    • 用于做数据包分析的无线网卡:ALFA 1000mW USB
  3. windows嗅探无线数据包的工具:airpcap

  4. linux上嗅探无线数据包:启用网卡的监听模式即可。命令 iwconfig

  5. 每一个WAP都有自己独特的BSS ID(基础服务设备识别码),每一个ap在其信道上可能有十几个客户端的流量。

  6. 无线网络安全

    • 加密方式:WEP(有线等效加密)、WPA(无线上网保护接入)、WPA2
    • 又分析了下WEP、WPA的认证成功的数据包和失败的数据包,了解即可。

附录A

介绍一些进一步的学习资源
  1. 另两种数据包分析工具:tcpdump 、windump(tcpdump的windows版本)
  2. Cain&Abel
  3. python的scapy可以实现创建和修改数据包
  4. cloudhark 在线分享数据包的website
  5. 各种数据包的通信样例:pcapr,可以用来学习和分析不同的协议
  6. tcpreplay 重传pacap里的数据包
  7. 数据包分析课程:SANS SEC 503: Instrusion Detection In-Depth
  8. 数据包相关的博客
  9. wireshark大学
  10. 官方wiki

总结

读完整本书最大一些收获:

  • 熟悉wireshark这款工具
  • 了解常见的网络协议并能够对一些简单的流量进行分析找出其中的不合理之处

若想进一步钻研,需要做到:

  • 学习一下附录中的资源,重点是scapy库,学会修改和重发抓下来的数据包
  • 学习一下tcp/ip详解 卷一:协议
  • 将数据包分析和上面的学习结合起来,多抓包,多分析
  • 整就牛

==3/12/2016 12:42:51 PM==