☕ 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 Least Privilege. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Least Privilege. Mostrar todas as mensagens

terça-feira, 2 de agosto de 2022

Jack Bauer Entra no CPD — As 24 Horas em que o RACF Teve que Salvar o z/OS Antes que Alguém Digitasse PERMIT * ACCESS(ALTER)

 

Bellacosa Mainframe e a segurança no mainframe

☕ Um Café no Bellacosa Mainframe

Jack Bauer Entra no CPD — As 24 Horas em que o RACF Teve que Salvar o z/OS Antes que Alguém Digitasse PERMIT * ACCESS(ALTER)

Ou: como USERID, GROUP, DATASET, General Resources, JES2, Started Tasks, CICS, Db2, SMF, Sysplex, Least Privilege e um programador COBOL assustado acabaram presos no mesmo incidente de segurança — enquanto Jack Bauer perguntava a cada cinco minutos: “Quem autorizou esse acesso?”



Prólogo — São 03:17 da manhã. O telefone toca.

O CPD está silencioso.

Luzes fluorescentes.

Ar-condicionado trabalhando como se estivesse tentando congelar um mamute.

Na tela do operador aparecem jobs, mensagens JES2, sessões TSO e algumas linhas que ninguém gostaria de encontrar durante a madrugada.

Um programa COBOL da folha de pagamentos falhou.

O programador olha para o código:

OPEN INPUT ARQ-FUNCIONARIOS

Compilou.

Link-edit passou.

JCL parece correto.

Dataset existe.

Mesmo assim, alguma coisa impediu a execução.

Então aparece uma mensagem:

ICH408I

O programador empalidece.

Nesse instante a porta do CPD se abre.

Entra Jack Bauer.

Ele olha para o terminal.

Depois olha para o programador.

Depois olha novamente para o terminal.

— Quem é o usuário?

— Como?

— O USERID. Quem está executando esse job?

— Mas o problema está no COBOL.

Jack Bauer aproxima-se.

— Eu não perguntei onde você acha que está o problema. Perguntei quem está tentando acessar o recurso.

Bem-vindo ao mundo do RACF.

E talvez essa seja uma das primeiras grandes lições que um programador COBOL precisa aprender no mainframe:

Nem todo erro aparentemente técnico é um erro de programa. Muitas vezes o programa está fazendo exatamente aquilo que deveria fazer — e o sistema está corretamente impedindo que ele faça algo que sua identidade não está autorizada a fazer.

Nos próximos minutos — ou nas próximas 24 horas, já que Jack Bauer está conosco — vamos desmontar o RACF desde os fundamentos até segurança corporativa, passando por datasets, grupos, permissões, JES, Started Tasks, CICS, Db2, auditoria, Sysplex e até os futuros agentes de Inteligência Artificial.

Coloque o café na mesa.

O relógio já começou.



03:18 — Afinal, o que é RACF?

RACF significa:

Resource Access Control Facility.

É uma das principais tecnologias de controle de segurança utilizadas no IBM z/OS.

Uma explicação superficial seria:

RACF controla usuários e senhas.

É verdade.

Mas é tão incompleto quanto dizer:

Db2 é um programa que guarda tabelas.

Ou:

COBOL serve para fazer MOVE.

O RACF participa de algo muito maior.

Ele ajuda o sistema a responder perguntas fundamentais:

Quem é você?

O que você quer acessar?

Que recurso é esse?

Você está autorizado?

Qual nível de acesso possui?

Essa tentativa deve ser registrada?

Isso nos leva a um modelo mental extremamente útil:

IDENTIDADE
    │
    ▼
AUTENTICAÇÃO
    │
    ▼
RECURSO
    │
    ▼
AUTORIZAÇÃO
    │
    ▼
PERMITIDO / NEGADO
    │
    ▼
AUDITORIA

Veja como isso já ultrapassa completamente a ideia de uma “tabela de senhas”.

RACF é parte de uma arquitetura de controle.



03:32 — O mainframe é uma cidade

Imagine uma enorme cidade.

Nessa cidade existem bancos, hospitais, depósitos, centrais elétricas, arquivos públicos, delegacias, cofres, avenidas e áreas militares.

O z/OS é essa cidade.

Os datasets são edifícios.

CICS é um enorme centro comercial de transações.

Db2 é uma biblioteca gigantesca e extremamente organizada.

JES2 administra parte do tráfego de trabalhos.

Started Tasks são serviços públicos trabalhando continuamente.

TSO/ISPF oferece escritórios onde os profissionais trabalham.

RACF é simultaneamente:

porteiro,

controle de identidade,

catraca,

lista de autorização,

sistema de credenciais,

controle de acesso aos prédios,

registro de entrada e saída.

Por isso pensar no RACF apenas como “login do mainframe” é perigosamente simplista.

Jack Bauer provavelmente diria:

— Quem controla a porta controla metade do incidente.

O RACF acrescentaria:

— E quem controla o que acontece depois da porta controla a outra metade.


04:00 — O USERID não é apenas um nome

Quando alguém entra no TSO, existe uma identidade.

Por exemplo:

VBELLACO

Para um iniciante, pode parecer apenas o identificador usado na tela de logon.

Mas o perfil RACF de um usuário representa muito mais.

Ele pode estar associado a informações administrativas, grupos, atributos e relações de autoridade.

Conceitualmente:

USER = VBELLACO
OWNER = DEVGRP
DEFAULT GROUP = COBOLDEV

Imagine agora:

VBELLACO
   │
   ├── COBOLDEV
   ├── CICSTEST
   ├── DB2DEV
   └── TREINAMENTO

Observe algo importante.

O administrador não precisa necessariamente autorizar:

JOAO
MARIA
CARLOS
ANA
PEDRO

um por um.

Pode organizar usuários em grupos relacionados a funções.

Isso torna administração de segurança muito mais escalável.

Hoje usamos frequentemente expressões como:

RBAC — Role-Based Access Control.

A filosofia é parecida: conceder acesso com base em papéis e responsabilidades, em vez de sair distribuindo permissões individualmente sem estrutura.

O RACF faz isso dentro de seu próprio modelo, desenvolvido muito antes de “IAM” virar palavra obrigatória em apresentação de PowerPoint.

Curiosidade histórica: várias ideias vendidas hoje como revoluções de segurança em cloud possuem parentes conceituais antigos no mainframe.

O nome mudou.

O problema não.


04:37 — GROUP: ninguém trabalha sozinho

Imagine um banco com 1.500 desenvolvedores.

Se cada pessoa recebesse permissões manualmente para todos os datasets, transações e recursos necessários, teríamos rapidamente um pesadelo administrativo.

Então entram os grupos.

Por exemplo:

BANKDEV
   │
   ├── COBOLDEV
   ├── DB2DEV
   ├── CICSDEV
   └── JAVADEV

Podemos criar uma estrutura lógica de administração.

Mas existe uma palavra que confunde muitos iniciantes:

OWNER

No RACF, ownership não deve ser interpretado automaticamente como o “dono físico do arquivo” no sentido simples encontrado em outros sistemas operacionais.

Ownership possui implicações administrativas.

Quem possui autoridade sobre determinado perfil?

Quem pode administrar determinados elementos?

Essa é uma diferença pequena na palavra e enorme no conceito.

Jack Bauer provavelmente interromperia:

— Então OWNER significa quem pode administrar?

Exatamente.

E isso é importante porque segurança não é apenas acesso ao dado.

É também acesso à capacidade de alterar as regras de acesso ao dado.

Às vezes essa capacidade é ainda mais perigosa.


05:12 — O banco de dados RACF

RACF mantém informações em seu próprio database.

Ali encontramos diferentes tipos de perfis.

Uma simplificação didática seria:

RACF DATABASE
│
├── USER PROFILES
├── GROUP PROFILES
├── DATASET PROFILES
└── GENERAL RESOURCE PROFILES

O ponto central está na palavra:

PROFILE.

Perfil descreve a política aplicada a uma identidade ou recurso.

Pense assim:

O dataset existe no sistema.

Mas a segurança precisa saber:

Como esse recurso deverá ser protegido?

O perfil fornece parte dessa resposta.

Portanto, quando alguém fala:

“Esse dataset está protegido pelo RACF.”

Uma interpretação mais técnica seria:

Existem mecanismos e perfis que permitem ao RACF participar da decisão sobre quem pode acessar aquele recurso e com qual autoridade.


05:48 — O programador COBOL encontra o primeiro checkpoint

Temos este programa:

SELECT CLIENTES
    ASSIGN TO CLIENTES.

Depois:

OPEN INPUT CLIENTES.

No JCL:

//CLIENTES DD DSN=BANCO.PROD.CLIENTES,
//            DISP=SHR

O desenvolvedor imagina este caminho:

COBOL
  ↓
JCL
  ↓
DATASET

Mas existe algo entre eles:

COBOL
  ↓
JCL
  ↓
IDENTIDADE DO JOB
  ↓
REQUISIÇÃO DE ACESSO
  ↓
RACF
  ↓
DATASET PROFILE
  ↓
AUTORIZAÇÃO
  ↓
DATASET

Agora tudo muda.

O código está correto.

O arquivo existe.

Mesmo assim:

ACCESS DENIED

Por quê?

Porque código funcional não implica autorização.

Essa distinção é fundamental em ambientes corporativos.


06:21 — Dataset Security e os níveis de acesso

Para datasets, você frequentemente encontrará níveis como:

NONE
READ
UPDATE
CONTROL
ALTER

Didaticamente, podemos imaginar uma progressão de autoridade.

NONE significa que acesso não é concedido.

READ permite leitura.

UPDATE acrescenta capacidade de modificar dados.

CONTROL oferece capacidades adicionais relacionadas ao controle do dataset.

ALTER representa um nível muito elevado de autoridade.

Agora surge um pecado clássico.

O programa não consegue escrever no dataset.

Alguém diz:

— Coloca ALTER.

Jack Bauer imediatamente vira a cadeira.

— Por quê?

— Porque assim funciona.

Esse é o tipo de resposta que transforma uma pequena falha de autorização num enorme problema de segurança.

O raciocínio correto seria descobrir exatamente qual acesso é necessário.

Se o programa apenas lê:

READ

Se precisa atualizar:

UPDATE

Por que dar autoridade muito superior?

Aí aparece um dos conceitos mais importantes de segurança:

Least Privilege

O menor privilégio necessário para realizar a tarefa.

Nunca conceda um lançador de mísseis para alguém que precisa apenas abrir uma garrafa.


07:03 — A ACL entra na sala

Outro conceito importante é a lista de acesso.

Conceitualmente podemos imaginar:

RESOURCE: BANCO.PROD.CLIENTES

COBOLDEV     READ
OPERACAO     UPDATE
AUDITORIA    READ
OUTROS       NONE

Isso nos permite separar responsabilidades.

O desenvolvedor pode consultar.

O batch operacional pode atualizar.

Auditoria pode ler.

Outros usuários não acessam.

Essa estrutura é muito mais segura do que:

TODOS = ALTER

Pode parecer óbvio.

Mas muitos incidentes de segurança começam justamente com permissões temporárias concedidas com generosidade e nunca removidas.

Nada é tão permanente em TI quanto uma autorização “só até resolvermos esse chamado”.


07:49 — General Resources: RACF não vive só de dataset

Aqui começa uma das partes mais interessantes.

RACF pode proteger muito mais do que arquivos.

Para isso existem classes de recursos.

Conceitualmente:

CLASS
   │
   ▼
RESOURCE
   │
   ▼
PROFILE
   │
   ▼
ACCESS

Existem classes relacionadas a diversos componentes e funcionalidades do ambiente.

Um exemplo conhecido é:

FACILITY

Mas há diversas outras.

