☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta Incidentes. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Incidentes. Mostrar todas as mensagens

domingo, 14 de junho de 2026

O Dia em que um Banco Declarou a Própria Liquidação: Lições de Engenharia, Governança e Confiabilidade a partir do Incidente do Nubank

Bellacosa Mainframe e o incidente informatico do Nubank

O Dia em que um Banco Declarou a Própria Liquidação: Lições de Engenharia, Governança e Confiabilidade a partir do Incidente do Nubank

Introdução

Em junho de 2026, um episódio incomum chamou a atenção do mercado financeiro brasileiro, dos profissionais de tecnologia e dos especialistas em gestão de riscos. Clientes do Nubank receberam comunicações oficiais informando que a instituição teria entrado em processo de liquidação. A mensagem, enviada por canais legítimos da empresa, parecia autêntica, utilizava terminologia regulatória correta e mencionava procedimentos relacionados ao Fundo Garantidor de Créditos (FGC).

O problema era simples e ao mesmo tempo alarmante: a informação era falsa.

Em poucas horas, a notícia se espalhou pelas redes sociais, grupos de investidores, fóruns especializados e veículos de imprensa. O Banco Central precisou esclarecer que não existia qualquer procedimento de liquidação em andamento. O Nubank confirmou que se tratava de um erro operacional decorrente de uma falha em processos internos.

À primeira vista, o incidente parece apenas um erro de comunicação. Entretanto, uma análise mais profunda revela um caso clássico de falha sistêmica envolvendo automação, governança, gestão de mudanças, segregação de ambientes e controles de produção.

Mais importante ainda: o episódio oferece uma oportunidade rara para discutir um tema frequentemente negligenciado em empresas digitais modernas — a diferença entre construir sistemas rápidos e construir sistemas confiáveis.


O que aconteceu

Segundo informações divulgadas publicamente, um fluxo responsável por notificações relacionadas a processos de liquidação institucional teria sido acionado indevidamente.

A comunicação foi distribuída para clientes reais utilizando canais oficiais.

Do ponto de vista do usuário final, todos os elementos indicavam legitimidade:

  • origem oficial;

  • identidade visual correta;

  • linguagem regulatória compatível;

  • referência ao FGC;

  • comunicação direta da instituição.

Em segurança da informação existe um princípio fundamental:

O usuário não possui mecanismos para diferenciar uma mensagem legítima de uma mensagem enviada legitimamente por engano.

Essa frase resume a gravidade do incidente.

Quando uma comunicação falsa vem de um atacante externo, o cliente pode desconfiar.

Quando a mesma comunicação vem do próprio banco, a confiança desaparece como mecanismo de defesa.


O erro informático por trás do incidente

Embora os detalhes técnicos completos não tenham sido divulgados, a descrição pública permite inferir algumas hipóteses plausíveis.

O problema parece ter ocorrido em uma combinação de:

  • automação de mensagens;

  • parametrização inadequada;

  • ausência de validações obrigatórias;

  • insuficiência de mecanismos de aprovação.

Em engenharia de software, isso é conhecido como um erro de "guard rails", ou seja, ausência de barreiras que impeçam uma ação perigosa.

Imagine um sistema com a seguinte lógica:

Evento:
Liquidação Institucional

Instituição:
[NOME_DO_BANCO]

Ação:
Enviar comunicação aos clientes

Se o campo da instituição estiver vazio, o sistema deveria interromper imediatamente o processo.

No entanto, em muitos sistemas corporativos existem valores padrão.

Exemplo:

if banco == null:
    banco = "Nubank"

Ou ainda:

if banco == "":
    utilizar_instituicao_padrao()

Pequenos atalhos criados durante desenvolvimento, testes ou homologação podem se transformar em bombas-relógio quando chegam à produção.


Quando ambientes de teste contaminam a produção

Uma das hipóteses mais discutidas é a existência de um fluxo originalmente criado para testes.

Esse cenário é extremamente comum.

Empresas desenvolvem sistemas utilizando ambientes distintos:

Desenvolvimento

Local onde programadores criam funcionalidades.

Homologação

Ambiente utilizado para validações.

Produção

Sistema real utilizado por clientes.

Na teoria, esses ambientes são completamente isolados.

Na prática, muitas organizações acabam criando atalhos.

Exemplos comuns:

  • cópia de bases produtivas;

  • reutilização de configurações;

  • compartilhamento de APIs;

  • uso de dados reais em homologação.

Quando isso acontece, uma fronteira crítica desaparece.

O resultado é que ações originalmente pensadas para teste passam a ter impacto real.


A armadilha da automação

O setor financeiro moderno depende de automação em larga escala.

Bancos digitais enviam diariamente:

  • notificações;

  • alertas;

  • extratos;

  • avisos regulatórios;

  • comunicações de segurança.

Uma única plataforma pode disparar milhões de mensagens por hora.

O benefício é evidente:

  • redução de custos;

  • velocidade operacional;

  • escalabilidade.

O problema é que a automação amplifica erros.

Um funcionário que envia uma mensagem errada manualmente afeta algumas pessoas.

Um sistema automatizado pode afetar milhões.

Existe uma máxima conhecida em operações de TI:

A automação não elimina erros humanos. Ela multiplica seus efeitos.

O incidente ilustra perfeitamente esse princípio.


O papel dos controles de mudança

Toda alteração em sistemas críticos deveria seguir um processo formal.

Esse processo normalmente inclui:

Revisão técnica

Validação por outros desenvolvedores.

Aprovação operacional

Análise dos impactos.

Aprovação de negócio

Validação da área responsável.

Testes

Verificação funcional.

Plano de rollback

Capacidade de reversão rápida.

Quando qualquer uma dessas etapas falha, o risco aumenta exponencialmente.

A questão não é impedir erros.

Erros são inevitáveis.

A questão é impedir que erros individuais alcancem clientes.


O conceito de “blast radius”

Engenheiros de confiabilidade utilizam o conceito de blast radius.

Traduzindo livremente:

"raio de explosão".

A pergunta é simples:

Se algo der errado, quantas pessoas serão afetadas?

Sistemas modernos devem ser projetados para minimizar esse impacto.

Exemplo:

Em vez de enviar uma comunicação para toda a base de clientes, o sistema deveria:

  1. enviar para um grupo piloto;

  2. validar resultados;

  3. liberar gradualmente;

  4. expandir para toda a população.

Essa técnica é utilizada por empresas como:

  • Google;

  • Amazon;

  • Microsoft;

  • Netflix.

Caso o disparo incorreto tivesse sido submetido a um rollout progressivo, o incidente provavelmente teria sido detectado nos primeiros minutos.


O problema dos dados reais em testes

Outro aprendizado importante envolve o uso de dados produtivos.

Muitas empresas utilizam bases reais para reproduzir cenários complexos.

Isso facilita testes.

Também aumenta riscos.

Dados reais possuem características imprevisíveis:

  • relacionamentos existentes;

  • integrações ativas;

  • gatilhos automáticos;

  • usuários legítimos.

Uma rotina criada para laboratório pode encontrar condições inesperadas quando executada em produção.

É por isso que organizações maduras investem em:

  • anonimização;

  • mascaramento de dados;

  • ambientes sintéticos.

O objetivo é reproduzir a realidade sem colocar clientes reais em risco.


O fator psicológico do incidente

Existe um aspecto pouco discutido.

O dano não foi apenas tecnológico.

Foi psicológico.

O sistema financeiro funciona baseado em confiança.

Quando um banco afirma que está sendo liquidado, o cliente não realiza uma análise técnica.

Ele reage emocionalmente.

As perguntas surgem imediatamente:

  • Meu dinheiro está seguro?

  • Preciso sacar recursos?

  • Minha conta continuará funcionando?

  • Meu cartão será cancelado?

  • Vou perder investimentos?

Em poucos minutos pode surgir um fenômeno conhecido como corrida informacional.

Não necessariamente uma corrida bancária tradicional.

Mas uma corrida por esclarecimentos.

Milhares de pessoas acessam simultaneamente:

  • aplicativo;

  • central de atendimento;

  • redes sociais;

  • imprensa.

O volume gerado pode se tornar um problema operacional por si só.


O impacto no mercado

Embora o incidente tenha sido rapidamente esclarecido, ele produziu repercussões relevantes.

Mercados financeiros são altamente sensíveis à informação.

Especialmente quando envolve:

  • liquidez;

  • solvência;

  • regulação.

Investidores institucionais monitoram continuamente sinais de risco.

Uma notícia sobre liquidação, ainda que falsa, pode provocar:

  • volatilidade;

  • aumento de dúvidas;

  • especulação;

  • pressão reputacional.

Mesmo após o esclarecimento, permanece uma questão:

Como um mecanismo tão crítico conseguiu ser acionado incorretamente?

Essa pergunta interessa mais ao mercado do que o próprio erro.

Porque ela trata da maturidade operacional da organização.


O custo invisível da reputação

Empresas costumam medir:

  • receita;

  • lucro;

  • crescimento;

  • número de clientes.

Poucas conseguem medir confiança.

Entretanto, confiança é um dos ativos mais valiosos do setor financeiro.

Uma instituição pode gastar bilhões em marketing.

Mas basta um único incidente de credibilidade para comprometer anos de construção de marca.

A reputação é semelhante a um sistema distribuído:

Leva muito tempo para convergir.

Pode ser afetada em segundos.


O que empresas podem aprender

O incidente produz diversas lições para organizações digitais.

1. Sistemas críticos precisam de múltiplas aprovações

Nenhuma comunicação regulatória deveria depender de uma única ação.

Princípio dos quatro olhos:

duas pessoas precisam validar.

2. Produção deve ser protegida contra operadores

O objetivo não é desconfiar das pessoas.

É reconhecer que erros acontecem.

Sistemas precisam impedir ações perigosas.

3. Rollouts graduais reduzem impacto

Nenhum disparo massivo deveria ocorrer instantaneamente.

4. Testes precisam ser isolados

Ambientes de homologação devem permanecer separados da produção.

5. Alertas precisam monitorar comportamentos anormais

Se uma mensagem de liquidação for enviada, alarmes automáticos deveriam disparar imediatamente.


O paradoxo dos bancos digitais

O caso revela um paradoxo interessante.

Os bancos digitais são extraordinariamente eficientes.

Conseguem:

  • abrir contas em minutos;

  • aprovar cartões rapidamente;

  • processar milhões de transações.

Mas velocidade e confiabilidade nem sempre evoluem no mesmo ritmo.

À medida que organizações crescem, seus sistemas tornam-se mais complexos.

Mais integrações.

Mais automações.

Mais dependências.

Mais pontos de falha.

O desafio deixa de ser construir funcionalidades.

Passa a ser controlar complexidade.


A maturidade dos sistemas modernos

Os maiores incidentes tecnológicos raramente acontecem por falhas sofisticadas.

Na maioria das vezes eles surgem de:

  • configurações incorretas;

  • permissões inadequadas;

  • processos incompletos;

  • validações ausentes.

A história da tecnologia está repleta de exemplos semelhantes.

Falhas milionárias já foram causadas por:

  • campos vazios;

  • scripts de manutenção;

  • comandos executados no ambiente errado;

  • parâmetros incorretos.

O problema não é a tecnologia.

O problema é a interação entre tecnologia, pessoas e processos.


Conclusão

O episódio envolvendo a falsa comunicação de liquidação do Nubank não deve ser interpretado apenas como um erro operacional isolado.

Ele representa um estudo de caso sobre os desafios da engenharia moderna em sistemas de missão crítica.

O incidente demonstrou como um único evento pode atravessar múltiplas camadas organizacionais:

  • tecnologia;

  • governança;

  • comunicação;

  • segurança;

  • reputação;

  • mercado financeiro.

Mais importante, revelou uma verdade frequentemente esquecida em ambientes digitais:

A confiabilidade não nasce da ausência de erros.

Ela nasce da capacidade de impedir que erros inevitáveis se transformem em crises.

