當前位置:網站首頁>【安全技術揭秘系列】探索圖片隱寫的奧秘

【安全技術揭秘系列】探索圖片隱寫的奧秘

2022-01-27 08:03:02 白面安全猿

 

什麼是隱寫?由於我們識別聲音或圖片的能力有限,因此稍微改動信息的某字節比特的數據是不會影響我們識別聲音或圖片的。舉個最通俗的例子,古人的藏頭詩就是隱寫的一種方式:

 

而CTF圖片隱寫術就是利用圖片來隱藏一些機密信息,一張看起來很正常很普通的圖片其實內部隱藏了其他玄機。

圖種(多文件壓縮)

所謂圖種,就是先把要想隱藏的東西打包壓縮,然後再跟一張正常的圖片結合起來,達到隱藏信息的目的。

可以直接使用CMD "copy/b" 直接壓縮圖片:

copy/b a.png + b output.png

例如,將一張jpg隱藏到另一張png圖片中:

 

 

用kali中的"binwalk"工具可以根據檢索匹配文件頭的原理輕松地檢索圖片文件中隱藏的其他文件,還是以這張圖片為例:

 

找到隱藏的文件在kali 中可以使用"foremost"或者"dd",將output.png進行分離,分離出的隱藏的文件:

 

各比特置信息隱藏

2.1 文件頭尾

較為直接的方式,直接將文字信息隱藏在圖片文件的頭尾內容之中,例如下圖:

 

使用16進制編輯工具(winhex)直接打開,可以發現再圖片基礎信息字段之後,直接插入了flag信息:

 

還有些是在文件尾部插入信息:

 

2.2 IHDR隱藏信息

文件頭數據塊IHDR(header chunk):它包括有PNG文件裏存儲的圖像數據的基本信息,並要作為第一個數據塊出如今PNG數據流中,並且一個PNG數據流中僅僅能有一個文件頭數據塊。

文件頭數據塊由13字節組成,它的格式如下錶:

域的名稱

字節數

說明

Width 4 bytes 圖像寬度,以像素為單比特
Height 4 bytes 圖像高度,以像素為單比特
Bit depth 1 byte 圖像深度:
索引彩色圖像:1,2,4或8
灰度圖像:1,2,4,8或16
真彩色圖像:8或16
ColorType 1 byte 顏色類型:
0:灰度圖像, 1,2,4,8或16
2:真彩色圖像,8或16
3:索引彩色圖像,1,2,4或8
4:帶α通道數據的灰度圖像,8或16
6:帶α通道數據的真彩色圖像,8或16
Compression method 1 byte 壓縮方法(LZ77派生算法)
Filter method 1 byte 濾波器方法
Interlace method 1 byte 隔行掃描方法:
0:非隔行掃描
1: Adam7(由Adam M. Costello開發的7遍隔行掃描方法)

在CTF圖片隱寫中,常常通過改變Height(4 bytes)來隱藏有效信息,例如下圖:

 

使用16進制編輯工具(winhex)直接打開,嘗試改變IHDR中的高度信息(PS:一般圖片寬度信息無法修改,會造成圖片亂碼)“01 DD”——>“02 DD”:

 

隱藏的flag信息通過高度調整,被暴露出來:

 

2.3 exif信息隱藏

按照國際Exif2.1標准,當你用單反相機或手機拍攝完一張照片,相機會生成一個如JPEG格式的電子文件保存起來,這個jpeg圖片它不只保存了你拍攝的畫面,還保存很多其他的一些信息如:相機品牌、手機型號、閃光燈、快門速度、光圈大小、感光度及GPS坐標等,這些信息就是EXIF信息。最常見的就是:右鍵——>屬性,這樣只能够查看部分的exif信息。

當然這個信息是可以被篡改的,例如使用“PowerExif”等工具,在kali中,可以使用"exiftool"直觀的查看圖片各類exif信息:

例如下面這張照片,我們“右鍵->屬性”只能看到部分的base64編碼信息:

 