Essa arquitetura permite que componentes do z/OS e subsistemas apresentem recursos à infraestrutura de segurança.

Então RACF deixa de ser:

sistema que protege arquivos

e vira:

sistema que participa do controle de acesso a capacidades do ambiente.

É uma diferença gigantesca.


08:26 — Os comandos RACF parecem assustadores, até você enxergar a gramática

O iniciante encontra:

ADDUSER
ALTUSER
DELUSER
LISTUSER

RDEFINE
RALTER
RDELETE

PERMIT

E pensa:

“Meu Deus. Mais uma linguagem.”

Calma.

Existe padrão.

Observe:

ADD + USER
ALT + USER
DEL + USER
LIST + USER

Quase uma pequena gramática.

O mesmo acontece com operações sobre recursos.

Um exemplo didático de autorização poderia parecer:

PERMIT BANCO.PROD.CLIENTES -
       ID(COBOLDEV) -
       ACCESS(READ)

Traduzindo aproximadamente:

O grupo COBOLDEV recebe determinado nível de acesso ao recurso.

Mas aqui vem a recomendação Bellacosa:

Não transforme artigo da internet em change de produção.

Entenda primeiro.

Teste em ambiente apropriado.

Confira políticas internas.

Converse com segurança.

Documente.

Porque RACF não é laboratório onde você descobre o comando correto apertando Enter até funcionar.


09:10 — JES2: você protegeu o arquivo, mas esqueceu o spool

Agora entramos no mundo do JES.

Considere o seguinte job:

//PAYROLL JOB ...

Ele processa folha salarial.

O dataset de salários está extremamente protegido.

Perfeito.

O programa roda e gera relatório.

Então um usuário abre o spool e vê:

FUNCIONARIO             SALARIO

JOAO SILVA              18500
MARIA SANTOS            23700
CARLOS SOUZA            31900

Parabéns.

Você instalou uma porta blindada no cofre e deixou o relatório sobre a mesa da recepção.

Segurança precisa observar o ciclo inteiro da informação.

Quem pode submeter?

Quem pode consultar saída?

Quem pode interferir em determinados jobs?

Quem pode executar determinadas operações?

Proteção de JES é parte importante da segurança operacional.


09:51 — Started Tasks: máquinas também precisam de identidade

Esse assunto parece surpreendentemente moderno.

Hoje cloud fala constantemente sobre:

Service Accounts
Machine Identity
Workload Identity

Mas mainframe já trabalha há muito tempo com serviços executando sob identidades controladas.

Started Tasks podem executar componentes essenciais.

E surge a mesma pergunta:

Qual identidade está sendo utilizada?

Mais importante:

Qual autoridade essa identidade possui?

Uma Started Task não deveria receber poder ilimitado simplesmente porque “é de infraestrutura”.

Least Privilege continua valendo.

Máquina também pode ter autoridade excessiva.


10:34 — FACILITY, OPERCMDS, SURROGAT, SERVAUTH...

Agora Jack Bauer começa a prestar atenção.

Porque chegamos ao território onde RACF passa a proteger funcionalidades realmente críticas.

Considere classes e conceitos como:

FACILITY
OPERCMDS
SURROGAT
SERVAUTH

OPERCMDS pode participar da proteção de comandos operacionais.

Imagine a diferença entre:

ver status

e:

interferir operacionalmente no sistema

Não deveriam exigir o mesmo nível de autoridade.

SURROGAT entra em cenários relacionados à possibilidade de executar determinadas ações em nome de outra identidade.

Isso merece enorme cuidado.

A capacidade de agir como outro usuário pode se tornar extremamente poderosa.

SERVAUTH aparece em controles associados a serviços de rede.

FACILITY é utilizada amplamente para proteção de diferentes funcionalidades.

E APF entra no território de confiança do sistema operacional.

Aqui a brincadeira acaba.

Agora não estamos mais discutindo:

João pode abrir o arquivo?

Estamos discutindo:

Que autoridade existe sobre funções críticas do próprio z/OS?


11:18 — RACF encontra CICS

Imagine uma transação:

PAGA

Ela realiza pagamento.

O usuário entra no CICS.

Isso significa que pode executar qualquer transação?

Não.

É exatamente aí que segurança em camadas aparece.

Podemos pensar:

USUÁRIO
   ↓
AUTENTICAÇÃO
   ↓
CICS
   ↓
TRANSAÇÃO
   ↓
PROGRAMA COBOL
   ↓
DB2 / VSAM / MQ / IMS

Existem decisões de segurança em diferentes pontos.

Talvez o usuário possa entrar no CICS.

Mas não executar PAGA.

Talvez possa executar determinada transação.

Mas a identidade usada no processamento não tenha acesso a um recurso necessário.

Essa visão é muito importante para desenvolvedores COBOL.

Seu programa não vive sozinho.

Ele está dentro de um ecossistema de autorização.


12:06 — RACF, Db2, IMS e MQ

Quando entramos em aplicações corporativas, as relações ficam ainda mais interessantes.

Uma transação pode:

ler VSAM,

consultar Db2,

publicar mensagem no MQ,

chamar outra aplicação,

executar processamento IMS.

A segurança precisa acompanhar essa jornada.

Imagine:

USUARIO
   ↓
CICS
   ↓
COBOL
   ↓
DB2
   ↓
MQ
   ↓
OUTRO SISTEMA

Pergunte em cada fronteira:

Quem é a identidade?

Qual recurso está sendo solicitado?

Que autoridade é necessária?

O acesso pode ser auditado?

É exatamente por isso que segurança não é produto isolado.

É arquitetura.


13:02 — TSO/ISPF não é um passe VIP

Um programador entra no ISPF.

E tenta:

EDIT 'BANK.PROD.PAYROLL'

O fato de estar dentro do ISPF não significa que possui autoridade sobre aquele dataset.

Essa ideia parece trivial para veteranos.

Mas é extremamente importante para iniciantes.

Autenticação responde:

Quem é você?

Autorização responde:

O que você pode fazer?

São perguntas diferentes.

Você pode entrar no prédio.

Isso não significa possuir a chave do cofre.


14:11 — Auditoria: Jack Bauer encontrou o horário do incidente

Agora aparece uma pergunta assustadora:

— Quem tentou alterar aquele dataset às 03:17?

Sem logs:

Não sabemos.

Essa frase é um desastre em auditoria.

Por isso mecanismos de registro, incluindo SMF e registros relacionados ao RACF, são tão importantes.

Uma investigação pode precisar responder:

Qual USERID?
Qual recurso?
Que tipo de acesso?
Quando?
Foi permitido?
Foi negado?
Em qual sistema?

Veja como segurança muda de natureza.

Não basta impedir.

Precisamos também conseguir reconstruir os acontecimentos.

Isso é essencial para:

investigação de incidentes,

compliance,

auditoria,

forense,

governança,

prestação de contas.

Uma empresa que não consegue saber quem fez o quê possui uma segurança incompleta.


15:07 — SETROPTS: a sala onde ninguém aperta botão sem ler o manual

Quando o aluno chega à administração avançada, encontra:

SETROPTS
RACLIST
GENERIC
GLOBAL

Esse é o momento em que Jack Bauer pega a mão do iniciante antes que ele pressione Enter.

SETROPTS pode controlar características globais importantes do RACF.

Portanto, merece respeito.

Não é porque um comando possui apenas algumas letras que seu impacto é pequeno.

Na verdade, sistemas corporativos possuem uma regra curiosa:

Quanto menor o comando, maior a chance de ele destruir sua tarde.

RACLIST aparece relacionado ao uso de determinados perfis mantidos de maneira eficiente para verificação.

Perfis genéricos permitem controlar grupos de recursos por padrões.

Por exemplo, conceitualmente:

BANK.PROD.**

poderia representar um namespace muito maior do que um único dataset.

Isso é fantástico para administração.

Também pode ser perigosíssimo quando feito incorretamente.

Um wildcard mal colocado em segurança consegue multiplicar um erro humano com eficiência industrial.


16:03 — Sysplex: segurança também precisa sobreviver

O iniciante frequentemente pensa no mainframe como um único computador gigante.

Mas ambientes corporativos podem envolver múltiplas imagens z/OS e arquiteturas de alta disponibilidade.

Então aparece outra pergunta:

Como manter políticas de segurança consistentes quando existem diversos sistemas cooperando?

Imagine:

Z/OS A
   │
Z/OS B
   │
Z/OS C
   │
PARALLEL SYSPLEX

Segurança não pode virar ponto único de fragilidade.

Alta disponibilidade também envolve identidade, política e consistência operacional.

Porque de nada adianta construir um sistema disponível 99,999% do tempo se o mecanismo que permite acesso autorizado não acompanha esse nível de resiliência.


17:02 — Hardening: quando “funciona” deixa de ser suficiente

Chegamos ao estágio avançado.

O sistema funciona.

Mas está seguro?

Essa pergunta muda completamente a forma de administrar.

Hardening significa reduzir superfície de ataque, rever privilégios, remover permissões desnecessárias, aplicar políticas adequadas e eliminar configurações perigosas.

Aqui aparecem conceitos modernos que combinam maravilhosamente com RACF:

Least Privilege
Segregation of Duties
Identity Governance
Zero Trust
Privileged Access
Continuous Auditing

Segregação de funções é particularmente importante.

Quem desenvolve não necessariamente deveria autorizar produção.

Quem administra não necessariamente deveria auditar a si próprio.

Quem solicita uma permissão talvez não deva ser a mesma pessoa que a aprova.

Não se trata de desconfiar de todo mundo.

Trata-se de criar sistemas onde um erro ou abuso individual não consiga causar consequências ilimitadas.


18:13 — Zero Trust chega ao mainframe e percebe que o RACF já estava tomando café

Zero Trust costuma ser resumido como:

Never trust, always verify.

É claro que implementações modernas de Zero Trust envolvem muito mais do que RACF.

Mas existe uma afinidade conceitual interessante.

A identidade não deveria receber acesso simplesmente porque “já entrou na rede”.

O recurso ainda precisa ser protegido.

A autorização continua sendo necessária.

A ação pode precisar ser registrada.

Isso soa familiar?

IDENTIDADE
   ↓
RECURSO
   ↓
POLÍTICA
   ↓
DECISÃO

O mainframe não inventou Zero Trust.

Mas várias das perguntas que Zero Trust faz já são velhas conhecidas de ambientes mainframe bem administrados.


19:09 — O futuro: Agentic AI recebe um USERID

Agora chegamos ao easter egg tecnológico.

Imagine um agente de IA trabalhando no z/OS.

Ele consegue:

consultar SDSF
ler logs
pesquisar datasets
diagnosticar abends
submeter JCL
executar REXX
consultar Db2
acionar APIs
abrir incidentes

Magnífico.

Até alguém perguntar:

Sob qual identidade?

Essa provavelmente será uma das grandes questões da segurança de agentes.

Um agente é software.

Mas software capaz de tomar decisões e executar ferramentas começa a se comportar operacionalmente como uma identidade extremamente ativa.

Então precisamos pensar:

AI AGENT
    ↓
IDENTITY
    ↓
CREDENTIAL
    ↓
AUTHORIZATION
    ↓
RESOURCE
    ↓
AUDIT

E aqui o RACF volta ao centro da conversa.

Imagine conceder a um agente:

SPECIAL

e dizer:

— Resolva qualquer problema de produção.

Jack Bauer joga o café fora.

— Quem aprovou isso?

Exatamente.

Autonomia sem controle não é inteligência operacional.

É apenas risco executando em alta velocidade.


20:01 — O easter egg de HAL 9000

HAL entra no mainframe.

USERID: HAL9000

O operador pergunta:

— HAL, por que você tentou cancelar todos os jobs?

HAL responde:

— Desculpe, Dave. Considerei necessário para melhorar o SLA.

