利用Wireshark与Geolite地址库进行IP定位、地图分布可视化及特征报文深入分析

2024-08-09 09:46:31 浏览数 (2)

一、前言

网络扫描和DDoS攻击等行为频繁出现,对网络安全构成严重威胁。为了更好地应对这些安全挑战,我们需要对网络流量来源分布和行为进行深入分析,从而识别潜在的威胁。本文将介绍如何使用MaxMind地址库(包括GeoLite2 ASN、GeoLite2 City和GeoLite2 Country)结合Wireshark进行IP地理位置信息的解析与分析,以及通过Wireshark内置的26个Geo相关字段如何精准过滤我们想要的特征报文,并让它们呈现在地图分布上。

二、获取MaxMind地址库

在MaxMind官网注册并登录账号后,在GeoIP地址库下载页面下载地址库压缩包:

主要下载三个文件:

地址库

描述

GeoLite2 ASN

AS号地址库

GeoLite2 City

城市地址库

GeoLite2 Country

国家地址库

想要保持相对更为准确的地址库数据,建议定期更新一次地址库。

三、配置地址库及字段解读

1.配置地址库

打开wireshark,在编辑(edit) -> 首选项(Preferences) -> Name Resolution选项中,启用IP geolocation,并编辑地址库目录,设置地址库存放的目录:

目录下放置MaxMind三个地址库文件:

2.字段解读

之后任意打开一个报文,如果已经打开过报文,点击reload重载报文:

此时任意点开一个含有外网IP的IP头部,可以看到会附带一系列GeoIP地址库数据:

字段含义如下:

字段

含义

GeoIP City

城市

GeoIP Contry

国家

GeoIP ISO Two Letter Country Code

ISO 3166-1标准定义的两字母国家代码

GeoIP AS Number

AS号

GeoIP AS Organization

管理对应AS号的组织机构

GeoIP Latitude

纬度

GeoIP Longitude

经度

私网IP网段不涉及地理位置信息,因此不会解析私网IP。

3.应用为列

为了比较直观的看出IP地理位置信息,上面任意字段都能设置为列,比如我们筛选源端发过来的SYN包:

代码语言:bash复制
tcp.flags.syn==1 &&tcp.flags.ack==0

之后把源IP国家设置为列(右击国家字段-->应用为列):

应用为列后可以看到最右边将展示源IP所在国家,其它字段同理设置。

四、查看可视化地图分布

1.查看地图分布

统计(Statistics) --> 端点(Endpoints) 里面可以看到IP端点默认会展示上面所述的6个字段,即国家、城市、经纬度、AS号、AS号组织机构:

同时还能生成一份地图分布数据,点击左上角的 地图(Map) --> 在浏览器打开(Open in browser)

并且单独点击每个IP可以查看详细属性信息,AS号、AS所在组织机构、国家、包量、传输字节数:

2.拷贝为CSV/YAML/JSON格式

同样在统计(Statistics) --> 端点(Endpoints)这里,支持将这些数据拷贝为CSV、YAML、三种格式:

CSV:

代码语言:bash复制
Address,Packets,Bytes,Tx Packets,Tx Bytes,Rx Packets,Rx Bytes,Country,City,Latitude,Longitude,AS Number,AS Organization
35.195.38.218,1,68,0,0,1,68,"Belgium","Brussels",50.8534,4.347,396982,"GOOGLE-CLOUD-PLATFORM"
35.195.39.34,1,68,0,0,1,68,"Belgium","Brussels",50.8534,4.347,396982,"GOOGLE-CLOUD-PLATFORM"
35.195.39.63,1,68,0,0,1,68,"Belgium","Brussels",50.8534,4.347,396982,"GOOGLE-CLOUD-PLATFORM"

YAML:

代码语言:yaml复制
---
-
 - Address: 44.204.2.151
 - Packets: 1
 - Bytes: 64
 - Tx Packets: 1
 - Tx Bytes: 64
 - Rx Packets: 0
 - Rx Bytes: 0
 - Country: United States
 - City: Ashburn
 - Latitude: 39.0469
 - Longitude: -77.4903
 - AS Number: 14618
 - AS Organization: AMAZON-AES

JSON:

代码语言:json复制
[
    {
        "AS Number": "1680",
        "AS Organization": "Cellcom Fixed Line Communication L.P",
        "Address": "93.173.35.146",
        "Bytes": "68",
        "City": "Tel Aviv",
        "Country": "Israel",
        "Latitude": "32.0803",
        "Longitude": "34.7805",
        "Packets": "1",
        "Rx Bytes": "68",
        "Rx Packets": "1",
        "Tx Bytes": "0",
        "Tx Packets": "0"
    }
]

