一、常见提权方式
1、普通用户有权修改root用户以root权限执行的脚本文件
普通用户可以修改此文件内容,当root用户执行时,便可执行普通用户注入的命令,实现提权。
如:
cron定时任务中执行脚本时,指定了test.sh,test.sh文件如果普通用户有权限进行修改,则存在提权漏洞。
2、系统中以root权限执行的脚本、调用的脚本或者调用脚本的父目录。普通的用户有写权限,则普通用户可以提权到root用户
如:
cron定时任务会定时执行demo目录下的test.sh文件,如果test.sh只有root权限可以修改,但是demo目录普通用户可以修改,则普通用户可以直接删除此目录并且重新创建一个demo目录和test.sh,此时便可以修改test.sh文件,让root来执行任意命令。
3、可执行脚本或者二进制文件属主是root,并且具有suid属性,普通用户可执行
文件属主是root,文件权限是rwsr-xr-x,普通用户执行时文件时实际上是以root运行。
如:
$ll find
rwsr-xr-x 1 root root 221768 Feb 8 2016 find*
假设find命令的二进制文件权限是rwsr-xr-x,那么普通用户执行find命令实际是以root权限执行的
$find / -name raj.txt -exec whoami \;
root
$find / -name raj.txt -exec cat /etc/passwd \;
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/synd
games:x:5:60:games:/usr/games:/bsr/sbin/nologin
$cat /etc/passwd
cat: /etc/passwda: Permission denied
4、root的$PATH中设置有普通用户目录,并且该目录优先级高
用户执行命令时,会根据$PATH的路径搜索命令,搜索顺序是按$PATH中设置的顺序,如果路径中有普通用户可以控制的目录且顺序在系统命令目前之前,则普通用户可以自己在目录中设置恶意命令,等root用户执行该命令时,实现root提权。
如:
先在/test/demo目录下创建一个ls文件,并将目录配置到环境变量中
$echo $PATH
/test/demo:/usr/bin:/usr/sbin:/usr/local/sbin
$cat /test/demo/ls
#/bin/bash
id
$ls
uid=0(root) gid=0(root) groups=0(root) context=system u:system r:kernel t:s0
当我们执行ls命令时实际上执行的是id命令
5、脚本未对外部输入的数据进行合理的校验
(1)、脚本入参
(2)、读取外部文件内容
(3)、依赖的库文件
(4)、理外部输入等
一旦外部输入可被低权限或者其他用户直接或者间接控制,将会造成纵向或者横向提权,泄露敏感信息等。
(外部输入数据的控制权限与脚本自身运行权限不对等)
6、sudo配置危险的命令
/etc/sudoers配置文件中配置了危险命令,如可以使用sudo修改文件等,那么普通用户就可以以root权限修改文件进行提权等操作。
二、如何降低提权风险
禁止在PATH环境变量中使用相对路径
说明:环境变量攻击是用来操控脚本行为的最常见方式,通过修改环境变量攻击者可以改变一个依赖环境变量值的脚本的执行过程或执行结果。其中最常被修改的环境变量是 PATH ,该变量值的路径集决定用户在执行不包含完整路径的单独命令时,查找该命令的路径及路径查找先后顺序。
假设PATH变量内容为/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin,正常情况下命令会顺序在/usr/local/sbin、/usr/local/bin、/usr/sbin、/usr/bin、/sbin、/bin中查找并执行。如果PATH环境变量内容设置不当,存在如“.”的相对路径,攻击者可以在当前目录下创建与系统命令同名的恶意程序或脚本,当用户执行该命令时,就会触发执行该恶意程序,导致恶意攻击。防护措施:在脚本中修改PATH环境变量时必须使用绝对路径。
错误示例:创建名为ls的脚本,内容如下:
#!/bin/bash
echo "I'm not ls command"
建立脚本target.sh,内容如下:
#!/bin/bash
PATH=.:${PATH}
ls -l
执行脚本target.sh,结果为非预期的“ls -l”结果,如下所示:
I'm not ls command
由于该脚本以当前用户权限执行,脚本中调用的命令也会拥有该权限,如果是root用户,安全隐患更大。
推荐做法: 修改PATH环境变量时,使用绝对路径可以防止如上问题,如下所示。
#!/bin/bash
PATH=/bin:${PATH}
ls -l
禁止用户降级直接调用脚本
说明:禁止使用不合法用户调用脚本,否则可能导致权限提升,比如:不能使用root用户调用普通用户的脚本,避免存在权限提升问题。
错误示例:脚本check_pad.sh的执行用户应为“ossuser”,但如下调用脚本中却使用root用户直接调用,可能存在权限提升的隐患。
#!/bin/bash
#......
bash /tmp/check_pad.sh
#......
推荐做法:切换使用正确的用户“ossuser”执行check_pad.sh,可以避免此类问题。
#!/bin/bash
#......
su - ossuser -c "bash /tmp/check_pad.sh"
#......
对于禁止类命令规避方法
高风险命令
kill、shutdown、init、reboot、halt、Poweroff、mkfs、su、sudo、chmod、chown、chgrp、useradd、userdel、groupadd、groupdel、passwd、rm、vi、cp、mv、zip、gzip、unzip、gunzip、tar、killall、pkill、chkconfig、mount、rpm、umount、fdisk
中风险命令
cat、view、more、less、head、tail、grep、egrep
低风险命令
ls、dir、pwd、id、ps、du、df、who、w、whoami、file、finger、cal、dmidecode、wc、stat、ipcs
1)限制访问范围
约束用户执行命令的范围,如对于su命令,可以只配置为:
tom ALL=(root) NOPASSWD: /bin/su - jack,/bin/su - bob
2)采用脚本进行封装
将要执行的命令封装在脚本内,封装时要确保脚本的执行不会引发安全风险(如封装的命令可以任意执行),封装完成后再配置脚本的sudo权限即可。
最小授权
Sudo配置中仅配置用户可完成其目标操作的最小命令集,禁止使用ALL。
root@kwephicprd28579:~# cat /var/log/sudo.log
Sep 16 11:31:16 : huawei : TTY=pts/2 ; PWD=/home/huawei ; USER=root ;COMMAND=/usr/bin/zip /l.zip /tmp -T --unzip-command=sh -c /bin/sh
标签:bin,脚本,常见,提权,usr,linux,PATH,普通用户,root From: https://www.cnblogs.com/snad/p/17384375.html