RFID破解三兩事(轉)

RF卡,主要有三種頻率的射頻,125kHz左右的低頻,13.56MHZ的第二代射頻標準協議,以及最新的900MHz的新標準。現在的門禁卡,銀行卡,身份證大多是13.56MHz的ISO1443A/ISO1443B協議。而最新的900MHz附近頻率的RFID卡我們在超市常常見到,超市用來防偷的ID卡就是這種新標準,新標準讀取數據距離遠,一般都在4米以上。
網上看了很多RFID破解的文章,大部分都是工具使用,一步步該怎麼操作,基本上沒有講原理的,估計導致了很多初學者非常迷惑,特別是一旦按照操作步驟操作的時候出錯時更加迷惑,不知道是什麼狀況,國內radiowar也同樣沒有看到過特別介紹原理性的文章。
建議大家還是多看看外文原版的資料說明,會理解的更透徹些,才能更快的加入到RFID安全研究及測試中。 
        這篇文章就當是我自以爲是的普及性介紹,我想應該還是會給很多人解惑。
        首先,先說說目前RFID破解涉及到的幾種方法,我儘量以最直白的語言描述。
        1、最簡單ID卡破解
        常見破解辦法:ID卡複製,ID卡除了複製也沒有其他研究的了,畢竟太簡單了。
        基本原理介紹:
        ID卡屬於大家常說的低頻卡,一般大部分情況下作爲門禁卡或者大部分大學裏使用的飯卡,一般爲厚一些的卡,是隻讀的,卡里面只保存有一串唯一的數字序號ID,可以把這串數字理解爲你的身份證號,刷卡的時候,讀卡器只能讀到ID號,然後通過跟後臺數據庫進行匹配,如果是門禁卡,那麼數據庫裏面就是存在這樣的ID號,如果匹配上門就開了,匹配不上門就開不了。
        如果是學校的飯卡,刷卡的時候,實際上操作的是你對應ID號相關的數據庫中的數據。ID卡本身不存在任何其他數據,所以,學校使用的ID卡飯卡,只能複製卡,刷別人的錢(數據庫中的錢),再沒有其他辦法。
        破解方法:通過ID卡讀卡器,讀取卡內的ID號,然後把這串ID號寫入到ID卡空卡中即可,各類工具特別多,需要一個ID卡讀卡器。最簡單的淘寶有賣的工具,兩節7號電池,按讀卡按鈕讀要複製的卡的ID,然後再按寫卡按鈕,把讀到的ID號寫入到空白卡中,即完成了卡複製工作,優點就是方便,缺點就是我們看不到整個過程,對我們安全研究來說作用不大。 
        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卡,常見的默認密碼有:
ffffffffffff
000000000000
a0a1a2a3a4a5
b0b1b2b3b4b5
aabbccddeeff
4d3a99c351dd
1a982c7e459a
d3f7d3f7d3f7
714c5c886e97
587ee5f9350f
a0478cc39091
533cb6c723f6
8fd0a4f256e9
FFzzzzzzzzzz
A0zzzzzzzzzz
2)  nested authentication 攻擊(大家常說的驗證漏洞攻擊)
        前面講到每個扇區都有獨立的密碼,一些情況下,比如某飯卡,扇區3中存儲着錢等數據,扇區3的更改了默認密碼,扇區5中也存儲着一些數據,扇區5也更改了密碼,其他扇區沒有更改默認密碼。我們要操作扇區3跟5,不知道密碼怎麼辦?使用nested authentication 攻擊,這種攻擊方式是在已知了16個扇區中任意一個扇區的密碼之後,採用的攻擊方式,可以獲得其他扇區的密碼。我們前面都提到了,16個扇區的密碼都是獨立的,那麼怎麼能通過某個扇區的密碼獲得其他扇區的密碼呢?如果可以,那說明扇區就不是獨立的呀,有人會說,由於M1卡的加密算法被破解了,我只能說那是還沒有理解,具體算法不講,只說明一下,算法只是使得猜解密碼的時間變短,使得猜解密碼成爲可能。
        這是什麼樣的原理呢?首先先了解,這是一個對等加密算法,也就是讀卡器跟tag中都保存着同樣的密碼,也都是用同樣的算法加密,然後看rfid的驗證過程:開始交互的時候,tag就已經把uid給reader說了,主要牽扯到防衝撞機制,之後纔開始驗證。
RFID破解三兩事(轉) - ♂蘋果 - 眼睛想旅行
 
RFID破解三兩事(轉) - ♂蘋果 - 眼睛想旅行
第一次驗證時,讀卡器首先驗證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口(串口)數據通信,是不是就能明文看到密碼呢?
RFID破解三兩事(轉) - ♂蘋果 - 眼睛想旅行

 軟件裝載密碼到讀卡器
 
RFID破解三兩事(轉) - ♂蘋果 - 眼睛想旅行
 
 使用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卡讀卡器都附帶有一些讀寫卡程序,我用的一個比這個要方便的多。

nfclib相關開源項目:
nfclib官網:
13.56MHz的RFID模塊與樹莓派結合:
http://www.geek-workshop.com/thread-10042-1-1.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章