◇ OpenCyber Academy
Tecnólogo · Capítulo 21 · Português

Capítulo 21 — Monitoramento de logs

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Capítulo 21 — Monitoramento de logs

Mapa da aula

Aula 21 publicada. Mapa, exemplo, EX061.

flowchart TD
  N0["21.1 A pergunta"]
  N1["21.2 O laboratório dos logs"]
  N2["Laboratório — Analisando um log sintético de autenti"]
  N3["21.3 O que isso significa"]
  N4["21.4 Ação"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX061"]

Desenho lógico

flowchart LR
  N0["21.1 A pergunta"]
  N1["21.2 O laboratório dos logs"]
  N2["Laboratório — Analisando um log sintético de autenti"]
  N3["21.3 O que isso significa"]
  N4["21.4 Ação"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX061"]
[21.1 A pergunta]
    |
    v
[21.2 O laboratório dos logs]
    |
    v
[Laboratório — Analisando um log sintético de autenti]
    |
    v
[21.3 O que isso significa]
    |
    v
[21.4 Ação]
    |
    v
[Exemplo resolvido] --> [Exercício EX061]

Objetivos de aprendizagem

Você vai (1) analisar logs de autenticação com scripts; (2) separar erros internos de ataques externos; (3) agir com base no que os logs mostram.

21.1 A pergunta

No terceiro ano, pedem a Jamal que examine os logs de autenticação do servidor de transferência de arquivos do Riverbend, que o fornecedor das reservas usa para enviar relatórios noturnos. O gerente de TI percebeu que o servidor está lento. Jamal decide contar os logins com falha por endereço de origem, porque um grande número de falhas vindas de poucos endereços costuma significar tentativa de adivinhar senhas. A Sra. Grant lembra que ele deve verificar se está autorizado a ler os logs e anotar sua pergunta antes de olhar, para não sair procurando sem rumo.

21.2 O laboratório dos logs

O laboratório analisa com uma expressão regular um log sintético de 3.271 linhas e encontra 838 logins com falha. As três principais origens são 203.0.113.45, com 412 falhas, 198.51.100.7, com 198, e 203.0.113.88, com 61. Os três são endereços externos e respondem juntos por 671 falhas, 80,1 por cento do total. As falhas restantes vêm de endereços internos da equipe e parecem erros comuns de digitação espalhados por muitas contas. As falhas externas miram nomes como root, admin e test. Jamal observa que os endereços pertencem a faixas reservadas para documentação, usadas aqui como substitutas de endereços externos reais, e que uma análise real verificaria a titularidade dos endereços antes de tirar conclusões.

Laboratório — Analisando um log sintético de autenticação e classificando as origens de logins com falha

"""Parse a synthetic SSH-style authentication log and rank sources of failed logins (stdlib only)."""
import random, re
from collections import Counter
random.seed(77)
lines = []
for _ in range(2600):
    ip = f"10.4.{random.randint(1,3)}.{random.randint(2,60)}"
    ok = random.random() < 0.93
    lines.append(f"sshd: {'Accepted' if ok else 'Failed'} password for staff{random.randint(1,40)} from {ip}")
for ip, n in [("203.0.113.45", 412), ("198.51.100.7", 198), ("203.0.113.88", 61)]:
    for _ in range(n):
        lines.append(f"sshd: Failed password for {random.choice(['root','admin','test','staff3'])} from {ip}")
random.shuffle(lines)
pat = re.compile(r"(Accepted|Failed) password for (\S+) from (\S+)")
fails = Counter(); total_fail = 0
for l in lines:
    m = pat.search(l)
    if m and m.group(1) == "Failed":
        total_fail += 1; fails[m.group(3)] += 1
ext = {ip: n for ip, n in fails.items() if not ip.startswith("10.")}
print(f"lines {len(lines)}; failed logins {total_fail}")
print(f"top sources: {fails.most_common(3)}")
print(f"external sources {len(ext)} with {sum(ext.values())} failures ({sum(ext.values())/total_fail:.1%} of all failures)")

Execute com python3 lab_authlog.py. Saída verificada:

lines 3271; failed logins 838
top sources: [('203.0.113.45', 412), ('198.51.100.7', 198), ('203.0.113.88', 61)]
external sources 3 with 671 failures (80.1% of all failures)

21.3 O que isso significa

Os resultados mostram que o servidor de transferência de arquivos aceita logins por senha vindos da internet e que ferramentas automatizadas estão tentando adivinhar nomes comuns de contas. Jamal verifica se algum login externo teve sucesso e não encontra nenhum no log. Ele relata ao gerente de TI que o servidor está exposto mais amplamente do que o necessário: apenas o fornecedor das reservas deveria se conectar, a partir de endereços conhecidos. A Sra. Grant observa que a análise de logs muitas vezes revela problemas de configuração, e não ataques bem-sucedidos. Ele registra no caderno o achado e a verificação dos logins bem-sucedidos.

21.4 Ação

O gerente de TI restringe o servidor aos endereços do fornecedor no firewall e troca a autenticação da conta do fornecedor de senha para chave. Jamal executa de novo seu script nos logs da semana seguinte e descobre que as falhas externas pararam. O desempenho do servidor volta ao normal. Ele acrescenta o script a um agendamento semanal com um alerta caso as falhas externas apareçam de novo. Ele aprende que o monitoramento é mais útil quando leva a uma mudança e depois confirma que a mudança funcionou. O gerente de TI agradece a ele.

Exemplo resolvido

Jamal analisa 3.271 linhas sintéticas de log, encontra 838 falhas, 80,1 por cento delas de três endereços externos, não encontra nenhum login externo bem-sucedido, restringe o servidor e confirma a correção.

Caso sintético. Os logs e os endereços são sintéticos, com endereços de documentação; as saídas vêm de lab_authlog.py.

Erros e limites

Classificar as falhas sem separar as origens internas das externas mistura erros de digitação com ataques.

Exercícios

Continue estudando — aula 21 (capítulo 21 de 30)

← Capítulo 20 · Índice das aulas · Capítulo 22 →

Continue para a próxima aula já escrita.