Em um mundo onde bancos são plataformas de software, cada linha de código, cada configuração e cada processo operacional participa diretamente da construção da confiança do cliente.

E confiança, diferentemente do software, não pode ser restaurada simplesmente com um novo deploy.

Ela precisa ser reconquistada.

Para ir mais longe

Bellacosa Mainframe e o incidente do nubank







domingo, 4 de agosto de 2024

O Sysprog Bayesiano: por que um veterano vê um S0C7 e já começa a atualizar probabilidades na cabeça

 

Bellacosa Mainframe e o sysprog bayesino

☕ Um Café no Bellacosa Mainframe

O Sysprog Bayesiano: por que um veterano vê um S0C7 e já começa a atualizar probabilidades na cabeça

🧙‍♂️ Bayes, troubleshooting, observabilidade, dumps, experiência e o estranho fenômeno pelo qual trinta anos de produção transformam “acho que é isso” numa distribuição de probabilidades ambulante

Existe um fenômeno curioso nos CPDs.

Você coloca um programador iniciante diante de uma mensagem:

ABEND S0C7

Ele olha para a tela.

A tela olha para ele.

Durante alguns segundos acontece uma negociação diplomática silenciosa.

Então vem a primeira conclusão:

— O MAINFRAME QUEBROU.

Nesse instante, vindo de algum ponto escuro da sala, aparece um veterano carregando café.

Ele nem senta.

Olha para o código.

Olha para o dump.

Pergunta:

— Em qual instrução?

— Aqui.

— Qual campo?

— WS-VALOR.

— De onde veio?

— Arquivo.

— Mudaram o layout ontem?

Silêncio.

Alguém responde:

— Talvez.

O veterano toma um gole.

— Então começa por aí.

O jovem fica perplexo.

Como aquele sujeito chegou a uma hipótese em vinte segundos?

Telepatia?

Magia?

Décadas respirando ar reciclado de CPD?

Ele nasceu com um SYS1.LOGREC dentro do cérebro?

Não.

O que aconteceu foi muito mais interessante.

Sem perceber, o veterano acabou de executar uma espécie de inferência bayesiana humana.

Ele recebeu uma evidência.

Atualizou probabilidades.

Recebeu outra.

Atualizou novamente.

Eliminou hipóteses improváveis.

Aumentou o peso das plausíveis.

E começou a procurar onde havia maior chance de encontrar o defeito.

Ele talvez nunca tenha escrito:

P(H|E)

num quadro.

Mas passou quarenta anos fazendo exatamente isso.

Pegue o café.

Hoje vamos descobrir por que todo bom profissional de troubleshooting acaba virando, em algum grau, um Bayesiano de produção.


Capítulo I — Antes de falarmos de Bayes, precisamos quebrar alguma coisa

Vamos montar nosso pequeno desastre.

Programa COBOL:

WORKING-STORAGE SECTION.

01 WS-VALOR      PIC 9(7)V99.
01 WS-QUANTIDADE PIC 9(5).

PROCEDURE DIVISION.

    COMPUTE WS-TOTAL =
        WS-VALOR * WS-QUANTIDADE.

O programa funcionava havia meses.

Numa bela terça-feira às 10h37:

SYSTEM COMPLETION CODE=0C7

Pronto.

Produção abriu chamado.

O gerente pergunta:

— O que aconteceu?

Resposta tecnicamente perfeita:

— Tivemos um S0C7.

Gerente:

— E o que significa?

— Data exception.

Gerente:

— E o que significa?

— Temos algum dado incompatível com uma operação decimal.

Gerente:

— E o que significa?

— Alguma coisa está errada.

Gerente:

— Excelente. Vou informar à diretoria.

Troubleshooting começou.


Capítulo II — O iniciante vê possibilidades; o veterano vê probabilidades

Quando recebemos apenas:

S0C7

existem várias causas possíveis.

Talvez:

  • um campo numérico tenha caracteres inválidos;

  • um layout esteja incorreto;

  • tenha ocorrido deslocamento de dados;

  • um campo packed decimal esteja corrompido;

  • uma área tenha sido sobrescrita;

  • um programa esteja utilizando definição diferente do arquivo;

  • uma alteração recente tenha introduzido inconsistência;

  • o offset esteja apontando para uma rotina específica;

  • exista problema em dados provenientes de outro sistema.

O programador iniciante pensa:

“Pode ser qualquer coisa.”

O veterano pensa:

“Pode ser muita coisa, mas algumas são muito mais prováveis que outras.”

Essa diferença é gigantesca.

O iniciante possui um conjunto:

H1 H2 H3 H4 H5 H6 H7 H8...

O veterano possui algo parecido com:

H1  45%
H2  25%
H3  12%
H4   8%
H5   5%
outros...

Esses números não estão escritos conscientemente.

Provavelmente nem são números precisos.

Mas existe uma ordenação implícita das hipóteses.

Isso é experiência.


Capítulo III — Entre Thomas Bayes carregando café

Thomas Bayes foi um matemático e ministro presbiteriano britânico do século XVIII.

Séculos depois, sem jamais imaginar CICS, COBOL, Db2 ou alguém chamando às três da manhã porque “o batch parou”, seu nome ficaria associado a uma das ideias mais poderosas da estatística:

quando recebemos nova evidência, devemos atualizar aquilo que acreditávamos anteriormente.

De maneira clássica:

P(A|B) = P(B|A) × P(A) / P(B)

Não fuja.

Vamos traduzir isso para português de CPD.

A é uma hipótese.

Por exemplo:

“O S0C7 foi causado por dado não numérico vindo do arquivo de entrada.”

B é uma evidência.

Por exemplo:

“O erro começou exatamente depois de uma alteração no layout desse arquivo.”

Bayes pergunta:

sabendo dessa nova evidência, quanto devo aumentar ou diminuir minha confiança na hipótese?

Pronto.

Você acabou de fazer estatística.

Pode guardar a calculadora.


Capítulo IV — O prior: aquilo que você acreditava antes de olhar o dump

Antes de receber qualquer evidência específica, você já possui alguma noção sobre quais causas são comuns.

Isso é chamado de prior probability, ou probabilidade a priori.

Imagine mil incidentes históricos de S0C7.

Hipoteticamente:

dados inválidos             45%
layout incompatível         25%
área sobrescrita            15%
erro de lógica               8%
outros                       7%

Esses números são apenas ilustrativos.

Mas representam algo real:

alguns defeitos aparecem mais frequentemente que outros.

O profissional experiente acumulou isso na cabeça.

Talvez nunca tenha registrado estatisticamente.

Mas lembra de vinte incidentes semelhantes.

Quando vê:

S0C7

seu cérebro imediatamente diz:

— Primeiro vou procurar dados.

Isso não é preconceito irracional.

É utilização de frequência histórica.

O nome elegante é:

prior.

No CPD chamamos:

— Já vi essa porcaria antes.


Capítulo V — Agora chega a evidência

Então descobrimos:

O programa funcionava normalmente até ontem.

Interessante.

Isso altera probabilidades.

Se fosse um erro estrutural presente no programa havia meses, por que apareceu justamente hoje?

Talvez algum dado novo tenha provocado o caminho.

Ou alguma alteração tenha ocorrido.

O veterano pergunta:

— Teve mudança?

Resposta:

— Sim. Alteraram o arquivo upstream ontem à noite.

BUM.

A hipótese:

LAYOUT INCOMPATÍVEL

ganha peso.

Outras perdem.

Nosso cérebro fez aproximadamente:

ANTES DA EVIDÊNCIA

dados inválidos       █████████
layout                █████
storage overwrite     ███
outros                 ██

Depois:

DEPOIS DA MUDANÇA CONHECIDA

layout                ██████████████
dados inválidos       ███████
storage overwrite     █
outros                 █

Não sabemos ainda a causa.

Mas reorganizamos nossa fila de investigação.


Capítulo VI — Troubleshooting não é descobrir imediatamente a resposta

Esse ponto merece um café inteiro.

Um bom diagnóstico raramente funciona assim:

ERRO
↓
EUREKA
↓
SOLUÇÃO

Normalmente funciona:

ERRO
↓
HIPÓTESES
↓
EVIDÊNCIA
↓
ATUALIZAÇÃO
↓
NOVO TESTE
↓
NOVA EVIDÊNCIA
↓
ATUALIZAÇÃO
↓
HIPÓTESE MAIS FORTE
↓
CONFIRMAÇÃO

Ou seja:

troubleshooting é um processo iterativo de redução de incerteza.

Cada pergunta deveria servir para eliminar possibilidades.

Perguntar:

— O sistema está ruim?

ajuda pouco.

Perguntar:

— Qual foi o primeiro job que falhou?

ajuda muito mais.

Perguntar:

— Qual alteração entrou imediatamente antes?

melhor ainda.

Perguntar:

— O mesmo input reproduz o problema?

agora estamos cozinhando com gás.


Capítulo VII — O dump é uma máquina de reduzir entropia

No artigo anterior falamos sobre entropia como incerteza.

Receber apenas:

SISTEMA NÃO FUNCIONA

é alta entropia.

Pode ser praticamente qualquer coisa.

Agora recebemos:

JOB ABC123
STEP STEP040
PGM COBPAY01
ABEND S0C7

Já reduzimos bastante.

Depois:

OFFSET X'03A8'

Menos incerteza.

Mapeamos para:

COMPUTE WS-TOTAL =
        WS-VALOR * WS-QTD

Menos ainda.

Inspecionamos WS-VALOR.

Encontramos:

12A45

Praticamente resolvido.

Observe o processo.

Não fomos ficando “mais inteligentes”.

Recebemos informação discriminatória.

Cada pedaço eliminou hipóteses.


Capítulo VIII — Observabilidade é infraestrutura para Bayes

É por isso que observabilidade é tão importante.

Logs.

Métricas.

Traces.

SMF.

RMF.

Mensagens.

Dumps.

SQLCODEs.

File Status.

Registros de auditoria.

Histórico de mudanças.

Todos esses elementos possuem uma finalidade profunda:

fornecer evidências que permitam distinguir hipóteses concorrentes.

Sem observabilidade:

SISTEMA ESTÁ LENTO.

Com observabilidade:

CPU NORMAL
I/O ELEVADO
DB2 GETPAGES +600%
ACCESS PATH ALTERADO
APÓS RUNSTATS

Agora nossa distribuição mental muda completamente.

Talvez CPU não seja o problema.

Talvez rede não seja.

Talvez storage físico não seja.

O access path acabou de se tornar nosso principal suspeito.

Observabilidade não resolve automaticamente o incidente.

Ela melhora brutalmente a qualidade das probabilidades.


Capítulo IX — O detetive ruim coleta dados; o bom coleta dados discriminatórios

Imagine um investigador perguntando:

— Qual foi a temperatura da sala?

Resposta:

— 22 graus.

Talvez útil.

Talvez completamente irrelevante.

Agora:

— O problema começou antes ou depois do deploy?

Isso pode dividir o universo em dois.

Uma boa pergunta de troubleshooting possui alto valor informacional.

Ela separa hipóteses.

Perguntas ruins produzem fatos interessantes.

Perguntas boas destroem possibilidades.

Isso vale para qualquer ambiente:

CICS
DB2
IMS
JES2
VSAM
z/OS
Linux
Cloud
Kubernetes
rede
aplicação

O profissional experiente pergunta pouco.

Mas pergunta aquilo que muda o mapa.


Capítulo X — Exemplo: CICS está lento

Chamado:

“CICS está lento.”

Maravilha.

Talvez sejam:

  • transações;

  • Db2;

  • MQ;

  • CPU;

  • storage;

  • locking;

  • network;

  • runaway task;

  • file control;

  • região chegando ao limite;

  • aplicação;

  • downstream;

  • usuário exagerando;

  • Mercúrio retrógrado.

Bayes entra na sala.

Pergunta número 1:

— Todas as transações?

Resposta:

— Não. Apenas PAY1.

Pronto.

Hipótese de problema generalizado do CICS cai.

