Linux 的进程身份验证

信息安全 linux 恶意软件 病毒
2021-08-22 12:20:01

是否有可能对 Linux 中正在运行的进程进行身份验证以确保这是原始/正确的?

我知道 Linux 操作系统只是像您使用它的方式一样安全。例如:假设我正在使用 Ubuntu Linux 并通过 PPA 安装任何软件,该软件有权在我的系统中执行它想要的一切,因为我必须使用 sudo 权限安装它。(我认为 PPA 通常是 Ubuntu 中的一个安全问题)

让我们假设“坏人编码软件”安装了一些东西来完成我所期望的工作,例如 Gnome 主题、动态壁纸等等。但它也用键盘记录器或任何其他类型的恶意软件替换了我的 Ubuntu 系统的任何进程,并在我的系统中运行。

如果它是原始进程,是否有机会检查 Linux 中正在运行的进程?

正在运行的进程很容易获取/查找,并且操作系统的进程以及来自 Ubuntu apt 存储库的进程都是已知的,所以我想有可能将正在运行的进程的代码与已知 Ubuntu 的任何数据库进行比较存储库软件/进程和已知的 Linux 软件/进程。

Linux/Ubuntu 是否可能或可用某种进程身份验证?

2个回答

您可以通过检查文件内容的安全哈希来了解文件是否已被修改。您可以手动执行此操作,也可以使用包管理器;使用 RPM 时rpm -V,使用 apt 即可debsums

然后检查进程是否使用该文件启动。这一点也很简单:检查proc条目。这不仅会跟踪文件的路径,还会跟踪其 inode 编号,因此如果文件被替换,它将不匹配。观察:

[tylerl@tyler-11 ~]$ ./foo &
[1] 26157
[tylerl@tyler-11 ~]$ ls -l /proc/26157/exe 
lrwxrwxrwx 1 tylerl tylerl 0 2013-01-16 12:31 /proc/26157/exe -> /home/tylerl/foo
[tylerl@tyler-11 ~]$ ls -l /home/tylerl/foo
-rwxr-xr-x 1 tylerl tylerl 8.3K 2013-01-16 12:31 /home/tylerl/foo
[tylerl@tyler-11 ~]$ echo 1 >> foo
-bash: foo: Text file busy
[tylerl@tyler-11 ~]$ rm foo
rm: remove regular file `foo'? y
[tylerl@tyler-11 ~]$ echo 1 > foo
[tylerl@tyler-11 ~]$ ls -l /proc/26157/exe 
lrwxrwxrwx 1 tylerl tylerl 0 2013-01-16 12:31 /proc/26157/exe -> /home/tylerl/foo (deleted)
[tylerl@tyler-11 ~]$ ls -l /home/tylerl/foo
-rw-r--r-- 1 tylerl tylerl 2 2013-01-16 12:32 /home/tylerl/foo

注意两点:(a)文件在运行时不能被修改,(b)虽然你可以删除它并替换它,但新的目录条目将对应一个不同的可执行文件,并且proc条目会说(deleted)警告你的区别。

请注意,我可以通过运行来恢复原始文件cp /proc/26157/exe ./orig_exe,然后可以根据需要对其进行检查。在关闭最后一个引用之前,文件实际上不会从磁盘中删除。

debsums 可以提供帮助,但这不是最终答案。

例如,一个包可以在 /usr/local/sbin 中安装一个全新的文件,然后通过它找到的用户的 .profile 文件并添加一行来执行该过程。

debsums 不会抱怨,属于数据包的文件没有被更改。此外,/etc 上的文件是由软件包安装的,但需要更改。但是真的没有必要去篡改其他包做一些讨厌的事情。

例如,一个包可以安装一个服务,配置步骤会将该脚本配置为在启动时以 root 权限运行。绝对没有必要修改现有的二进制文件,除非它可能更明显一些。