使用 Raspberry Pi 进行实时恶意无线接入点检测

作者:Chris Jenks

多年前,我曾为一家汽车 IT 提供商工作,偶尔我们会去工厂搜索恶意无线接入点 (WAP)。恶意 WAP 是指公司未批准存在的接入点。因此,如果有人购买了无线路由器并将其插入网络,那将是一个恶意 WAP。恶意 WAP 也可能是某人使用手机或 MiFi 作为 Wi-Fi 热点。

我们使用的工具是笔记本电脑,配备 Fluke Networks 的 AirMagnet,当时这是一款专有的外部 Wi-Fi 网卡和软件仪表板。这些设备需要我们在工厂内走动——这永远是不安全的,因为有生产线、自主机器人、零件卡车、高空作业车、噪音、屋顶通道等等。此外,当 IT 人员带着笔记本电脑四处走动时,现场员工会注意到。我们变得众所周知,拥有恶意 WAP 的人会在我们找到设备之前将其关闭。

我能找到的唯一要求公司进行季度恶意 WAP 扫描的行业是支付卡行业,及其数据安全标准 (PCI-DSS)。就我个人而言,我对偶尔扫描有三个大问题。第一,正如我之前所说,恶意 WAP 在扫描期间被关闭,然后在扫描后重新打开。第二,扫描只是时间快照。快照无法显示日常环境的样子,并且可能会错过潜在的问题。第三,我认为每个公司都应该进行扫描,无论是否被要求,都更有价值。

后来,当我在一家出版公司担任网络工程师时,我发现了解雇主网络上的情况很有好处。公司想知道员工是否遵守政策。公司也担心数据丢失,尤其是在几个项目周围。我们附近的其它公司建立了自己的无线网络,对我们运行的网络造成了干扰。最后,我不得不担心渗透测试人员使用像 WiFi Pineapple 和 Pwn Plug 这样的工具。这些工具允许通过 Wi-Fi 在公司物理边界之外访问网络。

我一直想要的是一个被动式实时无线传感器网络,以监视 Wi-Fi 的变化。像 Kismet 和 Airodump-NG 这样的被动式系统,收集网卡可以检测到的射频 (RF) 中的所有数据包并显示它们。通过查看与隐藏 WAP 通信的客户端,这也可以找到隐藏的 WAP。相比之下,像旧的 Netsumbler 这样的主动式系统,尝试通过广播空 SSID 探测并显示回复的 WAP 来连接 WAP。这会错过隐藏网络。

几年前,我决定回到学校攻读学士学位。我需要找到一个学分来完成毕业。这一个学分变成了一个关于使用 Raspberry Pi (RPi) 创建被动式实时无线传感器网络的独立研究。

大约在我离开汽车行业工作的同时,SANS 研究所的 Larry Pesce 写了一篇名为 “使用 Kismet 和一次性硬件发现恶意无线接入点” 的论文。这是一篇关于使用 Linksys WRT54GL 路由器和 OpenWRT 构建实时无线传感器的论文。但是,直到我已经用 RPi 重新发明了轮子,我才发现这一点。

今天,市场上存在许多无线入侵检测系统,但正如硬件侧边栏中所列出的,我的系统制造成本仅略高于 400.00 美元。根据我通过 Google Shopping 获得的数据,使用 Cisco Network 2014 年的无线 IDS 数据表,类似的设置将花费约 11,500 美元。我认识的一位无线工程师告诉我,他被报价为思科设计的硬件的其中一件就花费了大约两倍的价格。

硬件

以下是每个传感器的硬件——您的价格可能会因购买地点和促销活动而异。

零件成本:每个传感器 69.95 美元;我在项目中使用了六个 Raspberry Pi。

Raspberry Pi 无线传感器无人机

  • Raspberry Pi Model B:35.00 美元(促销价 29.99 美元)。

  • 5v 1amp 电源:9.99 美元。

  • 塑料 Raspberry Pi 外壳:8.99 美元。

  • TP-Link TL-WN722N:14.99 美元。

  • Class 10 SDHC 8 千兆位闪存卡:5.99 美元。