Pergunta número 2:

— Quando começou?

— Depois da implantação das 14h.

Outra atualização.

Pergunta número 3:

— O que mudou no PAY1?

— Uma nova consulta Db2.

A distribuição entra em colapso.

Pergunta:

— Temos SQL elapsed?

— Sim. A consulta nova responde em 11 segundos.

Caso quase encerrado.

Não precisamos desmontar o LPAR.

Não precisamos reiniciar CICS.

Não precisamos sacrificar um estagiário ao deus do throughput.

Obtivemos evidência.


Capítulo XI — O problema da ação prematura

Agora conhecemos um personagem muito perigoso:

o técnico que age antes de atualizar probabilidades.

Sistema lento?

— Reinicia.

CICS estranho?

— Recicla região.

Db2?

— Rebind.

Servidor?

— Reboot.

Aplicação?

— Redeploy.

Esse comportamento às vezes funciona.

E justamente por funcionar ocasionalmente torna-se perigosíssimo.

Porque cria aprendizado incorreto:

PROBLEMA
+
RESTART
=
RESOLVIDO

Talvez o restart apenas tenha removido temporariamente o sintoma.

O problema real permanece.

É como encontrar uma pessoa caída no chão, trocar o tapete e declarar vitória porque agora ela está deitada numa superfície limpa.


Capítulo XII — O veterano não pergunta apenas “o que aconteceu?”

Ele pergunta:

o que seria esperado se minha hipótese estivesse correta?

Isso é crucial.

Hipótese:

“O problema é exaustão de storage.”

Então deveríamos observar determinados sinais.

Se eles não aparecem, a hipótese perde força.

Hipótese:

“O problema é lock contention no Db2.”

Então deveríamos observar waits, locks e padrões compatíveis.

Não apareceram?

Probabilidade cai.

Essa é uma diferença fundamental entre investigação e superstição.

Superstição:

“Da última vez era storage.”

Investigação:

“Se for storage, quais evidências deveriam existir agora?”


Capítulo XIII — Bayes também sabe dizer “eu estava errado”

Essa é talvez a característica mais valiosa.

O profissional ruim se apaixona pela primeira hipótese.

O profissional bom permite que evidências destruam sua teoria.

Ele começa:

— Acho que é Db2.

Nova evidência:

DB2 NORMAL

Ele responde:

— Então não é.

Fim.

Não existe crise existencial.

Não existe defesa de honra.

Não existe:

— MAS EU TENHO 30 ANOS DE EXPERIÊNCIA!

Experiência deveria melhorar seus priors.

Não tornar suas hipóteses imunes à evidência.


Capítulo XIV — Confirmation bias: o inimigo mora no mesmo cérebro

Existe um perigo.

Quando acreditamos numa hipótese, começamos naturalmente a procurar evidências que a confirmem.

Sysprog:

— É aplicação.

Programador:

— É infraestrutura.

DBA:

— É rede.

Rede:

— É DNS.

DNS:

— Como sempre, ninguém lembra de mim até alguma coisa quebrar.

Cada equipe possui seus priors.

E seus preconceitos.

É por isso que investigação disciplinada pergunta:

O QUE CONFIRMARIA MINHA HIPÓTESE?

mas também:

O QUE A REFUTARIA?

Essa segunda pergunta salva horas.

Às vezes dias.


Capítulo XV — O incidente começa às 02h37

Agora vamos ao verdadeiro laboratório bayesiano:

a madrugada.

Telefone toca.

— Produção caiu.

Você abre o olho esquerdo.

— Tudo?

— Pagamentos.

Seu cérebro já começa.

Pergunta:

— Online ou batch?

— Online.

Atualização.

— Todos os canais?

— Só mobile.

Atualização.

— Web funciona?

— Sim.

Atualização.

— Houve mudança no mobile?

— Versão nova às 23h.

A probabilidade de:

IPL DO MAINFRAME

ser necessária neste momento é aproximadamente equivalente à probabilidade de um macaco escrever Hamlet antes do café esfriar.

Mesmo assim alguém inevitavelmente pergunta:

— Não seria melhor reiniciar tudo?

Não.

Volte para a cama.


Capítulo XVI — Incident response é uma árvore de hipóteses

Podemos imaginar:

                     INCIDENTE
                         |
        --------------------------------
        |              |               |
    APLICAÇÃO       INFRA           DADOS
        |              |               |
     código          CPU            inválido
     deploy          memória        faltando
     config          rede           duplicado
        |
   -------------
   |           |
mudança      bug antigo

Cada nova evidência corta galhos.

Isso é extraordinariamente parecido com algoritmos de busca.

Uma investigação eficiente evita visitar todos os nós.

Ela usa informação para podar a árvore.

O veterano não necessariamente conhece a resposta.

Conhece a ordem inteligente de investigação.


Capítulo XVII — A intuição do veterano não é mágica

Isso merece destaque.

Quando alguém trabalha durante décadas com:

  • milhares de jobs;

  • centenas de incidentes;

  • dezenas de migrações;

  • falhas absurdas;

  • mudanças ruins;

  • dados corrompidos;

  • problemas de performance;

começa a desenvolver reconhecimento de padrões.

Em psicologia cognitiva podemos chamar parte disso de pattern recognition.

No bar do CPD chamamos:

— Esse cheiro é de arquivo.

E frequentemente é.

O cérebro compara a situação atual com milhares de padrões armazenados.

Não realiza conscientemente uma equação.

Mas produz algo semelhante a:

JÁ VI ISSO
+
CONTEXTO ATUAL
=
HIPÓTESE FORTE

Capítulo XVIII — Mas experiência sem observabilidade vira folclore

Existe um perigo enorme.

Veterano:

— Toda vez que acontece isso é rede.

Pergunta:

— Quantas vezes?

— Sempre.

— Temos registro?

— Não.

— Métricas?

— Não.

— Incident database?

— Não.

— Evidência?

— Eu lembro.

Agora entramos numa dimensão perigosa.

Memória humana sofre:

  • viés de disponibilidade;

  • recência;

  • confirmação;

  • seleção;

  • esquecimento.

Precisamos transformar experiência em dados.

Por isso pós-mortem é importante.

Por isso histórico de incidentes importa.

Por isso conhecimento operacional deve ser registrado.

O melhor dos mundos combina:

EXPERIÊNCIA HUMANA
+
TELEMETRIA
+
HISTÓRICO
+
EVIDÊNCIA

Capítulo XIX — O CMDB pode ser uma máquina bayesiana

Imagine possuir histórico:

INCIDENTE 8231
Sintoma: S0C7
Causa: layout incompatível
Mudança anterior: COPYBOOK alterado

INCIDENTE 9102
Sintoma: S0C7
Causa: dado não numérico

INCIDENTE 10221
Sintoma: S0C7
Causa: integração enviando campo inválido

Depois chega incidente novo:

S0C7
+
COPYBOOK ALTERADO HOJE

Seu sistema poderia procurar casos semelhantes.

Agora experiência organizacional começa a virar memória operacional.

Uma espécie de:

P(CAUSA | HISTÓRICO + EVIDÊNCIA ATUAL)

Isso já aponta para aplicações modernas de IA em operações.


Capítulo XX — AIOps: o sysprog bayesiano virou software?

Em certo sentido, muitas ferramentas modernas de observabilidade e AIOps tentam fazer justamente aquilo que um excelente operador humano sempre fez:

  1. observar sinais;

  2. correlacionar eventos;

  3. detectar anomalias;

  4. procurar padrões históricos;

  5. priorizar hipóteses;

  6. sugerir causas.

A diferença está na escala.

Um humano consegue acompanhar determinados sistemas.

Uma grande organização produz milhões de eventos.

Então surgem sistemas tentando responder:

“Dado este conjunto de sinais, qual causa parece mais provável?”

Soa familiar?

Nosso velho Bayes está sorrindo no fundo da sala.


Capítulo XXI — E o LLM entra novamente

Nosso artigo anterior mostrou:

P(próximo token | contexto)

Agora troubleshooting pergunta:

P(causa | sintomas e evidências)

Perceba a semelhança estrutural.

Não estamos dizendo que troubleshooting e LLM são a mesma coisa.

Não são.

Mas ambos demonstram algo profundo:

contexto transforma probabilidades.

Sem contexto:

S0C7

Com contexto:

S0C7
+
COMPUTE
+
CAMPO PACKED
+
ARQUIVO ALTERADO
+
PROBLEMA COMEÇOU HOJE

Outra história.


Capítulo XXII — O prompt perfeito para um incidente

Imagine pedir ajuda a uma IA:

Meu COBOL deu erro. Ajude.

Universo gigantesco.

Agora:

Programa Enterprise COBOL em z/OS.
Batch.
Abend S0C7.
O PSW aponta para um COMPUTE.
Campo de entrada é PIC S9(7)V99 COMP-3.
O arquivo upstream mudou ontem.
O dump mostra bytes incompatíveis com packed decimal.

Você praticamente realizou o trabalho bayesiano antes mesmo da pergunta.

Reduziu a incerteza.

Essa é uma das regras de ouro ao trabalhar com humanos ou IA:

não peça respostas melhores; forneça evidências melhores.


Capítulo XXIII — Easter egg: o Ministério das Causas Prováveis

Em algum prédio governamental britânico existe:

MINISTRY OF PROBABLE ROOT CAUSES

Você entra.

— Estou com S0C7.

Funcionário:

— Formulário?

— Qual?

— Solicitação de hipótese.

— Quero descobrir a causa.

— Antes precisa declarar a causa provável.

— Mas se soubesse a causa não estaria aqui.

— Exatamente.

— Então como preencho?

— Pode solicitar uma hipótese provisória.

— Onde?

— Departamento de Evidências.

— Onde fica?

— Só podemos fornecer essa informação mediante evidência de que você já sabe onde fica.

Thomas Bayes abandona o prédio.

Nunca mais volta.


Capítulo XXIV — Não confunda correlação com causa

Sistema caiu às 14h03.

Deploy ocorreu às 14h00.

Conclusão:

— FOI O DEPLOY!

Calma.

A proximidade temporal aumenta a probabilidade.

Não prova causalidade.

Talvez:

  • uma carga também tenha começado;

  • certificado tenha expirado;

  • algum recurso tenha atingido limite;

  • outro sistema tenha falhado.

Bayes permite:

DEPLOY RECENTE
→ HIPÓTESE SOBE

mas não:

DEPLOY RECENTE
→ CULPADO CONDENADO

Precisamos continuar coletando evidências.


Capítulo XXV — O valor negativo da evidência

Algo que não aconteceu também informa.

Se esperamos que um problema de rede provoque múltiplos serviços afetados, mas apenas uma determinada função falha, isso reduz a força dessa hipótese.

Ausência de sintomas pode ser evidência.

Exemplo:

Hipótese:

CPU SATURADA

Mas RMF mostra:

CPU 32%

Hipótese perde peso.

Hipótese:

DB2 LENTO

Mas todas as queries respondem normalmente exceto uma.

Talvez não seja “Db2 lento”.

Talvez seja:

UMA QUERY RUIM

Toda investigação deveria perguntar:

o que eu deveria estar vendo caso minha teoria fosse verdadeira?


Capítulo XXVI — O poder extraordinário da linha do tempo

Uma das ferramentas mais poderosas de qualquer incidente é extremamente simples:

13:42 deploy iniciado
13:48 deploy finalizado
13:51 primeira mensagem XYZ
13:52 erros começam
13:54 throughput cai
14:01 chamados de usuários

Uma timeline cria relações.

Sem timeline:

UM MONTE DE COISAS ACONTECEU.

Com timeline:

EVENTO A
↓
EVENTO B
↓
SINTOMA C

Não prova automaticamente causalidade.

Mas reorganiza probabilidades brutalmente.

Por isso perguntar:

“quando exatamente começou?”

é uma das armas mais poderosas da engenharia.


Capítulo XXVII — O S0C7 encontra Occam

Outra ideia útil:

