RFID破解三兩事

網上看了很多RFID破解的文章,大部分都是工具使用,一步步該怎麼操作,基本上沒有講原理的,估計導致了很多初學者非常迷惑,特別是一旦按照操作步驟操作的時候出錯時更加迷惑,不知道是什麼狀況,國內radiowar也同樣沒有看到過特別介紹原理性的文章。

建議大家還是多看看外文原版的資料說明,會理解的更透徹些,才能更快的加入到RFID安全研究及測試中。

參考站點:

http://www.proxmark.org 多看看論壇裏面提問跟回答

http://nfc-tools.org

http://www.openpcd.org/

http://www.rfdump.org

http://www.libnfc.org

這篇文章就當是我自以爲是的普及性介紹,我想應該還是會給很多人解惑。

首先,先說說目前RFID破解涉及到的幾種方法,我儘量以最直白的語言描述。

1、最簡單ID卡破解

常見破解辦法:ID卡複製,ID卡除了複製也沒有其他研究的了,畢竟太簡單了。

基本原理介紹:

ID卡屬於大家常說的低頻卡,一般大部分情況下作爲門禁卡或者大部分大學裏使用的飯卡,一般爲厚一些的卡,是隻讀的,卡里面只保存有一串唯一的數字序號ID,可以把這串數字理解爲你的身份證號,刷卡的時候,讀卡器只能讀到ID號,然後通過跟後臺數據庫進行匹配,如果是門禁卡,那麼數據庫裏面就是存在這樣的ID號,如果匹配上門就開了,匹配不上門就開不了。

如果是學校的飯卡,刷卡的時候,實際上操作的是你對應ID號相關的數據庫中的數據。ID卡本身不存在任何其他數據,所以,學校使用的ID卡飯卡,只能複製卡,刷別人的錢(數據庫中的錢),再沒有其他辦法。

破解方法:通過ID卡讀卡器,讀取卡內的ID號,然後把這串ID號寫入到ID卡空卡中即可,各類工具特別多,需要一個ID卡讀卡器。最簡單的淘寶有賣的工具,兩節7號電池,按讀卡按鈕讀要複製的卡的ID,然後再按寫卡按鈕,把讀到的ID號寫入到空白卡中,即完成了卡複製工作,優點就是方便,缺點就是我們看不到整個過程,對我們安全研究來說作用不大。

20130420003137_80509[1]

2、射頻IC卡破解

寫在前面的技術鋪墊:

射頻IC卡種類繁多,標準也繁多,這些不在介紹範圍內,但是以下***介紹的原理類似,下面不特別說明就是指的M1 S50卡,這也是目前廣泛使用的,並且大家做測試時最常見的IC卡。

常見的破解方法:

1)跟ID卡一樣,複製IC卡的UID號碼寫入到新的空白IC卡中。2)破解IC卡的密碼,從而改寫IC卡中的數據。3)破解IC卡的密碼之後,把所有數據導出再寫入到一個新的空白IC卡中,也就是 IC卡全卡複製(NFC手機及PM3等設備也支持把自己模擬成一個IC卡,實際上也屬於卡複製一類)。

IC 卡 (S50) 分爲16個扇區(0-15),每個扇區又分爲4個區域塊(0-63), 每個扇區都有獨立的一對密碼keyA和keyB(先記着獨立兩個字,後面要思考問題)負責控制對每個扇區數據的讀寫操作,keyA和keyB分佈在每個扇區的第四塊中,第0扇區的第一個數據塊,存儲着IC卡的UID號(想成身份證號),其他扇區可以存儲其他的數據,如錢等數據。

一般IC卡的UID是唯一的也是寫死的不能更改,其他塊的數據是可以更改的,所以也就有了普通IC空白卡以及UID可寫空白卡(可以認爲是不遵守規範的商家制作的)。

現在我們開始想象破解的幾種環境:

