我們?cè)趺粗勒钩龅闹囆g(shù)品是真實(shí)的而不是偽造的?這顯然不是一件容易的事,因?yàn)樗囆g(shù)品偽造行業(yè)估計(jì)每年產(chǎn)生約30億美元的收入。藝術(shù)家經(jīng)常在他們的原創(chuàng)作品上簽名,但很難區(qū)分原始簽名和復(fù)制品。
識(shí)別偽造品的一種方法是利用原子彈,或者更確切地說,在14年代原子彈試驗(yàn)之后在所有有機(jī)材料中發(fā)現(xiàn)的高碳-1960同位素比率的特征。如果用于結(jié)合油漆中顏料的有機(jī)物來自在此期間之前死亡的植物,則碳-14的比例將大大低于更現(xiàn)代油漆中的比例,從而使調(diào)查人員能夠可靠地識(shí)別現(xiàn)代偽造品。
與藝術(shù)一樣,我們經(jīng)常更關(guān)心數(shù)據(jù)的真實(shí)性,而不是其他人是否能夠查看它。例如,我們?nèi)绾沃涝O(shè)備上運(yùn)行的代碼是真實(shí)的?我們并不總是關(guān)心隱藏代碼 - 任何人都可以查看開源的u-boot引導(dǎo)加載程序代碼。但是,在開始執(zhí)行之前,我們的設(shè)備能夠驗(yàn)證引導(dǎo)加載程序代碼是否未經(jīng)更改且真實(shí),這一點(diǎn)至關(guān)重要。
本博客介紹了消息身份驗(yàn)證代碼和數(shù)字簽名,它們是驗(yàn)證數(shù)據(jù)的完整性(數(shù)據(jù)是否已更改?)和真實(shí)性(誰生成了數(shù)據(jù)?)的加密方法。但是,為什么不直接使用校驗(yàn)和或CRC來驗(yàn)證數(shù)據(jù)是否未被更改呢?正如我們將在下一節(jié)中看到的那樣,不幸的是,它們無法抵御故意修改數(shù)據(jù)的對(duì)手。
為什么CRC不合適
驗(yàn)證數(shù)據(jù)是否已被更改的一種眾所周知的方法是添加錯(cuò)誤檢測(cè)代碼,例如循環(huán)冗余校驗(yàn) (CRC)。例如,考慮由多項(xiàng)式 x+1 生成的 1 位 CRC。這相當(dāng)于添加一個(gè)偶數(shù)奇偶校驗(yàn)位,如果數(shù)據(jù)中的 1 個(gè)數(shù)為奇數(shù),則在數(shù)據(jù)后附加 1,否則附加 0。
如果我們10010111輸入數(shù)據(jù),我們可以看到數(shù)據(jù)中有一個(gè)奇數(shù)個(gè) 1,所以我們的奇偶校驗(yàn)位將是 1。那么,為什么這種有效的錯(cuò)誤檢測(cè)方案不適合確保完整性和真實(shí)性呢?
問題在于CRC相當(dāng)于藝術(shù)家的簽名。如果我們像CRC偽造者一樣思考,設(shè)備怎么會(huì)被愚弄,接受更改后的數(shù)據(jù)不變?首先,讓我們采用最簡(jiǎn)單的情況:假設(shè)數(shù)據(jù)及其CRC一起存儲(chǔ)在未受保護(hù)的內(nèi)存(例如閃存)中。攻擊者需要做的就是用自己的數(shù)據(jù)覆蓋原始數(shù)據(jù),然后計(jì)算適當(dāng)?shù)腃RC并將其附加到他們的數(shù)據(jù)中。當(dāng)設(shè)備讀取更改后的數(shù)據(jù)時(shí),它將計(jì)算CRC并驗(yàn)證其是否與攻擊者生成的CRC匹配,接受更改后的數(shù)據(jù)為原始數(shù)據(jù)!對(duì)于此攻擊的真實(shí)示例,本演練詳細(xì)解釋了黑客如何通過操縱 Linux 內(nèi)核中的 CRC 來控制 Docker 服務(wù)器。
規(guī)避 CRC:(左)原始代碼和 CRC 通過驗(yàn)證,(中間)具有對(duì)抗性修改和原始 CRC 驗(yàn)證失敗的代碼,(右)具有對(duì)抗性修改和對(duì)抗性 CRC 通過驗(yàn)證的代碼
為了使攻擊者更難,該設(shè)備可以將CRC存儲(chǔ)在一次性可編程(OTP)存儲(chǔ)器中。不幸的是,這并不能消除問題。雖然CRC是檢測(cè)通道噪聲或不穩(wěn)定單元良性錯(cuò)誤的好方法,但它們不能防止主動(dòng)惡意修改。
假設(shè)我們前面的示例數(shù)據(jù)用于啟用或禁用不同的產(chǎn)品功能,具體取決于客戶選擇的許可證模型。如果高價(jià)值功能位于最左側(cè)的位中,則能夠更改我們的示例向量10010111將更左側(cè)的位翻轉(zhuǎn)為 1s 將啟用這些功能,而無需為價(jià)格較高的許可模型付費(fèi)。對(duì)于對(duì)手來說,這是微不足道的:
原始數(shù)據(jù) | 修改后的數(shù)據(jù) |
10010111 1 | 11110111 1 |
由于 1 位 CRC 在原始數(shù)據(jù)中為 1(表示數(shù)據(jù)中的奇數(shù)為 1),因此對(duì)手只需要確保修改后的數(shù)據(jù)也有奇數(shù) 1。通過將最左邊的兩個(gè) 0 翻轉(zhuǎn)為 1,攻擊者啟用了兩個(gè)額外的高價(jià)值功能,而無需修改安全存儲(chǔ)在 OTP 中的 CRC 檢查位。此策略也適用于實(shí)際應(yīng)用中使用的較大 CRC。
重要的一點(diǎn)是,CRC僅提供良性錯(cuò)誤保護(hù),例如通信通道上的噪聲或不穩(wěn)定的SRAM單元。當(dāng)攻擊者主動(dòng)嘗試修改數(shù)據(jù)時(shí),他們可以以一種不會(huì)改變從原始數(shù)據(jù)生成的CRC的方式進(jìn)行修改。
審核編輯:郭婷
-
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7366瀏覽量
163101 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
8701瀏覽量
84568 -
crc
+關(guān)注
關(guān)注
0文章
197瀏覽量
29357
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論