网络

  • 25–50 英尺长的 Cat 5e 网线:已拥有。

  • Linksys WRT54GL:已拥有。

  • Linksys 16 端口工作组交换机:已拥有。

显示器和 Kismet 服务器

  • 运行 Xubuntu Linux 虚拟机的笔记本电脑:已拥有。

当我开始研究使用 RPi 进行这项工作时,我不断遇到人们使用 RPi 和 Kismet 进行驾车寻战、步行寻战和骑车寻战。Trustwave 的 Spider Labs 的 David Bryan 在 2012 年写了一篇名为 “树莓派风格的驾车寻战!” 的博客文章,他在文章中谈到了使用 Kismet 和 RPi 在他所在区域步行和驾车时跟踪 WAP。他使用 USB GPS 设备来绘制接入点的位置。

由于 RPi 被用作固定设备,因此我不需要 GPS。但我确实需要粗略了解传感器放置的位置。根据读数,Wi-Fi 在室内使用 TP-Link 网卡上的全向天线时,有效距离约为 328 英尺(100 米)。拥有现有的无线勘测(或进行一次)将非常有用(请参阅无线勘测侧边栏)。它将让您知道现有 WAP 的位置。如果存在网络文档,也可以从中获取此信息。重要的是要防止检测器被批准的接入点过度驱动。无线勘测或网络文档还应提供已批准设备的 BSSID 以进行过滤。

无线勘测

无线勘测通常是建筑物或位置的地图,显示与无线接入点相关的信号强度。勘测通常是安装新无线网络的第一步。勘测为安装人员提供所需 WAP 的数量、它们的间距以及在这些区域最好使用的信道。

勘测通常使用 WAP 和支持 Wi-Fi 的设备完成。WAP 放置在一个位置,当客户端在区域内移动时,记录信号强度。

恶意 WAP 或勘测 WAP 可以由 Raspberry Pi 和无线网卡以及 Hostapd 构建。大多数关于 Hostapd WAP 的在线文档都说要桥接 RPi 上的网卡。如果 WAP 不会与连接到互联网的客户端一起使用,则可以跳过此步骤。

RPi 不乏可运行的操作系统。我为本项目选择的是在 RPi 上运行 Kali Linux,以及 Airodump-NG 和 Kismet。最初,计划只使用 Kali 和 Kismet,但我遇到了一些限制。我选择 Kali 用于本项目的原因是,我使用的网卡的硬件驱动程序不需要重新编译。Kali 还预装了 Airodump-NG,并且 apt-get update && apt-get install kismet 负责安装我需要的其余部分。

Kali Linux

Kali Linux 是 Backtrack Linux 的新版本——Backtrack Linux 是用于渗透测试和安全的专业 Linux 发行版之一。它目前基于 Debian Linux,预装了以安全为中心的工具。Kali 通过 root 登录运行所有内容。

Kali 提供了 ISO 和 VMware 镜像,包括 64 位、32 位和为单板计算机、Chrome OS 和 Android OS 设备定制构建的 ARM 镜像。

Airodump-NG

Airodump 是一种原始 802.11 数据包捕获设备。它是 Aircrack-NG 套件的一部分。通常,Airodump-NG 会捕获一个数据包文件,以便由 Aircrack-NG 破解。但是,在我的情况下,我想要 Airodump-NG 可以列出它周围看到的客户端和接入点的功能,室内距离约为 300 英尺(此距离基于 802.11 标准的文档)。

什么是 Kismet?

Kismet 是一种 802.11 无线网络检测器、嗅探器和入侵检测系统。Kismet 可以与任何支持原始监听模式的无线网卡一起工作,并且可以嗅探 802.11b、802.11a、802.11g 和 802.11n 流量(设备和驱动程序允许的情况下)。

Kismet 还支持插件架构,允许解码额外的非 802.11 协议。

