15.05 inode 标志:命令 lsattr chattr + 系统调用 ioctl
简要介绍
这是一种 Linux 相对于 UNIX 上扩展的非标准功能,只在部分文件系统上支持。不过现代 BSD 上也有 chflags 命令和系统调用,功能有类似之处。
在程序中可利用 ioctl() 系统调用来获取并修改 i 节点标志;在终端则可以使用 lsattr 和 chattr 命令操作文件属性。
用 ioctl 更新标志的例子:

inode 标记的功能

其中 FS_IMMUTABLE_FL 将文件设置为不可更改,既不能更新文件数据(write() 和 truncate()),也不能改变文件元数据(即 chmod()、chown()、unlink()、link()、rename()、rmdir()、utime()、setxattr() 和 removexattr())只有特权级进程(具备 CAP_LINUX_IMMUTABLE 能力的进程)可为文件设置这一标志。该标志一旦设定,即便是特权级进程也无法改变文件的内容或元数据。 这也意味着文件不能被删除,2023 年底我校流行的一种挖矿病毒1上有使用到这个标志。
一般而言,如果针对某一目录设置了 i 节点标志,那么新建于其下的文件和子目录会自动将其继承。不过也有例外,比如
FS_DIRSYNC_FL(chattr +D)只能应用于目录,所以只有子目录会继承;当将FS_IMMUTABLE_FL(chattr +i) 标志应用于目录时,不会有创建于该目录下的文件或子目录继承此标志,因为该标志会阻止在此目录中添加任何新的条目。
更详细一点的标志列表可以用 man chattr 查看,书可能因为出版时间问题标志少了一些。
参考 yayaya Miner 木马病毒分析。其他相关信息:攻击者使用了开源程序 Diamorphine,以内核模块的方式隐藏进程。
top和ps看不到进程,但是sysdig能看到。WSL 现在还缺一些东西,无法正常运行sysdig。 ↩︎