1)讀卡器把IC卡當成ID卡一樣只識別UID正確即可,不管IC卡內其他數據,這時候,只需要把卡的UID讀出來,並使用一個UID可寫的空白卡,把UID寫入即可。2)讀卡器首先識別UID是否正確,然後再識別其他扇區的數據,通過keyA或者keyB對數據進行讀寫操作。這樣首先UID得正確,其次,keyA或者keyB得正確(後面爲了說的方便,我們就不說keyA或者keyB,直接說IC卡密碼)。這樣如果知道了IC卡密碼,我們也不需要複製新卡,那麼就可以更改IC卡中的數據,比如更改飯卡中的錢數。如果我們想複製一張一模一樣的卡,那麼就把原卡的所有扇區的數據全面導出來,再寫入新的UID可寫卡中即可。3)讀卡器不識別UID,只管對扇區的密碼進行驗證,如果驗證成功則允許對卡內數據操作等。(如某“XX快捷酒店”的門卡,就不管UID,只要扇區密碼正確即可),那我們可以通過扇區密碼更改門卡中的數據,如房號,住宿的時間等,也可以通過一個普通的IC卡(uid不能更改)複製一張門卡(跟原卡UID不同),也可以通過一個UID可寫的卡,複製一張跟原卡完全相同的卡(跟原卡UID也相同)。

基本上也就是以上幾種環境,改寫UID、通過扇區密碼改寫扇區數據、通過把原卡數據導出重新導入到新的IC卡中複製一張卡。

IC卡的UID是不通過密碼控制的,可以直接通過讀卡器獲得,後面講IC卡的通信過程會說明。那麼我們做IC卡破解時,主要的問題就是破解IC卡每個扇區的控制密碼,如果密碼破解了,那要怎麼操作都隨便了。

IC卡密碼破解的幾種方法:

1)  使用默認的密碼***

很多應用IC卡都沒有更改默認密碼,所以導致可以直接使用默認密碼來嘗試接入IC卡,常見的默認密碼有:

ffffffffffff000000000000a0a1a2a3a4a5b0b1b2b3b4b5aabbccddeeff4d3a99c351dd1a982c7e459ad3f7d3f7d3f7714c5c886e97587ee5f9350fa0478cc39091533cb6c723f68fd0a4f256e9FFzzzzzzzzzzA0zzzzzzzzzz

2)  nested authentication ***(大家常說的驗證漏洞***)

前面講到每個扇區都有獨立的密碼,一些情況下,比如某飯卡,扇區3中存儲着錢等數據,扇區3的更改了默認密碼,扇區5中也存儲着一些數據,扇區5也更改了密碼,其他扇區沒有更改默認密碼。我們要操作扇區3跟5,不知道密碼怎麼辦?使用nested authentication ***,這種***方式是在已知了16個扇區中任意一個扇區的密碼之後,採用的***方式,可以獲得其他扇區的密碼。我們前面都提到了,16個扇區的密碼都是獨立的,那麼怎麼能通過某個扇區的密碼獲得其他扇區的密碼呢?如果可以,那說明扇區就不是獨立的呀,有人會說,由於M1卡的加密算法被破解了,我只能說那是還沒有理解,具體算法不講,只說明一下,算法只是使得猜解密碼的時間變短,使得猜解密碼成爲可能。

這是什麼樣的原理呢?首先先了解,這是一個對等加密算法,也就是讀卡器跟tag中都保存着同樣的密碼,也都是用同樣的算法加密,然後看rfid的驗證過程:開始交互的時候,tag就已經把uid給reader說了,主要牽扯到防***機制,之後纔開始驗證。

20130420003158_32532[1]

20130420003206_80685[1]

第一次驗證時,讀卡器首先驗證0扇區的密碼,tag給讀卡器發送一個隨機數nt(明文),然後讀卡器通過跟密碼相關的加密算法加密nt,同時自己產生一個隨機數nr,(密文)發送給tag,tag用自己的密碼解密之後,如果解密出來的nt就是自己之前發送的nt,則認爲正確,然後通過自己的密碼相關的算法加密讀卡器的隨機數nr(密文)發送給讀卡器,讀卡器解密之後,如果跟自己之前發送的隨機數nr相同,則認爲驗證通過,之後所有的數據都通過此算法加密傳輸。

首先記住這裏面只有第一次的nt是明文,之後都是密文,而且nt是tag發送的,也就是驗證過程中,tag是主動先發隨機數的。我們破解的時候,讀卡器中肯定沒有密碼(如果有就不用破解了),那麼tag發送一個nt給讀卡器之後,讀卡器用錯誤的密碼加密之後發送給tag,tag肯定解密錯誤,然後驗證中斷,這個過程中,我們只看到tag發送的明文隨機數,tag根本沒有把自己保存的密碼相關的信息發送出來,那怎麼破解呢?