Kismet 通过被动收集数据包和检测网络来识别网络,这使其能够检测(并在给定时间后,暴露名称)隐藏网络以及通过数据流量存在的非信标网络。

Kismet 有两种可以运行的模式。第一种是 Kismet 服务器,Kismet 用户界面 (Kismet UI) 连接到该服务器(图 1)。Kismet UI 显示 WAP 名称、是否为接入点、是否加密、信道和其他信息。“可见于”列是看到 WAP 的捕获源列表。

图 1. Kismet 网络列表

Kismet 将远程传感器称为无人机。它们通过 /etc/kismet/kismet_drone.conf 中的 kismet 无人机配置文件进行配置。我发现设置这部分的文档相当稀少。我找到的所有内容都跨越多年,并且没有深入细节。

当我配置我的无人机时,我首先设置了一个,然后使用 dd 命令克隆了 SD 卡。我再次使用 dd 将克隆镜像复制到其他 SD 卡。为了加快 dd 的速度,将块大小设置为大约计算机内存的一半。

以这种方式制作无人机确实导致了无线网卡的问题。使用 ifconfig 查看系统列出的网卡。正如您从图 2 所示的屏幕截图中看到的那样,我的 drone02 的无线网卡被列为 wlan1,并且已经处于监听模式。在所有驱动器都被克隆后,我只需要进入并进行细微的配置更改——除了无线网卡更改之外。

图 2. iconfig 屏幕截图

Raspberry Pi 使用约 750 mAh 的电流,而 5 伏 1 安培的电源无法提供足够的电力在 Raspberry Pi 启动后启动无线网卡。我阅读的许多论坛都说您需要输出 1.5–2.1 安培的电源。我发现首先插入网卡可以防止额外的电流消耗,并且我没有遇到问题。

在以下步骤中,如果您在启动后插入 Wi-Fi 网卡,则可能会导致 Raspberry Pi 电源下降。电源丢失将导致 RPi 崩溃,并且 SD 卡可能会损坏。

使用 Kali 配置 Raspberry Pi

首先,从 Kali Linux 网站下载 Kali Raspberry Pi 发行版。

使用 dd 命令或像 Windows 中的 Win32DiskImage 这样的工具将镜像复制到 SD 卡。这会在 SD 卡上创建镜像的位到位的副本。它类似于将 ISO 刻录到 DVD 或 CD。

将 SD 卡放入 RPi。然后,将您使用的 Wi-Fi 网卡连接到 USB 端口。

将 Cat5、Cat5e 或 Cat6 网线连接到以太网端口。有线连接用于将数据通信到网络,以防止监听模式下的无线网卡出现问题。

插入 micro USB 线缆以打开 RPi。接下来,ssh 连接到设备。您可能需要使用 nmap 进行端口扫描以找到 RPi。或者,您可以使用显示器和键盘直接访问控制台。同样,在插入电源之前,请先插入所有外围设备。

登录名是“root”,密码是“toor”。

配置 Kismet 无人机

使用静态 IP 地址屏幕截图(图 3)中所示的静态 IP 地址配置 eth0。这在 /etc/network/interfaces 下完成。

图 3. 静态 IP 地址屏幕截图

使用 service networking restartreboot 重新启动网络。如果您通过 SSH 连接,则必须重新连接。

接下来,编辑 /etc/kismet/kismet_drone.conf。我包含了一个屏幕截图(图 4),但下面是我使用的设置,以及需要更改的字段。

图 4. drone.conf

将以下内容设置为对您有意义的内容,或您网络和设备的正确信息。我使用了我为示例配置的内容。

使用 servername 命名无人机。连接时,这将显示在 Kismet UI 和日志的底部。

使用 dronelisten 设置协议、接口的 IP 地址和无人机侦听服务器连接的端口。

使用 allowedhosts 列出哪些服务器可以与此无人机通信。这可以是使用 CIDR 表示法的整个网络,也可以只是网络上的单个盒子,并允许无人机使用 droneallowedhosts 与自身通信。