quando várias hipóteses explicam os mesmos fatos, normalmente começamos pela mais simples ou pela que requer menos suposições extras.

Não porque o Universo prometa simplicidade.

Ele não promete nada.

Mas porque investigar hipóteses simples e comuns primeiro costuma ser eficiente.

S0C7 depois de alteração de layout.

Possibilidade A:

O arquivo começou a fornecer caracteres não numéricos.

Possibilidade B:

Uma partícula cósmica atravessou o processador, alterou memória exatamente naquele campo e desapareceu deixando nenhuma outra evidência.

Fisicamente talvez B não seja absolutamente impossível.

Mas começaremos por A.

O macaco infinito teria orgulho da B.

Produção não.


Capítulo XXVIII — Base rate: cavalos antes de zebras

Outro princípio importantíssimo.

Quando ouvimos cascos:

pense primeiro em cavalos.

Não zebras.

Em troubleshooting:

comece pelas causas frequentes compatíveis com as evidências.

Isso evita passar quatro horas investigando uma condição extremamente rara enquanto o arquivo possui simplesmente:

00012A45

O veterano parece rápido porque já conhece os base rates.

Sabe o que costuma quebrar.

Isso não significa ignorar coisas raras.

Significa investigar numa ordem economicamente inteligente.


Capítulo XXIX — O novato pergunta “qual é a causa?”

O veterano pergunta:

“qual é a próxima evidência mais barata que pode separar minhas hipóteses?”

Essa pergunta vale ouro.

Temos duas hipóteses:

A = DADO INVÁLIDO
B = STORAGE OVERWRITE

Qual teste é mais simples?

Talvez olhar os bytes do campo no dump.

Se estão inválidos já na entrada:

A sobe muito.

Se estavam corretos e depois aparecem corrompidos:

B sobe.

Investigue primeiro aquilo que possui:

  • baixo custo;

  • alta capacidade discriminatória;

  • baixo risco.

Isso é troubleshooting eficiente.


Capítulo XXX — Reiniciar é uma evidência terrível

Alguém reinicia.

Problema some.

Conclusão:

— Era memória.

Não necessariamente.

O restart alterou dezenas de condições simultaneamente:

  • memória;

  • conexões;

  • filas;

  • locks;

  • caches;

  • processos;

  • sessões;

  • timers.

Portanto ele possui baixo poder discriminatório.

Sabemos:

ESTADO ANTERIOR → PROBLEMA
ESTADO NOVO → SEM PROBLEMA

Mas não sabemos qual diferença foi causal.

Restart é poderoso operacionalmente.

Diagnosticar com ele é frequentemente horrível.


Capítulo XXXI — Nunca desperdice um incidente

Quando corrigimos e simplesmente fechamos:

RESOLVIDO.

perdemos aprendizado.

O fechamento deveria registrar:

SINTOMA
CAUSA
EVIDÊNCIAS
TIMELINE
MUDANÇA RELACIONADA
COMO CONFIRMAMOS
AÇÃO CORRETIVA
COMO DETECTAR MAIS RÁPIDO

Por quê?

Porque estamos construindo os priors da organização.

O incidente de hoje melhora a investigação de amanhã.

Esse é o verdadeiro valor do conhecimento operacional.


Capítulo XXXII — Runbook não deve ser livro de receitas

Runbook ruim:

SE S0C7:
1. REINICIAR
2. TENTAR NOVAMENTE
3. CHAMAR FULANO

Runbook bom:

S0C7

1. Identifique instrução e offset.
2. Determine quais operandos participam.
3. Inspecione representação dos dados.
4. Confirme origem dos campos.
5. Verifique alterações recentes.
6. Compare com layout esperado.
7. Reproduza com input específico.
8. Confirme causa antes da correção.

O segundo ensina investigação.

O primeiro ensina ritual.

Sistemas complexos precisam de raciocínio, não pajelança tecnológica.


Capítulo XXXIII — Quando experiência vira arrogância

Existe uma frase terrível:

“Eu sei o que é.”

Talvez saiba.

Mas a versão profissional é:

“Minha hipótese principal é X porque A, B e C. Vou verificar D para confirmar.”

Veja a diferença.

A primeira encerra investigação.

A segunda cria um teste.

Veteranos realmente bons possuem confiança sem abandonar falsificabilidade.

Eles sabem que experiência melhora probabilidade.

Não concede infalibilidade.


Capítulo XXXIV — O aprendiz pode acelerar décadas de experiência

Aqui existe uma boa notícia.

Você não precisa viver quarenta anos para começar a pensar assim.

Pode criar deliberadamente hábitos bayesianos.

Ao receber um incidente, escreva:

HIPÓTESE 1
HIPÓTESE 2
HIPÓTESE 3

Depois:

EVIDÊNCIA QUE CONFIRMA
EVIDÊNCIA QUE REFUTA

Em seguida pergunte:

QUAL TESTE SEPARA MELHOR ESSAS HIPÓTESES?

Faça isso repetidamente.

Após meses, começa a ficar natural.

Depois de anos:

alguém mostra S0C7.

Você pede café.

E pergunta:

— Mudaram o arquivo ontem?

A metamorfose está completa.


Capítulo XXXV — O Sysprog Bayesiano nasce

Nosso jovem programador finalmente volta ao incidente original.

Temos:

ABEND S0C7

A instrução é:

COMPUTE WS-TOTAL =
        WS-VALOR * WS-QUANTIDADE

Descobrimos:

WS-VALOR = bytes inválidos

A origem:

arquivo upstream

Alteração:

COPYBOOK MODIFICADO ONTEM

Investigação do arquivo mostra:

o produtor passou a gerar determinado campo com nova definição.

O consumidor continuou interpretando o layout antigo.

Pronto.

Causa encontrada.

Não tivemos magia.

Tivemos:

SINTOMA
+
HISTÓRICO
+
HIPÓTESES
+
EVIDÊNCIA
+
ATUALIZAÇÃO
+
CONFIRMAÇÃO

Thomas Bayes acabaria de receber acesso ao RACF.


Epílogo — O velho homem e o dump

Alguns anos depois, aquele programador iniciante está numa sala com outro novato.

O monitor mostra:

S0C7

O jovem pergunta assustado:

— O que pode ser?

Nosso antigo iniciante pega café.

Observa o horário.

Pergunta:

— Quando começou?

— Hoje.

— Mudaram alguma coisa?

— Um arquivo upstream.

Ele sorri.

— Mostra o layout.

O novato pergunta:

— Como você sabia?

Ele pensa por alguns segundos.

Poderia explicar:

prior probabilities.

Likelihood.

Posterior.

Base rate.

Conditional probability.

Entropia.

Information gain.

Pattern recognition.

Observabilidade.

Décadas de incidentes.

Mas responde apenas:

— Experiência.

No fundo da sala, Thomas Bayes derruba a cabeça sobre a mesa.

Porque aquela palavra simples esconde uma máquina extraordinariamente sofisticada.

O cérebro do veterano não possui certeza.

Possui probabilidades bem calibradas.

Ele não conhece todas as causas.

Aprendeu quais causas procurar primeiro.

Ele não lê todas as linhas do dump.

Sabe quais linhas diminuem a incerteza.

Ele não testa todas as hipóteses.

Procura a evidência que elimina mais delas.

E talvez seja essa a verdadeira evolução da nossa trilogia.

O Macaco Infinito dizia:

TENTE TUDO.

O LLM dizia:

USE O CONTEXTO PARA DESCOBRIR
O QUE É MAIS PROVÁVEL.

O Sysprog Bayesiano responde:

USE A EVIDÊNCIA PARA ATUALIZAR
O QUE VOCÊ ACREDITA.

São três formas completamente diferentes de atravessar um universo de possibilidades.

O macaco depende de tempo infinito.

O modelo depende de padrões aprendidos.

O veterano depende de experiência, contexto e observabilidade.

E produção?

Produção não possui tempo infinito.

Produção possui SLA.

Às 03h17, o telefone toca.

— Caiu de novo.

O veterano olha o dashboard.

Depois pergunta:

— Mesmo erro?

— Não.

Ele toma um gole de café.

Apaga todas as hipóteses anteriores.

E começa novamente.

Porque existe uma última regra que todo verdadeiro Sysprog Bayesiano aprende:

a evidência de ontem melhora seu prior — mas nunca substitui a evidência de hoje.

☕🧙‍♂️🖥️

No console:

INCIDENT 004217 CLOSED
ROOT CAUSE CONFIRMED

Trinta segundos depois:

NEW INCIDENT 004218 OPEN

O veterano olha para a tela.

— Interessante.

O novato pergunta:

— Você já sabe o que é?

— Não.

— Então por que está sorrindo?

Ele pega a caneca.

— Porque já sei qual é a primeira pergunta.

E, em troubleshooting, às vezes isso vale mais que saber a resposta.

quarta-feira, 6 de março de 2024

Hércule Poirot Entra no CPD — O Caso do Sistema que Estava Verde, Mas Já Estava Morto por Dentro

 

Bellacosa Mainframe analisando a performance mainframe

☕ Um Café no Bellacosa Mainframe

Hércule Poirot Entra no CPD — O Caso do Sistema que Estava Verde, Mas Já Estava Morto por Dentro

Ou: por que latência, erros, CPU, filas, Db2, MQ e I/O não são uma coleção de números — são as pequenas células cinzentas que impedem o SEV-1 antes do café esfriar

Há uma cena recorrente em tecnologia que faria Hércule Poirot ajustar o bigode, olhar para o dashboard e dizer, com delicada indignação belga: “Mon ami, todos os suspeitos têm álibi. E, ainda assim, a folha de pagamento não foi processada.”

O painel está verde. CPU em 38%. Memória em 61%. Banco “UP”. Rede “normal”. Ninguém abriu chamado de infraestrutura. Mas o usuário está esperando oito segundos para consultar o saldo, o atendente do call center aperta Enter pela terceira vez, a fila do IBM MQ cresce como lista de compras em véspera de feriado e o batch que terminava às 5h ainda está conversando com o DASD às 8h12.

Essa é a verdade incômoda do monitoramento: sistemas raramente deixam de funcionar como uma lâmpada que apaga. Eles se deterioram em sinais pequenos, correlacionados e, muitas vezes, educados demais para disparar um alarme simples. Primeiro uma consulta Db2 demora um pouco mais. Depois o pool de conexões fica ocupado. Em seguida, a aplicação segura as requisições por mais tempo. As filas crescem. Os timeouts começam. Os usuários tentam de novo. O volume aumenta artificialmente. A CPU finalmente sobe. Quando alguém percebe, o incidente já não é técnico: virou negócio, reputação e reunião de diretoria.

Para um programador COBOL iniciante, a mensagem mais importante é esta: monitoramento não é assunto exclusivo do “pessoal de infraestrutura”. Quando seu programa faz um EXEC SQL, grava uma mensagem MQ, chama uma transação CICS, lê um VSAM ou recebe um arquivo de entrada, ele passa a fazer parte da história operacional do sistema. O código pode compilar lindamente e ainda assim criar um gargalo capaz de transformar uma terça-feira comum num episódio de investigação criminal.



Prólogo — Poirot não procura números; ele procura a verdade

Métricas são medições. Observabilidade é a capacidade de explicar o que está acontecendo a partir dos efeitos que o sistema produz. Monitoramento é a prática de acompanhar esses sinais e agir a tempo.

Parece uma diferença de dicionário, mas não é. Um dashboard que exibe 250 gráficos pode ser menos útil do que uma única pergunta bem formulada:

A transação importante para o usuário está concluindo corretamente, dentro do tempo prometido?

Imagine uma aplicação bancária. A CPU pode estar baixa. O CICS pode estar ativo. O Db2 pode responder ao comando de health check. Porém, se a operação de transferência demora 20 segundos e 4% delas terminam em timeout, o serviço não está saudável para quem precisa pagar uma conta. Ele está apenas respirando com aparelhos ligados.

