我的服务器遭到入侵,我尝试获取恶意用户的打开文件,它说该用户没有 UID ,因此找不到任何内容。我看到该用户正在运行某些进程,但我无法获取它打开的文件。
答案1
它说用户没有 UID
我当然同意这一点。 “在服务器上运行事物的恶意用户”定义的用户没有 UID,但这是因为该用户可能(也许)在您的计算机上以不同的 UID 运行事物(从现在开始我将坚持术语“攻击者”)。
因此,正确的路径是尝试找出攻击者通过什么路径来控制您计算机上可以执行fork()
和 的进程exec()
。这是一个非常好的起点,因为归根结底,成功的攻击是从获得对可以做到这一点的进程的控制(可能以非常复杂的方式)开始的。攻击者如何设法达到这一点取决于攻击的不同。
也就是说,佳能回答如何处理受感染的服务器是为了从轨道上用核武器摧毁它。它不再是您的计算机,您无法确定攻击者获得了多少访问权限。如果攻击者获得了根权限,那么您可能会连接到在曾经是您的服务器上运行的虚拟机。或者您甚至可能正在对付 rootkit。
(注:“nuke from Orbit”对大多数人来说意味着“全新安装”)
回到实际问题:
为什么用户名没有UID?
或者更好的是,问题文本所暗示的:
(进程如何在没有 UID 的情况下运行?)
进程在没有 UID 的情况下运行的想法是荒谬的。维护进程存在的内核结构(实际上是 KSE)包含一个必须填充的 UID 字段(即使在内核错误的情况下填充了垃圾)。因此每个进程总是有一个UID。
您最有可能处理的是 UID 未在 中列出/etc/passwd
,尽管这对于进程来说很奇怪,但与执行操作没有什么不同touch leet; chown 1337 leet
(假设您没有具有该 UID 的用户权限)。几乎所有标准 *nix 工具都可以像处理用户名一样处理 UID。 IE
lsof -u username
相当于
lsof -u `id -u username`
和
find . -user username
也相当于
find . -user `id -u username`
因此回到第一句话(强调我的):
它说用户没有 UID
不管怎样它在那里,它不是标准的 *nix 工具。或者你真的比你想象的更糟糕,并且正在逃跑里面攻击者创建的一些相当奇怪的环境。
答案2
要查找系统上的无所有者文件,您可以运行find / -nouser
您还可以运行find /sbin -mtime 1
以查找 /sbin 目录中一天内修改的任何文件。
答案3
很简单,用户和二进制文件可能已从系统中删除,或者 root 可能启动了进程并更改了 uid;请做好准备,您可能也找不到二进制文件。
此时,我不会使用受感染的系统启动,而是使用实时发行版启动来分析文件系统。正如 grochmal 所说,如果存在 root 漏洞,tou 可能会安装受损的工具/二进制文件。事实上,您有一个用户不知道的二进制文件,这一事实强烈表明了这一点。
话虽这么说,我已经看到了一些系统泄露,要么是 root 升级,要么是简单的用户密码泄露,让二进制文件运行然后删除它们以使取证操作复杂化似乎是一种常见趋势。
答案4
我在使用时也看到了这一点,docker
因为容器内的 UID 可能无法映射到主机操作系统上的用户。