最近在黑盒测某大型安全设备的绕过,具体是哪款就不说了,简单说下绕过过程吧。
首先介绍下某款安全设备的三大主要功能。
日志类,登陆日志,ssh爆破日志等
history
反弹shell
Webshell/后门报警(没啥好说的,绕特征值)
1.日志类,登陆/ssh爆破:/var/log/securt
猜想: 首先大部分日志类要想清除必须要root权限,因为测试的安全设备会记录登陆记录,就猜测日志可能可能在wtmp,lastlog,utmp, securt等日志文件中,这里推荐一个老哥写的linux日志清除工具https://github.com/re4lity/logtamper,可以清除last,lastlog, utmp这三处的日志。 |
验证: 通过不断尝试发现,发现安全设备是通过/var/log/securt这个文件来实现报警的。只要写成执行文件,后台运行。就可以绕过了日志了。Shell脚本如下 命令:写成sh,后台执行 While: do sed –i ‘/ip /d’ /var/log/securt done |
结论: 因为安全设备因为可用性或者运行负荷不能完美实时地抓取日志,只要你改的比他读的快,安全设备便追不上你,各类日志都是同理,iptales,ssh,甚至一些中间件也是同理。 |
2. history日志: 猜想1: 在测试的时候发现两个现象,菜刀执行命令不会被记录history,shell脚本执行也不会记录history。 根据这两个猜想可以得出几个结论。 1.安全设备是通过读取history文件来记录命令的。 2.安全设备hook了bash和sh。 |
验证1: 实时删除日志文件,或者执行命令不记录histroy unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export HISTFILE=/dev/null; export HISTSIZE=0; export HISTFILESIZE=0; 结果失败了,安全设备依旧记录日志文件。验证第二个猜想,去其他同版本的机子把sh和bash文件上传到被监控服务器。经过测试发现依旧失败。 结论1: 安全设备不以history文件为监控项,或者不仅仅以history文件为监控项。 安全设备可能并没有hook bash/sh文件。 |
猜想2: 既然history文件不是唯一监控项,又可能没有hook bash/sh文件,并且菜刀的命令并不记录,那安全设备可能通过什么方法监控呢?经过其他老哥们的提醒可能是tty。 验证2: ssh root@localhost –T /bin/bash ,发现真的成功了,执行命令不记录。 结论2: 在no tty模式下执行命令是不记录的。 |
3.反弹shell报警:
猜想1:
根据外连/history
验证1:
反弹代理,并未报警, 绕过history,再反弹shell。依旧报警
结论1:
并非根据流量监测报警, 跟history关系不大。
猜想2:
根据bash,sh相关的进程树报警
验证2:
用之前上传的/bin/bash 反弹shell。依然记录。
用python,perl等方式反弹shell,发现部分不记录。
结论2:
非调用/bin/bash的不记录
猜想3:
不调用/bin/bash,是否只监控程序名字,不然负荷太大
验证3:
把之前上传的bash重命名,执行命令,发现竟然不监控
结论3:
根据进程名字带bash sh的进行监控报警。
结论反推:
既然根据进程名字
验证猜想:
反推是否更改bash名字是否可绕过history记录
结论:
原bash改名不行,新上传的bash可以绕过history记录。
串联:菜刀上传清除日志sh文件,后台执行。菜刀上传bash文件并改名,ssh上去通过改名后的bash。