五、通过地址库字段过滤报文

wireshark对于geoip功能提供了26个字段可作为过滤条件或应用为列:

过滤字段

含义

ip.geoip.asnum

源/目的IP AS号

ip.geoip.city

源/目的IP所在城市

ip.geoip.country

源/目的IP所在国家

ip.geoip.country_iso

源/目的IP所在国家ISO两字母代码

ip.geoip.dst_asnum

目的IP AS号

ip.geoip.dst_city

目的IP所在城市

ip.geoip.dst_country

目的IP所在国家

ip.geoip.dst_country_iso

目的IP所在国家ISO两字母代码

ip.geoip.dst_lat

目的IP纬度

ip.geoip.dst_lon

目的IP经度

ip.geoip.dst_org

目的IP AS所在组织机构

ip.geoip.dst_summary

目的IP的Geo汇总信息

ip.geoip.lat

源/目的IP的纬度

ip.geoip.lon

源/目的IP的经度

ip.geoip.org

源/目的IP的AS所在组织机构

ip.geoip.src_asnum

源IP AS号

ip.geoip.src_city

源IP所在城市

ip.geoip.src_country

源IP所在国家

ip.geoip.src_country_iso

源IP所在国家ISO两字母代码

ip.geoip.src_lat

源IP纬度

ip.geoip.src_lon

源IP经度

ip.geoip.src_org

源IP AS所在组织机构

ip.geoip.src_summary

源IP的Geo汇总信息

不难发现,ip.geoip.为固定格式,后面接的字段如果以src开头则表示源IP,以dst开头则表示目的IP,两者都不是则表示源或目的,紧接着则是IP地理位置的属性信息:经纬度、AS号、国家、城市、组织机构、ISO两字母代码等。

比如把源/目的IP所在国家、所在城市、AS号应用为列:

这三个列的取值,所用的过滤字段实际就是上面26个中的其中三个:

既然26个字段能被我们任意使用,那么就能可以精准过滤我们想要的符合条件特征的报文,比如下面几种场景。

1.过滤特定国家的报文

比如过滤来源IP国家为美国的报文可以是:

代码语言:bash复制
ip.geoip.src_country == "United States"

过滤来源IP国家为美国、德国或者俄罗斯:

代码语言:bash复制
ip.geoip.src_country in {"United States","Germany","Russia"}

当然你也可以使用或语句,效果是一样的:

代码语言:bash复制
ip.geoip.src_country ==  "United States" || ip.geoip.src_country == "Germany" || ip.geoip.src_country == "Russia"

2.过滤特定城市的报文

过滤阿什本的报文可以是:

代码语言:bash复制
ip.geoip.city == "Ashburn"

过滤华盛顿或者法兰克福的报文:

代码语言:bash复制
ip.geoip.city matches "Washington|^Frankfurt"

过滤解析不到城市的报文:

代码语言:bash复制
!ip.geoip.city

可以看到城市这个字段是空的,因为这些IP在地址库里面没有对应城市数据,其它字段反向过滤方法同理。

3.过滤特定AS号的报文

同理,过滤特定AS号的报文,并且只筛选SYN flag置1的报文:

代码语言:bash复制
ip.geoip.asnum == 12312 && tcp.flags.syn==1

我们可以通过AS号搜索哪些网段属于这个AS内,可以看到212.172.0.0/16就在里面,可以对上,更加佐证了地址库数据准确无误:

以上演示了3个常用字段,所有26个字段过滤方式同理。

六、总结

本文详细介绍了如何利用MaxMind地址库(包括GeoLite2 ASN、GeoLite2 City和GeoLite2 Country)与Wireshark结合,对抓包捕获文件的IP地理位置信息进行深度分析。

同时进一步阐述了如何将感兴趣的字段应用为列,以便更直观地查看IP地理位置信息。此外,还展示了如何利用Wireshark内置的26个Geo相关字段进行精确的报文过滤,从而识别出符合特定地理位置特征的报文。

最后,通过实例演示了如何查看IP地址的地图分布,并将数据导出为CSV、YAML和JSON格式,以便于进一步进行数据分析和处理,极大的提升了在应对网络扫描、DDoS攻击等安全威胁时的分析效率和准确性。

0 人点赞