網(wǎng)絡(luò)安全攻防:數(shù)據(jù)隱寫
01 隱寫術(shù)
隱寫術(shù)(Steganography)是一門關(guān)于信息隱藏的技巧與科學(xué),所謂信息隱藏指的是不讓除預(yù)期的接收者之外的任何人知曉信息的傳遞事件或信息的內(nèi)容。隱寫術(shù)的起源可以追溯到動植物界中存在的“擬態(tài)”,是一種很好的自我保護方式。
與加密技術(shù)相比,隱寫術(shù)的主要特點為:隱藏傳輸?shù)男畔⑹乔度朐谝粋€看似無關(guān)聯(lián)的載體上進行的。而加密通信是通過算法的偽裝使信息不可破解。由于隱寫術(shù)選擇的信息載體具有迷惑性,而其信息本身仍然可以使用算法進行混淆,因此,隱寫術(shù)的檢測比一般加密算法的破解更復(fù)雜。
在古代,隱寫術(shù)又叫密寫術(shù),古人用明礬水在紙上寫字,晾干后看不出痕跡,但只要浸入水中字跡就能顯示出來,這是簡單的化學(xué)原理的應(yīng)用。除了明礬,古人也用米湯水寫字,再用碘酒顯形。
到了互聯(lián)網(wǎng)時代,計算機的普及使隱寫術(shù)又有了質(zhì)的飛躍?,F(xiàn)代隱寫術(shù)的發(fā)展,主要表現(xiàn)在幾個分支:語言隱寫、數(shù)字媒體信息隱藏、文件系統(tǒng)隱寫術(shù)、網(wǎng)絡(luò)流量隱寫等。
語言隱寫主要是通過對載體文字語言的段落、語序或更換同義詞的方式來完成的。數(shù)字媒體隱寫利用了修改編碼、修改顯著位使信息暫時不可見,或是將隱藏信息寫入到一些不顯著位,難以察覺地替換了原有信息并將替換方法告知接收方從而提取隱藏信息。文件系統(tǒng)隱寫是指利用當前文件系統(tǒng)的特殊技巧,使隱藏信息的文件不會正常顯示出來。網(wǎng)絡(luò)流量隱寫指將數(shù)據(jù)重新拆分編碼為獨立的數(shù)據(jù)流,并將其混入不易察覺的網(wǎng)絡(luò)流量中進行發(fā)送。
02 數(shù)字水印
數(shù)字水印技術(shù),是指將特定的信息嵌入數(shù)字信號中,用來體現(xiàn)版權(quán)所有者的技術(shù)。數(shù)字信號可能是音頻、圖片或視頻等。數(shù)字水印可分為浮現(xiàn)式和隱藏式兩種,前者是可被看見的水印,一般來說,浮現(xiàn)式的水印通常包含版權(quán)擁有者的名稱或標志。電視臺在畫面角落所放置的標志,也是浮現(xiàn)式水印的一種。隱藏式水印是隱寫術(shù)的一種信息隱藏方法,用來避免數(shù)字媒體文件未經(jīng)授權(quán)的拷貝和使用。
因為數(shù)字水印的在日常生活中的普遍使用和其代表版權(quán)的重要作用,也要求其有如下幾個特性。
安全性:水印信息應(yīng)當難以篡改和偽造。
隱蔽性:水印對感官不可知覺,水印的嵌入不能影響被保護數(shù)據(jù)的可用性大大降低。不具備這一特性的水印,稱為可見水印。
強健性:水印能夠抵御對嵌入后數(shù)據(jù)的一定操作,而不因為一些細微的操作而磨滅。包括數(shù)據(jù)的傳輸中產(chǎn)生的個別位錯誤、圖像/視頻/音頻的壓縮。不具備這一特性的水印,稱為脆弱水印。
水印容量:載體可以嵌入水印的信息量大小。
水印生成技術(shù):偽隨機生成、擴頻水印生成、混沌水印生成、糾錯編碼水印生成、基于分解的水印生成、基于變換的水印生成、多分辨率水印生成和自適應(yīng)水印生成等。
水印的嵌入技術(shù):加性和乘性嵌入、量化嵌入、替換嵌入、自適應(yīng)嵌入等。
水印的檢測技術(shù):分為3種不同假設(shè)方法的實現(xiàn),即對待檢測信號的統(tǒng)計特性的假設(shè)、噪聲的統(tǒng)計特性的假設(shè)和對嵌入技術(shù)的假設(shè)。
03 文本隱寫
文本隱寫即是在文本中添加隱藏信息內(nèi)容,對于不同的載體內(nèi)容,可分為兩類:有格式文本隱寫和無格式文本隱寫。
有格式文本隱寫,如word、html等文件格式,文本內(nèi)容可以被加上各種語法而表示為不同的顯示方式,因此有較多的隱寫途徑。如設(shè)字體顏色與背景色相同起到混淆作用、將字體變小到肉眼難以察覺、用不同的語言隱藏信息、將信息隱藏到注釋中等方法。同時也可將信息利用拆分重編碼的方式轉(zhuǎn)換成更多更小的信息塊,甚至轉(zhuǎn)化為二進制數(shù)后以多種方式表示為0和1,如每行行首是否有空格、每行行間距為單倍還是1.5倍、每個字字間距倍數(shù),字體的大小和顏色等都可以作為信息的隱藏方式。
無格式文本隱寫,如txt等純文本文件,隱藏信息的方式也有多種,如每個字間的空格、標點符號的布局、單詞和拼音的首字母組等方式,也可能是大量可讀或不可讀文本中隱藏了一小句關(guān)鍵信息等。
04 圖片隱寫
圖片隱寫即是在圖片中添加隱藏信息,信息可以隱藏在圖片頭部、圖片中間以及圖片末尾的等地方。
隱藏在頭部,可以是圖片信息的摘要、日期、作者、標題等說明信息。
隱藏在圖片中,可以根據(jù)圖片格式的特殊性質(zhì),在每一個模塊的最后添加隱藏信息而不破壞原圖的顯示,或添加在一些特殊作用不被顯示的模塊中以達到隱藏效果。同時,也可以采用一些隱寫算法進行寫入,如典型空域隱寫中的LSB隱寫,將隱藏信息轉(zhuǎn)化為二進制數(shù)據(jù),以較低位按位寫入信息的方法,將數(shù)據(jù)寫入而不引起較大的色差。擴張方法還有MLSB,對多位隱寫減少被發(fā)現(xiàn)的可能性。此外,還有 DCT 域隱寫,利用多點比較的邏輯結(jié)果隱藏二進制0或1,較常見的有Jsteg隱寫、F5隱寫、OutGuess隱寫、MB隱寫等算法。
如圖1所示是一張基于LSB隱寫信息的圖,但是根本看不出有任何異樣。
圖1 基于LSB隱寫示例
隱藏在圖片末尾,由于圖片格式的規(guī)定,用一些特殊字符作為圖片的結(jié)尾,在這一字符后的部分不再被當作圖片內(nèi)容處理,因此,可以將任意多的隱藏信息寫在圖片末尾而對圖片的顯示沒有任何影響。網(wǎng)上流傳的將圖片后綴名改為 zip 即可解壓的文件就是在正常圖片后面追加了一個zip文件做成的。
1. StegSolve
最經(jīng)典的圖片隱藏信息查看工具是一款 Java 環(huán)境下的小工具 StegSolve。該工具不僅可以自動分析圖片格式,得出隱藏在文件頭、文件塊、文件末尾等處的冗余信息,還可以按位查看圖片,分析其中的隱藏內(nèi)容,也支持雙圖比較,用于得出圖片差隱藏的信息。對于動態(tài)圖片,StegSolve 可以將其分解為單幀保存查看,是一款用于隱寫圖片分析的強大工具,圖2即為利用StegSolve查看紅色第4位像素。
圖2 利用StegSolve查看紅色第4位像素
同樣利用StegSolve分析上述隱寫圖片,可以發(fā)現(xiàn)隱藏信息,該信息隱藏在RGBA中的綠色通道最低位,再按列排列所有二進制串,將二進制串相連每 8個二進制數(shù)解釋為一個ASCII字符,即可得到隱藏字符內(nèi)容,如圖3所示。
圖3 隱藏信息
2. Binwalk
Binwalk 本身是一款文件分析工具,可用來提取文件及幫助完成逆向工程等工作。通過自定義簽名,提取規(guī)則和插件模塊,且有很強的可擴展性。在這里同樣可以利用Binwalk分析圖片中隱藏的文件。對于上述圖片,可以執(zhí)行如下命令。
- binwalk(圖片名)
得到分析結(jié)果如下。
- >binwalk puppy.png
- * suggest: you'd better to input the parameters enclosed in double quotes.
- DECIMAL HEXADECIMAL DESCRIPTION
- -------------------------------------------------------------------------------
- 0 0x0 PNG image,256 x 256,8-bit/color RGBA,non-interlaced
- 41 0x29 Zlib compressed data,default compression
- 49613 0xC1CD RAR archive data,first volume type: MAIN_HEAD
從結(jié)果中可以看出該文件從0~40位為PNG圖片的頭部信息,標注了其規(guī)格和位數(shù)。從40~49 612位為Zlib壓縮數(shù)據(jù),其中,PNG、Gzip、Zlib用的是同一種壓縮算法default,因此,這一塊也就是PNG圖片的數(shù)據(jù)部分。而最后49 613~文件末尾還有一塊卻標注了RAR格式數(shù)據(jù),這并不屬于 PNG 的正常文件部分,因此它是隱藏數(shù)據(jù)信息,同樣可利用如下命令分離每一塊數(shù)據(jù)部分。
- binwalk –e(圖片名)
得到一個_(圖片名).extracted 文件夾,其中為原圖分離出來的各個部分內(nèi)容,可以看到之前分析得到的隱藏數(shù)據(jù)壓縮包,在對其解壓得到的txt文件中發(fā)現(xiàn)了隱藏內(nèi)容。
05 音頻隱寫
同圖片一樣,存在著大量冗余信息和噪聲的音頻同樣可以用來隱藏信息,不同于圖片對每個點的像素進行描述,音頻是對每一個時間點的聲音信息進行描述,并且該聲音中仍舊存在“不重要信息位”,利用對它的修改,可以達到信息隱藏的目的。
此外,音頻也存在著一些有趣的隱寫方式,如將另一段需要隱藏的音頻減小音量、降低頻率等處理后插入原有音頻,或加入多個聲道。也可以將其反轉(zhuǎn)、快放、慢放等方式使其變得不引人注目,從而達到隱藏目的。
另一種方法,還可以在其波形圖中加入信息,如圖4所示的Morse密碼形式。
圖4 Morse密碼形式
同樣,在音頻的頻譜圖中也可以隱藏信息,如圖5所示是通過頻譜圖分析得到的效果。
圖5 頻譜圖分析
1. Audacity
Audacity 是一款免費的音頻處理軟件,其操作界面簡單卻有著專業(yè)的音頻處理能力。它支持WAV、MP3、Ogg Vorbis或其他的聲音文件格式,支持MP4、MOV、WMA、M4A、AC3等視頻格式,可用于錄音與放音,對聲音做剪切、復(fù)制、粘貼(可撤消無限次數(shù)),波封編輯雜音消除,支持多音軌混音、多聲道模式,采樣率最高可至96 kHz,每個取樣點可以以24 bit表示。在隱寫分析上,其操作簡單、顯示效果直觀,便于分析和測試。
2. FFmpeg
FFmpeg是一套可以用來記錄、轉(zhuǎn)換數(shù)字音頻和視頻,并能將其轉(zhuǎn)化為流的開源計算機程序。它提供了錄制、轉(zhuǎn)換以及流化音視頻的完整解決方案。它包含了非常先進的音頻/視頻編解碼庫 libavcodec,支持 Windows和Linux 平臺,可以用于視頻等文件的隱寫及分析。
06 文件修復(fù)
數(shù)據(jù)以一定的格式存儲在硬件設(shè)備中,由于硬盤老化、外力作用或程序出錯、病毒破壞等原因,造成了數(shù)據(jù)損壞,因此,需要文件修復(fù)方法使損失降到最低。
1. TestDisk
TestDisk是一款開源磁盤修復(fù)工具,可以修復(fù)由于軟件缺陷或某些病毒導(dǎo)致的分區(qū)丟失或分區(qū)表丟失導(dǎo)致磁盤無法啟動的問題。TestDisk通過BIOS(DOS/Win9x)或操作系統(tǒng)(Linux、FreeBSD)查詢硬盤特性(LBA大小和CHS參數(shù))。然后會快速檢查磁盤數(shù)據(jù)結(jié)構(gòu)并恢復(fù)分區(qū)表,同時也能用來恢復(fù)誤刪除的文件。圖6所示為使用TestDiskgui版本恢復(fù)已刪除文件。
圖6 TestDisk文件修復(fù)
2. Pcapfix
Pcapfix是一款修復(fù)損壞pcap文件的工具。它會檢查一個完整的pcap全局頭,如果有任何損壞字節(jié),就會修復(fù)它,如果缺少一個字節(jié),它會創(chuàng)建和補充一個新的字節(jié)到文件的開頭,然后試圖找到pcap頭并檢查和修復(fù)它。使用方法如下。
- pcapfix x.x.0(c)2012-2021 Robert Krause
- Usage: pcapfix[OPTIONS]filename
- OPTIONS: -d ,--deep-scan Deep scan(pcap only)
- -n ,--pcapng force pcapng format
- -o<file>,--outfile<file> set output file name
- -t<nr> ,--data-link-type<nr> Data link type
- -v ,--verbose Verbose output
3. Winhex
Winhex 是一款Windows平臺下功能強大的十六進制文件編輯器,利用該軟件,可以查看和修改文件存儲在硬盤中的具體數(shù)值,甚至是內(nèi)存中程序動態(tài)存放的數(shù)值也可以進行操作。利用該工具可以查看基于文件格式的隱藏數(shù)據(jù)。如圖7所示為利用Winhex查看文件十六進制發(fā)現(xiàn)最后的隱藏rar文件。
圖7 Winhex查看文件