借助"exiftool"在Comment中發現另一部分編碼信息:

 

文件修複

將文件頭內容(16進制編碼)修改或删除,會造成文件無法打開,損壞的問題,可以通過16進制編碼器(winhex)進行修複。

需要我們比較熟悉已知常見文件的文件頭標准編碼:

文件名

文件頭

文件尾

JPEG (jpg) FFD8FF FFD9
PNG (png) 89504E47 AE426082
GIF (gif)

47494638

003B

ZIP Archive (zip) 504B0304

504B

TIFF (tif) 49492A00

Windows Bitmap (bmp) 424D

CAD (dwg) 41433130

Adobe Photoshop (psd) 38425053

Rich Text Format (rtf) 7B5C727466

...更多參考

例如下面這張無法打開的png圖片,導入winhex後,發現文件頭明顯不符合PNG圖片的標准編碼:

1631591139_61401ae31f350e17744e5.png!small?1631591139912

 

"89 5A"——>"80 5A"改為PNG標准編碼,發現圖片可以正常打開了:

 

LSB隱寫

LSB全稱為 least significant bit,是最低有效比特的意思。Lsb圖片隱寫是基於Lsb算法的一種圖片隱寫術,一般能使用LSB進行隱寫的圖片需要是無損壓縮(png圖片)或者無壓縮的圖片(BMP圖片),因為這能保證我們修改的信息不至於丟失,也就能得到正確的錶達。

以png圖片為例子,png圖片中的圖像像數一般是由RGB三原色(紅綠藍)組成,每一種顏色占用8比特,取值範圍為0x00~0xFF,即有256種顏色,一共包含了256的3次方的顏色,即16777216種顏色。而人類的眼睛可以區分約1000萬種不同的顏色,這就意味著人類的眼睛無法區分餘下的顏色大約有6777216種。

 

而LSB隱寫算法就是去修改RGB顏色分量的最低二進制比特也就是最低有效比特(LSB),人類的眼睛不會注意到這前後的變化,每個像素可以攜帶3比特的信息。

例如下面這張經典的圖:綠色,十進制的235,二進制的11101011,通過二進制運算加、减3修改最低有效比特,發現肉眼根本區分不出來差別:

 

像下面這張圖,通過"StegSlove"工具打開:

 

利用LSB算法提取最低有效比特信息,可以有效的發現隱藏的壓縮包文件:

 

還有一種雙圖比較的題型,也是利用RGB圖層更改的方式來隱藏信息:

 

將上面兩張肉眼無法區分的圖片,放入"StegSlove"中進行RGB圖層處理,在SUB(R,G,B separate)發現了一張模糊二維碼:

 

再將這張模糊二維碼進行RGB圖層處理,在RED、GREEN、BLUE plane 0 下分別發現3張清晰的二維碼,掃碼就得到了隱藏的具體信息:

 

總結

以上的幾種就是CTF中常見的圖片隱寫方法和題型,而在實際的隱寫技術中還有更多的隱寫算法和隱藏技術。這裏在總結下上述的思路:

在圖像數據中加入數據,不影響視覺效果情况下修改像素數據,加入信息;(圖種)
在圖片右擊查看屬性,在詳細信息(exif)中隱藏數據;(exif信息隱藏)
根據各種類型圖像的固定格式,在各比特置添加數據;(頭、尾、IHDR信息隱藏)
在編譯器中修改圖像開始的標准編碼,改變其原來圖像格式;(文件修複)
將數據類型進行改寫(rar或者zip數據改為jpg等格式);(文件修複)
利用隱寫算法將數據隱寫到圖片中而不影響圖像,隱寫常用的算法有LSB,jpghide;(LSB算法)

​​掌握類似的圖片隱寫技術,一方面可以幫助我們了解暗水印的原理,另一方面對我們在惡意文件隱藏(類似圖片木馬)檢測的防禦中,更有效的去取證溯源。

版權聲明
本文為[白面安全猿]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201270803018277.html