Poirot não ficaria satisfeito com “o servidor está no ar”. Ele perguntaria: “No ar para quem? Fazendo o quê? Em quanto tempo? Com qual taxa de sucesso? E o que mudou antes de Madame Latência começar a gritar?”



1. Latência — a primeira testemunha costuma ser o relógio

Latência é o tempo gasto entre um pedido e uma resposta útil. Em aplicações web é o tempo da requisição. Em CICS, pode ser o tempo percebido pelo usuário na transação. Em batch, pode ser o tempo de execução de uma etapa. Em MQ, pode ser o intervalo entre a mensagem entrar na fila e ser efetivamente consumida.

Ela é uma das melhores primeiras pistas porque o usuário sente demora antes de entender qualquer outra coisa. Usuário não abre RMF, não consulta SMF e não discute buffer pool. Usuário diz: “Está lento.” E frequentemente está certo.

Há uma armadilha: não confie apenas na média. Se 95 consultas respondem em 200 milissegundos e cinco levam 20 segundos, a média pode até parecer elegante num PowerPoint. Mas aquelas cinco pessoas vivem a versão completa do desastre.

Por isso usamos percentis:

  • p50: o comportamento típico, a mediana;

  • p95: a experiência dos 5% mais lentos;

  • p99: a cauda ruim, onde se escondem timeouts e casos críticos.

Em um ambiente COBOL/Db2, uma tela pode permanecer rápida para quase todos, enquanto um tipo específico de cliente dispara uma consulta com critério pouco seletivo. É o equivalente técnico de descobrir que todas as vítimas tomaram chá, mas apenas uma escolheu a xícara errada.

Dica prática: defina um objetivo de serviço, ou SLO. Por exemplo: “99,9% das consultas de saldo devem terminar com sucesso em até 1 segundo.” Agora a conversa deixa de ser “parece lento” e passa a ser verificável.



2. Taxa de erros — quando o sistema deixa evidência no local do crime

Taxa de erros mede falhas explícitas: HTTP 500, timeout, abend, autenticação rejeitada, mensagem devolvida, SQLCODE negativo, transação com rollback ou job encerrado com RC maior que o permitido.

Mas nem todo erro é o mesmo crime. Um 404 causado por URL digitada errada é bem diferente de uma transferência financeira que retorna 500. Um SQLCODE -100 pode ser resultado esperado — nenhum registro encontrado. Já um SQLCODE -911 pode indicar deadlock ou timeout; aí Poirot põe a mão no queixo, porque duas transações disputando recursos contam uma história bem mais interessante.

Um iniciante em COBOL deve aprender desde cedo a tratar retorno e contexto, não apenas “seguir em frente” depois do comando:

           EXEC SQL
               SELECT NOME
                 INTO :WS-NOME
                 FROM CLIENTE
                WHERE CPF = :WS-CPF
           END-EXEC

           EVALUATE SQLCODE
               WHEN 0
                   CONTINUE
               WHEN 100
                   MOVE 'CLIENTE NAO ENCONTRADO' TO WS-MENSAGEM
               WHEN OTHER
                   PERFORM REGISTRA-ERRO-DB2
                   MOVE 'FALHA TEMPORARIA' TO WS-MENSAGEM
           END-EVALUATE.

O detalhe operacional é essencial: registre a falha com identificador da transação, programa, operação e correlação da requisição. Um log dizendo apenas “erro no banco” é tão útil quanto uma testemunha dizendo “vi alguém de chapéu”.

3. Throughput — muito trabalho pode ser sucesso ou pânico

Throughput é volume processado por unidade de tempo: transações por segundo, requisições por minuto, mensagens consumidas, registros lidos, documentos emitidos ou pagamentos autorizados.

Um aumento de throughput pode significar uma campanha bem-sucedida. Mas também pode significar que usuários estão repetindo cliques porque nada responde, que uma integração entrou em loop de retry ou que um lote foi reenviado três vezes.

Esse último caso é uma bela curiosidade de CPD: às vezes o sistema não está recebendo mais trabalho real; está recebendo o mesmo trabalho, repetido por ansiedade humana ou erro de software. É o “efeito elevador”: o botão não respondeu, então alguém apertou cinco vezes. Em sistemas distribuídos, cada tentativa pode abrir conexão, chamar serviço, consultar Db2 e colocar mensagem na fila. A consequência é um aumento de carga que agrava exatamente a lentidão que motivou o novo clique.

Compare sempre throughput com latência, erro e filas. Mais transações com latência estável e erro baixo é capacidade. Mais transações com demora, falhas e acúmulo é saturação disfarçada de sucesso.

4. CPU — o suspeito famoso, mas raramente o único culpado

CPU é a métrica mais vista porque é intuitiva. Uso alto pode apontar carga legítima, loop, compressão, criptografia, serialização, processamento excessivo ou necessidade de capacidade adicional.

Mas CPU baixa não inocenta o sistema. Uma transação bloqueada esperando I/O, lock Db2, resposta de rede ou disponibilidade de conexão pode consumir pouca CPU e, ainda assim, fazer o usuário envelhecer diante da tela.

No z/OS, a investigação é ainda mais refinada. Não basta perguntar “quanto de CPU?”; é preciso considerar CP, zIIP, WLM, prioridade da service class, dispatching delay e a diferença entre usar CPU e esperar para receber CPU. Um workload pode ter sido classificado com importância inadequada, enquanto outro, menos importante, ganha a pista de corrida.

Para o programador COBOL, a lição é humilde e poderosa: antes de concluir que falta máquina, procure trabalho desperdiçado. Um PERFORM mal controlado, uma busca sequencial onde seria possível indexação, conversões repetidas, leitura desnecessária de registros e chamadas redundantes fazem muito barulho quando multiplicadas por milhões.

5. Memória — o vazamento começa como gota e termina como enchente

Memória é a capacidade de manter dados e execução disponíveis sem recorrer excessivamente a paginação, swap ou reinicializações. Vazamentos de memória são particularmente traiçoeiros: a aplicação funciona após o deploy, passa nos testes, opera por algumas horas e, aos poucos, cresce até transformar manutenção de rotina em madrugada de guerra.

Em plataformas distribuídas, procure crescimento contínuo, garbage collection cada vez mais frequente, pausas longas e processos mortos por falta de memória. Em ambiente mainframe, o vocabulário varia — regiões CICS, storage, address spaces, limites e pressão de recursos — mas o princípio é o mesmo: consumo que sobe sem retornar ao patamar normal merece investigação.

Muitos incidentes não são causados por “falta de memória” em sentido absoluto. São causados por fragmentação, limites por processo, vazamento de conexões ou uma aplicação mantendo objetos que deveriam ter sido liberados. O grande crime pode estar numa pequena referência esquecida.

6. Disco e I/O — o porão escuro onde o gargalo se esconde

CPU de 20%, memória tranquila e aplicação lenta: este é o momento de olhar para I/O. A aplicação talvez não esteja calculando; talvez esteja esperando leitura, escrita, flush de log ou páginas do banco.

No mundo Db2, uma consulta aparentemente simples pode fazer centenas de milhares de leituras se o access path for ruim. No VSAM, uma rotina pode transformar acesso direto em leitura sequencial involuntária. No batch, um arquivo enorme pode competir por recursos em um horário já pressionado.

Monitore latência de leitura e escrita, IOPS, fila de I/O, tempo de resposta de volumes, espaço disponível e waits. No z/OS, RMF, SMF, OMEGAMON, SYSVIEW e ferramentas equivalentes ajudam a separar “meu programa está lento” de “meu programa está à espera do storage”.

Eis uma regra de investigação: se alguém sugere comprar mais CPU antes de examinar I/O e SQL, Poirot recomenda cautela. Pode ser como aumentar a potência do carro quando ele está parado numa fila de pedágio.

7. Latência de rede — toda dependência distante aumenta a fragilidade

Uma transação moderna pode atravessar API Gateway, autenticação, microsserviço, cache, serviço externo, MQ, CICS, Db2 e retornar. Cada salto é uma chance adicional de atraso, falha ou timeout.

Não reduza rede a um teste de ping. Há DNS lento, perda de pacotes, handshake TLS, proxy saturado, pool de conexões esgotado, firewall, rota alterada e API de terceiro que decidiu fazer manutenção sem avisar. A parte local pode estar perfeita; a chamada externa pode ser o veneno no chá.

O remédio é rastreamento distribuído: um identificador de correlação que acompanha a requisição. Assim, em vez de saber apenas que a operação demorou oito segundos, você descobre que gastou 200 ms no gateway, 300 ms no CICS, 6,7 s esperando a API externa e 800 ms no Db2.

8. Profundidade de fila — a confissão silenciosa do sistema assíncrono

Fila é uma promessa: “não processei agora, mas processarei daqui a pouco”. IBM MQ é excelente nisso. Ele desacopla produtor e consumidor, absorve picos e protege aplicações. Mas fila crescendo sem parar é a prova de que a entrada é maior que a saída.

Não observe só quantas mensagens existem. Observe também:

  • taxa de entrada versus taxa de consumo;

  • idade da mensagem mais antiga;

  • quantidade de consumidores ativos;

  • retries e mensagens em dead-letter queue;

  • tempo total até a conclusão do negócio.

Uma fila com 100 mil mensagens pode ser normal numa madrugada de processamento massivo. Uma fila com 200 mensagens pode ser gravíssima se costumava ficar zerada e cada uma corresponde a uma autorização de cartão. Contexto, como sempre, é a pequena célula cinzenta que separa análise de decoração.

9. Cache hit rate — velocidade emprestada precisa ser devolvida com correção

Cache evita consultas caras. Quando há hit, o dado já está disponível; quando há miss, a aplicação precisa buscar no banco, no disco ou num serviço remoto. Taxa de acerto baixa pode despejar carga sobre o Db2 e iniciar uma cascata: mais leitura, mais I/O, mais latência, mais timeouts e mais retries.

Porém, uma taxa alta não é absolvição. Cache pode entregar dado velho. Em sistemas de saldo, estoque, preço ou autorização, velocidade sem consistência é apenas um erro muito rápido.

Defina claramente o que pode ser armazenado, por quanto tempo, como invalidar e o que fazer em caso de falha. Nem tudo merece cache; alguns dados existem exatamente para serem consultados em sua forma mais atual.

10. Tempo de consulta Db2 — o mordomo quase sempre tem um índice

Há uma piada de veterano: quando uma aplicação está lenta, a culpa é da rede; quando a rede está boa, a culpa é do servidor; quando o servidor está bom, alguém finalmente abre o EXPLAIN.

Consultas ao banco são causas clássicas de degradação escondida. Meça duração, volume de execuções, linhas lidas versus retornadas, uso de índices, locks, deadlocks, tempo de commit e plano de acesso. Uma query de dois segundos rodando uma vez pode ser tolerável. A mesma query executada vinte mil vezes por minuto é um pedido formal de incidente.

Para quem começa em COBOL com Db2, três hábitos evitam boa parte dos crimes:

  1. Não use SELECT * se precisa de duas colunas.

  2. Conheça as colunas de filtro e os índices disponíveis.

  3. Verifique o plano de acesso quando o volume real crescer.

Também cuide das estatísticas. Um otimizador decide com base no que sabe. Se as estatísticas não representam mais a tabela, ele pode escolher um caminho que parece excelente no papel e péssimo no DASD.

O método Poirot: um passo a passo para investigar degradação

Quando o alerta tocar, resista à tentação de acusar o primeiro gráfico vermelho. Siga um roteiro.

Primeiro: confirme o impacto. Qual jornada foi afetada? Login, pagamento, consulta, emissão, batch, integração? Quem sente: todos, uma região, um cliente, uma versão?

Segundo: determine quando começou. Houve deploy, alteração de parâmetro, pico de tráfego, janela de batch, mudança de certificado, atualização de tabela, campanha comercial ou falha externa?

Terceiro: compare sinais. A latência subiu antes dos erros? A fila cresceu antes da CPU? O Db2 ficou lento antes da aplicação esgotar conexões? A sequência importa: ela é a linha do tempo do crime.

