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
-
EX061 — Número de falhas. Quantos logins com falha o log contém? Rubrica: 3 = 838;; 2 = parcialmente correto;; 1 = errado;; 0 = nenhuma.
-
EX062 — Principal origem. Qual endereço tem mais falhas? Rubrica: 3 = 203.0.113.45, com 412;; 2 = parcialmente correto;; 1 = errado;; 0 = nenhuma.
-
EX063 — Parcela externa. Que parcela das falhas veio de origens externas? Rubrica: 3 = 80,1 por cento;; 2 = parcialmente correto;; 1 = errado;; 0 = nenhuma.
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.