网络安全(三)-- 网络嗅探及协议分析技术

  • 目标
    • 了解网络嗅探的基本含义
    • 了解tcpdump工具的基本用法
    • 掌握tcpdump工具抓包保存到文件的方法
    • 熟悉wireshark工具的基本用法
    • 掌握借助wireshark抓包工具分析简单网络协议的方法

6.1. 概述

网络嗅探是一种常用的数据收集、分析的方法:

黑客常通过网络嗅探获取主机或网络的控制权,安全人员亦使用网络嗅探进行信息泄露和攻击行为分析。

嗅探所得数据,可以是用户的账号和密码,也可以是一些商用机密数据。

常用的工具包括tcpdump(命令行)、wireshark(图形界面)

6.2. Tcpdump嗅探器

tcpdump是一个用于捕获网络报文,并输出报文内容的工具。

tcpdump 是一款功能强大的命令行嗅探(抓包)工具。

Tcpdump项目官网, 该项目除提供tcpdump工具外,还提供了一个用于网络流量捕获的c/c++库(可移植), 可用于网络协议分析领域的二次开发。

tcpdump在windows的版本叫WinDUMP,

6.2.1. 牛刀小试

  • 基本用法
itcast@itcast $ sudo tcpdump  -i wlp2s0

-i wlp2s0 , -i选项用来指定网络接口设备,wlp2s0 为我网络设备名称,你的电脑可能为eth0

-v-vv, 选项用来显示更详细(繁琐)的输出

tcpdump的总的输出格式:系统时间 协议 源主机.端口 > 目标主机.端口 数据包参数

  • 典型用法

    tcpdump作为命令行抓包神器, 一般抓包保存,借助wireshark图形化协议分析工具进行分析网络包。

    -w filename , 用于指定保存的文件

itcast@itcast $ sudo tcpdump  -i wlp2s0   -w wlp2s0_2018.pcap
tcpdump: listening on wlp2s0, link-type EN10MB (Ethernet), capture size 262144 bytes

添加 -v, 会显示抓取到的包数量,如下

itcast@itcast $ sudo tcpdump  -i wlp2s0  -v -w wlp2s0_2018.pcap
tcpdump: listening on wlp2s0, link-type EN10MB (Ethernet), capture size 262144 bytes
Got 15
  • 帮助信息

    man信息

itcast@itcast $ man tcpdump

-h 选项,显示帮助信息