Quarto: encontre o gargalo, não o sintoma. Aumentar instâncias pode piorar uma base já sobrecarregada. Reiniciar consumidor pode gerar uma tempestade de reprocessamento. Escalar CPU não cura lock Db2.

Quinto: reduza o impacto. Limite tráfego, faça rollback de mudança, ative modo degradado, aumente consumidores com cuidado, interrompa batch concorrente ou desabilite uma função não essencial.

Sexto: registre o caso. Depois do incidente, documente causa, sinais iniciais, decisão tomada, impacto, correção e alerta preventivo. O objetivo não é achar um culpado humano; é fazer o sistema ensinar a própria equipe.

O dashboard que vale alguma coisa

O painel deve começar pelo negócio, não pelo hardware. Coloque no topo as transações críticas, taxa de sucesso, latência p95/p99 e orçamento de erro. Depois, use CPU, memória, I/O, rede, cache, fila e banco como trilha de investigação.

Uma estrutura simples e poderosa é observar quatro sinais de ouro:

  • latência: está demorando?

  • tráfego: quanto trabalho chegou?

  • erros: está falhando?

  • saturação: qual recurso chegou ao limite?

Os dez sinais do infográfico aprofundam essa estrutura. Eles não competem entre si; conversam entre si.

Epílogo — o sinal em que se deve confiar

Se Poirot tivesse de escolher apenas um sinal para decisão em produção, ele provavelmente escolheria um SLO ligado à experiência da transação crítica: sucesso dentro de um tempo aceitável. CPU, memória, rede, disco, Db2 e fila são fundamentais para encontrar a causa. Mas o usuário não compra CPU. Ele compra o resultado.

Portanto, a melhor métrica não é “CPU abaixo de 80%”. É algo como: “99,9% das transferências devem concluir corretamente em até dois segundos.” Essa promessa pode ser medida, defendida e investigada.

No fim, monitorar é isso: notar o aumento discreto da latência antes de virar timeout; perceber a fila antes de virar backlog; encontrar a query antes de ela virar indisponibilidade; ouvir os sinais antes que o CPD inteiro grite.

E quando alguém disser que está tudo verde, mas o cliente está esperando, ajuste o bigode imaginário e responda: “Então, mon ami, talvez devêssemos investigar o que esses verdes estão deixando de contar.”




sábado, 4 de fevereiro de 2023

Capítulo II — Operação, Detecção, Resposta e Recuperação

 

Bellacosa Mainframe e a cybersegurança parte II

☕ Um Café no Bellacosa Mainframe

Capítulo II — Operação, Detecção, Resposta e Recuperação

Ou: o Agente 86 recebeu um alerta às 03h17, entrou no SOC pelo Cone do Silêncio, descobriu que a KAOS estava usando uma conta perfeitamente válida — e Igor restaurou o backup errado porque a fita estava etiquetada como “FINAL-FINAL-AGORA-VAI”



Prólogo — O telefone-sapato tocou às 03h17

O telefone-sapato tocou às 03h17 da madrugada.

O Agente 86 levou alguns segundos para encontrá-lo. Primeiro atendeu o abajur, depois tentou conversar com uma torradeira e finalmente percebeu que estava usando o aparelho no pé direito.

— 86, temos um incidente — disse o Chefe.

— A KAOS invadiu o datacenter?

— Ainda não sabemos.

— Roubaram dados?

— Ainda não sabemos.

— Derrubaram o CICS?

— Ainda não sabemos.

— Então o que sabemos?

— Um alerta apareceu no SIEM. Depois apareceram outros 4.732. Igor clicou em “reconhecer todos” para limpar a tela.

— Chefe... acreditaria se eu dissesse que isso fazia parte da estratégia?

— Não.

— Eu também não.

No Capítulo I aprendemos o vocabulário: ativo, ameaça, vulnerabilidade, risco, confidencialidade, integridade, disponibilidade, autenticação, autorização, malware, criptografia e programação segura.

Agora começa a parte que separa a segurança decorativa da segurança operacional.

Porque nenhum ambiente consegue impedir todos os erros, ataques e falhas. Em algum momento uma senha será reutilizada, uma biblioteca apresentará vulnerabilidade, um funcionário clicará, um fornecedor será comprometido, um certificado vencerá, um job executará fora de sequência ou um atacante usará uma credencial válida.

A pergunta profissional não é apenas:

“Como impedir que algo aconteça?”

Também precisamos perguntar:

  • Como perceberemos rapidamente?

  • Como distinguiremos ruído de incidente real?

  • Quem terá autoridade para agir?

  • Como conteremos sem destruir o negócio?

  • Que evidências serão preservadas?

  • Como recuperaremos dados e serviços confiáveis?

  • Como evitaremos repetir a mesma história?

Pegue o café. O sistema está online, mas isso não significa que esteja saudável — e uma luz verde sozinha nunca absolveu ninguém.



1. Prevenção é apenas o primeiro turno da operação

Existe uma fantasia confortável segundo a qual segurança funciona como uma muralha medieval: instalamos firewall, antivírus, RACF, MFA e criptografia; depois trancamos a porta e voltamos para casa.

O atacante moderno prefere justamente não parecer atacante. Ele pode entrar com:

  • conta legítima comprometida;

  • token de sessão roubado;

  • API autorizada usada de forma abusiva;

  • ferramenta administrativa existente;

  • job scheduler corporativo;

  • acesso remoto de fornecedor;

  • credencial de serviço esquecida;

  • dependência comprometida no pipeline.

Quando uma operação maliciosa utiliza mecanismo legítimo, a simples pergunta “o acesso foi autorizado pelo sistema?” não basta. Precisamos perguntar se o comportamento é coerente com a identidade, a função, o horário, o ativo, o volume e o contexto.

Um usuário autorizado a consultar cem clientes por dia pode estar tecnicamente autorizado e comportamentalmente suspeito ao consultar dois milhões durante a madrugada.

No mainframe, uma transação pode apresentar:

  • RACF RC=0;

  • CICS funcionando;

  • Db2 respondendo;

  • conexão TLS válida;

  • programa corretamente autorizado;

e ainda assim representar fraude, abuso interno ou credencial comprometida.

Segurança operacional vive nessa diferença entre permitido e esperado.



2. Antes do alerta: conheça o que existe

Não existe detecção séria sem inventário. Se ninguém conhece os ativos, ninguém sabe quais eventos importam.

2.1 Inventário não é apenas lista de servidores

Um inventário útil inclui:

  • sistemas e aplicações;

  • LPARs e subsistemas;

  • started tasks;

  • regiões CICS e IMS;

  • bancos Db2 e arquivos VSAM;

  • datasets críticos;

  • filas e canais MQ;

  • APIs e endpoints;

  • servidores USS;

  • certificados e chaves;

  • usuários privilegiados;

  • contas técnicas;

  • agendamentos;

  • pipelines e repositórios;

  • fornecedores e conexões externas;

  • responsáveis técnicos e de negócio.

O ativo precisa ter proprietário. “A aplicação é da TI” não é propriedade; é abandono coletivo com crachá.

Pergunte:

  1. Quem responde pelo serviço?

  2. Qual processo de negócio depende dele?

  3. Quais dados são tratados?

  4. Qual a criticidade?

  5. Qual o RTO e o RPO?

  6. Quem pode interrompê-lo numa emergência?

  7. Onde estão os contatos fora do expediente?

  8. Quais sistemas precisam voltar antes dele?

2.2 Classificação

Nem todo dado merece o mesmo controle. Classifique conforme sensibilidade, impacto e obrigação legal:

  • público;

  • interno;

  • confidencial;

  • restrito;

  • regulado;

  • crítico para continuidade.

O objetivo não é criar etiquetas bonitas. A classificação deve alterar comportamento: acesso, criptografia, retenção, mascaramento, backup, logging, transmissão e descarte.

2.3 Dependências invisíveis

Um sistema aparentemente simples pode depender de DNS, identidade, certificados, MQ, banco, storage, scheduler, rede, fornecedor e relógio sincronizado.

O Agente 86 pode restaurar o CICS em dez minutos e continuar parado porque o certificado do API gateway venceu três semanas antes e ninguém o colocou no inventário.

Dica Bellacosa: desenhe a cadeia mínima da transação crítica, da entrada até o registro final. Marque cada identidade, protocolo, fila, arquivo, banco, log e fornecedor atravessado. Esse mapa vale ouro durante um incidente.



3. Gestão de vulnerabilidades — scanner não é oráculo

O scanner encontra sinais de fraqueza. Ele não conhece sozinho todo o contexto do negócio.

3.1 CVE, CWE e CVSS

  • CVE identifica uma vulnerabilidade conhecida específica.

  • CWE descreve uma classe de fraqueza, como validação inadequada ou controle de acesso incorreto.

  • CVSS ajuda a expressar severidade técnica.

Severidade não é igual a risco empresarial.

Uma vulnerabilidade crítica pode estar em componente não executado, isolado e sem dados relevantes. Outra de severidade média pode estar numa API exposta que controla pagamentos.

Priorize considerando:

  • exploração conhecida;

  • exposição à Internet;

  • privilégio necessário;

  • facilidade de exploração;

  • criticidade do ativo;

  • dados alcançáveis;

  • controles compensatórios;

  • impacto operacional;

  • movimento lateral possível.

3.2 O ciclo correto

  1. Descobrir os ativos.

  2. Identificar vulnerabilidades.

  3. Validar o achado.

  4. Avaliar exposição e impacto.

  5. Priorizar.

  6. Corrigir ou mitigar.

  7. Testar novamente.

  8. Registrar exceções e prazos.

  9. Medir recorrência.

“Aceitar risco” não significa ignorar. Significa que uma autoridade informada aceitou determinado risco por período definido, com justificativa, controles compensatórios e data de revisão.

3.3 Patch sem ensaio também derruba produção

Atualizar é essencial, mas mudança insegura pode criar indisponibilidade. O processo precisa de:

  • avaliação;

  • ambiente de teste;

  • plano de implementação;

  • rollback;

  • janela;

  • validação técnica e funcional;

  • monitoração pós-mudança.

No mainframe, SMP/E, HOLDDATA, manutenção de middleware, compatibilidade de compiladores, DBRM, packages, exits e integrações precisam ser entendidos. Segurança e disponibilidade não são inimigas; são requisitos que precisam conversar.





4. Evento, alerta, incidente e crise — não são sinônimos

Essa distinção evita que toda luz vermelha convoque o presidente da empresa.

Evento

Algo observável aconteceu:

  • login;

  • job iniciado;

  • dataset aberto;

  • regra de firewall acionada;

  • falha de autenticação;

  • transação concluída.

A maioria dos eventos é normal.

Alerta

Uma regra, modelo ou analista marcou determinado evento ou conjunto como digno de atenção.

Exemplo:

Dez falhas de login para a mesma conta em cinco minutos.

Alerta não prova ataque. Pode ser usuário esquecendo senha, script mal configurado ou tentativa hostil.

Incidente

Ocorrência que compromete ou ameaça confidencialidade, integridade, disponibilidade, autenticidade ou operação.

Exemplos:

  • conta comprometida;

  • acesso indevido;

  • malware confirmado;

  • exfiltração;

  • alteração não autorizada;

  • indisponibilidade causada por ataque.

Crise

Quando o impacto ultrapassa a resposta técnica e exige coordenação executiva, jurídica, regulatória, comunicacional e de continuidade.

Um incidente pode ser tecnicamente pequeno e reputacionalmente enorme. Outro pode ser tecnicamente complexo, mas bem contido e quase invisível ao cliente.


5. Logging — a caixa-preta do datacenter

Log é memória operacional. Sem ele, a investigação depende de palpites, lembranças e do testemunho de Igor, que afirma ter apertado “o botão verde — ou talvez o vermelho”.

5.1 O que registrar

