基于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主机安全类程序都无法检测出来。