背景
早上收到一条疑似提权的报警,原始数据如下,uid非0,euid为0,代表用户6834通过执行sg命令提升了权限。
排查
对sg比较陌生,于是查看sg命令的用途解释为:可以以不同的组ID执行命令。这时才联想到了su,从命名上可以看出一个是switch user,一个是switch group,以不同组ID执行命令的前提是可以切换到不同组,即sg命令需要拥有root权限,查看sg的权限位,链到了newgrp上,有suid标志位,条件达成。
suid是一种特殊的权限,可以暂时将程序所有者的权限,赋予程序执行者。如passwd命令可以修改/etc/shadow文件,但是普通用户对/etc/shadow没有修改权限,就是通过为passwd赋予suid权限来实现的。newgrp属主为root且拥有suid标志位,当命令被执行时,用户6834被赋予0(root)的执行权限,满足提权特征被我们捕获,但是此行为是合法的,因为同su一样,通过sg只能切换到被赋予权限的组,这个环节是在掌控内的。
真相只有一个
那么用户执行 sg run.sh是什么意图呢?显然是手抖将 sh打成了 sg结果触发了一次提权被识别到,而我们对常用的具有suid又无实质提权危害的命令已经做了加白处理,这个case为我们扩充了规则。
拓展
在suid被滥用时,会存在被恶意利用的风险。如果给可以执行任意命令的程序添加suid权限,比如find、vim甚至bash,就会导致普通用户找到这些程序,就等于找到了通往程序所有者权限的钥匙,而且往往是root。举个例子,为find赋予suid权限,并以普通用户的身份执行 find anyfile -exec 'whoami' \;,运行结果是root,如果把 whoami替换成 /bin/bash,那将得到一个root权限的shell。