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
。 ↩︎