基於debugfs的linux檔案隱藏技巧

語言: CN / TW / HK

最近研究資料恢復的過程中,發現debugfs的部分引數非常有趣。通過轉換資料恢復的思路,可以實現檔案隱藏的一些trick。由於大部分的linux都自帶debugfs,且不需要第三方依賴,所以該方法較為通用。

文章目錄

linux 檔案刪除的原理

引用我在資料恢復系列第一篇文章中《 資料恢復(一)-linux下ext檔案系統資料刪除原理淺析 》的檔案刪除示意圖。

基於debugfs的linux檔案隱藏原理

實現過程和原理分析

實現過程非常簡單,通過debugfs的unlink和link即可實現檔案的隱藏和恢復。

由於檔案的inode和block都不會被釋放,所以被隱藏的檔案會一直在磁碟上,也不會被其他檔案給覆蓋,即使系統重啟也不會有影響。

unlink將該檔案在目錄中的indoe資訊抹除,取消了檔名和inode的對映關係。此時檔案就消失在檔案系統無數的inode之中 。因此要想將隱藏的檔案恢復顯示,就需要記錄inode和檔案的對映關係。

指令碼實現批量檔案隱藏

#!/bin/bash

path=$1
mkdir $path 2>/dev/null
mainPartition=$(df -Th | awk '$NF=="/"{print $1}')

hideFile(){
    ls -i $path | xargs -n2  >/tmp/ifile  //備份inode和檔名的對映關係
    for file in $(ls $path); do
        echo "正在隱藏檔案:$path$file"
        debugfs -w $mainPartition -R "unlink $path$file" 2>/dev/null
    done
}

unhideFile(){
    cat /tmp/ifile | while read inum file; do
        echo "正在還原檔案:$path$file"
        debugfs -w $mainPartition -R "link <$inum> $path$file" 2>/dev/null
    done
}

if [[ $2 -eq 0 ]]; then
    hideFile 
elif [[ $2 -eq 1 ]];then
    unhideFile
fi

這是最近在研究資料恢復過程中,偶然發現的一個隱藏檔案的trick。目前尚不清楚在安全領域實際場景能否發揮用途,比如隱藏關鍵配置資訊?不過理論上通過這種方式隱藏的檔案,hids主機安全類程式都無法檢測出來。