Um registro útil responde:

  • quando aconteceu;

  • qual identidade agiu;

  • de onde veio;

  • qual recurso foi usado;

  • qual ação foi tentada;

  • qual foi o resultado;

  • qual regra autorizou ou negou;

  • qual identificador correlaciona a transação;

  • qual foi o código de retorno;

  • quanto tempo levou.

5.2 O que não registrar

Evite colocar em log:

  • senha;

  • chave privada;

  • token completo;

  • código MFA;

  • número integral de cartão;

  • dado pessoal sem necessidade;

  • conteúdo confidencial indiscriminado.

Log também é dado sensível. Ele pode revelar identidades, arquitetura, horários, endereços, comandos e regras internas.

5.3 O identificador de correlação

Uma transação moderna atravessa várias camadas. Sem um identificador consistente, cada sistema conta uma história separada.

Imagine:

CORRELATION-ID: TX-20260825-031700-0086

Esse identificador pode acompanhar API gateway, z/OS Connect, CICS, programa COBOL, Db2, MQ e resposta ao cliente.

5.4 Exemplo COBOL didático

DISPLAY 'SECLOG|'
        'CORR=' WS-CORRELATION-ID '|'
        'USER=' WS-USER-ID '|'
        'ACTION=TRANSFERENCIA|'
        'RESULT=' WS-RESULTADO '|'
        'RC=' WS-RETURN-CODE

Em produção, o formato deve ser padronizado, protegido e integrado à plataforma de logging. O importante é não escrever mensagens vagas como:

DEU ERRO

“Deu erro” é a versão digital de encontrar um cadáver com um bilhete dizendo “alguma coisa aconteceu”.

5.5 Tempo confiável

Sem sincronização de horário, a timeline vira ficção científica. Um servidor afirma que a credencial foi usada antes de ser roubada; outro registra a resposta antes da requisição.

Mantenha fontes de tempo confiáveis, timezone conhecido e tratamento consistente.


6. SIEM, SOC e o perigo da árvore de Natal

SIEM

Security Information and Event Management coleta, normaliza, correlaciona e pesquisa dados de segurança.

Ele pode reunir:

  • autenticação;

  • endpoints;

  • firewall;

  • cloud;

  • aplicações;

  • banco;

  • mainframe;

  • identidade;

  • vulnerabilidades;

  • threat intelligence.

Mas SIEM não é um detetive autônomo infalível. Sem fontes corretas, regras, contexto e operação, ele vira uma árvore de Natal: milhares de luzes piscando, ninguém sabendo qual representa incêndio.

SOC

Security Operations Center é a capacidade humana e processual de monitorar, analisar e coordenar resposta.

Pode ser interno, terceirizado ou híbrido. O importante é possuir:

  • cobertura definida;

  • responsabilidades;

  • níveis de escalonamento;

  • playbooks;

  • acesso a especialistas;

  • métricas;

  • autoridade para agir.

Falso positivo e falso negativo

  • Falso positivo: o alerta aponta ameaça inexistente.

  • Falso negativo: a ameaça existe, mas não é detectada.

Reduzir falsos positivos demais pode aumentar falsos negativos. Tornar a regra sensível demais pode afogar os analistas.

Detecção é equilíbrio, contexto e melhoria contínua.

Métricas que importam

  • tempo para detectar;

  • tempo para qualificar;

  • tempo para conter;

  • tempo para recuperar;

  • recorrência;

  • percentual de ativos cobertos;

  • qualidade das fontes;

  • alertas sem proprietário;

  • incidentes descobertos externamente.

Não comemore apenas “um milhão de eventos processados”. Isso mede volume, não proteção.


7. Mainframe também precisa falar com o SOC

O estereótipo do mainframe isolado morreu quando conectamos TCP/IP, web, APIs, DevOps, fornecedores e estações distribuídas.

No IBM Z, fontes relevantes podem incluir:

  • SMF;

  • registros RACF;

  • zSecure ou ferramentas equivalentes;

  • CICS monitoring e journaling;

  • Db2 audit e traces;

  • MQ events;

  • IMS logs;

  • JES e SDSF;

  • z/OSMF;

  • Communications Server;

  • USS syslog e audit;

  • FTP, SSH, TN3270 e APIs;

  • alterações em datasets e bibliotecas sensíveis.

Exemplos de sinais importantes

  • sucessivas falhas de autenticação;

  • uso incomum de usuário privilegiado;

  • alteração em perfil RACF;

  • concessão de SPECIAL, OPERATIONS ou acesso excessivo;

  • acesso fora do padrão a dataset sensível;

  • job submetido por identidade incomum;

  • mudança em biblioteca APF;

  • novo UID(0) no USS;

  • certificado alterado;

  • volume incomum de leitura ou transferência;

  • canal MQ criado ou modificado;

  • API chamada em velocidade incompatível com uso humano.

O desafio não é apenas extrair SMF. É transformar registros em contexto compreensível para o SOC.

Um alerta “ICH408I” sem explicação pode não ajudar um analista distribuído. Enriqueça com:

  • ativo;

  • proprietário;

  • criticidade;

  • identidade;

  • perfil envolvido;

  • histórico;

  • ação recomendada.


8. MITRE ATT&CK — o catálogo de comportamento da KAOS

O MITRE ATT&CK é uma base de conhecimento sobre táticas e técnicas observadas em adversários reais. Não é uma lista de produtos, nem uma sequência obrigatória.

Entre as táticas empresariais estão:

  • Reconhecimento;

  • Desenvolvimento de Recursos;

  • Acesso Inicial;

  • Execução;

  • Persistência;

  • Escalada de Privilégio;

  • Evasão;

  • Acesso a Credenciais;

  • Descoberta;

  • Movimento Lateral;

  • Coleta;

  • Comando e Controle;

  • Exfiltração;

  • Impacto.

O valor operacional está em perguntar:

“Se alguém executar esta técnica em nosso ambiente, quais sinais veremos?”

Exemplo

O atacante obtém senha de fornecedor.

  • Acesso Inicial: usa serviço remoto legítimo.

  • Descoberta: enumera sistemas e permissões.

  • Acesso a Credenciais: encontra segredo num script.

  • Movimento Lateral: alcança servidor intermediário.

  • Coleta: reúne relatórios.

  • Exfiltração: envia pequenos volumes.

  • Impacto: executa ransomware para distrair.

Se a empresa possui regra apenas para o ransomware, detecta o último ato e perde a investigação inteira.

O ATT&CK ajuda a construir cobertura, exercícios de Red Team, hipóteses de hunting e linguagem comum. A matriz é um mapa do comportamento, não um bingo de checkboxes. MITRE ATT&CK


9. Threat hunting — procurar antes que o alarme toque

Monitoramento tradicional responde a regras conhecidas. Threat hunting começa com hipótese.

Exemplo:

“Se uma credencial privilegiada fosse comprometida, o atacante poderia consultar datasets fora de seu padrão sem gerar falha de autorização.”

O hunter procura:

  • horários incomuns;

  • ativos nunca usados por aquela identidade;

  • sequência atípica de comandos;

  • crescimento de volume;

  • combinação rara de eventos;

  • acessos legítimos com finalidade suspeita.

O processo:

  1. Formular hipótese.

  2. Identificar fontes de dados.

  3. Pesquisar comportamento.

  4. Validar contexto.

  5. Investigar anomalias.

  6. Criar nova detecção.

  7. Melhorar a telemetria.

Threat hunting não é sair procurando “qualquer coisa estranha”. É investigação orientada por hipótese e conhecimento do ambiente.


10. Resposta a incidentes — o plano antes do incêndio

O NIST finalizou em 2025 a SP 800-61 Rev. 3, integrando resposta a incidentes ao gerenciamento de risco e às funções do CSF 2.0. A mensagem central é poderosa: resposta não começa quando o ataque é confirmado; preparação, governança, identificação, proteção e detecção fazem parte da capacidade de responder. NIST SP 800-61 Rev. 3

Para fins operacionais, podemos organizar a missão em:

  1. Preparação.

  2. Detecção e análise.

  3. Contenção.

  4. Erradicação.

  5. Recuperação.

  6. Lições aprendidas.

10.1 Preparação

Defina antes:

  • equipe;

  • contatos;

  • autoridade;

  • canais alternativos;

  • ferramentas;

  • acesso emergencial;

  • playbooks;

  • critérios de severidade;

  • obrigações legais;

  • fornecedores;

  • procedimentos de evidência;

  • ambientes de recuperação.

Se o diretório corporativo estiver indisponível, como a equipe encontrará os telefones? Se o e-mail estiver comprometido, por onde conversará? Se o cofre de senhas depender do ambiente atacado, quem abrirá a porta?

O Cone do Silêncio do Agente 86 é um ótimo exemplo de canal alternativo, exceto pelo pequeno detalhe de nunca funcionar.

10.2 Detecção e análise

Pergunte:

  • o que aconteceu?

  • quando começou?

  • quais ativos?

  • quais identidades?

  • qual escopo?

  • há persistência?

  • houve exfiltração?

  • o ataque continua?

  • qual impacto?

  • quais evidências sustentam a conclusão?

Não confunda ausência de evidência com evidência de ausência. Talvez o log não exista, esteja incompleto ou tenha sido apagado.

10.3 Contenção

Objetivo: limitar dano sem destruir capacidade de investigar ou operar.

Ações possíveis:

  • bloquear credencial;

  • revogar token;

  • isolar endpoint;

  • segmentar rede;

  • suspender integração;

  • limitar funcionalidade;

  • bloquear indicador;

  • preservar imagem e memória;

  • colocar regra temporária.

Desligar tudo pode conter o ataque e também apagar memória volátil, interromper negócio e alertar o adversário.

A contenção precisa considerar risco, evidência e missão.

10.4 Erradicação

Remova causa e presença:

  • malware;

  • conta criada;

  • persistência;

  • segredo exposto;

  • configuração insegura;

  • vulnerabilidade explorada;

  • acesso do fornecedor comprometido.

Trocar uma senha não resolve se o atacante possui token válido, outra conta ou chave de API.

10.5 Recuperação

Retorne de forma controlada:

  • restaure de fonte confiável;

  • aplique correções;

  • rotacione segredos;

  • valide integridade;

  • monitore intensamente;

  • reative em etapas;

  • confirme função de negócio;

  • comunique interessados.

10.6 Lições aprendidas

Pergunte sem caça às bruxas:

  • o que permitiu o incidente?

  • o que funcionou?

  • o que atrasou?

  • quais dados faltaram?

  • quais decisões foram confusas?

  • que controle precisa mudar?

  • como testar a melhoria?

Lição aprendida sem ação, responsável e prazo é apenas literatura pós-apocalíptica.


11. Classificação de severidade e playbooks

Nem todo incidente exige a mesma mobilização.

Uma matriz pode considerar:

  • criticidade do ativo;

  • sensibilidade do dado;

  • abrangência;

  • persistência;

  • impacto ao cliente;

  • indisponibilidade;

  • obrigação regulatória;

  • risco à vida ou segurança física;

  • exposição pública.

Playbook

Playbook é roteiro para tipo de ocorrência:

  • phishing;

  • conta comprometida;

  • ransomware;

  • vazamento;

  • DDoS;

  • segredo exposto;

  • fornecedor comprometido;

  • alteração privilegiada.

Ele deve informar:

  1. Gatilhos.

  2. Dados necessários.

  3. Passos iniciais.

  4. Decisões e autoridades.

  5. Contenção.

  6. Evidências.

  7. Comunicações.

  8. Critério de encerramento.

Playbook não substitui julgamento. Serve para que o julgamento comece vários degraus acima do pânico.


12. Forense digital — não pise nas pegadas da KAOS

Forense busca preservar, examinar e interpretar evidências digitais.

Princípios básicos

  • preservar o original;

  • documentar cada ação;

  • controlar acesso;

  • registrar horário e responsável;

  • calcular hashes quando apropriado;

  • trabalhar sobre cópias;

  • manter cadeia de custódia;

  • usar ferramentas e procedimentos defensáveis.

