gaugustoo/log-analysis-security
GitHub: gaugustoo/log-analysis-security
Stars: 0 | Forks: 0
# 🛡️ SOC Log Monitor & Security Parser
Um analisador de logs profissional desenvolvido em **Python** focado em operações de segurança (SOC). A ferramenta monitora e analisa arquivos de log de autenticação estruturados para identificar, bloquear e alertar em tempo real tentativas de ataques de **Força Bruta (Brute Force)**.
## 🚀 Funcionalidades
* **Análise Temporal Dinâmica:** Identifica acessos suspeitos baseando-se em janelas de tempo customizáveis.
* **Interface de Linha de Comando (CLI):** Permite configurar limites de tentativas, janelas de tempo e arquivos de entrada diretamente pelo terminal.
* **Integração com SOC (Telegram Bot):** Dispara alertas críticos e notificações push em tempo real diretamente para o canal de resposta a incidentes no Telegram.
* **Segurança de Credenciais:** Implementação de boas práticas de SecOps ocultando chaves de API e tokens usando variáveis de ambiente (`.env`).
## 🛠️ Tecnologias e Bibliotecas
* **Python 3.x**
* **Requests** (Comunicação com a API do Telegram)
* **Python-Dotenv** (Gerenciamento seguro de variáveis de ambiente)
* **Argparse** (Criação de interface via CLI nativa)
## 🔧 Configuração e Instalação
1. **Clone o repositório:**
git clone [https://github.com/gaugustoo/log-analysis-security.git](https://github.com/gaugustoo/log-analysis-security.git)
cd log-analysis-security
=======
from collections import defaultdict
from datetime import datetime, timedelta
# CONFIGURAÇÕES
LIMITE_TENTATIVAS = 3
JANELA_TEMPO_MINUTOS = 2
def carregar_logs(arquivo):
logs = []
try:
with open(arquivo, "r", encoding="utf-8") as f:
for linha in f:
logs.append(linha.strip())
except FileNotFoundError:
print("Arquivo de log não encontrado!")
return logs
def analisar_logs(logs):
tentativas = defaultdict(list)
print("\nIniciando analise profissional de logs...\n")
for log in logs:
try:
# Formato esperado:
# 2026-04-01 10:01:00 - Erro de login - user2 - 192.168.1.10
partes = log.split(" - ")
data_str = partes[0]
evento = partes[1]
usuario = partes[2]
ip = partes[3]
data = datetime.strptime(data_str, "%Y-%m-%d %H:%M:%S")
if "Erro de login" in evento:
chave = f"{usuario} | {ip}"
tentativas[chave].append(data)
except Exception as e:
print(f"Erro ao processar log: {log}")
gerar_alertas(tentativas)
def gerar_alertas(tentativas):
print("\nRELATORIO DE SEGURANCA:\n")
for chave, datas in tentativas.items():
datas.sort()
for i in range(len(datas)):
contador = 1
for j in range(i + 1, len(datas)):
diferenca = datas[j] - datas[i]
if diferenca <= timedelta(minutes=JANELA_TEMPO_MINUTOS):
contador += 1
else:
break
if contador >= LIMITE_TENTATIVAS:
print(f"ALERTA: Possivel ataque detectado!")
print(f"Alvo: {chave}")
print(f"Tentativas: {contador}")
print(f"Periodo: {datas[i]} ate {datas[j-1]}")
print("-" * 50)
break
if __name__ == "__main__":
arquivo = "logs.txt"
logs = carregar_logs(arquivo)
analisar_logs(logs)