使用 dronemaxclients 设置可以与无人机通信的服务器的最大数量。

使用 droneringlen 设置 kismet 无人机的最大数据包积压。比我拥有的更小的可能更好。我的 drone04 崩溃了。它也是看到网络最多的一个。

使用 gps=false 关闭 GPS。您不需要它,因为这些是固定设备,您应该知道它们的位置。

设置捕获源,ncsource。这告诉系统要使用哪个接口以及该网卡要使用的驱动程序


servername=Kismet-Drone-pi2
dronelisten=tcp://192.168.1.12:2502
allowedhosts=192.168.1.65
droneallowedhosts==127.0.0.1
dronemaxclients=10
droneringlen=65535
gps=false
ncsource=wlan1:type=ath5k

其余选项我保持默认设置。除非您所在的国家/地区使用的 B/G 信道比美国多,否则无需修改任何内容。

无人机上要配置的最后一件事是 /etc/rc.local 文件。这将在 RPi 通电时在后台启动 kismet 无人机程序。在 exit 0 之前添加这两行,使您的代码看起来像下面的代码


# start kistmet
 /usr/bin/kismet_drone --daemonize

exit 0
在 PC 或服务器上为无人机传感器配置 Kismet 服务器

需要在 /etc/kismet/kismet.conf 中更改两个设置。第一个在 ncsource 中。第二个是 filter_tracking

下面的行和相关的屏幕截图(图 5)告诉 Kismet 它的捕获源是什么。在本例中,没有使用本地源,只有无人机。为每个无人机重复此行,并提供正确的信息


ncsource=drone:host=192.168.1.12,port=2502,name=i2

该行表示源是无人机,无人机的 IP 地址,要连接到无人机上的哪个端口,以及无人机应在 Kismet UI 中显示为什么名称。名称显示在“网络列表”视图和“网络详细信息”视图中。我选择了两个字符的名称“i#”,因为网络列表中的“最后见到”字段的硬编码限制为十个字符。我希望该字段尽可能多地显示无人机。

图 5. Kismet 服务器源

接下来,过滤掉已知的网络 BSSID。之前,我提到无线勘测或网络文档应该能够提供此信息。正如您在网络列表屏幕截图中看到的那样,列出了几个设备。如果您有不想看到的设备,则需要在 Kismet 服务器配置文件 /etc/kismet/kismet.conf 中过滤掉它们。

在配置文件中,它有一个示例


filter_tracker=ANY(!"00:00:DE:AD:BE:EF")

在我的 Kismet 版本中,这不起作用。我必须删除引号,以便该行看起来像这样


filter_tracker=BSSID(!00:00:DE:AD:BE:EF)

感叹号 (!) 忽略该 MAC 地址。这显示了除忽略的 WAP 之外的所有内容。如果没有感叹号 (!),Kismet 将仅在网络列表中显示具有该 BSSID 的 WAP。选项为 ANY、BSSID、SOURCE 和 DEST。尽管文档说您可以将 ANY 与感叹号 (!) 一起使用,但尝试它会失败。错误消息说要使用其他三个选项之一。MAC 地址可以使用逗号分隔列表堆叠


filter_tracker=BSSID(!00:00:DE:AD:BE:EF,!00:0:DE:AD:BE:EE,
↪!00:00:DE:AD:BE:ED)

在无人机传感器网络运行的情况下,接入点的网络详细信息屏幕将显示哪些无人机看到了 WAP(图 6)。但是,这是系统的局限性。此屏幕仅提供信号最强的无人机的信号强度。这是 Pesce 先生的 WRT54GL 选项的限制。

图 6. 网络详细信息屏幕

在 Pesce 先生的模型中,一旦检测到恶意 WAP,就必须有人出去搜索。搜索区域围绕所有看到恶意 WAP 的无人机。尽管他的设计使搜索区域小于整个建筑物,但它的三角定位效果不佳。通过使用 RPi 作为无人机,您可以使用第二个程序进行三角定位。