Ordem de volatilidade

Algumas evidências desaparecem rapidamente:

  • memória;

  • conexões;

  • processos;

  • sessões;

  • arquivos temporários;

  • disco;

  • backups e arquivos históricos.

Por isso, “desligue imediatamente” nem sempre é a primeira resposta correta.

Timeline

A investigação procura montar sequência:

03:12 — login remoto do fornecedor
03:14 — consulta a inventário
03:17 — falhas RACF em recurso crítico
03:19 — novo job submetido
03:23 — volume anormal em fila MQ
03:28 — transferência externa iniciada
03:31 — primeiro alerta qualificado

Uma timeline liga identidades, ativos e técnicas. Sem tempo sincronizado e correlação, ela vira um quebra-cabeça produzido por Kafka depois de três expressos.

Cadeia de custódia

Documenta quem coletou, quando, onde, como, quem recebeu e quais transformações ocorreram. É essencial quando a evidência pode sustentar processo disciplinar, regulatório ou judicial.


13. Ransomware — o incêndio pode ser cortina de fumaça

Ransomware moderno pode envolver:

  • acesso inicial;

  • roubo de credenciais;

  • movimento lateral;

  • desativação de defesa;

  • exfiltração;

  • destruição de backup;

  • criptografia;

  • extorsão.

O arquivo criptografado é o sintoma visível. O incidente começou antes.

Primeiras perguntas

  • Quais sistemas foram atingidos?

  • O ataque continua?

  • Há exfiltração?

  • Quais credenciais foram usadas?

  • Backups foram alcançados?

  • Há cópia offline?

  • Quais dados e clientes estão envolvidos?

  • Existe obrigação de notificação?

Backups

A CISA recomenda backups offline, criptografados e testados regularmente. Backup conectado permanentemente ao mesmo domínio e acessível pelas mesmas credenciais pode ser destruído junto com produção. CISA StopRansomware

Uma regra prática conhecida é 3-2-1-1-0:

  • 3 cópias dos dados;

  • 2 tipos de mídia ou plataformas;

  • 1 cópia fora do local;

  • 1 cópia offline ou imutável;

  • 0 erros após testes de verificação.

Não trate a fórmula como religião. Ajuste ao risco, à arquitetura e ao negócio.

Restaurar não encerra o incidente

Restaurar recupera disponibilidade. Ainda é necessário:

  • eliminar persistência;

  • corrigir entrada;

  • rotacionar credenciais;

  • validar integridade;

  • investigar vazamento;

  • monitorar retorno;

  • cumprir obrigações.


14. RTO, RPO e a fita “FINAL-FINAL”

RTO — Recovery Time Objective

Quanto tempo o serviço pode ficar indisponível.

RPO — Recovery Point Objective

Quanto dado pode ser perdido, expresso como ponto no tempo.

Exemplo:

  • RTO: duas horas;

  • RPO: quinze minutos.

Isso significa que a solução deve restaurar em até duas horas e perder no máximo quinze minutos de dados, conforme o cenário planejado.

Dependência e ordem de recuperação

Não adianta recuperar aplicação antes de identidade, rede, storage, banco ou mensageria.

Monte uma ordem:

  1. infraestrutura fundamental;

  2. identidade e segurança;

  3. dados e mensageria;

  4. serviços centrais;

  5. canais;

  6. integrações;

  7. relatórios e funções secundárias.

Backup não testado é esperança magnética

Teste:

  • leitura;

  • integridade;

  • tempo de restauração;

  • procedimentos;

  • permissões;

  • dependências;

  • capacidade da equipe;

  • recuperação em ambiente isolado.

Igor possuir vinte fitas não significa possuir vinte backups. Pode possuir dezenove cópias ilegíveis e uma gravação do almoço de confraternização de 1998.


15. Continuidade de negócio e recuperação de desastre

Continuidade de negócio

Como manter funções essenciais durante interrupção.

Disaster Recovery

Como restaurar tecnologia e dados após desastre.

São relacionados, mas não idênticos.

Uma empresa pode continuar aceitando operações com limites reduzidos enquanto o ambiente completo é recuperado. Essa operação degradada precisa ser desenhada, autorizada e testada.

Pergunte:

  • Qual é o serviço mínimo viável?

  • Que operações podem esperar?

  • Que controles não podem ser removidos?

  • Como evitar duplicidade no reprocessamento?

  • Como reconciliar dados depois?

  • Como comunicar clientes e reguladores?

Nunca resolva disponibilidade removendo segurança de forma permanente. “Modo emergência” precisa ter escopo, prazo, auditoria e retorno controlado.


16. O programador COBOL dentro da resposta

O desenvolvedor não é figurante. Ele conhece regras, arquivos, commits, códigos de retorno e comportamentos que as ferramentas não compreendem.

Durante um incidente, pode ajudar a responder:

  • esta sequência é possível?

  • que arquivos são atualizados?

  • existe reprocessamento?

  • a operação é idempotente?

  • o rollback cobre tudo?

  • quais mensagens indicam fraude?

  • que campos correlacionam transações?

  • qual job gera este resultado?

  • qual versão estava em produção?

Exemplo: tratamento de retorno

EVALUATE TRUE
    WHEN WS-DB2-SQLCODE = 0
         MOVE 'SUCESSO' TO WS-RESULTADO
    WHEN WS-DB2-SQLCODE = 100
         MOVE 'NAO-ENCONTRADO' TO WS-RESULTADO
    WHEN OTHER
         MOVE 'FALHA-TECNICA' TO WS-RESULTADO
         PERFORM REGISTRAR-EVENTO-SEGURANCA
         PERFORM EXECUTAR-ROLLBACK
END-EVALUATE

O objetivo não é registrar todo erro como ataque. É produzir sinal confiável e impedir estado inconsistente.

Idempotência

Se uma mensagem for processada novamente, o resultado deve ser controlado. Uma transferência não pode dobrar porque o consumidor caiu depois do débito e antes do acknowledgement.

Use:

  • identificador único;

  • controle de estado;

  • deduplicação;

  • transação adequada;

  • reconciliação.

Segurança no erro

Evite:

  • continuar com dados incompletos;

  • conceder acesso porque o autorizador não respondeu;

  • ocultar falha crítica;

  • expor SQL, dataset ou stack ao usuário;

  • gravar segredo no dump;

  • repetir operação destrutiva sem controle.


17. Exercício completo — Operação Telefone-Sapato

Cenário

Às 03h17, o SIEM detecta:

  • login válido de fornecedor;

  • origem incomum;

  • acesso a documentação interna;

  • falhas RACF em dataset crítico;

  • job submetido fora da janela;

  • aumento de volume numa fila MQ.

Passo 1 — Qualificar

Confirme fontes, horários, identidade, ativo e criticidade. Contate o fornecedor por canal confiável.

Passo 2 — Declarar incidente

Há combinação suficiente para investigação coordenada. Defina severidade, líder e canal seguro.

Passo 3 — Preservar

Guarde logs, eventos, comandos, metadados, configurações e evidências voláteis relevantes.

Passo 4 — Conter

  • revogue sessão;

  • suspenda a credencial;

  • limite conexão do fornecedor;

  • isole o ponto intermediário;

  • monitore contas relacionadas.

Passo 5 — Determinar escopo

Pesquise:

  • onde a credencial foi usada;

  • que recursos foram lidos;

  • que comandos foram executados;

  • se houve persistência;

  • se dados saíram;

  • se outras identidades foram obtidas.

Passo 6 — Erradicar

  • remova persistência;

  • corrija vulnerabilidade;

  • rotacione segredos;

  • revise acessos;

  • valide sistemas envolvidos.

Passo 7 — Recuperar

Reative conexões em etapas, com monitoramento reforçado e aprovação dos responsáveis.

Passo 8 — Aprender

Talvez a causa não tenha sido “fornecedor malicioso”, mas:

  • ausência de MFA resistente a phishing;

  • acesso excessivo;

  • segmentação inadequada;

  • falta de alerta sobre origem;

  • segredo em documentação;

  • resposta lenta fora do expediente.

A solução precisa atingir causas e não apenas trocar a senha.


18. Checklist da madrugada

Quando o alerta chegar, respire e confirme:

  1. Quem lidera?

  2. Qual canal será usado?

  3. O que sabemos como fato?

  4. O que é hipótese?

  5. Quais ativos e identidades estão envolvidos?

  6. O ataque continua?

  7. Que evidências precisam ser preservadas?

  8. Qual contenção reduz dano sem destruir a investigação?

  9. Quem pode autorizar indisponibilidade?

  10. Há impacto legal, regulatório ou ao cliente?

  11. Os backups são confiáveis e isolados?

  12. Qual a ordem de recuperação?

  13. Como validar integridade antes de voltar?

  14. Que monitoração permanecerá reforçada?

  15. Quem será responsável pelas melhorias?

Não execute comandos copiados às pressas sem compreender o efeito. Não publique detalhes em grupos amplos. Não negocie atribuição antes de confirmar fatos. Não confunda velocidade com correria.


Epílogo — O alarme que finalmente significava alguma coisa

Às 08h42, o Agente 86 voltou ao escritório do Chefe.

— Incidente contido. A credencial foi revogada, o acesso do fornecedor isolado, as evidências preservadas e os serviços críticos validados.

— Excelente, 86. E o backup?

— Igor restaurou a fita FINAL-FINAL-AGORA-VAI.

— Funcionou?

— Tecnicamente, sim.

— Tecnicamente?

— Recuperamos o sistema de folha de pagamento de 1997. Segundo os dados, eu ainda sou solteiro, o café custa cinquenta centavos e ninguém ouviu falar de ransomware.

— 86...

— Desculpe por isso, Chefe.

O Capítulo II termina com uma verdade que não cabe numa caixa de ferramenta: resiliência é uma capacidade organizacional.

Ela nasce quando inventário, vulnerabilidade, logging, detecção, resposta, forense, backup e recuperação funcionam juntos.

Prevenção reduz a probabilidade. Detecção reduz o tempo de permanência. Contenção reduz o alcance. Erradicação remove a causa. Recuperação devolve a missão. Aprendizado reduz a chance de repetição.

O melhor SOC não é o que possui a maior parede de monitores. É aquele que sabe quais sinais importam, possui autoridade para agir, preserva evidências, mantém o negócio informado e transforma cada incidente em melhoria verificável.

Para o programador COBOL iniciante, a lição é direta: seu código participa da defesa. Cada validação, return code, log, commit, rollback, identificador de correlação e regra de reprocessamento pode acelerar ou destruir uma investigação.

Quando o telefone-sapato tocar às 03h17, ninguém desejará uma mensagem dizendo apenas DEU ERRO.

Queremos saber o que ocorreu, com quem, onde, quando, em qual transação, com qual resultado — e como voltar para casa sem deixar a KAOS escondida dentro do próximo batch.


Referências para continuar a missão

☕ Um Café no Bellacosa Mainframe

Cibersegurança: dos fundamentos à recuperação

Uma jornada em dois capítulos para entender a linguagem da segurança, reconhecer riscos e organizar a operação antes, durante e depois de um incidente.

Vocabulário e Fundamentos da Cibersegurança

Tríade CIA, ativos, ameaças, vulnerabilidades, risco, malware, autenticação, criptografia, redes, aplicações web e codificação segura.

Ler o Capítulo I no artigo original →

Operação, Detecção, Resposta e Recuperação

Inventário, vulnerabilidades, eventos, alertas, incidentes, crise, monitoramento, contenção, evidências, continuidade e recuperação.

Ler o Capítulo II no artigo original →

Mapa da missão: o primeiro capítulo explica o que precisa ser protegido e por quê; o segundo mostra como observar, decidir, responder e restaurar a operação quando a prevenção não for suficiente.

Capítulo I — Vocabulário e Fundamentos da Cibersegurança

Abrir fora do quadro ↗

Capítulo II — Operação, Detecção, Resposta e Recuperação

Abrir fora do quadro ↗
Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...