O RACF consulta a autorização.

ACCESS DENIED

Dave respira aliviado.

Moral:

Até inteligência artificial assassina de ficção científica precisa de PERMIT.


20:44 — O T-Rex tenta entrar no CPD

Outro easter egg.

O T-Rex do treinamento aparece na catraca.

O segurança pergunta:

— USERID?

Ele ruge.

— Grupo?

Outro rugido.

— Qual recurso deseja acessar?

Mais um rugido.

Resultado:

ICH408I

O T-Rex fica furioso.

Mas continua sem acesso.

Porque no mainframe tamanho físico não concede autoridade lógica.

Essa talvez seja a explicação mais simples possível do princípio de autorização.


21:30 — O mapa mental que você deve guardar

Depois de tantas siglas, comandos e subsistemas, o iniciante pode ficar perdido.

Então esqueça tudo por alguns segundos.

Guarde isto:

                QUEM?
                 │
                 ▼
             IDENTIDADE
                 │
                 ▼
              GRUPOS
                 │
                 ▼
           QUAL RECURSO?
                 │
                 ▼
              PROFILE
                 │
                 ▼
          QUAL AUTORIDADE?
                 │
                 ▼
          ┌──────┴──────┐
          │             │
       PERMITE         NEGA
          │             │
          └──────┬──────┘
                 ▼
              AUDITA

Quando surgir uma mensagem de segurança, raciocine nessa ordem.

Quem está tentando?

Qual é o recurso?

Qual perfil protege o recurso?

Qual nível de acesso foi solicitado?

Qual autoridade o usuário ou seus grupos possuem?

Existe alguma regra adicional?

Qual mensagem foi produzida?

O evento foi registrado?

Esse raciocínio vale muito mais do que decorar vinte comandos.


22:16 — Passo a passo para o programador COBOL investigar um problema

Suponha que seu programa falhou acessando:

BANK.PROD.CLIENTES

Não comece alterando o COBOL.

Primeiro identifique a mensagem.

Procure códigos RACF e mensagens do sistema.

Depois confirme a identidade utilizada pela execução.

Então descubra qual dataset ou recurso estava sendo acessado.

Determine a operação.

Era leitura?

Escrita?

Criação?

Alteração?

Exclusão?

Em seguida, compare isso com a autoridade necessária.

Se houver uma equipe de segurança, entregue uma análise objetiva:

USERID:
JOB:
RESOURCE:
OPERAÇÃO:
MENSAGEM:
HORÁRIO:
AMBIENTE:

Isso é infinitamente melhor do que abrir um chamado dizendo:

“RACF não funciona.”

O profissional de segurança agradecerá.

Talvez até responda antes do próximo turno.


23:04 — Curiosidades que todo COBOL deveria conhecer

RACF é antigo, mas resolve problemas extraordinariamente modernos.

Identidade de máquina não nasceu com Kubernetes.

Controle baseado em função não nasceu com SaaS.

Auditoria não nasceu com SIEM.

Menor privilégio não nasceu com cloud.

A tecnologia muda.

As perguntas permanecem.

Quem?

O quê?

Quando?

Onde?

Com qual autoridade?

Quem autorizou?

Quem registrou?

Jack Bauer estaria perfeitamente confortável trabalhando com RACF.

Afinal, metade de 24 Horas poderia ser resumida em:

“Quem deu acesso a essa pessoa?”


23:38 — A grande diferença entre segurança amadora e profissional

Segurança amadora pensa:

“Como faço isso funcionar?”

Segurança profissional pergunta:

“Como faço isso funcionar concedendo apenas o poder necessário?”

Parece uma diferença pequena.

É gigantesca.

Quando alguém pede:

ALTER

porque READ não resolveu, o profissional pergunta:

Qual ação exatamente está sendo executada?

Quando alguém pede acesso para todos:

Quem realmente precisa?

Quando alguém solicita uma conta compartilhada:

Como faremos accountability?

Quando alguém pede uma autorização permanente para resolver um incidente temporário:

Quando essa permissão será removida?

Essas perguntas são RACF tanto quanto qualquer comando.


23:52 — Último checkpoint: segurança é também continuidade

O infográfico termina falando sobre segurança de pessoas, dados, conformidade, operação contínua e disponibilidade.

Isso é extremamente importante.

Segurança não serve apenas para impedir ataques.

Também serve para permitir que o negócio continue funcionando de maneira confiável.

Bloquear tudo seria fácil.

ACCESS(NONE)

Pronto.

Sistema extremamente seguro.

E absolutamente inútil.

A arte da segurança está em permitir o acesso correto, para a pessoa correta, ao recurso correto, pelo tempo correto e com rastreabilidade adequada.

Isso é muito mais sofisticado.


23:59 — Jack Bauer olha para o relógio

O incidente começou às 03:17.

O programa COBOL estava correto.

O JCL também.

O problema era que uma identidade de execução havia perdido a autorização necessária após uma mudança de política.

A equipe encontrou o perfil correto.

Verificou os grupos.

Analisou o acesso.

Aplicou a correção com a autoridade mínima necessária.

O job voltou a funcionar.

O auditor recebeu os registros.

Produção permaneceu íntegra.

Jack Bauer olha para o programador.

— O que você aprendeu?

Ele responde:

— Que RACF não é só senha.

Jack continua olhando.

— E?

— Que USERID não é só login.

Jack permanece em silêncio.

— Que um dataset pode estar correto, o programa pode estar correto e mesmo assim o acesso pode ser recusado.

Jack finalmente concorda.

— E o mais importante?

O programador olha para a tela.

READ
UPDATE
CONTROL
ALTER

E responde:

— Nunca dar ALTER só porque alguma coisa não funcionou.

Jack sorri.

Missão cumprida.


Epílogo — O velho guardião do mainframe

Talvez RACF pareça intimidante no começo.

Há comandos estranhos.

Classes.

Perfis.

Grupos.

Datasets.

General Resources.

JES.

Started Tasks.

FACILITY.

OPERCMDS.

SURROGAT.

SERVAUTH.

SMF.

Sysplex.

SETROPTS.

RACLIST.

Mas por baixo de toda essa arquitetura existe uma ideia bastante humana.

Imagine um guarda na porta de um arquivo importantíssimo.

Você chega.

Ele pergunta:

Quem é você?

Depois:

O que deseja?

Depois:

Você está autorizado?

E finalmente registra:

Você esteve aqui.

É isso.

O resto é engenharia para fazer essa ideia funcionar em escala gigantesca, com milhares de usuários, milhões de recursos, aplicações críticas, múltiplos sistemas e exigências de auditoria que fariam um contador perder o sono.

Para o programador COBOL iniciante, estudar RACF significa começar a enxergar o mainframe além do programa.

Você deixa de ver:

COBOL → DATASET

e passa a enxergar:

PESSOA
   ↓
IDENTIDADE
   ↓
GRUPO
   ↓
APLICAÇÃO
   ↓
RECURSO
   ↓
POLÍTICA
   ↓
AUTORIZAÇÃO
   ↓
EXECUÇÃO
   ↓
AUDITORIA

Essa mudança é enorme.

É o momento em que você começa a deixar de ser apenas alguém que escreve COBOL e passa a compreender como aplicações corporativas realmente vivem dentro do z/OS.

E quando, algum dia, às 03:17 da madrugada aparecer no spool:

ICH408I

não entre em pânico.

Pegue o café.

Leia a mensagem.

Descubra a identidade.

Identifique o recurso.

Entenda a autorização.

E lembre-se de Jack Bauer caminhando pelo corredor do CPD:

“Não me diga apenas que falhou. Diga quem tentou acessar o quê, com qual autoridade e por quê.”

Porque no IBM Z, código pode processar bilhões de transações.

Db2 pode guardar décadas de dados.

CICS pode atender milhares de requisições por segundo.

JES pode movimentar montanhas de jobs.

Mas alguém ainda precisa decidir:

quem pode tocar em tudo isso.

E há décadas, um dos guardiões sentado nessa portaria atende pelo nome de:

RACF.

quarta-feira, 12 de fevereiro de 2020

👑 KAZUYA SOUMA ASSUME O RACF — QUANDO O PROGRAMADOR COBOL DESCOBRIU QUE GOVERNAR PRIVILÉGIOS ERA MAIS DIFÍCIL QUE CONCEDÊ-LOS

 
Bellacosa Mainframe e o perigo dos privilégios


☕ UM CAFÉ NO BELLACOSA MAINFRAME

👑 KAZUYA SOUMA ASSUME O RACF — QUANDO O PROGRAMADOR COBOL DESCOBRIU QUE GOVERNAR PRIVILÉGIOS ERA MAIS DIFÍCIL QUE CONCEDÊ-LOS

RACF, COBOL, privilege paths, grafos, grupos, JCL, SURROGAT, started tasks, CICS, Db2, MQ, least privilege, confused deputy, blast radius, graph analytics, segurança — e o dia em que Kazuya Souma descobriu que o problema não era saber quem tinha a chave do castelo, mas descobrir todas as estradas que chegavam ao tesouro.



🎬 PRÓLOGO — SUA MAJESTADE, O USUÁRIO NÃO TEM ACESSO

A reunião começara havia poucos minutos.

Na enorme tela verde estava escrito:

USER: BELL01
RESOURCE: PROD.PAYROLL.MASTER
ACCESS: NONE

O administrador RACF cruzou os braços.

— Resolvido.

Kazuya Souma permaneceu olhando para a tela.

— O que está resolvido?

— O usuário não possui acesso ao arquivo.

— Eu consigo ver isso.

Souma apontou para ACCESS: NONE.

— Minha pergunta é outra.

A sala ficou silenciosa.

— Ele consegue chegar ao arquivo?

O administrador RACF olhou novamente para a tela.

— Acabei de dizer. Não possui acesso.

Souma suspirou.

Chamou o programador COBOL.

Chamou o administrador CICS.

Chamou o DBA Db2.

Chamou a equipe MQ.

Chamou o responsável pelo batch.

Chamou o pessoal de segurança.

Depois desenhou no quadro:

BELL01
   |
   v
APPDEV
   |
   v
JCL
   |
   v
SURROGAT
   |
   v
STARTED TASK
   |
   v
CICS
   |
   v
COBOL
   |
   +------> DB2
   |
   +------> MQ

— Agora — perguntou Souma — alguém consegue me garantir que não existe nenhum caminho daqui até o dado?

Ninguém respondeu.

Souma sorriu.

— Excelente.

O programador COBOL iniciante quase caiu da cadeira.

Excelente?

Foi naquele momento que ele descobriu a primeira regra do novo rei do CPD:

Não confunda ausência de permissão direta com ausência de capacidade.

E nossa história começa exatamente aí.



🏰 CAPÍTULO 1 — PRIMEIRO: O QUE DIABOS É RACF?

Antes de falar sobre grafos, privilege paths, CICS ou Db2, precisamos construir nosso reino.

No IBM z/OS, o RACF — Resource Access Control Facility participa do controle de acesso a recursos.

Simplificando bastante para quem está começando, podemos imaginar três perguntas fundamentais:

QUEM É VOCÊ?

Depois:

VOCÊ CONSEGUE PROVAR QUE É VOCÊ?

E finalmente:

VOCÊ PODE FAZER ISSO?

Imagine um userid:

BELL01

e um dataset:

PROD.CLIENTES.MASTER

Dependendo das regras configuradas, a identidade pode possuir níveis de acesso apropriados ao recurso.

Conceitualmente:

BELL01 ---- READ ----> PROD.CLIENTES.MASTER

Ou talvez:

BELL01 ----- X ------> PROD.CLIENTES.MASTER

Nada de acesso.

Para quem acabou de chegar ao mainframe, isso parece suficiente.

Usuário de um lado.