itcast@itcast $ sudo tcpdump -h
tcpdump version 4.9.2
libpcap version 1.8.1
OpenSSL 1.0.2l  25 May 2017
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
        [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
        [ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
        [ -Q in|out|inout ]
        [ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
        [ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
        [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
        [ -Z user ] [ expression ]

6.2.2. 高级过滤技巧

tcpdump作为一个命令行工具,可以包含过滤表达式( filter expression),满足表达式的报文将会被捕获。 如没有给过滤表达式,则网络上所有的信息包将会被捕获。

  • 捕获特定主机的网络包(src, dst)host
itcast@itcast $ sudo tcpdump -i wlp2s0 host 61.135.169.121

host 61.135.169.121 获取源ip或者目标ip为61.135.169.121的网络数据包

  • 捕获特定源IP的网络包 src
itcast@itcast $ sudo tcpdump -i wlp2s0 src 61.135.169.121
11:32:09.605183 IP 61.135.169.121.https > localhost.46000: Flags [.], ack 518, win 808, length 0
。。。
  • 捕获特定目标IP的网络包 dst
itcast@itcast $ sudo tcpdump -i wlp2s0 dst  61.135.169.121 

11:33:31.977839 IP localhost.46010 > 61.135.169.121.https: Flags [.], ack 3076821759, win 237, length 0
11:33:31.977858 IP localhost.46004 > 61.135.169.121.https: Flags [.], ack 4115011400, win 237, length 0
。。。
  • 捕获特定端口的网络包 port
itcast@itcast $ sudo tcpdump -i wlp2s0 port 80
  • 捕获特定协议的网络包 tcp/arp/udp/...
itcast@itcast $ sudo tcpdump -i wlp2s0  host 172.16.28.100 and tcp
itcast@itcast $ sudo tcpdump -i wlp2s0  arp
  • 帮助信息
itcast@itcast $ man pcap-filter

补充: 三种逻辑运算: 取非运算( ‘not ' or '! ‘)、 与运算(’and’ or,’&&')、 或运算(’or’ or ‘||’)

6.2.3. 附录

Panda.Guo@2018-04-27 16:15:09 $ man tcpdump
-A 以ASCII格式打印出所有分组,并将链路层的头最小化。
-c 在收到指定的数量的分组后,tcpdump就会停止。
-C 在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数file_size 中指定的大小。
    如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。
    参数 file_size 的单位是兆字节(是1,000,000字节,而不是1,048,576字节)。

-d 将匹配信息包的代码以人们能够理解的汇编格式给出。
-dd 将匹配信息包的代码以c语言程序段的格式给出。
-ddd 将匹配信息包的代码以十进制的形式给出。
-D 打印出系统中所有可以用tcpdump截包的网络接口。
-e 在输出行打印出数据链路层的头部信息。
-E 用spi@ipaddr algo:secret解密那些以addr作为地址,并且包含了安全参数索引值spi的IPsec ESP分组。
-f 将外部的Internet地址以数字的形式打印出来。
-F 从指定的文件中读取表达式,忽略命令行中给出的表达式。
-i 指定监听的网络接口。
-l 使标准输出变为缓冲行形式,可以把数据导出到文件。
-L 列出网络接口的已知数据链路。
-m 从文件module中导入SMI MIB模块定义。该参数可以被使用多次,以导入多个MIB模块。
-M 如果tcp报文中存在TCP-MD5选项,则需要用secret作为共享的验证码用于验证TCP-MD5选选项摘要(详情可参考RFC 2385)。
-b 在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。
-n 不把网络地址转换成名字。
-nn 不进行端口名称的转换。
-N 不输出主机名中的域名部分。例如,‘nic.ddn.mil‘只输出’nic‘。
-t 在输出的每一行不打印时间戳。
-O 不运行分组分组匹配(packet-matching)代码优化程序。
-P 不将网络接口设置成混杂模式。
-q 快速输出。只输出较少的协议信息。
-r 从指定的文件中读取包(这些包一般通过-w选项产生)。
-S 将tcp的序列号以绝对值形式输出,而不是相对值。
-s 从每个分组中读取最开始的snaplen个字节,而不是默认的68个字节。
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc远程过程调用)和snmp(简单网络管理协议;)。
-t 不在每一行中输出时间戳。
-tt 在每一行中输出非格式化的时间戳。
-ttt 输出本行和前面一行之间的时间差。
-tttt 在每一行中输出由date处理的默认格式的时间戳。
-u 输出未解码的NFS句柄。
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。
-vv 输出详细的报文信息。
-w 直接将分组写入文件中,而不是不分析并打印出来。

6.3. Wireshark 网络协议分析工具

Wireshark(前身Ethereal)是一个网络报文分析工具。 网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。 2006年6月,因为商标的问题,Ethereal更名为Wireshark。

wireshark 官网

6.3.1. 基本用法

按照国际惯例,从最基本的程序启动说起。

开启抓包

启动wireshark程序后, 在在接口列表中选择接口名称(见下图中标识1),然后点击“开始捕获分组”(见下图标识2)在此接口上抓包。 本例选取enp8s0, 具体因电脑网卡不同而异, 关于enp8s0的含义,后续我写一篇网文做一正式说明。

报文捕获窗口

选取接口名称并点击开始捕获之后,就可以看到实时接收的报文。Wireshark会捕捉系统发送和接收的每一个报文。如果抓取的接口是无线并且选项选取的是混合模式,那么也会看到网络上其他报文。

接下来再界面我们可以看到wireshark抓到的实时数据包。我们对数据包的各个字段进行解释。

  • No:代表数据包标号。
  • Time:在软件启动的多长时间内抓到。
  • Source:来源ip。
  • Destination: 目的ip。
  • Protocol:协议。
  • Length:数据包长度。
  • info:数据包信息。

在上面wireshark抓包窗口中,可以简单分割成三个小窗口,上部窗口每一行对应一个网络报文,点击某一行可以在下面两个窗口看到更多信息。中间窗口描述的是报文里面每一层的详细信息。底 部窗口以十六进制和ASCII码的方式列出报文内容。

停止抓包

在抓包过程中,我们随时可以点击图标停止或启动。来停止或者启动抓取数据包。 

在上图中,标识2的地方, 为停止抓取数据包, 标识3的地方,为再次启动抓取数据包。

6.3.2. 报文过滤及分析

报文过滤,是wireshark出彩的地方,也是网络协议的分析的重要工作步骤

在下图方框中,输入相应的源ip、目的ip、协议等等表达式,点击箭头部分,在窗口中即可显示过滤后的数据包。

  • 典型IP地址过滤表达式

    • ip.src==172.16.28.102 : 指定源IP
    • ip.dst==192.168.0.111 : 指定目标IP
    • ip.addr == 192.0.2.1 : 指定IP,(不区分源和目标IP)
    • ip.src==192.168.43.167 and ip.dst==223.166.152.109 : 指定源ip 并且目标IP
    • ip.src==192.168.43.167 or ip.dst==223.166.152.109 : 指定源ip 或者目标IP
  • 典型端口过滤表达式

    • tcp.port ==52304
    • tcp.dstport==30
    • tcp.srcport==52304
    • udp.....
  • 典型网络协议过滤表达式

    • telnet
    • tcp
    • udp
    • 。。。。

6.3.3. 网络嗅探实战

  • 目标: 通过抓取telnet网络报文, 分析并获取用户登录口令

    telnet 登录典型命令telnet 目标主机ip -l 用户名 , 在Password后输入口令,

itcast@itcast $ telnet 127.0.0.1 -l itcast
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Password: 
---> 输入口令

Last login: Thu Sep  6 18:19:01 CST 2018 from localhost on pts/1
。。。。。。
  • 补充

    安装telnet和telnetd服务

itcast@itcast $ sudo apt-get install telnet telnetd

6.3.4. 补充: 普通用户抓包配置

  • 添加wireshark用户组。
Panda.Guo@2018-04-27 10:08:46 $  groupadd wireshark
Panda.Guo@2018-04-27 10:07:30 $ sudo cat /etc/group | grep "wireshark"
wireshark:x:128
  • 添加当前用户(我的为panda,具体根据情况决定)到wireshark组
Panda.Guo@2018-04-27 10:12:23 $ sudo usermod -aG wireshark panda
Panda.Guo@2018-04-27 10:13:05 $ sudo cat /etc/group | grep "wireshark"
wireshark:x:128:panda
  • 将dumpcap更改为wireshark用户组
Panda.Guo@2018-04-27 10:16:08 $ ls -l /usr/bin/dumpcap 
-rwxr-xr-- 1 root root  96464 Jan 23 01:03 /usr/bin/dumpcap
Panda.Guo@2018-04-27 10:15:00 $ sudo chmod  root:wireshark /usr/bin/dumpcap
Panda.Guo@2018-04-27 10:16:23 $ ls -l /usr/bin/dumpcap 
-rwxr-xr-- 1 root wireshark 96464 Jan 23 01:03 /usr/bin/dumpcap
  • 设置 setuid (root), 使普通用户执行具备root用户权限,或者添加能力

方法一:setuid root

Panda.Guo@2018-04-27 10:19:16 $ sudo chmod 4754 /usr/bin/dumpcap
Panda.Guo@2018-04-27 10:19:34ls -l /usr/bin/dumpcap 
-rwsr-xr-- 1 root wireshark 96464 Jan 23 01:03 /usr/bin/dumpcap

方法二:添加能力

Panda.Guo@2018-04-27 10:20:39 $ sudo setcap  "cap_net_admin,cap_net_raw+eip" /usr/bin/dumpcap
Panda.Guo@2018-04-27 10:21:28sudo getcap /usr/bin/dumpcap 
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip

6.4. 知识拓展

  • 网络嗅探的工作原理

    所有网络接口都有一个硬件地址(MAC),用于区别其他网络设备。

    在正常情况下,一个合法的网络接口应该只能响应属于自己的网络数据。

    然而,当将本地网卡设置成混杂状态时,它将对所有网络数据进行响应。

    由于嗅探器工作于网络环境的底层(链路层),它能够拦截所有在网络上传送的数据,再通过相应的软件工具,就可以实时分析这些数据的内容。

  • 交换网络

    在共享网络中,把网卡设为混杂模式就可以监听所有的网络数据包,但是在交换网络中,情况就发生了变化。

    以太网分为共享式以太网和交换式以太网:

    共享式以太网通常以集线器作为网络设备,交换式以太网通常使用交换机作为网络连接设备。

    共享式以太网中数据帧以广播方式传送到每个以太网端口,网内每台主机的网卡能接收到网内的所有数据帧。因此只要把网卡设置成为混杂模式就可以获取到这本地网卡的所有数据帧。

    最典型的交换网络使用交换机连接,在交换机中可以设为一个端口一个MAC地址,形成一个端口对应一个MAC地址对。这样当网络数据包到达端口时,而不是转发给所有的端口,只是转发MAC对应的端口。这样,其他端口的通讯不受干扰,所以其他端口上的主机就无法接收到网络上的数据包了。

Tips:从网络嗅探角度看,交换机连接网络,比hub连接网络要安全。

  • 数据包在局域网内的传输方式

    众所周知,数据包在互联网上的传播是根据IP地址进行寻址的,但是完整的过程并非如此。数据包通过IP地址可以达到的最远的地点就是目标主机所在的子网,而在该子网内的寻址却是使用物理地址的,即MAC地址。

    数据包被传送到目标主机所在的子网时,如果该子网为共享式网络(由集线器连接),数据包将被广播方式传播出去,这意味着该子网内的所有主机都可以接收到该数据包。当主机接收到数据包后通常会先检查其目的MAC地址,如果目的MAC地址不是自己,那么就是丢弃,只有目的MAC地址为自己的数据包才会将其交付给上一层处理。

    Sniffer将网卡设置为混杂模式,这样就可以接收到所有的数据包了,达到了嗅探了目的。

    (如果为交换网络,则根据MAC地址转发到相应主机,当MAC地址为FFFFFFFFFF...全1时广播)。

    上述内容待确认。

  • 设置网卡混杂模式

    网卡当前是否是混杂模式, 关键通过ifconfig命令,查看flags项中,是否有PROMISC.

#设置混杂模式(其中enp8s0为你的网络接口名称,视具体而定)
itcast@itcast $ sudo ifconfig enp8s0 promisc
itcast@itcast $ sudo ifconfig enp8s0 
enp8s0: flags=4355<UP,BROADCAST,PROMISC,MULTICAST>  mtu 1500
        ether e0:db:55:f0:07:d0  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 16  

#取消混杂模式
itcast@itcast $ sudo ifconfig enp8s0 -promisc
itcast@itcast $ sudo ifconfig enp8s0 
enp8s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether e0:db:55:f0:07:d0  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 16  
  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
147 第四章 网络安全协议 1 第四章 网络安全协议 SSL协议 SET协议 IPSec协议 2 因特网与TCP/IP安全-1TCP/IP协议栈 TCP/IP是一组通信协议的缩写 ISO/OSI模型及其与TCP/IP的关系 3 因特网与TCP/IP安全-IP协议 IP数据包中含有源地址和目的地址 不可靠协议,没有做任何事情来确认数据包是否按顺序或是未被破坏 而高层在接受服务时通常假设源地址是有效的 IP地址成为认证的基础 IP协议存在的安全问题不少 4 IP欺骗 攻击者通过伪造一个可信任地址的数据包以使一台机器认证另一台机器的复杂技术 攻击是利用应用程序之间基于IP地址的认证机制,攻击者通过IP地址欺骗获得远程系统的非法授权访问。 5 IP欺骗 过程描述: 1、X->B: SYN(序列号为M),IP=A 2、B->A: SYN(序列号为N),ACK(应答序号=M+1) 此时A没有同B发起连接,当A收到B的包后,会发送RST置位的包给B,从而断开连接 此时攻击者事先让A无法对来自B的任何数据包进行应答。 3、X->B: ACK(应答序号=N+1) IP=A 攻击者猜测B发送给A的序列号。若猜测成功则,X将获得主机B赋予A的权利。 6 IP欺骗 辅助技术1:如何阻止A响应B的包- SYN 淹没 7 IP欺骗 辅助技术2:序列号预测 攻击者事先要进行连接试验: (1)同目标主机进行连接 (2)目标主机应答 (3)记录应答包所含的序列号,继续步骤1测试 分析序列号产生的模式 8 攻击检测 上述攻击过程中,攻击者必须依照一定的顺序来完成网络入侵,这往往是攻击的一种先兆。可安装一个网络嗅探器。 (1)最初,会检测到大量的TCP SYN从某个主机发往A的登录端口。 (2)大量的TCP SYN包将从主机X经过网络发往主机B,相应的有SYN+ACK包从主机B发往X,然后主机X用RST作应答 9 其他措施 配置路由器和网关,使他们拒绝网络外部与本网内具有相同IP地址的连接请求 当包的源IP地址不在本地子网内时,路由器和网关不应该把本网主机的包发出去,以阻止内部用户去破坏他人网络 10 因特网与TCP/IP安全-TCP协议 TCP安全缺陷-TCP连接的可靠性 初始化连接:次握手,确保双方做好传输准备,统一序列号。 SYN, SEQ = x 主机 B SYN, ACK, SEQ = y, ACK= x 1 ACK, SEQ = x + 1, ACK = y 1 确认 确认 主机 A 连接请求 11 TCP安全缺陷-没有任何认证机制 TCP会话劫持 所谓会话,就是两台主机之间的一次通讯。 例如Telnet到某台主机,这就是一次Telnet会话; 浏览某个网站,这就是一次HTTP会话。 12 会话劫持(Session Hijack),就是在一次正常的会话过程当中,攻击者作为第方参与到其中,他可以在正常数据包中插入恶意数据,也可以在双方的会话当中进行监听,甚至可以是代替某一方主机接管会话。 原因: TCP假定只要接受到的数据包含有正确的序列号就认为数据是可以接受的。 一旦连接建立,服务器无法确定进入的数据包是否来自真实的机器。 13 会话劫持防范 防范会话劫持是一个比较大的工程。 最根本的解决办法是采用加密通讯,使用SSH代替Telnet、使用SSL加强HTTP,或者干脆使用IPSec/VPN。 其次,监视网络流量,如发现网络中出现大量的ACK包,则有可能已被进行了会话劫持攻击。 完善认证措施,不仅仅在建立会话时进行认证 14 SSL协议—1 概况 SSL协议(Security Socket Layer)是Netscape公司于1994年提出的基于web应用的安全协议。主要介绍SSLv3. SSL主要采用公开密钥体制和x.509数字证书技术。 15 16 SSL协议—1 概况 协议的位置: SSL介于TCP和应用层协议之间。 SSL可以用于任何面向连接的安全通信,但通常用于安全web应用的HTTP协议。 SMTP IP SSL TCP HTTP FTP 17 SSL协议—1 概况 SSL提供一个安全的"握手"来初始化一个TCP/IP连接 建立TCP"连接" SSL握手,建立SSL会话 完成客户端和服务器之间关于安全等级、密码算法、通信密钥的协商,以及执行对连接端身份的认证工作。 SSL连接上所传送的应用层协议数据都会被加密,从而保证通信的机密性。 18 SSL协议—1 概况 提供的安全保护 SSL 服务器鉴别 允许用户证实服务器的身份。具有 SS L功能的浏览器维持一个表,上面有一些可信赖的认证中心 CA (Certificate Authority)和它们的公开密钥。 (2) 加密的 SSL 会话 客户和服务器交互的所有数据都在发送方加密,在接收

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值