Linux 提权原理和方法
Table of Contents
1 什么是提权
提权*,或 *特权升级 是指攻击者在系统中寻找访问敏感信息或者受限功能的访问权限的行为。一般指利用安全缺陷绕过限定的访问限制,拿到更高的访问权限。
在 Linux 上,有几种方法可以做到用户提权,包括利用配置缺陷,利用程序漏洞,和失效的访问控制。
2 主要提权技术
2.1 利用不安全的配置
2.1.1 弱口令
弱口令是一个不安全配置的例子。攻击者通常会尝试至少下面这几个密码:
password 123456 123456789 admin administrator root toor
攻击者通常会利用自动化脚本,尝试下列口令库:
为了杜绝弱密码,建议使用密码管理器来管理密码。在 Linux 系统上,使用 PAM(Pluggable Authentication Modules) 来设置密码强度。另外,也可以使用 fail2ban 来自动频闭登录错误次数太多的IP地址。
一个使用 /etc/security/passwdqc.conf
管理密码强度的例子如下:
min=disabled,24,11,8,7 max=72 passphrase=3 match=4 similar=deny random=47 enforce=everyone retry=3
2.1.2 失效的访问控制
访问控制配置的原则是最小权限原则:赋予用户能满足工作要求的最小权限。例如,一个用户要运行一个web服务器,就不应该赋予管理员权限。
当一个 redis 权限拿到,攻击者就可以获得写文件的权限,然后获得 webshell。
config set dir /var/www/html/ config set dbfilename shell.php set xxx "<?php eval($_POST[whoami]);?>" save
权限配置是繁复的工作,系统管理员需要经常检查。
2.2 利用程序漏洞
攻击者可以利用服务器上程序的漏洞来提权。例如, 2019 年 vsftpd 2.3.4 CVE-2011-2523 的漏洞,允许攻击者利用软件的后门控制 FTP 服务器。更新软件程序、渗透测试可以一定程度避免这样的缺陷。恰当的权限设置可以限制漏洞的影响范围。
2.3 利用本地特权
Linux 上,一个程序可以被设定以其它账号运行 (SUID),或者以其它组运行
(SGID)。例如,passwd 需要需要修改 /etc/shadow
文件,但这个文件只有
root 用户可写,正常情况下普通用户调用 passwd 会失败,因此这个程序被赋予了 SUID 权限,让它可以修改 /etc/shadow
。类似需要权限转移的程序还有许多。
攻击者可以利用此类程序来提权。
GTFOBins 列举了利用着用权限来攻击的方法,这里列举一例:
TF=$(mktemp) echo 'os.execute("/bin/sh")' > $TF nmap --script=$TF
最后, cron
程序也可能被利用来提权,这通常是不合理的权限配置造成的。例如,一个脚本被赋予其它用户写权限:
ls -la /opt/backup.sh -rw-rw-rw- 1 root root 0 Jan 17 15:07 backup.sh
然后 cron 配置以root权限运行它:
crontab -l * * * * * /opt/backup.sh
这样攻击者就可以修改 /opt/bashup.sh
来获得特权。
3 如何防止提权
3.1 定期更新系统
定期更新系统和软件是防范漏洞的主要方法。一旦程序的漏洞被发现,通常很快会发布更新,只要跟随版本升级,就可以避免漏洞引起的安全问题。
3.2 日志和监控
日志和监控记录用户行为,网络连接和系统错误。这样就可以识别出异常的行为,检测是否存在提权。
3.3 最小权限原则
赋予用户所需的最小权限,防止它们访问不应被访问的文件或程序,也是防止提权的重要方法。