Recurso do outro.

Permissão no meio.

Souma escreveu:

USER ---- ACCESS ----> RESOURCE

— Esse — explicou — é o mapa mais simples do reino.

O COBOLzeiro perguntou:

— E está errado?

— Não.

Souma completou:

— Está incompleto.



🗺️ CAPÍTULO 2 — O MAPA NÃO É O TERRITÓRIO

Imagine uma cidade medieval.

O tesouro real está dentro do castelo.

Você não possui a chave da porta principal.

Portanto:

VOCÊ ---- X ----> TESOURO

Seguro?

Talvez.

Mas existe uma cozinha?

Existe entrada de funcionários?

Existe túnel?

Existe esgoto?

Existe alguém autorizado que recebe ordens suas?

Existe uma carroça que entra diariamente?

Existe uma porta interna ligando outro prédio ao castelo?

A segurança muda quando percebemos que chegar a alguma coisa não exige necessariamente acesso direto a ela.

No mainframe ocorre algo conceitualmente semelhante.

Um usuário talvez não tenha:

READ PROD.PAYROLL.MASTER

mas possa executar uma transação CICS.

A transação executa um programa COBOL.

O programa acessa Db2.

Ou coloca uma mensagem em MQ.

Outro programa consome a mensagem.

Esse consumidor executa sob uma identidade técnica.

E essa identidade possui acesso aos dados.

Nosso desenho deixa de ser:

USER → DATA

e passa a ser:

USER
 ↓
TRANSACTION
 ↓
PROGRAM
 ↓
SERVICE
 ↓
DATABASE
 ↓
DATA

Nenhuma dessas relações é automaticamente uma vulnerabilidade.

Muito pelo contrário.

É assim que sistemas corporativos são construídos.

O desafio está em descobrir se a composição dessas relações produz capacidades que não deveriam existir.



🕸️ CAPÍTULO 3 — SOUMA DESCOBRE A TEORIA DOS GRAFOS

Souma apagou o quadro.

Desenhou vários círculos:

(USER)

(GROUP)

(JCL)

(STC)

(CICS)

(PROGRAM)

(DB2)

(MQ)

— Cada círculo será um nó.

Depois começou a ligá-los.

USER ──member_of──> GROUP
USER ──execute──> TRANSACTION
TRANSACTION ──invokes──> PROGRAM
PROGRAM ──uses──> DB2
PROGRAM ──puts──> MQ QUEUE

Isso é a base de um grafo.

Temos:

nós, representando entidades;

e:

arestas, representando relacionamentos.

Nosso ambiente pode ser transformado conceitualmente em:

USER:BELL01
     |
     | MEMBER_OF
     v
GROUP:APPDEV
     |
     | EXECUTE
     v
CICS:PAYR
     |
     | INVOKES
     v
PROGRAM:PAY001
     |
     | USES
     v
DB2:PAYROLL

Agora temos algo novo.

Um caminho.

Em nosso contexto, um privilege path.

A pergunta deixa de ser somente:

BELL01 tem acesso a PAYROLL?

e passa a incluir:

Existe um caminho entre BELL01 e PAYROLL?

Parece uma diferença pequena.

Não é.

É uma mudança brutal na forma de pensar segurança.



👥 CAPÍTULO 4 — O PODER DOS GRUPOS

Souma chamou seu Ministro dos Grupos.

— Quantos usuários existem?

— Milhares.

— E vocês concedem autorização individualmente para todos?

O homem empalideceu.

Felizmente, não.

Grupos existem justamente porque administrar milhares de usuários individualmente seria uma insanidade.

Podemos ter:

APPDEV
OPERATIONS
DBA
SUPPORT
PAYROLL

e relacionar usuários a eles.

Por exemplo:

BELL01
   ↓
APPDEV

Se APPDEV possuir determinadas capacidades, Bell pode obtê-las através da associação.

Isso introduz o primeiro conceito importante:

Uma capacidade nem sempre aparece diretamente ligada ao usuário.

Ela pode ser transitiva.

Imagine:

BELL01
   ↓
APPDEV
   ↓
RESOURCE

Mas a história pode atravessar subsistemas.

No universo Db2, grupos RACF podem participar da construção dos chamados secondary authorization IDs, dependendo da configuração.

Portanto, conceitualmente:

RACF USER
   ↓
RACF GROUP
   ↓
DB2 SECONDARY AUTHID
   ↓
DB2 PRIVILEGE

Agora perceba a armadilha mental.

Você pergunta:

Existe GRANT diretamente para BELL01?

Não.

E conclui:

BELL01 não possui capacidade.

Conclusão potencialmente precipitada.

Souma escreveu:

DIRECT != TRANSITIVE

Primeiro easter egg do reino.

Quem conhece banco de dados já começou a desconfiar que esse rei pensa em WITH RECURSIVE.


📜 CAPÍTULO 5 — JCL: O PERGAMINHO QUE MANDA O EXÉRCITO TRABALHAR

Para o iniciante COBOL, JCL pode parecer uma linguagem criada por um mago particularmente mal-humorado:

//PAYJOB   JOB ...
//STEP01   EXEC PGM=PAY001
//INPUT    DD DSN=PROD.PAY.INPUT,DISP=SHR
//OUTPUT   DD DSN=PROD.PAY.OUTPUT,DISP=OLD

Mas existe uma separação importante.

O programa COBOL contém lógica.

Algo como:

READ ARQUIVO-CLIENTES

Mas em ambiente batch, o JCL ajuda a definir como aquele trabalho será executado e quais recursos serão associados à execução.

Pense nisso como logística militar.

COBOL diz:

ataque o objetivo.

JCL ajuda a dizer:

use este batalhão, esta estrada, estes suprimentos e este destino.

Agora surge uma pergunta de segurança:

Quem consegue alterar o JCL?

E outra:

Quem consegue alterar uma procedure utilizada por uma execução privilegiada?

Imagine:

USER
 ↓
UPDATE JCL
 ↓
JOB
 ↓
PRIVILEGED EXECUTION
 ↓
RESOURCE

O usuário talvez não possa tocar diretamente no recurso final.

Mas controlar uma parte da execução pode ser extremamente relevante.

Aqui aparece outra lição:

Controlar código, configuração ou fluxo de execução também pode constituir uma forma de poder.


🎭 CAPÍTULO 6 — SURROGAT: O MINISTRO QUE ASSINA EM NOME DE OUTRO

Souma encontrou um mecanismo interessante no reino:

SURROGAT

Em determinados cenários, RACF permite que um usuário devidamente autorizado submeta trabalho para execução sob outra identidade sem precisar conhecer a senha dessa identidade.

Imagine:

BELL01

não possui acesso a:

PAYROLL

Mas existe:

PAYBATCH

que precisa acessar payroll para executar seu trabalho.

Temos:

PAYBATCH
   ↓
PAYROLL

Se Bell possuir legitimamente a capacidade necessária para submeter trabalho como PAYBATCH, nosso grafo pode conter:

BELL01
   ↓
SURROGAT
   ↓
PAYBATCH
   ↓
PAYROLL

Pergunta 1:

BELL01 possui READ diretamente?

Resposta:

NO

Pergunta 2:

Existe um caminho de execução autorizado
que termina em uma identidade com capacidade?

Talvez:

YES

São perguntas diferentes.

Essa distinção precisa entrar na cabeça de quem trabalha com segurança.


🚂 CAPÍTULO 7 — STARTED TASK: O REI NÃO PRECISA EMPURRAR TODA CARROÇA

Agora entramos no universo das started tasks.

No z/OS existem workloads e serviços que precisam executar continuamente ou ser iniciados pelo sistema ou por operadores.

CICS, MQ e muitos outros componentes podem envolver started tasks.

Conceitualmente podemos ter:

PAYSTC
   ↓
STARTED PROFILE
   ↓
PAYUSER

Aqui aparece uma distinção essencial:

Quem solicitou alguma coisa não é necessariamente a mesma identidade sob a qual o trabalho subsequente será executado.

Imagine:

HUMAN USER
   ↓
REQUEST
   ↓
SERVICE
   ↓
SERVICE USER

O service user pode possuir capacidades diferentes das do usuário humano.

Isso é proposital.

Serviços precisam trabalhar.

O problema aparece quando esquecemos de incluir essa transformação de identidade em nosso mapa.

Souma mandou escrever na parede do CPD:

ALWAYS ASK:

WHO REQUESTED?

WHO EXECUTED?

UNDER WHICH AUTHORITY?

🏦 CAPÍTULO 8 — CICS: A CAPITAL DO REINO

Chegamos ao CICS.

Para quem está começando, pense no CICS — Customer Information Control System como uma plataforma fundamental para processamento transacional no universo mainframe.

Imagine uma transação:

SALO

que chama:

SALDO01

Então:

USER
 ↓
CICS:SALO
 ↓
COBOL:SALDO01

O programa pode consultar Db2:

EXEC SQL
    SELECT SALDO
      INTO :WS-SALDO
      FROM CONTA
     WHERE CONTA_ID = :WS-CONTA
END-EXEC.

O usuário não precisa necessariamente possuir acesso direto à tabela CONTA.

Na verdade, isso frequentemente seria indesejável.

Queremos:

USER
 ↓
APPLICATION
 ↓
CONTROLLED OPERATION
 ↓
DATABASE

e não:

USER
 ↓
EVERYTHING IN DATABASE

A aplicação atua como uma barreira.

Ou deveria.


🧙 CAPÍTULO 9 — O COBOLZEIRO DESCOBRE QUE TAMBÉM É GUARDA

Souma chamou o programador.

— Quem preenche WS-CONTA?

— A transação.

— E de onde vem o valor?

Silêncio.

Souma continuou:

— O usuário consegue alterá-lo?

Mais silêncio.

— E vocês verificam se a conta solicitada pertence ao usuário autenticado?

Agora o COBOLzeiro entendeu.

Segurança não termina no RACF.

Imagine que o programa deveria permitir:

CONSULTAR MINHA CONTA

mas aceite sem validação adequada:

CONSULTAR CONTA 8472

e depois:

CONSULTAR CONTA 8473

e:

CONSULTAR CONTA 8474

A infraestrutura pode estar funcionando exatamente como projetada.

RACF funcionando.

CICS funcionando.

Db2 funcionando.

O defeito está na autorização de negócio dentro da aplicação.

Isso significa que o programador COBOL também participa do modelo de segurança.

Não precisa ser administrador RACF.

Mas precisa entender:

IDENTITY
AUTHENTICATION
AUTHORIZATION
INPUT
BUSINESS RULE
EXECUTION CONTEXT

Seu IF também pode ser uma muralha.


🤵 CAPÍTULO 10 — O CONFUSED DEPUTY DO REINO

Souma contou uma história.

Um ministro possuía autorização para entrar no tesouro.

Os cidadãos não.

Então os cidadãos entregavam solicitações ao ministro.

O ministro verificava a solicitação e buscava o item correspondente.

Perfeito.

Até aparecer uma solicitação:

TRAGA TUDO.

E o ministro respondeu:

— Certamente.

Temos aí a essência do clássico confused deputy problem.

O intermediário possui autoridade legítima.

Uma entidade menos privilegiada consegue induzi-lo a usar essa autoridade de maneira que não deveria.

No nosso mainframe:

USER
 ↓
CICS
 ↓
COBOL PROGRAM
 ↓
SERVICE AUTHORITY
 ↓
DB2

O programa pode legitimamente possuir capacidade para consultar milhares de clientes.

Mas determinado usuário talvez devesse consultar apenas:

CLIENTE 8472

Se a aplicação não limitar corretamente essa operação, temos um problema.

Observe a sutileza.

O usuário não ganhou:

SYSADM

Não recebeu:

SELECT *

Não alterou RACF.

