一、前言
网络扫描和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攻击等安全威胁时的分析效率和准确性。