所以,要已知一個扇區的密碼,第一次驗證的時候,使用這個扇區驗證成功之後,後面所有的數據交互都是密文,讀其他扇區數據的時候,也需要驗證,也是tag首先發送隨機數nt,這個nt是個加密的數據,我們前面也說過每個扇區的密碼是獨立的,那麼加密實際上就是通過tag這個扇區的密碼相關的算法加密的nt,這個數據中就包含了這個扇區的密碼信息,所以我們才能夠通過算法漏洞繼續分析出扇區的密碼是什麼。

這也是爲什麼nested authentication***必須要知道某一個扇區的密碼,然後才能破解其他扇區的密碼。

3)  darkside***

假設某個IC卡的所有扇區都不存在默認密碼怎麼辦?暴力破解根本不可能,那這時候就是算法的問題導致的darkside***,我們照樣不說具體算法什麼漏洞之類,同樣,我們考慮首先要把tag中的key相關的數據騙出來,也就是讓tag發送出來一段加密的數據,我們通過這段加密的數據才能把key破解出來,如果tag不發送加密的數據給我們,那沒法破解了。

前面我們也說了,第一次驗證的時候tag會發送明文的隨機數給讀卡器,然後驗證讀卡器發送加密數據給tag,tag驗證失敗就停止,不會發送任何數據了,這樣看,根本就沒有辦法破解密碼。

實際上經過研究人員大量的測試之後,發現算法還存在這樣一個漏洞,當讀卡器發送的加密數據中的某8bit全部正確的時候tag會給讀卡器發送一個加密的4bit的數據回覆NACK,其他任何情況下tag都會直接停止交互。

那麼這個4bit的加密的NACK就相當於把tag中的key帶出來了,然後再結合算法的漏洞破解出key,如果一個扇區的key破解出來,就可以再使用nested authentication ***破解其他扇區密碼。

4)  正常驗證過程獲得key

1-3都是通過一般的讀卡器,把tag中的密碼破解出來,破解的原理中,不管密碼破解算法的漏洞,實際上都是要讓tag中發送出來一段密文。

那如果讀卡器本身就保存有密碼,卡也是授權的卡,也就是說卡和讀卡器都是正確授權的,那麼他們之間的加密數據交換就可以直接使用PM3等監控下來,然後通過“XOR效驗與算Key”程序算出密碼來。

這種情況下一般都是內部人員做案,或者把讀卡器中的SAM偷出來,SAM實際上就是保存讀卡器中密碼的一個模塊,然後通過另外的讀卡器插入SAM,用正常的授權的卡刷卡,然後監控交換數據,從而算出密碼。

5)  另一個方面

前面4類方法基本上把目前的rfid卡破解講清楚了,文字太多,所以也就沒有截圖,還有一個地方大家不知道考慮了麼?

我們提到的都是卡和讀卡器之間的數據交換,這是加密的數據,但是有沒有想過讀卡器跟電腦相連這塊,電腦中肯定沒有加密芯片,所以這塊肯定是明文傳輸,在某種環境中,比如通過電腦的控制程序導入密碼(假設是二進制等不能直接觀看的密碼文件)到讀卡器的時候,我們通過監控USB口(串口)數據通信,是不是就能明文看到密碼呢?

20130420003216_82025[1]

軟件裝載密碼到讀卡器

20130420003224_23579[1]

使用USB監控抓到的明文數據,包含了導入到讀卡器中的密碼明文。

常用工具說明:

1)mfoc  mfocgui 以及目前網絡上,淘寶上充斥的各類破解工具都是基於nested authentication***原理,就是內置了一些默認密碼,首先使用默認密碼對每個扇區進行測試,如果某個扇區存在默認密碼,然後就是用nested authentication***獲得其他扇區的密碼。2)PM3的darkside***,Mfcuk等爲darkside***工具,一個扇區密碼都不知道的情況下破解用的,由於破解算法的原理本身就不是100%成功的,所以如果長時間破解不出來,就停了重新換個nt,重新選個時間破解,跟運氣也有些關係。不要別人幾個小時,甚至幾十分鐘就破解成功了,你幾天都沒有破解出來,還一直傻傻的等,不如暫停換個nt,過一會再試。3)Libnfc工具,目前用的比較多的是radiowar的nfcgui,radiowar網站上也說了,就是給nfc-list  nfc-mfsetuid  nfc-mfclassic  這三個工具寫了個gui界面,你也可以使用命令行模式,或者你也可以自己寫個gui界面調用這三個程序即可,這些都是操作卡或者讀卡數據的工具,國內不同的IC卡讀卡器都附帶有一些讀寫卡程序,我用的一個比這個要方便的多。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章