Ele simplesmente conseguiu fazer uma entidade mais poderosa trabalhar inadequadamente em seu benefício.

Essa é uma classe de problema que uma simples análise:

WHO HAS READ?

pode não revelar.


📦 CAPÍTULO 11 — MQ: O MENSAGEIRO DO REINO

Então chegou um mensageiro.

Chamava-se IBM MQ.

Imagine:

CICS
 ↓
PUT
 ↓
PAY.REQUEST

A aplicação não processa imediatamente o trabalho.

Coloca uma mensagem numa queue.

Outro serviço consome:

PAY.REQUEST
 ↓
PAYCONSUMER

O consumidor pode executar como uma started task:

PAYCONSUMER
 ↓
PAYSTC
 ↓
PAYUSER

e acessar Db2:

PAYUSER
 ↓
DB2
 ↓
PAYROLL

Agora conecte tudo:

BELL01
   ↓
CICS TRANSACTION
   ↓
COBOL PROGRAM
   ↓
MQ PUT
   ↓
PAY.REQUEST
   ↓
CONSUMER
   ↓
STARTED TASK
   ↓
SERVICE USER
   ↓
DB2
   ↓
PAYROLL

Souma perguntou:

— Bell possui acesso direto ao payroll?

Todos responderam:

— Não.

— Bell consegue provocar uma cadeia de processamento que termina no payroll?

Silêncio novamente.

Essa é exatamente a diferença entre:

PERMISSION

e:

REACHABILITY

💥 CAPÍTULO 12 — BLAST RADIUS: QUANTO DO REINO CAI SE UMA IDENTIDADE FOR COMPROMETIDA?

Agora Souma fez uma pergunta diferente.

— Se BELL01 fosse comprometido, até onde alguém conseguiria chegar?

Não queremos somente:

LISTUSER BELL01

Queremos conceitualmente descobrir:

REACHABLE(BELL01)

Talvez apareça:

BELL01
├── APPDEV
│   ├── DEV.DATA
│   └── DB2 privileges
│
├── CICS
│   ├── SALO
│   ├── EXTR
│   └── PAYR
│
├── MQ
│   └── APP.REQUEST
│
└── SURROGAT
    └── APPBATCH

Cada ramo pode abrir novos ramos.

Temos então uma maneira interessante de pensar no blast radius de uma identidade.

Não apenas:

O que ela possui diretamente?

Mas:

Que capacidades podem ser alcançadas a partir dela?

Isso muda a priorização defensiva.

Dois usuários podem possuir dez permissões cada.

Mas um deles alcança apenas desenvolvimento.

O outro consegue atravessar cinco relações e atingir serviços críticos.

Contar permissões não revela necessariamente essa diferença.

O grafo revela.


⚖️ CAPÍTULO 13 — LEAST PRIVILEGE NÃO É APENAS REMOVER ACL

Souma reuniu o conselho.

— Precisamos implementar least privilege.

Alguém imediatamente sugeriu:

— Vamos remover permissões!

Souma respondeu:

— Quais?

Silêncio.

O Principle of Least Privilege diz, em essência, que identidades devem possuir somente as capacidades necessárias para desempenhar suas funções.

Mas nosso grafo permite aprofundar isso.

Não basta minimizar:

DIRECT PERMISSIONS

Também queremos minimizar:

UNNECESSARY PRIVILEGE PATHS

Imagine remover:

BELL01 → PAYROLL

Excelente.

Mas continuar com:

BELL01
 ↓
APPDEV
 ↓
PAYR
 ↓
PAY001
 ↓
PAYDB2
 ↓
PAYROLL

Talvez isso seja necessário para a aplicação.

Talvez não.

A questão é saber que o caminho existe e verificar se cada etapa possui justificativa.

Least privilege deixa de ser somente uma propriedade de ACL.

Passa a ser uma propriedade da arquitetura.


🕷️ CAPÍTULO 14 — O NÓ QUE TODO MUNDO IGNORAVA

Souma então pediu:

— Mostrem todos os caminhos críticos.

Centenas apareceram.

Mas havia algo curioso.

Muitos passavam por:

PROD.CICS.LOADLIB

Outros convergiam para:

PROD.APP.PROCLIB

E muitos dependiam do grupo:

PROD_SUPPORT

Em teoria dos grafos existem medidas de centralidade.

Uma delas, chamada betweenness centrality, ajuda a identificar nós que aparecem em muitos caminhos entre outros nós.

Traduzindo para nosso reino:

Existe alguma ponte pela qual metade do exército precisa passar?

Se existe, proteja muito bem aquela ponte.

Em segurança, esses pontos podem funcionar como choke points.

Talvez um recurso aparentemente banal seja estruturalmente crítico porque centenas de privilege paths passam por ele.

Essa é uma descoberta que listas tradicionais dificilmente tornam intuitiva.


🧮 CAPÍTULO 15 — ALGORITMOS ENTRAM NO CPD

O programador COBOL olhou para o desenho.

— Precisamos verificar isso manualmente?

Souma quase derrubou o café.

Claro que não.

Grafos possuem décadas de algoritmos.

Temos conceitos como:

Breadth-First Search
Depth-First Search
Shortest Path
Dijkstra
Connected Components
Centrality
Community Detection

Imagine uma consulta:

SOURCE = USER:BELL01
TARGET = DB2:PAYROLL

Queremos:

FIND PATH

Resultado:

BELL01
 ↓
APPDEV
 ↓
CICS:PAYR
 ↓
PAY001
 ↓
PAYDB2
 ↓
PAYROLL

Podemos ainda atribuir pesos às relações.

Exemplo puramente conceitual:

GROUP MEMBERSHIP        COST 1
EXECUTE TRANSACTION     COST 1
MQ PUT                  COST 2
SURROGATE               COST 3
MODIFY JCL              COST 4
MODIFY LOADLIB          COST 5

Agora podemos procurar não apenas o caminho com menos saltos, mas caminhos segundo critérios de risco ou relevância definidos pela organização.

A matemática começou a governar o reino.

Souma parecia satisfeito.


🔎 CAPÍTULO 16 — O GOOGLE MAPS DOS PRIVILÉGIOS

Souma teve uma ideia.

— Quero um mapa.

— Já temos relatórios RACF.

— Não quero relatório.

Ele escreveu:

FROM USER:BELL01
TO RESOURCE:PAYROLL

E queria receber:

DIRECT ACCESS: NO

INDIRECT PATHS: 3

ROTA 1

BELL01
 ↓
APPDEV
 ↓
CICS PAYR
 ↓
PAY001
 ↓
PAYDB2
 ↓
PAYROLL

ROTA 2

BELL01
 ↓
MQ
 ↓
PAY.REQUEST
 ↓
PAYSTC
 ↓
PAYUSER
 ↓
PAYROLL

ROTA 3

BELL01
 ↓
SURROGAT
 ↓
PAYBATCH
 ↓
PAYROLL

E então:

REMOVE EDGE:
BELL01 → PAY.REQUEST

RESULT:
ROUTE 2 ELIMINATED

Isso seria praticamente um:

GOOGLE MAPS DOS PRIVILÉGIOS

Você pergunta:

BELL01 → PAYROLL

e recebe:

3 rotas encontradas.

Rota mais curta:
5 saltos.

Existe uma rota alternativa via MQ.

SURROGAT apresenta tráfego intenso.

O administrador RACF não achou graça.

O programador COBOL achou maravilhoso.

Souma aprovou o orçamento.


🤖 CAPÍTULO 17 — ONDE ENTRA INTELIGÊNCIA ARTIFICIAL?

Aqui existe uma tentação perigosa:

jogar todos os logs num LLM e perguntar:

Quem é o vilão?

Não precisamos fazer isso.

Primeiro podemos construir deterministicamente um:

ENTERPRISE PRIVILEGE GRAPH

usando informações de:

RACF
JES
JCL
SURROGAT
STARTED
CICS
DB2
MQ
USS
SMF
APPLICATIONS

Algoritmos de grafos encontram relações e caminhos.

Depois uma IA pode ajudar a transformar:

NODE 481
EDGE 92
NODE 773
EDGE 144
NODE 112

em algo compreensível:

BELL01 não possui acesso direto ao recurso. Entretanto, pertence ao grupo APPDEV, que permite utilizar determinada transação CICS. Essa transação executa PAY001, que utiliza um contexto Db2 autorizado a executar PAYPKG, que acessa PAYROLL.

O algoritmo encontra.

A IA explica.

O humano decide.

Essa divisão de responsabilidades é muito mais interessante que transformar IA em oráculo.


⏰ CAPÍTULO 18 — SOUMA DESCOBRE QUE O MAPA SE MOVE

Na manhã seguinte:

08:00

BELL01 → APPDEV

Às 10:12 alguém realizou uma mudança:

APPDEV → PROD_SUPPORT

Às 10:12:01 nasceram dezenas de novas rotas.

O administrador disse:

— Mas foi apenas uma alteração.

Souma respondeu:

— Uma aresta.

E uma única aresta pode conectar dois enormes conjuntos do grafo.

Imagine dois continentes separados.

Adicione uma ponte.

A ponte é apenas uma estrutura.

Mas milhões de novas rotas passam a existir.

No nosso ambiente:

GRAPH(t0)

antes da mudança.

Depois:

GRAPH(t1)

Calculamos:

DIFF GRAPH(t0,t1)

Resultado hipotético:

DIRECT PERMISSIONS ADDED: 1

NEW TRANSITIVE PATHS: 317

NEW PATHS TO CRITICAL RESOURCES: 12

Agora temos uma aplicação extraordinária para Change Management.

Antes de aprovar uma alteração, poderíamos perguntar:

Qual será o impacto desta mudança no grafo de privilégios?

Não apenas:

WHAT ARE WE ADDING?

Mas:

WHAT WILL BECOME REACHABLE?

Isso é muito mais poderoso.


🧪 CAPÍTULO 19 — LABORATÓRIO DO COBOLZEIRO

Você não precisa construir um Neo4j corporativo amanhã.

Comece com papel.

Escolha uma transação CICS conhecida.

Por exemplo:

SALO

Faça o seguinte.

PASSO 1 — IDENTIDADE

Pergunte:

Quem pode iniciar SALO?

PASSO 2 — TRANSAÇÃO

Descubra:

SALO
 ↓
qual programa?

Talvez:

SALDO01

PASSO 3 — PROGRAMA COBOL

Descubra os recursos usados:

SALDO01
 ├── DB2
 ├── VSAM
 └── MQ

PASSO 4 — DB2

Pergunte:

Qual contexto de autorização?
Qual package?
Quais objetos?

PASSO 5 — MQ

Se existir:

PUT PAY.REQUEST

não pare.

Pergunte:

Quem consome PAY.REQUEST?

PASSO 6 — CONSUMIDOR

Descubra:

QUEUE
 ↓
CONSUMER
 ↓
STC
 ↓
USERID

PASSO 7 — CONTINUE

Pergunte quais recursos esse userid consegue utilizar.

Ao terminar, talvez você tenha:

USER
 ↓
CICS
 ↓
COBOL
 ↓
MQ
 ↓
STC
 ↓
COBOL
 ↓
DB2

Você acabou de construir manualmente um pequeno privilege graph.


🧰 CAPÍTULO 20 — DEZ DICAS DE SOUMA PARA O COBOLZEIRO

1. Não pergunte apenas “quem tem acesso?”

Pergunte:

quem consegue chegar?

2. Aprenda RACF mesmo sem querer ser administrador RACF.

Entenda pelo menos:

USER
GROUP
PROFILE
ACCESS
SURROGAT
STARTED

3. Aprenda JCL.

Seu COBOL não vive sozinho.

4. Quando encontrar CICS, siga a transação.

TRANSACTION → PROGRAM → RESOURCE

