來源:北大青鳥飛迅校區(qū)|發(fā)布時間:2013-04-27 17:49:35
對于所有類型環(huán)境中的開發(fā)人員來說,安全性正成為一個越來越重要的主題,即便過去一直認(rèn)為安全性不成問題的嵌入式系統(tǒng)也是如此。本文將介紹幾種類型的編碼漏洞,指出漏洞是什么、如何降低代碼被攻擊的風(fēng)險、如何更好地找出代碼中的此類缺陷。
注入攻擊
通過將信息注入正在運行的流程,攻擊者可以危害進(jìn)程的運行狀態(tài),以反射到開發(fā)人員無法保護(hù)的某種最終目標(biāo)。例如,攻擊者可能會通過堆棧溢出(stack corruption)將代碼注入進(jìn)程,從而執(zhí)行攻擊者選定的代碼。此外,攻擊者也可能嘗試將數(shù)據(jù)注入數(shù)據(jù)庫,供將來使用;或?qū)⑽词鼙Wo(hù)的字符串注入數(shù)據(jù)庫查詢,獲取比開發(fā)人員更多的信息。無論出于怎樣的目的,注入總是一件壞事,總是需要謹(jǐn)慎對待的。
最惡劣的注入攻擊形式也許是代碼注入——將新代碼置入正在運行的進(jìn)程的內(nèi)存空間,隨后指示正在運行的進(jìn)程執(zhí)行這些代碼。此類攻擊如果成功,則幾乎可以進(jìn)行任何操作,因為正在運行的進(jìn)程完全被劫持,可執(zhí)行攻擊者希望執(zhí)行的任何代碼。
此類攻擊最著名的示例之一就是 Windows 動畫光標(biāo)攻擊,這正是本文要討論的模式。攻擊者利用一個簡單的 Web 頁面將形式不當(dāng)?shù)膭赢嫻鈽?biāo)文件下載到查看者的 PC 中,導(dǎo)致瀏覽器調(diào)用此動畫光標(biāo),動畫光標(biāo)調(diào)用時可能發(fā)生任意代碼的注入。實際上,這是一個完美的攻擊載體:因為它不要求對被攻擊機(jī)器的任何實際訪問、最終用戶根本意識不到任何可能發(fā)生的麻煩;此外,如果攻擊效果的惡意也是適度的,則對最終用戶的外部影響幾乎是零。
考慮示例 1(a),當(dāng)然,這改寫自 Windows 攻擊,它構(gòu)成了此類攻擊載體的基礎(chǔ)。這里的開發(fā)人員對于傳入流的可靠性做出了基本的假設(shè)。信任流和并相信一切都沒問題。使用基于堆棧的將被非串形化(deserialized)的類型調(diào)用函數(shù),未知數(shù)據(jù)流和代碼注入肯定會在某個時間點出現(xiàn)。
(a)
void LoadTypeFromStream(unsigned char* stream, SOMETYPE* typtr)
{
int len;
// Get the size of our type's serialized form
memcpy(&len, stream, sizeof(int));
// De-serialize the type
memcpy(typtr, stream + sizeof(int), len);
}
(b)
void foo(unsigned char* stream)
{
SOMETYPE ty;
LoadTypeFromStream(stream, &ty);
}
(c)
void LoadTypeFromStream
(unsigned char* stream, SOMETYPE* typtr)
{
int len;
// Get the size of our type's serialized form
memcpy(&len, stream, sizeof(int));
// GUARD
if( len < 0 || len > sizeof(SOMETYPE) )
throw TaintedDataException();
// De-serialize the type
memcpy(typtr, stream + sizeof(int), len);
全程面授,不高薪都難
申請成功后,我們將在24小時內(nèi)與您聯(lián)系
招生熱線: 4008-0731-86 / 0731-82186801
學(xué)校地址: 長沙市天心區(qū)團(tuán)結(jié)路6號
Copyright © 2006 | 湖南大計信息科技有限公司 版權(quán)所有
湘ICP備14017520號-3