[toc]
一个搜索linux 中不安全的权限配置的shell脚本,搜索可能造成提权的危险点。暂时打算只对不安全的配置进行检测,而对于漏洞提权不进行检测,因为只打算写成shell脚本。
之所以用shell脚本写是因为这样就能在不同架构、普通linux服务器和嵌入式设备之间通用,所以会用支持busybox 的shell 写,所以代码看起来非常的蠢逼,当然一方面也有我菜的原因。
ps: 目前只针对进程capbilities 和环境变量 进行搜索
最新更新:支持搜索所有root 进程的LD_LIBRARY_PATH环境变量,查看是否有危险目录/库文件。
后续可能更新点:
- ld相关配置提权
- /dev 下可能危险设备
- 可操作目录搜索
- 查看系统基本信息
-
针对 全进程 / 所有非root进程 进行搜索,搜索所有 拥有高危capbilities / 拥有指定capbilities / 拥有任意capbility 的进程
-
高危capbilities:
CAP_CHOWN CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER CAP_SETGID CAP_SETUID CAP_NET_ADMIN CAP_IPC_OWNER CAP_SYS_MODULE CAP_SYS_PTRACE CAP_SETFCAP
-
-
针对 root 进程 进行搜索,搜索所有有LD_LIBRARY_PATH 环境变量的进程,并查看环境变量指向目录是否危险:
- 其他用户可以在目录中添加文件(可控)
- 同组用户可以在目录中添加文件(可控)
- 属主身份和进程不同
拥有如下参数:
公共部分:
-
-h / --help
查看帮助
-
--showall
对全进程 (包括root进程) 进行搜索
capbilities 在默认情况下 (不加这个参数) 只搜索非root 进程 (进程uid 不等于0) ,毕竟root 进程本来就是最高权限,拥有什么cap 都是没有意义的。
环境变量搜索默认情况下只看root进程,拥有这个会搜索全进程
capbilities 部分
-
-c / --cap
指定搜索 某个 / 某些 cap权限,默认状态下我定义了几个高危的capbilities (见上面覆盖面),默认只搜索拥有这些capbilities 之一 / 多个的进程。但说实话capbilities 都挺危险的,高危只是相对而言,所以这里支持定向搜索,可以使用 -c / --cap 参数搜索一个或多个指定capbilities,如:
./capscan.sh -c CAP_DAC_OVERRIDE #只搜索拥有CAP_DAC_OVERRIDE权限的非root进程 ./capscan.sh -c CAP_DAC_OVERRIDE,CAP_SYS_CHROOT,CAP_NET_BIND_SERVICE #搜索拥有CAP_DAC_OVERRIDE、CAP_SYS_CHROOT和CAP_NET_BIND_SERVICE中任意一个或多个的进程
- 不同cap之间用逗号分割,不要有空格,并且只支持大写
-
-a / --all
讲搜索范围改为全部capbilities,只要进程拥有任意一个capbility ,就会加入到搜索结果之中。
环境变量部分
-
--pr
搜索所有root 进程并且存在LD_LIBRARY_PATH 环境变量的,并查看环境变量的目录,是否有风险(权限配置不当)。
Example:
./capscan.sh -a --showroot #搜索全部进程,并且只要进程拥有任意capbilities,就匹配
./capscan.sh -c CAP_DAC_OVERRIDE,CAP_SYS_CHROOT,CAP_NET_BIND_SERVICE #搜索拥有CAP_DAC_OVERRIDE、CAP_SYS_CHROOT和CAP_NET_BIND_SERVICE中任意一个或多个的进程
不同进程之间用"------------------------" 分割
- PID: 进程号
- EXE: 进程二进制文件
- UID: 进程uid
- CapPrm: 进程的 primitted capbilities属性
- CapEff: 进程的effective capbilities 属性
直接便利所有进程的status 文件,读取其中的capbilities 字段的值,然后判断是否有对应权限,输出即可。