基於debugfs的linux文件隱藏技巧
最近研究數據恢復的過程中,發現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主機安全類程序都無法檢測出來。