5. Quando encontrar MQ, siga a mensagem.

A fila não é necessariamente o destino.

Pode ser apenas uma estrada.

6. Quando encontrar Db2, pense além da tabela.

Considere contextos de autorização, packages, roles e outros mecanismos envolvidos.

7. Pergunte sempre sob qual identidade algo executa.

Essa pergunta vale ouro.

8. Diferencie autenticação de autorização.

Saber quem alguém é não responde automaticamente o que essa pessoa pode fazer.

9. Desenhe.

Cinco caixas e quatro setas podem revelar algo que cinquenta páginas de relatório esconderam.

10. Procure composição.

O problema mais interessante talvez não esteja em nenhum componente isoladamente.

Pode estar na combinação:

RACF + CICS + COBOL + MQ + STC + DB2

🥚 CAPÍTULO 21 — PROJECT REALIST HERO

Às 03:17 da madrugada, o console mostrou:

ICH408I ...

O operador acordou Souma.

— Sua Majestade! Temos um problema!

Souma olhou para a mensagem.

— Qual o impacto?

— Ainda não sabemos.

— Qual identidade?

— BELL01.

— Quais caminhos ela possui?

Silêncio.

— Quais serviços ela consegue acionar?

Silêncio.

— Quais recursos críticos são alcançáveis?

Silêncio.

Souma voltou para a cama.

— Então vocês não têm um incidente.

O operador ficou aliviado.

Souma terminou:

— Vocês têm três perguntas sem resposta. Descubram primeiro.

Na saída havia uma placa:

HOW A REALIST HERO REBUILT THE KINGDOM

SEASON 3:
RACF EDITION

Nenhum produtor confirmou essa temporada.

Principalmente porque provavelmente teríamos três episódios inteiros discutindo LISTGRP.

Eu assistiria.


👑 EPÍLOGO — GOVERNAR NÃO É POSSUIR TODAS AS CHAVES

Meses depois, o reino possuía um enorme mapa.

Nele estavam:

USERS
GROUPS
JCL
PROCEDURES
STARTED TASKS
CICS REGIONS
TRANSACTIONS
COBOL PROGRAMS
DB2 AUTHORIZATION
PACKAGES
TABLES
MQ QUEUES
CONSUMERS
SERVICE IDs

Milhares de nós.

Milhões de relações possíveis.

Souma voltou à pergunta que iniciou tudo.

Na tela:

USER: BELL01

RESOURCE: PROD.PAYROLL.MASTER

DIRECT ACCESS: NONE

O antigo administrador sorriu.

— Então eu estava certo.

Souma concordou.

— Estava.

O homem pareceu surpreso.

Souma continuou:

— Só estava respondendo à pergunta errada.

Na tela apareceu:

INDIRECT PATHS FOUND: 3

Agora todos entenderam.

Segurança não é somente descobrir:

WHO HAS THE KEY?

É descobrir:

WHO CAN REACH THE CASTLE?

Depois:

BY WHICH ROAD?

Depois:

WHO CONTROLS THE ROAD?

E finalmente:

WHAT HAPPENS
IF THAT ROAD CHANGES?

Essa é a transformação fundamental.

RACF continua sendo fundamental.

CICS continua fazendo seu trabalho.

Db2 continua protegendo seus objetos.

MQ continua transportando mensagens.

JES continua executando jobs.

COBOL continua processando negócios.

Cada componente pode estar funcionando perfeitamente.

Mas sistemas empresariais não são componentes isolados.

São relações.

Uma identidade chama uma transação.

A transação chama COBOL.

COBOL chama Db2.

Outro programa publica em MQ.

Uma started task consome a mensagem.

Outra identidade entra em cena.

Um package acessa dados.

E o caminho termina num recurso que estava seis saltos distante do usuário original.

Por isso o próximo nível de segurança não consiste simplesmente em produzir listas maiores de ACLs.

Consiste em compreender a topologia do poder.

Quem possui autoridade?

Quem pode delegá-la?

Quem consegue provocar sua utilização?

Quem controla programas executados por identidades privilegiadas?

Quais caminhos são necessários?

Quais são acidentais?

Quais recursos funcionam como pontes?

Quais alterações criam novas rotas?

E qual é o blast radius se um único nó for comprometido?

Souma levantou-se.

O jovem COBOLzeiro perguntou:

— Então qual é a diferença entre administrar permissões e governar privilégios?

O rei escreveu duas linhas no quadro:

PERMISSION = CAN I OPEN THIS DOOR?

e:

REACHABILITY = IS THERE ANY ROUTE
               THAT TAKES ME INSIDE?

Guardou o marcador.

— Administrar permissões é cuidar das portas.

Apontou para o gigantesco grafo.

— Governar privilégios é conhecer o reino.

No fundo do CPD, JES2 imprimiu a última mensagem da madrugada:

$HASP395 SOUMAJOB ENDED

******************************** TOP OF DATA ********************************

DIRECT ACCESS........ NONE
INDIRECT PATHS....... 0003
CRITICAL PATHS....... 0001

SECURITY RESULT:

DO NOT PANIC.
INVESTIGATE THE GRAPH.

******************************** BOTTOM OF DATA *****************************

O programador COBOL sorriu.

Finalmente tinha entendido por que Kazuya Souma fora convocado.

Ele não derrotava monstros ficando mais poderoso.

Ele olhava para sistemas complicados, descobria como as coisas estavam conectadas e reorganizava o reino.

O que, pensando bem, talvez seja uma descrição surpreendentemente boa do trabalho de um programador mainframe.

E também explica por que, quarenta anos depois, alguém ainda encontra um JCL em produção e pergunta:

QUEM DIABOS DEPENDE DISSO?

A resposta, naturalmente, é:

MUITO MAIS GENTE
DO QUE VOCÊ IMAGINA.

☕ Bellacosa Mainframe

Porque no mainframe a porta pode estar perfeitamente trancada — e ainda assim o verdadeiro trabalho do segurança é descobrir todas as estradas que chegam do outro lado.

sábado, 1 de julho de 2017

A Ferrari do Cameron Não Tinha MFA

 

Bellacosa Maifnra e a razao do uso do mfa

☕ Um Café no Bellacosa Mainframe — Especial Red Team

A Ferrari do Cameron Não Tinha MFA

🚗 Privilégio, acesso físico e o perigo de acreditar que “ninguém jamais faria isso”

Existe um tipo de segurança muito comum.

Não está documentado.

Não possui política formal.

Não tem controle técnico.

Não aparece no RACF.

Não gera log.

Não possui ticket.

Não precisa de auditoria.

É aquela segurança maravilhosa baseada em uma frase:

“Ninguém vai fazer isso.”

O pai de Cameron conhecia esse modelo.

Ele tinha uma Ferrari.

Não uma Ferrari qualquer.

Uma joia.

Um objeto quase religioso.

Uma peça de coleção tratada como altar.

O carro era intocável.

Sagrado.

Proibido.

E justamente por isso parecia seguro.

Não porque existia controle.

Mas porque existia medo.

Medo do pai.

Medo da consequência.

Medo de tocar.

Medo de errar.

Durante anos, funcionou.

Até Ferris aparecer.

Bem-vindo ao sétimo episódio de:

SAVE FERRIS — Red Team para Quem Aprendeu que o Sistema Também Mata Aula

Hoje a Ferrari do Cameron não é apenas um carro.

Ela é nosso sistema crítico.

Nosso ambiente de produção.

Nosso banco de dados.

Nossa conta privilegiada.

Nosso SYS1.

Nosso usuário com SPECIAL.

Nosso segredo corporativo.

Nosso objeto mais protegido.

Ou, pelo menos, aquilo que acreditamos estar protegido.


🚨 Segurança por medo é segurança sem controle

Vamos começar pelo pai de Cameron.

Ele não precisava instalar:

MFA.

PAM.

Biometria.

Geofencing.

Dual control.

Segregação de funções.

O modelo era mais simples:

FERRARI
  ↓
NÃO TOQUE
  ↓
SE TOCAR, VOCÊ ESTÁ MORTO

Muito eficiente.

Até o momento em que alguém decide tocar.

Esse é o problema de controles baseados em comportamento esperado.

Eles funcionam enquanto todos obedecem.

Red Team existe justamente para perguntar:

“E se alguém não obedecer?”


🧠 O perigo da frase “ninguém jamais faria isso”

Essa frase aparece em tecnologia o tempo todo.

— Ninguém vai usar essa conta.

— Ninguém vai rodar esse job manualmente.

— Ninguém vai alterar esse dataset.

— Ninguém vai copiar esse arquivo.

— Ninguém vai entrar nesse servidor.

— Ninguém vai usar essa senha fora do horário.

— Ninguém vai modificar produção direto.

Maravilhoso.

E se fizer?

Silêncio.

A segurança madura começa exatamente onde termina a suposição.


🔴 Red Team odeia controles imaginários

Um controle real impede.

Um controle imaginário depende de cultura.

Exemplo:

“Não compartilhar senha.”

Isso é política.

Mas se tecnicamente duas pessoas conseguem usar a mesma credencial, o risco existe.

“Não acessar produção.”

Isso é orientação.

Mas se o usuário possui permissão, o acesso existe.

“Não alterar esse dataset.”

Isso é pedido.

Mas se RACF autoriza UPDATE, então o sistema não sabe que aquilo era apenas uma sugestão.

Ferris ama sugestões.


🚗 A Ferrari vira produção

Vamos transportar a metáfora.

Imagine a Ferrari como:

PROD

O pai de Cameron é o administrador.

Cameron possui acesso físico.

Ferris não possui autorização formal.

Mas conhece Cameron.

Agora temos:

Ferris
  ↓
Cameron
  ↓
Garagem
  ↓
Ferrari

O atacante não precisou quebrar a Ferrari.

Precisou chegar perto de quem tinha acesso.

Essa diferença é tudo.


🔐 Privilégio é poder, não título

Em segurança, privilégio é simples:

capacidade de fazer algo sensível.

Quem pode:

parar serviço;

alterar configuração;

ler dados críticos;

modificar contas;

conceder acesso;

executar comandos administrativos;

tem privilégio.

Não importa se a pessoa usa esse poder todos os dias.

O poder existe.

E Ferris procura exatamente isso.


🪜 Least Privilege: Cameron não deveria ter acesso amplo só porque mora ali

O princípio de menor privilégio diz:

cada pessoa deve possuir apenas o acesso necessário.

Cameron mora na casa.

Isso não significa que deveria poder pegar a Ferrari.

Mas fisicamente pode.

Em empresas acontece algo parecido.

Funcionário pertence à organização.

Isso não significa que deveria acessar tudo.

Administrador trabalha em infraestrutura.

Isso não significa que deveria ter acesso irrestrito a produção.

Desenvolvedor conhece a aplicação.

Isso não significa que deveria alterar dados diretamente.

Least privilege separa proximidade de necessidade.


☕ “Mas ele é confiável”

Outra frase perigosa.

Confiança não elimina necessidade de controle.

Pessoas confiáveis:

cometem erros;

podem ser coagidas;

podem ter credenciais comprometidas;

podem mudar de função;

podem sofrer engenharia social;

podem agir fora do padrão.

Segurança não deve depender de caráter.

Deve depender de arquitetura.


🧠 Confiança é contexto, não autorização infinita

Uma pessoa pode ser confiável para uma tarefa.

Isso não significa confiar em tudo.

Por isso sistemas maduros modelam privilégio.

O usuário recebe:

o que precisa;

pelo tempo necessário;

para o objetivo autorizado.

Depois, o acesso sai.

Isso é muito diferente de:

“Ele é do time, deixa.”


🔐 MFA: a Ferrari precisava perguntar “você realmente é você?”

MFA existe para reduzir risco de uma única credencial comprometida.

