<b>摘要</b>
<b></b>
電子撬鎖——濫用門鎖
危害實體安全
目前已知最古老的鎖可以追溯到4000年前,它發現于古埃及帝國的廢墟中。這種鎖因當時在該地區流行而被稱為埃及鎖。鎖是用木頭做的,内有不同長度的木銷。門上的一個槽可以插入帶有與鎖銷長度比對的木銷的木鑰匙。鑰匙插入到鎖中并擡起,使木銷均勻地在門闩頂部對齊,這樣便可以打開門。
從埃及人開始,我們受希臘、羅馬和各種來自中國、土耳其、印度等東方國家的鎖的影響,以及後來英國和美國的影響,造就了今天我們所依賴的各種不同類型的鎖,它包括了可移動的杠杆、圓柱形的鑰匙和銷栓的組合,沒有正确的鑰匙就很難打開它。
雖然我們很多人都知道用不同的技術開鎖是多麼容易,但目前家中還是依賴鎖來保障我們的安全。許多國家和地區試圖通過頒布禁止擁有開鎖工具的法令來阻止其大肆流行。但是,誠如你所想,僅僅存在規定,并不能阻止那些想要進入房屋的惡意實體(犯罪分子)。
展望物聯網裝置的未來,對我們來說,擺脫對傳統實體鎖具挑選的關注,分析使我們處于高風險狀态的電子門鎖機制就變得重要了。本章将探讨現有的電子門鎖安全問題,其無線機制,以及它們與移動裝置的內建。我們将在接下來的幾節中逐漸完成這些話題,探讨電子門鎖目前的安全機制(或不足)。制造廠商建立起不良安全決策之後,我們會更了解潛在的風險,并對這些類型的鎖在未來将需要什麼樣的安全措施有更好的想法。
<b>2.1 酒店門鎖和磁卡</b>
研究員cody brocious發現了一個常見的門鎖漏洞,它影響着世界各地數以百萬計的酒店門鎖。鑒于其潛在的影響,在此便不可不提。事實上,brocious在2012年7月的黑帽安全大會上曝光這一問題之後,很多酒店出現了入侵者利用這個漏洞進入酒店房間并竊取财物的真實案例。brocious的作品濫用了基本安全設計缺陷,在資訊安全社群流行起來,這裡是開始了解電子門鎖相關安全性問題的理想場所。
2.1.1 onity門鎖
onity ht門鎖非常受歡迎。如果你曾入住過酒店,很有可能已經用到過,并依靠它保護你的安全和隐私。onity鎖有一個磁性鑰匙卡讀卡器,如圖2-1所示。酒店的客人都有磁性鑰匙卡,通過劃過讀卡器來打開門鎖。酒店員工可以在客人辦理入住手續或客人要額外的門卡時發給客人。酒店給員工發通用鑰匙卡,例如打掃房間的從業人員可以打開多個門。
研究具有傳統機制的采用磁卡作為鑰匙的onity鎖很重要,因為下一代基于物聯網的門鎖可能保留傳統機制(普通鑰匙和磁條卡)并混合更智能的方法,如無線認證和電子鑰匙,這将在本章接下來的部分讨論。了解onity鎖的安全問題非常重要,因為這為了解基本的安全設計缺陷打下基礎,使得能夠利用這些資訊影響全世界使用的鎖。我們必須努力防止發生這種情況。
圖2-1:onity門鎖
2.1.2磁條
我們生活中經常遇到磁條卡,從信用卡、公共交通卡到酒店房卡,我們依賴磁條卡擷取服務和進入特定場所。圖2-2展示了一張典型的帶有磁性條帶(即磁條)的信用卡的背面。标簽①指磁性條,②是簽名條,③表示卡的安全碼(csc)。下文中讨論的酒店房卡,通常隻有背面的磁條與正面的酒店标志。
圖2-2:帶磁條的卡片
通常,磁條包含3個存儲不同資料塊的獨立磁道。磁道1和2一般用于金融行業的atm、借記卡和信用卡,并沒有限定哪個機構使用特定的磁道。onity門鎖使用磁道3,它包含以下資料序列:
16位識别碼
一個識别碼包含了卡能開的房門和卡的複制版本資訊。為酒店員工建立主卡時,通過存儲的一個值代表酒店員工的身份而不是門的辨別。當客人入住酒店時,為指定房間的門制作的第一張卡的複制辨別位設定為0,接下來的複制卡辨別位依次加1,以便識别。
8位标志位元組
用一個位元組設定各種其他選項的值。
16位過期日期
客人辦理入住手續時,設定門卡的有效時長。
24位未知位
設定為全0。
24位鑰匙編碼
該值被寫入單個門鎖。這時,門鎖中配置一個提前量。例如,一把門鎖的鑰匙編碼是100,提前量是50,那有效的鑰匙編碼值是100~150的一個整數。每當插入有效卡時,門鎖把自身的鑰匙編碼重置成門卡的值。通過這種方式,門鎖鑰匙編碼增加以確定較舊的門卡失效。注意,代表主鑰匙的具體鑰匙編碼也存儲在門鎖中。酒店用不同的主鑰匙編碼來分割不同的區域,使得僅有某些鎖能夠用酒店指定的主鑰匙卡打開。
站點代碼(site code)值是由onity随機配置設定的唯一的32位随機值,采用站點代碼來加密24位鑰匙編碼,以便确認酒店财産。如果這個值被破解,便能造出任意磁卡開鎖,也能給門鎖重新設定(如後文所述)。
站點代碼實際使用的加密算法在cody brocious的白皮書附錄b中。
除了這裡所述的典型鑰匙卡之外,該系統還包括程式設計卡和備用卡。當刷過程式設計卡後再刷備用卡,那麼備用卡就成了這道門的客人門卡了。這些卡是當編碼器(用來制作客人門卡)出現故障時使用的。程式設計卡也是用站點代碼值加密的,然而備用卡是沒有加密過的。當(用程式設計卡)制作一批備用卡時,每張卡的識别碼都依次遞增。
客人将卡插入門鎖,利用站點代碼解密卡上的資料。下一步,檢查是否在有效期内。最後,檢查鑰匙編碼,如果在提前量範圍内就能打開門鎖。
2.1.3 程式設計端口
鎖的右下角有一個程式設計端口,該端口也用作直流電源擴充卡接口。在安裝門鎖和更換門鎖電池時,會導緻存儲被重置,這時可用一個便攜的程式設計器(pp)給門鎖程式設計。安裝時,pp用來配置鎖的識别碼和鑰匙編碼。
pp也能用來連接配接門鎖并發出指令,如提供正确的站點代碼來開鎖。
pp還可以通過程式設計端口讀取鎖的存儲區。
2.1.4 安全問題
brocious的白皮書描述了有關onity鎖的各種安全問題。了解這些問題是非常重要的,因為它們會影響數以百萬計的配備這些鎖的酒店房門。他們還表示,其他鎖制造商應盡量避免缺乏基本的安全控制。
微控制器漏洞
如果站點代碼是已知的,就能通過連接配接到程式設計端口使用簡單的微控制器打開鎖,如便宜($50以下)流行的arduino。
cody brocious在他的白皮書的附錄a中介紹了arduino開鎖所需代碼(也稱為sketch)。基本上,brocious的sketch利用了這個事實:使用arduino可以從程式設計端口讀取存儲器的任何部分。brocious用這個辦法讀取存儲器的站點代碼,然後用它調用開鎖指令開鎖。
對數以百萬計安裝在世界各地不同地方的onity鎖來說,這是一個嚴重的安全問題。隻要有在附近電子商店購買的arduino微控制器,任何人都可以走到使用onity鎖保護的門前,打開它。事實上,著名的連鎖酒店,如假日酒店、長住酒店、優質酒店、拉昆塔酒店、紅屋頂酒店、汽車酒店六、經濟酒店、萬怡萬豪酒店和舒适客棧報道的盜竊案都是由這一特殊的安全問題造成的。
鎖存儲中的主鑰匙編碼
通過讀取鎖存儲中的主鑰匙編碼可以制作主鑰匙卡。站點代碼也可以從存儲中讀出,這個值可用來制作主卡。如前所述,酒店可以選擇不同區域内的鎖使用不同的主卡。是以,主鑰匙可以限定在酒店的特定區域房間使用。
然而,這仍然是一個嚴重的問題,因為潛在的入侵者可以用一次性建立的主鑰匙卡進入酒店一整片區域的房間。
未加密的備用卡
如前所述,每一個附随的備用卡都是通過增量識别值建立的,是沒有加密的。當編碼器故障時可以使用這些卡。是以,如果入侵者可以拿着識别值為500的備用卡,那他可以制作識别值為499或501的備用卡去嘗試打開其他門。
當然,用新制作的備用卡具體能打開哪扇門不太容易确定,這種攻擊實施起來有些困難。
2.1.5 廠商的應對
2012年7月24日,brocious向全世界發表了他的研究和文章,為裝備有廉價arduino晶片的人提供所有需要的資訊,進入數以百萬計的酒店房間。同時,警示公衆需要承擔入住配有onity門鎖的酒店的風險。公衆和酒店擁有者監督着onity公司,他們期待onity公司提供相應的解決方案。
2012年7月25日和8月13日,onity公司分别發表回應,指出将通過固件更新來緩解這一問題。同時承諾在程式設計端口插入一個機械蓋子防止通路端口,并采用額外的torx螺釘進行固定。
onity的聲明有幾個問題。首先,對一般的犯罪分子來說,打開機械蓋子并最終連接配接程式設計端口僅僅是增加了些許難度——僅需幾件額外的工具(在電子或雜貨商店花幾美元就能買到的梅花螺絲刀)。此外,正如brocious的反駁所指出的那樣,onity的門鎖設計無法做到不更新電路闆而進行真正的固件更新。是以,實際上,酒店業主不得不更換電路闆(數百萬門鎖的費用),而不隻是進行簡單地更新固件。
做出響應幾個星期後,onity删除了網站上所有相關的痕迹。進一步調查顯示,onity公司已經根據門鎖的生産日期為一些連鎖酒店更換電路闆。
針對特定制造商特殊的安全問題,揭示出當涉及大規模産品設計時,我們必須認識到維修費用問題以及最終會給制造商(onity)和客戶(保障客人安全的連鎖旅店)帶來品牌聲譽的負面影響的問題。首先,批量生産的裝置應盡可能包含釋出在需要時相關更新檔的能力,這是至關重要的。因為相對硬體修複來說,軟體更新檔成本更低,更具可擴充性。其次,鑒于獨立研究人員在安全分析方面的興趣,供應商需要更加透明,并與研究機構一起促進道德規範和維持最終消費者對其信任。
在本節中,我們關注了為數以百萬計的人們提供安全保障的一種很流行的門鎖,雖然這種門鎖是傳統的(基于磁條的),但仍是面向未來發展的重要一課,因為下一代門鎖将包括磁條卡以及具有更多機制的電子鑰匙。我們在本節中學到的内容為繼續探讨分析接下來章節中所涵蓋的無線和電子鑰匙功能的門鎖提供了堅實的基礎。