dMMMMb dMP dMP dMP dMP dMP .aMMMMP dMP .aMMMb dMP
dMP.dMP dMP.dMP dMP dMP amr dMP" amr dMP"dMP dMP
dMMMMP" VMMMMP dMP dMP dMP dMP MMP"dMP dMMMMMP dMP
dMP dA .dMP YMvAP" dMP dMP.dMP dMP dMP dMP dMP
dMP VMMMP" VP" dMP VMMMP" dMP dMP dMP dMMMMMP
O nome PyVigil é uma combinação de 'Py', celebrando a linguagem Python com a qual a ferramenta foi construída, e 'Vigil', do latim vigilia, que significa "o ato de se manter acordado para guardar". O nome reflete a natureza da ferramenta: uma sentinela de software vigilante e incansável que guarda seus logs.
Um HIDS (Host-based Intrusion Detection System) simples, porém robusto e profissional, escrito em Python. O sistema monitora arquivos de log em tempo real, aplicando um conjunto de regras flexíveis para detectar atividades suspeitas e gerar alertas.
- Monitoramento em Tempo Real: Acompanha as novas linhas adicionadas a um arquivo de log sem a necessidade de reler o arquivo inteiro.
- Motor de Regras Flexível: As regras de detecção são carregadas de um arquivo
config.yamlexterno, permitindo fácil customização sem alterar o código-fonte. - Detecção Baseada em Regex: Utiliza expressões regulares (regex) para identificar padrões específicos nas linhas de log.
- Alertas com Limiar (Threshold): Suporta regras que só são acionadas após um certo número de correspondências (
threshold) dentro de uma janela de tempo (timeframe), ideal para detectar ataques de força bruta. - Arquitetura Profissional: Construído com uma arquitetura modular e concorrente (produtor-consumidor) para garantir performance e escalabilidade.
- Logging Interno: Registra as atividades do próprio HIDS para facilitar a depuração e o monitoramento.
O projeto foi refatorado de um script simples para uma aplicação com uma arquitetura mais profissional, separando as responsabilidades:
main.py: O ponto de entrada da aplicação. Orquestra os componentes e gerencia o loop de monitoramento manual.hids/engine.py: O cérebro do HIDS. Gerencia uma fila de processamento e um pool de workers (threads) que aplicam as regras às linhas de log.hids/config.py: Responsável por carregar e validar as regras do arquivoconfig.yaml.hids/alerter.py: Define uma interface para alertas, permitindo a fácil adição de novos métodos de notificação (ex: email, Slack) no futuro.log_generator.py: Um script auxiliar para simular a escrita de eventos em um arquivo de log e facilitar os testes.
.
├── hids/
│ ├── __init__.py
│ ├── alerter.py
│ ├── config.py
│ └── engine.py
├── main.py
├── log_generator.py
├── config.yaml
├── requirements.txt
└── README.md
-
Clone o repositório:
git clone https://github.com/felinux0x/PyVigial.git
-
Navegue até o diretório do projeto:
cd PyVigial -
Instale as dependências:
pip install -r requirements.txt
Para ver o HIDS em ação, você precisará de dois terminais.
1. No Terminal 1, inicie o HIDS:
O HIDS começará a monitorar o arquivo auth.log (que será criado pelo gerador).
python main.py auth.log config.yaml2. No Terminal 2, execute o gerador de logs:
Isso irá simular vários eventos de segurança, escrevendo-os no arquivo auth.log.
python log_generator.pyObserve o Terminal 1 para ver os alertas de segurança sendo impressos em tempo real conforme os eventos são gerados.
As regras são definidas no arquivo config.yaml. Você pode adicionar ou modificar regras facilmente. A estrutura de uma regra é a seguinte:
name: Um nome único e descritivo para a regra.description: Uma breve explicação do que a regra detecta.pattern: A expressão regular (regex) para encontrar o padrão. Se a regra precisar rastrear uma entidade específica (como um endereço IP), use um grupo de captura(...).threshold(opcional): O número de correspondências necessárias para disparar o alerta.timeframe_seconds(opcional): A janela de tempo em segundos para othreshold.
rules:
- name: "Multiplas_Falhas_Login_SSH"
description: "Detecta 5 ou mais tentativas de login SSH falhas do mesmo IP em 60 segundos."
# Captura o endereço IP para rastreamento
pattern: 'Failed password for .* from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'
threshold: 5
timeframe_seconds: 60
- name: "Conexao_SSH_Aceita"
description: "Alerta sobre uma conexão SSH bem-sucedida."
# Apenas detecta o padrão, sem threshold
pattern: 'Accepted password for .* from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'
- name: "Erro_de_Aplicacao_Critico"
description: "Detecta uma mensagem de erro crítico no log."
pattern: 'CRITICAL: Application failed to start'Este projeto está licenciado sob a Licença MIT. Veja o arquivo LICENSE para mais detalhes.