正如我之前提到的,Airodump-NG 用于捕获 Wi-Fi 上的数据包。运行 Airodump-NG 时,用户界面提供多个信息位。您想要的是 BSSID、PWR(以负 DB 为单位测量的功率)、信道和 ESSID(图 7–9:每张图像显示不同的功率水平,当与罗斯福图片一起使用时,显示如何将其用于三角定位)。

图 7. Drone2 airodump

图 8. Drone3 airodump

图 9. Drone4 airodump

ssh 连接到每个 RPi 无人机,并运行此命令。不要忘记将 bssid 替换为您要查找的 WAP 的 MAC 地址,并将接口替换为该无人机正在监听的接口


airodump-ng --bssid <MAC ADDRESS> <interface>

注意:我在上面的行中没有使用信道命令来锁定信道。这将干扰返回 Kismet 服务器的数据,并且如果 WAP 配置为信道跳频,则会丢失设备。

概念验证

我在东密歇根大学的罗斯福厅进行了概念验证,那里是我学位课程的实验室所在地。在罗斯福厅的地图(图 10)中,有三个无人机。这是由于电源和以太网电缆的限制。还有一个恶意 WAP (rogue_ap_pi),由我的教授隐藏。Kismet 向我显示了该区域中的所有网络,因为我没有 BSSID 来过滤掉它们。同样,这就是拥有网络文档或无线勘测会有所帮助的地方。

图 10. 东密歇根大学罗斯福厅地图(Google 地图)

Drone3 和 drone4 在走廊中。Drone2 在其中一个实验室房间中,其中包含 Linksys 网络和我的运行 Kismet 服务器和 Kismet UI 的笔记本电脑。当 drone4 刚进入实验室门口时,信号损失了 10DB。同样,无线勘测会有所帮助,因为它会显示墙壁阻挡了多少信号。

一旦我启动并运行了系统,并将无人机放在我想要的位置,我的教授就将恶意 WAP 藏在了同一楼层的某个地方。通过查看功率水平,我能够弄清楚去哪里找到恶意 WAP。我知道 drone4 是最近的,并且恶意 WAP 在该无人机的另一侧。我沿着走廊走下去,在不到两分钟的时间内找到了恶意 WAP。它被藏在走廊里,教室和另一个实验室外面的长椅下。

Wi-Fi 网卡的局限性

我想介绍的最后一个局限性是 TP-Link TL-WN722N 网卡。我选择此网卡是因为它的成本、外部天线、插入 RPi 时的功耗以及在当地商店的可用性。该网卡只能在 2.4GHz 频段上通信,这意味着它只能接收 802.11 B、G 和 N 网络。它不具备检测或使用 N、A 或新的 AC 网络的部分使用的 5GHz 频段的能力。

尽管我有几个 ALFA 无线网卡,其中一个应该能够检测 A 和 AC,但我不知道是否可以在 RPi 无人机上运行它们而无需单独供电的 USB 集线器。

此设置也无法检测 Zigbee/Xbee 或蓝牙。Xbee 同时使用 900MHz 和 2.4GHz。蓝牙使用 2.4GHz。尽管这两种设备都使用 2.4GHz,但频率(信道)超出了 Wi-Fi 网卡的范围。Mike Kershaw(又名 Dragorn,Kismet 的开发者)正在开发一种名为 kisbee 的硬件和软件 Xbee 检测器。Ubertooth One 应该可以与 Kismet 一起使用来检测蓝牙。

手机和相关的蜂窝网络卡也会被错过。手机在 Wi-Fi 网卡范围之外运行,除非手机是 Wi-Fi 热点。新的 HackRF One 网卡可能能够检测蜂窝网络,以及 A/B/G/N/AC Wi-Fi、Xbee 和蓝牙,但我还没有拿到一个来玩,而且它们会将每个传感器的成本提高到大约 300 美元。

资源

Kismet: http://kismetwireless.net

Kali Linux: http://www.kali.org

加载 Disqus 评论