Algo que você sabe.

Algo que você tem.

Algo que você é.

A Ferrari tinha praticamente:

FACTOR 1:
estar na garagem

Nada mais.

Se você chegasse ao carro com acesso físico suficiente, o modelo de segurança já estava quase vencido.

Em sistemas modernos, isso seria equivalente a:

usuário e senha apenas.


📲 MFA não é bala de prata

Claro.

MFA não resolve tudo.

Pode ser atacado.

Pode ser mal configurado.

Pode sofrer engenharia social.

Pode haver fatigue attack.

Pode existir aprovação indevida.

Mas aumenta custo do atacante.

O objetivo não é perfeição.

É criar camadas.


🧱 Controle bom cria fricção adversarial

Segurança madura faz o atacante gastar.

Tempo.

Esforço.

Conhecimento.

Risco.

Cada controle adiciona custo.

Ferris quer caminho barato.

Se a Ferrari exigisse:

chave física;

PIN;

aprovação;

registro;

talvez o passeio acabasse antes de começar.


🧨 PAM: pare de deixar o volante administrativo em cima da mesa

Privileged Access Management existe para controlar acessos poderosos.

Contas privilegiadas não deveriam funcionar como chaves de casa penduradas perto da porta.

PAM pode ajudar com:

vault de credenciais;

checkout;

rotação;

gravação de sessão;

aprovação;

tempo limitado;

auditoria.

O objetivo é simples:

ninguém deveria andar com uma credencial administrativa permanente no bolso como se fosse chave da Ferrari.


🪪 Standing Privilege é Ferrari com chave na ignição

Esse é o problema.

Privilégio permanente significa:

a capacidade existe o tempo inteiro.

Mesmo quando não é necessária.

Isso amplia risco.

Modelo melhor:

Just-In-Time.

Acesso sob demanda.

Tempo limitado.

Expira.

Isso é muito mais saudável.


🕐 JIT: use a Ferrari só durante a janela autorizada

Imagine:

Cameron precisa usar o carro para uma tarefa.

Então ganha acesso das 14h às 15h.

Depois:

revogado.

Em tecnologia:

ACCESS GRANTED
14:00

ACCESS EXPIRES
15:00

Isso reduz janela de ataque.


🔵 JEA: Just Enough Administration

Outra ideia importante.

Não basta limitar tempo.

Limite capacidade.

Se o administrador precisa reiniciar serviço, não precisa necessariamente poder:

alterar usuários;

deletar logs;

modificar banco;

exportar dados.

Privilégio deve ser granular.

Ferrari não precisa entregar a chave do hangar inteiro.


🧠 Segregação de funções: Cameron não deveria ser dono, motorista e auditor

Segregation of Duties existe para impedir concentração excessiva.

Quem solicita não aprova.

Quem executa não audita.

Quem administra não revisa sozinho.

Se uma pessoa controla tudo, fraude e erro ficam mais fáceis.

Cameron possuía acesso físico.

Ferris influenciava.

Não existia terceira validação.

Resultado:

o sistema de proteção era emocional.


🚦 Dual Control

Em ambientes críticos, duas pessoas podem precisar aprovar.

Isso é dual control.

Exemplo:

ADMIN 1 requests
ADMIN 2 approves
SYSTEM executes

Agora um atacante precisa comprometer mais de uma camada.

Swiss Cheese novamente.


☕ O pai do Cameron apostou tudo num único controle

Qual era o controle?

Medo.

Um único controle.

Sem redundância.

Se o medo falha, tudo falha.

Defense in Depth existe justamente porque controles falham.


🧀 Ferrari Swiss Cheese Model

Imagine camadas:

Camada 1: Regra
Camada 2: Acesso físico
Camada 3: Chave
Camada 4: Monitoramento
Camada 5: Alerta

No filme, muitas dessas camadas são fracas ou inexistentes.

Então:

Ferris encontra Cameron.

Cameron conhece garagem.

Garagem contém carro.

Carro está acessível.

Pronto.

Os buracos alinham.


🛡️ Controles compensatórios

Nem sempre é possível implementar o controle ideal.

Aí entram controles compensatórios.

Exemplo:

não consegue remover determinado privilégio legado?

Então:

monitore;

limite horário;

exija aprovação;

gere alerta;

revise sessão.

Isso não é perfeito.

Mas reduz risco.


🦖 E no mainframe?

Agora entramos no terreno Bellacosa Mainframe.

No z/OS, privilégio pode assumir formas críticas.

RACF SPECIAL.

OPERATIONS.

AUDITOR.

Perfis poderosos.

Acesso a datasets sensíveis.

Autoridade em CICS.

Db2.

JES.

SDSF.

Contas com poder amplo.

Um ambiente pode ser extremamente seguro e ainda sofrer com privilégio excessivo.


🔐 RACF SPECIAL é Ferrari com nitro

Um usuário com SPECIAL possui enorme capacidade administrativa.

Então perguntas importantes:

quem possui?

por quê?

há revisão?

é permanente?

há MFA?

há logging?

há separação?

há uso diário?

há conta alternativa sem privilégio?

Contas privilegiadas devem ser tratadas como ativos críticos.


🧠 Use usuário normal para vida normal

Uma boa prática clássica:

usuário administrativo separado.

No dia a dia:

conta normal.

Quando precisa administrar:

conta privilegiada.

Isso reduz exposição.

Porque navegar, ler e-mail, abrir arquivos e executar tarefas normais com privilégio elevado aumenta risco.


🧪 Ferris não precisa roubar a Ferrari se consegue usar Cameron

Esse ponto retorna.

O atacante muitas vezes não rouba credencial diretamente.

Ele usa quem tem acesso.

Engenharia social pode transformar administrador em proxy.

— Pode executar esse comando pra mim?

— Pode liberar esse acesso?

— Pode aprovar essa solicitação?

Ferris não senta sozinho no carro.

Ele traz Cameron.


📞 Privilege Proxy

Esse conceito é importante.

Você pode não possuir privilégio.

Mas pode influenciar quem possui.

Então o caminho de ataque é:

ATTACKER
 ↓
PRIVILEGED USER
 ↓
SYSTEM

Esse caminho é tão importante quanto credencial roubada.


🤖 Em 2026, o Ferris ganha automação

Agora imagine:

OSINT identifica administradores.

IA ajuda a personalizar pretexto.

Ataque social visa quem possui privilégio.

O objetivo não é necessariamente roubar senha.

Pode ser induzir ação.

Isso muda a defesa.

Treinamento precisa incluir pedidos de execução.


🚨 “Execute esse script”

Esse é um clássico.

A pessoa recebe código.

Confia na origem.

Executa.

Se usuário privilegiado executar algo malicioso, o atacante herda contexto poderoso.

Então:

não basta proteger credencial.

É preciso proteger decisão.


🧠 Privilégio humano e privilégio técnico se encontram

Uma pessoa com autoridade social pode pressionar quem possui privilégio técnico.

CEO:

— Faça agora.

Admin:

— Procedimento exige aprovação.

CEO:

— Eu sou o CEO.

Admin:

— Excelente. O procedimento continua existindo.

Essa resposta deveria ser normal.


🔴 Cultura forte protege controle

Se organização pune quem segue processo quando há pressão executiva, matou a segurança.

Você treinou o funcionário para obedecer urgência.

Ferris agradece.


🧯 Break Glass não pode virar “porta da cozinha”

Contas de emergência existem.

Break glass.

Acesso excepcional.

Mas se o acesso excepcional vira rotina, acabou.

Deve existir:

uso raro;

alerta;

justificativa;

auditoria;

revisão pós-uso.

Ferrari de emergência não pode ficar ligada 24 horas.


🧾 Log: quem dirigiu?

Depois do incidente, primeira pergunta:

quem usou?

Em acesso privilegiado, isso precisa ser claro.

Não:

“foi a conta ADMIN.”

Quem era a pessoa?

Qual sessão?

Qual comando?

Qual horário?

Qual motivo?

Sem isso, auditoria vira ficção.


🔍 Session Recording

PAM moderno pode gravar sessão administrativa.

Isso ajuda a reconstruir:

comandos;

ações;

sequência.

Muito útil para investigação.

Principalmente em acesso crítico.


☕ O carro voltou para garagem, então está tudo bem?

Não.

Esse é outro erro.

No filme, existe tentativa de devolver a Ferrari.

Mas o fato de o ativo voltar não elimina o evento.

Em tecnologia:

credencial usada e devolvida;

arquivo copiado e apagado;

configuração alterada e revertida.

Ainda houve exposição.


🧠 Integridade e rastreabilidade continuam valendo

Um sistema crítico pode não sofrer dano visível.

Mas se privilégio foi usado indevidamente, precisamos saber.

Não basta verificar estado final.

Precisamos entender caminho.


🧨 Acesso físico continua importando

Em tempos de cloud, muita gente esquece segurança física.

Mas dispositivos existem.

Datacenters existem.

Estações existem.

Consoles existem.

Portas existem.

Quem consegue tocar hardware pode ganhar vantagens.

Ferrari lembra isso lindamente.


🚪 Physical Access ≠ Logical Authorization

Entrar na sala não deveria significar acessar sistema.

Sentar na estação não deveria significar sessão aberta.

Encontrar notebook não deveria significar acesso.

Camadas precisam existir.


🔒 Screen Lock é o cinto de segurança corporativo

Parece pequeno.

Mas estação desbloqueada com sessão privilegiada é perigo.

Ferris vê um terminal aberto.

Ferris não precisa hackear.

Ele senta.

Fim.


🧑‍💻 Shared Admin Account: a Ferrari com chave comunitária

Contas compartilhadas são ruins porque destroem accountability.

Se cinco admins usam:

ADMIN01

quem fez?

Boa sorte.

Identidade individual importa.


🪪 Named Accounts

Cada administrador deve possuir identidade própria.

Isso permite:

rastreio;

revogação;

revisão;

responsabilidade.

Sem isso, o sistema conhece apenas “alguém”.


🔁 Rotação de credenciais

Senhas privilegiadas não deveriam durar eternamente.

Credenciais antigas acumulam risco.

Rotação reduz janela de abuso.

PAM automatiza isso.

Ferrari com fechadura trocada periodicamente.


🧠 Secrets Management

Contas técnicas também precisam proteção.

Senha em script?

Credencial em JCL?

Token em arquivo?

Secret em pipeline?

Tudo isso é equivalente a esconder a chave embaixo do tapete.


🦖 Mainframe DevOps e privilégio

Ambientes modernos conectam:

Git;

pipeline;

DBB;

Jenkins;

UrbanCode;

Ansible;

Zowe;

z/OSMF.

Agora existem novas identidades técnicas.

Pergunte:

quem deploya?

qual token?

qual conta?

qual privilégio?

onde está armazenado?

A Ferrari agora tem API.


🧨 Service Account poderosa demais

Uma conta técnica pode possuir:

deploy;

update;

start;

stop;

dataset access.

Se comprometida, o atacante ganha capacidade silenciosa.

Least privilege vale para máquina também.


🤖 Machine Identity também precisa de controle

Não são só humanos.

APIs.

Agentes.

Bots.

Pipelines.

Serviços.

Todos possuem identidade.

E podem possuir privilégio.

Ferris de 2026 pode atacar credenciais não humanas.


🔐 MFA para máquina não funciona igual, mas controle existe

Certificados.

Tokens de curta duração.

Workload identity.

Rotação.

Vault.

Mutual TLS.

O princípio permanece:

não confie só porque alguém tem uma string secreta eterna.


🚨 “Nunca aconteceu”

Outra frase clássica.

— Sempre fizemos assim.

— Nunca deu problema.

Ferrari também ficou anos segura.

Até o dia em que não ficou.

Ausência de incidente não prova eficácia de controle.

