嘿哈布爾。
我想向您介紹一個小型項目
我做了一個關於檔案系統中資訊隱藏儲存的專案(進一步 FS).
這可用於竊取用於教育目的的機密資訊。
選擇一個非常古老的 Linux FS 作為原型
履行
實施注意事項
如果「解開」ext2標準是件好事,那麼你可以在FS中有一個所謂的替換它
如果您儲存隱藏資訊而不加密,那麼,即使它在檔案系統中很模糊,它仍然會太顯眼,特別是如果程式設計師知道要尋找什麼的話。 因此,決定對來源檔案的所有區塊進行加密。 我選擇了分組密碼
為了在閱讀時將必要的區塊與所有其他區塊分開,決定在每個區塊的開頭添加一個特殊標記。 此令牌根據來源檔案中的區塊號進行加密。 這個技巧不僅可以立即找到必要的區塊,還可以識別它們的正確順序。
系統的一般工作原理。
錄音演算法
要點:
- 首先向原始檔案系統寫入一些資訊;
- 刪除此資訊(不一定是全部);
- 將要隱藏的文件分成等長的區塊,並加入標記;
- 加密這些區塊;
- 將加密區塊放入空 FS 區塊中。
對於框圖愛好者
下面是記錄演算法的框圖。 此演算法接收四個文件作為輸入:
-可修改檔案系統的映像;
-受隱寫術保護的文件;
-帶有 AES 加密金鑰的檔案;
- 有標記的檔案。
值得注意的是,演算法有一個缺點:將檔案寫入 FS 後, 不得 將任何新資訊寫入 FS,因為任何新資訊都可能最終出現在我們指派給壓縮檔案的區塊中,儘管這也開啟了「快速覆蓋我們的蹤跡」的可能性。
但很明顯如何解決這個問題:有必要重寫在 FS 中寫入區塊的演算法。 這是一項可以理解但極其耗時的任務。
對於概念證明,我沒有實現這一點。
因此,將對 FS 進行以下更改;這是在隱寫術之前 FS 的樣子(之前錄製了音訊檔案)。
這就是 FS 的樣子,訊息已經被壓縮了。
讀取演算法
要點:
- 知道金鑰和建構標記的方法,組成前 N 個標記,並保證 N 乘以檔案系統區塊的長度大於壓縮檔案的長度;
- 在 FS 中以標記開始搜尋區塊;
- 破解接收到的區塊並分離標記;
- 以正確的順序收集生成的區塊並取得原始檔案。
對於框圖愛好者
下面是記錄演算法的框圖。 此演算法接收三個文件作為輸入:
- 檔案系統映像;
-帶有 AES 加密金鑰的檔案;
- 有標記的檔案。
程式運行後,會出現讀取文件,該文件將是從隱寫文件系統中提取的文件;如果密鑰或標記指定不正確,則讀取文件將為空。
(對於愛美的人來說,您不僅可以插入文件,還可以插入包含元資訊的「標頭」:文件名、權限、上次修改時間等)
啟動自動化
為了方便起見,編寫了 bash 腳本來在 Linux 上自動啟動(在 Ubuntu 16.04.3 LTS 上測試)。
讓我們一步步看一下啟動過程。
記錄:
- sudo Copy_Flash.sh “DEVICE” - 從 DEVICE(快閃記憶體)取得 FS 映像;
- ./Write.sh “FILE” “KEY” “MARKER” – 建立虛擬環境,下載必要的程式庫並執行寫入腳本;
- sudo ./Write_Flash.sh “DEVICE” – 將更改後的 FS 再次寫入 DEVICE。
讀:
- sudo Copy_Flash.sh “DEVICE” - 從 DEVICE(快閃記憶體)取得 FS 映像;
- ./Read.sh「KEY」「MARKER」-建立虛擬環境,下載必要的函式庫並執行skipt進行讀取;
- 在目前目錄中,開啟讀取檔案 - 這是壓縮資訊。
結論
這種隱寫術方法可能需要改進、額外的測試和擴展到更流行的檔案系統,例如
但這項工作的目的是展示在檔案系統中進行資訊隱藏儲存的原理。
借助此類演算法,您可以無所畏懼地存儲信息,並且如果您知道密鑰,則可以不通過暴力(而是通過很長的算法)來破解這樣的系統,那麼在不知道密鑰的情況下,這在我看來,系統絕對穩定,但是,這可以作為單獨一篇文章的原因。
所有程式碼均在 Python 版本 3.5.2 中實作。
(是的,是的,我知道對於生產版本,你需要用「快速」的東西編寫,例如 C 😉)
在此實作中,隱寫術的輸入檔的大小不應超過 1000 kB。
我想向用戶表示感謝
來源: www.habr.com