2008年,德国研究员亨里克·普洛茨(Henryk Plotz)和弗吉尼亚大学计算机科学在读博士卡尔斯滕·诺尔(Karsten Nohl)成功地破解了NXP的Mifare经典芯片(非接触智能卡,即平时所说的M1卡)的安全算法。M1卡被破解一事在全球掀起轩然大波,这意味着全球多达10亿张安全卡中所使用的一项技术可轻易破解。

——百度百科 M1卡

去年年底心血来潮买了NFC设备,寒假在Windows上研究半天没研究出来什么,后来发现Linux才是真爱。

NFC芯片 PN532

PN532

这是NFC模块。事实上呢,是因为我这是个裸的模块,Windows上貌似支持的不太好,人家开源的nfclib又看不懂不会移植所以我还是果断放弃win转投Linux。这个模块还需要一个TTL转USB的转接板才能接到电脑上,很便宜。人家有钱人都是用的下面这一个ACR122U读卡器,直接插到电脑上,win下已有现成的驱动,很方便。(ACR122U如下,图片来源网络)

ACR122U

ACR122U

 

下面说破解M1卡,主要是利用了M1卡发现的漏洞有两大攻击方法,对应的有两个开源工具可以使用,都是在Linux上的,自己下载编译运行。

1、nested authentication 攻击(验证漏洞攻击)

工具:mfoc

这一个要求是16个扇区中有默认密码存在,先探测出默认密码,然后利用默认密码跟卡建立通讯(如果密码不对读卡器无法与tag建立通讯),虽然读卡器不知道tag它在说什么,但是从tag的话中分析加暴力出它的加密方法(就是其他扇区密码)。其根本上还是猜解,但是从“只言片语”中分析可以使猜解时间变短。

2、darkside攻击

工具:mfcuk(注意后面不是fuck……)

如果所有扇区都被加密,没有默认密码怎么办?后来发现加密算法还有一个漏洞:当读卡器发送的加密数据中的某8bit全部正确的时候tag会给读卡器发送一个加密的4bit的数据回复NACK(否定应答),其他任何情况下tag都会直接停止交互。然后我们再利用这4bit的加密的NACK分析,解出key,如果一个扇区的key破解出来,就可以再使用nested authentication 攻击破解其他扇区密码。

(有关原理的更多内容详见 RFID破解三两事
以下是大概过程:

安装libnfc。在下载版本的时候要注意不一定要最新的版本,注意要跟工具支持的版本对应,要不然接口不一样要自己修改代码。。
下载地址:https://code.google.com/p/libnfc/ (可能需要梯子,WTF)
PN532芯片的编译过程如下:

1、配置为uart

2、编译代码

(当初我是被Linux的各种依赖包弄的蛋疼菊紧,自行学习Linux……)
安装完可能会遇到的问题:No NFC device found
也就是安装没有成功,自己检查上面安装过程中有没有error,如果确认无误试一下这个:我是链接
然后安装mfoc。
下载地址:https://code.google.com/p/mfoc/
编译安装:

我安装的时候automake没有,然后找他的包编译,然后又发现好像autoconf没有,然后找他的包编译,然后又发现……然后找他的包编译……WTF!
反正经历种种磨难安装成功后,基本就没有阻碍了。
mfoc -h查看使用说明,然后把卡放上去,接下来只需等待了。
不知道数据在哪可以多刷几次查找哪里是金额。既然已出密码,自然可以利用libnfc了。
安装mfcuk。这个我就不多说了,因为想用它破解一个全加密卡没有成功,我就没再继续搞。

扩展:http://www.nigesb.com/ 这个博客上有相关的东西,和其他有意思的东西,可以一看。

评论

电子邮件地址不会被公开。 必填项已用*标注

你可以使用以下 HTML 标签和属性:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">