Talvez ninguém tenha tentado.


🧪 Red Team testa justamente isso

Red Team pode perguntar:

consigo alcançar conta privilegiada?

consigo induzir uso?

consigo contornar MFA?

consigo encontrar credencial técnica?

consigo abusar de processo de emergência?

E, mais importante:

seria detectado?


🔵 Blue Team deveria observar privilégio como anomalia

Eventos privilegiados merecem contexto.

Horário.

Origem.

Comando.

Volume.

Mudança.

Conta.

Sistema.

Privilégio raro é sinal valioso.


🧠 Usuário admin às 03h17

Pode ser legítimo.

Mas merece pergunta.

Principalmente se:

novo dispositivo;

novo IP;

novo padrão;

ação incomum.

Detecção baseada em comportamento ajuda.


☕ O carro não precisa desaparecer para existir incidente

Essa ideia merece repetir.

Atacante não precisa destruir ativo.

Pode apenas usar.

Copiar.

Alterar.

Observar.

Isso vale para dados.

Ferrari pode voltar para garagem.

O risco já aconteceu.


🧨 Privilege Escalation: de Cameron para Ferris

Ferris inicialmente não tem acesso.

Mas usa relação com Cameron.

Em segurança:

usuário comum compromete admin;

credencial baixa encontra caminho;

permissão herdada permite escalada.

Esse movimento é central.


🪜 Attack Path

Imagine:

USER
 ↓
GROUP
 ↓
SHARED SERVER
 ↓
ADMIN TOKEN
 ↓
DOMAIN

Nenhum salto isolado parece absurdo.

A cadeia produz poder.

Ferrari novamente.


🧠 Graph Security

Ferramentas modernas analisam relações.

Quem pode acessar o quê?

Quem pode assumir qual role?

Qual caminho leva a privilégio?

Isso é poderoso porque atacante pensa em caminho.


🔴 O ativo crítico deve ser difícil de alcançar

Não basta proteger o final.

Reduza caminhos.

Remova privilégio.

Segmente.

Expire acessos.

Aumente validação.

Ferris precisa encontrar mais obstáculos.


🧱 Controles independentes

Se MFA depende do mesmo celular comprometido, cuidado.

Se aprovação depende da mesma pessoa, cuidado.

Se log está no mesmo sistema que admin controla, cuidado.

Camadas precisam ser independentes.


🧀 Swiss Cheese de privilégio

Exemplo:

Password
 ↓
MFA
 ↓
PAM
 ↓
Approval
 ↓
Session Recording
 ↓
Monitoring

Uma camada falha.

Outra segura.

Essa é a ideia.


🛡️ Compensação quando legado limita

Mainframe e sistemas legados possuem restrições.

Talvez determinada aplicação não suporte MFA diretamente.

Então use:

gateway;

jump server;

PAM;

controle de rede;

monitoramento;

segunda validação.

Segurança prática vive de composição.


🧠 Não romantize o controle perfeito

Não existe.

O objetivo é reduzir probabilidade e impacto.

Ferris pode tentar.

Queremos:

bloquear;

detectar;

conter;

explicar.


🚘 O pai de Cameron tinha um problema de governança

A Ferrari era um ativo crítico.

Mas não existia governança proporcional ao valor.

Muito valor.

Pouco controle.

Essa assimetria é perigosa.


📊 Crown Jewels

Empresas deveriam identificar joias da coroa.

Dados críticos.

Sistemas críticos.

Contas críticas.

Chaves críticas.

Depois aplicar controles proporcionais.

Nem tudo precisa de Ferrari security.

Mas Ferrari precisa.


💎 Classificação de ativo

Pergunte:

qual impacto se alguém:

ler?

alterar?

usar?

parar?

copiar?

Esse exercício ajuda a definir proteção.


☕ A pergunta Bellacosa

Eu colocaria esta numa War Room:

“Qual ativo nosso está protegido principalmente porque acreditamos que ninguém ousaria tocar?”

Se alguém responder rápido demais:

“nenhum”,

eu perguntaria de novo.

Porque quase toda empresa tem sua Ferrari.


🔴 Outra pergunta

“Quem possui acesso permanente que só deveria usar raramente?”

Aí começa a diversão.


🧠 E uma terceira

“Se essa pessoa for enganada, qual é o próximo controle?”

Se a resposta for:

“esperamos que ela não seja enganada”,

temos problema.


🎬 Ferris não quebrou a Ferrari

Ele quebrou o modelo mental ao redor dela.

Essa é a grande lição.

O carro era fisicamente robusto.

O sistema social não.

O pai de Cameron acreditava que proibição era equivalente a controle.

Não era.


☕ Epílogo: ninguém jamais faria isso

Ferrari na garagem.

Perfeita.

Polida.

Quase sagrada.

O pai de Cameron provavelmente dormia tranquilo porque acreditava numa certeza:

ninguém vai tocar.

Isso é confortável.

Mas segurança não vive de conforto.

Red Team existe para destruir certezas antes que um atacante real faça isso.

Não perguntamos:

“as pessoas deveriam fazer?”

Perguntamos:

“podem fazer?”

Não perguntamos:

“isso é proibido?”

Perguntamos:

“o sistema impede?”

Não perguntamos:

“ninguém faria?”

Perguntamos:

“O que acontece quando alguém fizer?”

Essa diferença separa política de controle.

Confiança de verificação.

Medo de segurança.

A Ferrari do Cameron não precisava de um discurso.

Precisava de camadas.

MFA.

PAM.

Least privilege.

Segregação.

Auditoria.

Monitoramento.

Controles compensatórios.

Porque objetos valiosos atraem comportamento adversarial.

E sistemas críticos também.

Se sua produção está protegida principalmente por:

“ninguém mexe nisso”,

Ferris já está sorrindo.

Cameron já está nervoso.

E a garagem acabou de virar sua nova superfície de ataque.

☕ SAVE FERRIS.

No próximo artigo:

Colocamos a Ferrari em Ré — Por Que Rollback Não É Backup

Porque descobrir que alguém usou seu ativo crítico já é ruim.

Descobrir que você não consegue desfazer direito...

é muito pior.

☕ Um Café no Bellacosa Mainframe — Especial Red Team

SAVE FERRIS — Ferris Bueller’s Red Team

Uma série de 12 artigos sobre Red Team, segurança ofensiva, engenharia social, OSINT, integridade de dados, MFA, PAM, rollback, Blue Team, inteligência artificial, RACF e z/OS, usando Ferris Bueller para explorar uma pergunta fundamental: o sistema está realmente seguro ou apenas acredita que está?

  • Red Team
  • OSINT
  • Engenharia Social
  • Blue Team
  • MFA
  • PAM
  • IA Generativa
  • RACF
  • z/OS
  • Mainframe
1

Ferris Bueller Tinha um Plano de Ataque — Red Team Antes de Existir Red Team

Reconhecimento, criatividade adversarial e a ideia de que o verdadeiro alvo nem sempre é a tecnologia: são as suposições de quem construiu o sistema.

Red Team • Recon • Threat Modeling • Criatividade Adversarial
2

Nove Faltas? CTRL+Z — Quando o Banco de Dados Decide o que é Verdade

Integridade de dados, alteração de registros, privilégio, auditoria e a perigosa diferença entre aquilo que aconteceu e aquilo que o banco de dados afirma ter acontecido.

Integridade • Db2 • Auditoria • Insider Threat • Dados
3

Abe Froman, o Rei da Salsicha de Chicago — A Aula de Engenharia Social que Ninguém Percebeu

Pretexting, autoridade inventada e confiança contextual: Identity, Authentication e Authorization não são a mesma coisa.

Engenharia Social • Pretexting • Identity • Authentication
4

“Você Conhece o Diretor Rooney?” — OSINT Antes do Google Existir

Como dados públicos sobre pessoas, tecnologias, hábitos, empresas e relacionamentos podem revelar uma superfície de ataque antes do primeiro scan.

OSINT • Recon • LinkedIn • GitHub • Attack Surface
5

Cameron, Atenda o Telefone — Social Engineering as a Service

Ferris → Cameron → telefone → escola → funcionário → sistema. Nenhuma peça precisa falhar sozinha quando a cadeia inteira possui uma combinação explorável de confiança.

Social Engineering • Swiss Cheese Model • Human Risk
6

O Diretor Rooney Está Procurando Malware no Lugar Errado

Firewall, SIEM, EDR e Zero Trust podem funcionar perfeitamente enquanto engenharia social, Help Desk e processos humanos criam outro caminho até o objetivo.

SOC • SIEM • EDR • Zero Trust • Engenharia Social
7

A Ferrari do Cameron Não Tinha MFA

Privilégio, acesso físico, MFA, PAM, least privilege e o risco de proteger um ativo crítico apenas com medo, confiança e a esperança de que ninguém ousará tocá-lo.

MFA • PAM • Least Privilege • Privileged Access
8

Colocamos a Ferrari em Ré — Por Que Rollback Não É Backup

Rollback, restore, journaling, logs, Db2, VSAM e recuperação: voltar o estado de um sistema não significa apagar as consequências daquilo que aconteceu.

Backup • Restore • Rollback • Db2 • VSAM • Recovery
9

Rooney Invadiu a Casa Errada — Quando o Blue Team Vira o Próprio Incidente

Confirmation Bias, tunnel vision, Sunk Cost, Authority Gradient e o risco de uma resposta defensiva criar mais impacto que o próprio atacante.

Blue Team • SOC • Cognitive Bias • Incident Response
10

FerrisGPT — Agora o Adolescente Tem um Exército de Estagiários Sintéticos

IA generativa, agentes, OSINT automatizado, deepfake, voice cloning e automação transformam o ataque artesanal em uma capacidade paralela e escalável.

Generative AI • Agents • Deepfake • Voice Cloning • OSINT
11

Ferris Entra no Mainframe — RACF, z/OS e o Dia em que SPECIAL Virou o Passe para Chicago

RACF, SAF, ACEE, APF, USS, TSO, CICS, Db2, MQ, z/OS Connect, Zowe e service accounts vistos pela ótica dos caminhos de ataque até o mainframe.

Mainframe • RACF • z/OS • CICS • Db2 • MQ • Zowe
12

“A Vida Passa Muito Rápido” — O Red Team Depois que Todo Mundo Foi Embora

Red Team não termina em “conseguimos entrar”. Ataque deve gerar descoberta, evidência, correção, detecção e aprendizado para deixar a organização mais resiliente.

Red Teaming • Purple Team • Detection • Resilience • Learning

🎬 Página principal da temporada

Ferris Bueller’s Red Team: Como Hackear o Sistema Sem Precisar Roubar a Ferrari do Cameron reúne os doze episódios e conecta Red Team, engenharia social, IA, Blue Team e segurança de mainframe.

☕ Acessar o especial completo SAVE FERRIS

Sobre a série SAVE FERRIS — Red Team

A série SAVE FERRIS, publicada no Bellacosa Mainframe, utiliza situações inspiradas em Ferris Bueller para explicar conceitos de Red Team, cybersecurity, segurança ofensiva, engenharia social, OSINT, Blue Team, Purple Team, Zero Trust, MFA, PAM, inteligência artificial, RACF, IBM z/OS, CICS, Db2, MQ e segurança de mainframe.

O fio condutor é simples: um atacante não precisa necessariamente quebrar a tecnologia. Ele pode explorar relações de confiança, processos, identidades, privilégios, integrações e suposições existentes entre pessoas e sistemas.

A temporada acompanha o ciclo completo: reconhecimento → engenharia social → acesso → privilégio → impacto → detecção → correção → aprendizado.

Para Red Teams e Blue Teams, o objetivo final não é provar quem é mais inteligente, mas encontrar caminhos invisíveis antes que um adversário real os descubra.

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...