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

domingo, 22 de setembro de 2024

IBM Z Mainframe Security — 33 Anos de TCP/IP e o Dia em que Igor Instalou uma Porta para a Internet no Castelo

 
Bellacosa Mainframe e uma pequena historia sobre o tcp/ip sna e protocolos de rede no mundo mainframe e alem

☕ Um Café no Bellacosa Mainframe

IBM Z Mainframe Security — 33 Anos de TCP/IP e o Dia em que Igor Instalou uma Porta para a Internet no Castelo

Ou: o IBM Z continuou sendo um dos cofres mais sofisticados do planeta, mas alguém conectou Ethernet, TN3270, FTP, UNIX, APIs REST e pipelines DevOps — enquanto Igor jurava que UID(0) era apenas o número do crachá do laboratório



Prólogo — Igor, conecte o cabo. Qual cabo, doutor?

Imagine a seguinte cena.

Estamos em 1991. O datacenter está mergulhado naquela penumbra respeitável das grandes instalações. Há unidades de fita, controladoras, canais, terminais 3270, operadores carregando cartuchos 3480 e um mainframe processando a folha de pagamento de milhares de pessoas sem precisar reiniciar toda terça-feira.

No centro do laboratório, protegido por SNA, VTAM, controladoras, LUs e uma quantidade de siglas suficiente para assustar até um auditor, encontra-se o IBM Mainframe.

— Igor! — grita o doutor. — Precisamos conectar o RS/6000 ao mainframe!

— Excelente ideia, mestre! Trouxe um cabo Ethernet, um controlador 3172 e este livrinho sobre uma coisa chamada TCP/IP!

— Igor… de onde veio esse TCP/IP?

— Estava numa caixa marcada “Abby Normal Networking”.

O raio cai.

As luzes piscam.

O controlador 3172 desperta.

E, naquele instante simbólico, o mainframe deixa de conversar apenas dentro de seu universo proprietário e passa a participar de uma rede baseada nos mesmos protocolos usados por estações UNIX, servidores, computadores pessoais e, futuramente, pela Internet.

O monstro abre os olhos.

— Está vivo!

Sim, estava vivo. E agora tinha endereço IP.

Essa é a história dos aproximadamente 35 anos de convivência entre TCP/IP e IBM Z. Não é uma história sobre o TCP/IP ter destruído a segurança do mainframe. É a história de como um ambiente extremamente especializado ganhou os benefícios — e também os riscos — de participar de uma rede universal.

A grande conclusão pode ser colocada dentro da WORKING-STORAGE:

01  SEGURANCA-DO-MAINFRAME.
    05 PLATAFORMA-SECURAVEL PIC X(03) VALUE 'SIM'.
    05 AMBIENTE-SEGURO      PIC X(07) VALUE 'DEPENDE'.

O IBM Z é uma plataforma extraordinariamente securável.

Mas “securável” não é sinônimo de “segura”.


1. Securável não significa automaticamente segura

Quando alguém afirma que o IBM Z é uma das plataformas mais seguras do mundo, existe uma boa razão.

Ao longo de décadas, a arquitetura acumulou mecanismos como:

  • isolamento por LPAR;

  • proteção de memória;

  • níveis de autorização;

  • RACF, ACF2 ou Top Secret;

  • System Authorization Facility, o SAF;

  • registros SMF;

  • separação entre usuários, grupos e processos;

  • criptografia em hardware;

  • gerenciamento de certificados;

  • proteção de bibliotecas autorizadas;

  • controle de datasets;

  • controle de comandos;

  • auditoria de acessos;

  • segurança para CICS, IMS, Db2, MQ e USS;

  • IP filtering;

  • IPsec;

  • AT-TLS;

  • zERT;

  • controle de portas;

  • detecção de intrusão.

É um belo laboratório.

O problema começa quando Igor encontra uma configuração difícil e resolve aplicar o método científico conhecido como:

“Dê autoridade total, faça funcionar e depois a gente revisa.”

O “depois” geralmente ocorre quinze anos mais tarde, durante uma auditoria, quando ninguém mais se lembra por que uma started task precisa de UID(0), acesso ALTER a uma árvore inteira de datasets e permissão para usar uma porta que oficialmente foi desativada em 2007.

A diferença é simples:

Securável é aquilo que a plataforma permite fazer.

Seguro é aquilo que a organização realmente configurou, monitorou, testou e manteve.

Um cofre pode possuir aço reforçado, sensores, câmeras e fechadura biométrica. Se alguém deixar a porta aberta porque o fornecedor precisava entregar café, a resistência do aço deixa de ser a questão principal.


2. Antes do TCP/IP: o castelo protegido por SNA

Para o programador COBOL iniciante, SNA pode parecer uma criatura encontrada nos porões do museu da IBM.

SNA significa Systems Network Architecture. Durante muitos anos, foi o grande modelo de comunicação dos ambientes IBM.

Nele apareciam conceitos como:

  • VTAM;

  • unidades físicas;

  • unidades lógicas;

  • LUs;

  • sessões;

  • BIND;

  • controladores;

  • subáreas;

  • APPN;

  • LU 6.2;

  • terminais 3270.

Não era uma arquitetura simples para um desconhecido.

Para alcançar uma aplicação, não bastava perguntar:

Qual é o endereço IP?
Qual é a porta?

Era necessário conhecer uma topologia e um conjunto de protocolos muito específicos do universo IBM.

Isso criava uma barreira natural. Um invasor familiarizado apenas com PCs, DOS ou UNIX podia olhar para aquele ambiente como Igor olhando para uma JCL de cinquenta passos:

— Doutor, tenho certeza de que isto faz alguma coisa, mas não pretendo encostar.

Entretanto, não devemos romantizar essa barreira.

SNA não era segura apenas porque poucas pessoas a conheciam. Obscuridade pode aumentar o esforço necessário para um ataque, mas não substitui autenticação, autorização, criptografia, segmentação e monitoramento.

O castelo era difícil de compreender. Isso não significa que suas muralhas não precisassem ser inspecionadas.

Curiosidade de laboratório

Muitas transações bancárias e corporativas que o consumidor executava sem pensar — inclusive operações em terminais e caixas eletrônicos — passavam por uma infraestrutura baseada em tecnologias IBM, CICS, IMS, VTAM e SNA.

Contudo, seria exagerado dizer que SNA é simplesmente “o protocolo de transação do CICS e do IMS”. Esses subsistemas evoluíram e suportam diferentes formas de comunicação. Hoje podem conversar por TCP/IP, MQ, APIs, conectores e diversas outras interfaces.

O monstro recebeu novos braços. Ele não precisou arrancar os antigos.


3. O controlador 3172 e a nova avenida até o mainframe

No início da década de 1990, empresas começaram a integrar seus mainframes com estações RS/6000 executando AIX e outras máquinas presentes em redes locais.

Um dos equipamentos importantes nessa transição foi o IBM 3172 Interconnect Controller.

Pense nele como um tradutor instalado na entrada do castelo. De um lado, o universo dos canais e do mainframe. Do outro, Ethernet, Token Ring, FDDI e os protocolos que circulavam pela rede corporativa.

O benefício era gigantesco:

  • integração entre plataformas;

  • transferência de arquivos;

  • acesso remoto;

  • compartilhamento de recursos;

  • comunicação com UNIX;

  • substituição progressiva de terminais físicos por emuladores;

  • utilização de padrões abertos.

Mas a consequência arquitetônica era igualmente importante:

Do ponto de vista da rede, o mainframe agora era um nó IP.

Isso não significa que ele tenha perdido sua arquitetura interna. LPAR, SAF, RACF e proteção de memória continuavam existindo.

Significa que agora havia uma avenida padronizada chegando até ele.

Um endereço IP pode representar:

  • uma interface;

  • um serviço;

  • uma rota;

  • uma possibilidade de administração;

  • uma dependência;

  • uma entrada;

  • uma saída;

  • uma superfície de ataque.

O protocolo não é culpado. A questão é quem consegue alcançar o endereço, quais portas estão disponíveis, que serviços escutam nessas portas e como esses serviços foram protegidos.


4. TN3270: o terminal verde mudou de roupa

Antes, era comum encontrar terminais 3270 físicos ligados à infraestrutura IBM.

Com o TN3270, um computador pessoal passou a executar um emulador de terminal e estabelecer uma conexão sobre TCP/IP.

Para o usuário, o resultado parecia familiar: a velha tela verde.

Por baixo do capô, porém, o caminho havia mudado.

De maneira simplificada:

  1. O computador abre uma conexão TCP.

  2. O cliente e o servidor negociam TN3270 ou TN3270E.

  3. O servidor Telnet do z/OS recebe a sessão.

  4. Uma LU pode ser selecionada ou associada.

  5. O VTAM conduz a sessão até uma aplicação.

  6. O usuário encontra TSO, CICS ou outro destino.

  7. SAF e o gerenciador de segurança participam da autenticação e autorização.

Portanto, TN3270 não simplesmente matou SNA.

Em muitos cenários, TCP/IP passou a levar o usuário até uma fronteira na qual VTAM e os conceitos 3270 continuavam trabalhando.

É como substituir a estrada de terra até o castelo por uma rodovia asfaltada. O salão interno continua o mesmo, mas muito mais gente conhece o caminho até a portaria.

O perigo do terminal sem proteção

Considere um ambiente antigo:

  • TN3270 disponível numa rede extensa;

  • ausência de TLS;

  • tela de logon identificando claramente a organização;

  • mensagens diferentes para usuário válido e inválido;

  • IDs antigos ainda ativos;

  • pouca correlação entre tentativas de acesso;

  • emuladores sem controle;

  • credenciais reutilizadas.

Um atacante não precisa “quebrar o mainframe”. Ele pode capturar uma credencial antes de ela chegar ao RACF.

Depois, quando fizer logon, o sistema verá uma identidade aparentemente legítima.

O RACF terá feito seu trabalho corretamente. Quem falhou foi o caminho anterior à catraca.

Como proteger TN3270

Uma implementação moderna deve considerar:

  • TLS obrigatório;

  • protocolos e cifras atualizados;

  • certificados corretamente administrados;

  • limitação das redes de origem;

  • associação controlada de LUs;

  • restrição das aplicações disponíveis;

  • autenticação baseada em SAF;

  • certificados de cliente quando apropriado;

  • limitação de tentativas;

  • monitoramento dos registros;

  • mensagens que não facilitem enumeração de usuários;

  • MFA ou mecanismos equivalentes onde a arquitetura permitir.

Eis o primeiro princípio de Igor:

Uma tela verde não fica invisível apenas porque combina com a parede do laboratório.


5. OpenEdition, OMVS e o UNIX escondido no porão

A chegada do TCP/IP coincidiu com outra transformação importante: a introdução de um ambiente compatível com POSIX no sistema operacional.

Primeiro veio OpenEdition MVS. Depois, esse universo evoluiu para aquilo que hoje chamamos de z/OS UNIX System Services, ou USS.

O sysprog acostumado com:

  • datasets;

  • catálogos;

  • PDS e PDSE;

  • JCL;

  • TSO;

  • RACF;

  • comandos MVS;

passou a precisar entender:

  • diretórios;

  • arquivos;

  • proprietário;

  • grupo;

  • permissões;

  • UID;

  • GID;

  • processos;

  • shells;

  • daemons;

  • links simbólicos;

  • sockets;

  • sistemas de arquivos HFS e posteriormente zFS;

  • variáveis de ambiente.

Foi como encontrar uma escada atrás do painel do ISPF e descobrir que existia um UNIX inteiro morando no porão.

— Igor, por que há um diretório /etc dentro do mainframe?

— Não sei, doutor. Mas encontrei também /var, /tmp e uma criatura chamada inetd.

O problema não era apenas técnico. Era cultural.

Muitos profissionais dominavam profundamente MVS, JES2, VTAM, CICS e storage, mas não tinham sido formados em UNIX. Outros especialistas conheciam UNIX e TCP/IP, mas não compreendiam RACF, APF, SAF, subsistemas ou integridade do z/OS.

O risco crescia justamente no espaço entre as equipes.


6. A dupla identidade: RACF encontra UID e GID

No ambiente tradicional, um usuário possui uma identidade conhecida pelo gerenciador de segurança:

BELLACO

Quando esse usuário também precisa utilizar USS, seu perfil recebe um segmento OMVS contendo informações como:

UID
GID
HOME
PROGRAM

Assim, o mesmo indivíduo passa a existir nos dois mundos.

No universo z/OS tradicional, sua autoridade é controlada por perfis, classes, grupos e permissões do ESM.

No universo UNIX, entram também:

  • proprietário;

  • grupo;

  • bits de permissão;

  • ACLs;

  • UID;

  • GID;

  • perfis da classe UNIXPRIV;

  • recursos BPX;

  • controle de programas.

Isso não significa que USS seja um sistema separado abandonado no porão. A segurança UNIX é integrada ao SAF e ao gerenciador de segurança.

Mas essa integração só funciona adequadamente se for configurada e compreendida.

Exemplo para o COBOLzeiro

Imagine um programa COBOL que precisa ler um arquivo no USS.

Não basta considerar apenas:

O usuário tem acesso ao dataset?

Agora é necessário verificar:

  • quem é o proprietário do arquivo;

  • qual é o grupo;

  • quais permissões estão ativas;

  • se existe ACL;

  • qual UID executa o processo;

  • como a aplicação foi iniciada;

  • se há privilégios adicionais;

  • se o caminho inteiro até o arquivo permite acesso;

  • se um link simbólico pode redirecionar a operação.

É uma segunda árvore de decisões de segurança.


7. UID(0): a chave mestra encontrada no bolso de Igor

No UNIX, UID 0 representa o superusuário.

Ele possui uma capacidade extraordinária dentro do ambiente USS.

Não é tecnicamente idêntico a conceder SPECIAL no RACF, pois os domínios são diferentes. Entretanto, a comparação ajuda o iniciante a compreender o tamanho do risco.

Durante décadas, alguns procedimentos de instalação disseram:

“Defina a started task com UID(0).”

Em certos casos, isso podia ser tecnicamente necessário. Em outros, era apenas uma forma rápida de evitar o trabalho de descobrir quais privilégios específicos o produto realmente exigia.

O fluxo era conhecido:

  1. O software falhava durante a instalação.

  2. O fornecedor dizia que faltava autoridade.

  3. Alguém atribuía UID(0).

  4. O produto funcionava.

  5. A mudança entrava em produção.

  6. A revisão ficava para depois.

  7. Quinze anos mais tarde, ninguém sabia remover o privilégio.

É o famoso padrão PERFORM ATE-QUE-FUNCIONE.

O z/OS oferece mecanismos mais granulares, incluindo perfis como:

  • BPX.SUPERUSER;

  • BPX.DAEMON;

  • BPX.SERVER;

  • recursos da classe UNIXPRIV;

  • program control;

  • permissões específicas de filesystem.

A solução correta deve ser determinada conforme o produto e a função necessária.

O princípio é o menor privilégio:

Se o processo precisa abrir uma porta, não lhe dê autoridade para ressuscitar todos os mortos do cemitério.

Dica prática

Crie um inventário contendo:

  • todos os usuários com UID(0);

  • justificativa;

  • produto responsável;

  • proprietário técnico;

  • documentação do fornecedor;

  • alternativa granular disponível;

  • data da última revisão;

  • plano de remoção ou aceitação formal do risco.

Se ninguém souber explicar por que o privilégio existe, ele já merece investigação.


8. TCP/IP não enfraqueceu o mainframe: ampliou a superfície

É tentador dizer que a chegada do TCP/IP aumentou “exponencialmente” a probabilidade de ataque.

A ideia geral faz sentido, mas a palavra “exponencialmente” exigiria evidência matemática. O que podemos afirmar com segurança é que TCP/IP produziu três mudanças fundamentais.

8.1 Padronização

Atacantes e administradores conhecem:

  • TCP;

  • UDP;

  • portas;

  • DNS;

  • FTP;

  • Telnet;

  • SSH;

  • HTTP;

  • TLS;

  • APIs.

Já não é necessário dominar toda a arquitetura SNA para começar a reconhecer o ambiente.

8.2 Alcance

Um terminal físico tinha localização e conexão relativamente previsíveis.

Uma porta TCP pode ser alcançada por:

  • outra VLAN;

  • uma VPN;

  • um parceiro;

  • um servidor comprometido;

  • uma estação administrativa;

  • uma nuvem;

  • uma conexão de contingência;

  • ou, por erro de configuração, pela Internet.

8.3 Multiplicação de serviços

O assunto deixou de ser apenas TN3270.

Hoje o IBM Z pode oferecer ou consumir:

  • FTP e FTPS;

  • SSH e SFTP;

  • DNS;

  • SMTP;

  • SNMP;

  • NFS;

  • MQ;

  • APIs REST;

  • z/OSMF;

  • Zowe;

  • z/OS Connect;

  • servidores Java;

  • bancos de dados;

  • agentes de monitoramento;

  • serviços DevOps;

  • integrações com cloud e OpenShift.

Cada serviço traz:

  • uma porta;

  • uma identidade;

  • uma configuração;

  • certificados;

  • bibliotecas;

  • logs;

  • dependências;

  • vulnerabilidades;

  • um ciclo de atualização.


9. As sete portas do castelo

Para compreender segurança TCP/IP no z/OS, pense em sete camadas.

Porta 1 — Alcance de rede

Quem consegue chegar ao endereço?

Aqui entram:

  • firewalls;

  • VLANs;

  • roteamento;

  • VPN;

  • segmentação;

  • redes administrativas;

  • zonas de segurança;

  • controle de entrada e saída.

Se um serviço é usado apenas pela equipe interna, não deveria estar acessível a uma rede muito maior que a necessária.

Porta 2 — A pilha TCP/IP

O que a stack aceitará?

O z/OS Communications Server oferece controles como:

  • IP filtering;

  • IPsec;

  • múltiplas stacks;

  • políticas;

  • IDS;

  • restrições por interface;

  • controle de roteamento;

  • proteção de VIPAs.

Porta 3 — A porta propriamente dita

Qual processo pode abrir ou usar determinado número de porta?

As definições PORT e PORTRANGE, junto aos controles SAF, ajudam a reservar portas para aplicações e identidades específicas.

Imagine que a porta 5000 pertença à started task PAGADOR.

Sem reserva apropriada, outro processo poderia tentar ocupar a porta quando o serviço legítimo estivesse parado.

Com controle adequado, a stack sabe que aquela porta pertence ao serviço autorizado.

Porta 4 — O transporte

Os dados viajam protegidos?

Aqui entram:

  • TLS;

  • AT-TLS;

  • SSH;

  • IPsec;

  • certificados;

  • algoritmos;

  • key rings.

Uma conexão autenticada, mas transmitida em claro, ainda pode expor credenciais e informações.

Porta 5 — A identidade

Quem é o usuário ou processo?

Aqui trabalham:

  • SAF;

  • RACF;

  • ACF2;

  • Top Secret;

  • certificados;

  • IDs técnicos;

  • grupos;

  • perfis;

  • passphrases;

  • autenticação multifator.

Porta 6 — A aplicação

Mesmo autenticado, o que o usuário pode fazer?

É nesse ponto que entram:

  • transações CICS;

  • comandos;

  • recursos Db2;

  • filas MQ;

  • APIs;

  • datasets;

  • funções administrativas;

  • regras de negócio.

Autenticação responde “quem é você?”. Autorização responde “o que você pode fazer?”. A lógica de negócio ainda precisa responder “esta operação faz sentido?”.

Porta 7 — A evidência

Se algo acontecer, saberemos?

Aqui entram:

  • SMF;

  • logs de aplicação;

  • registros RACF;

  • SMF 119;

  • zERT;

  • SIEM;

  • alertas;

  • correlação;

  • retenção;

  • investigação.

Um log que ninguém lê é apenas o diário secreto do monstro.


10. SAF também protege a rede

O iniciante frequentemente associa SAF apenas à tentativa de abrir um dataset.

Mas o Communications Server também pode consultar SAF para decisões relacionadas à rede.

A classe SERVAUTH, por exemplo, pode participar de controles associados a:

  • acesso a redes;

  • utilização de portas;

  • serviços;

  • funções administrativas;

  • recursos Telnet;

  • comandos do Communications Server.

Isso permite sair de uma decisão simples:

A porta está aberta?

E chegar a uma decisão mais madura:

Esta identidade está autorizada a utilizar esta função de rede?

A porta não deve ser apenas um número escutando no escuro. Ela deve possuir proprietário, aplicação, identidade, justificativa e monitoramento.

Dica do Igor

Crie uma tabela para cada stack TCP/IP:

PortaServiçoStarted taskCriptografiaOrigem permitidaProprietário
992TN3270 seguroTN3270TLSRede corporativaInfraestrutura
22SSH/SFTPSSHDSSHRede administrativaSegurança
443APIZOSCONNTLSGateway autorizadoAplicações

Se aparecer uma porta que ninguém reconhece, não pergunte primeiro se pode fechá-la.

Pergunte por que uma porta desconhecida conseguiu permanecer aberta.


11. AT-TLS: colocando criptografia sem operar o coração do COBOL

AT-TLS significa Application Transparent Transport Layer Security.

Imagine uma aplicação antiga que utiliza sockets TCP, mas não sabe executar TLS. Alterar seu programa-fonte pode ser caro, arriscado ou demorado.

Com AT-TLS, o Communications Server pode aplicar TLS conforme políticas administradas pelo Policy Agent.

Para a aplicação, a comunicação ainda pode parecer um socket comum. A pilha realiza a negociação criptográfica.

É como se Igor colocasse um casaco blindado no pacote sem precisar modificar o cérebro da criatura.

Mas existe um detalhe importante: o AT-TLS não é magia.

É necessário definir:

  • qual tráfego será protegido;

  • origem e destino;

  • porta;

  • direção;

  • protocolos TLS permitidos;

  • certificados;

  • key rings;

  • autenticação do cliente;

  • comportamento em caso de falha;

  • registro e monitoramento.

Uma política configurada de maneira errada pode proteger o tráfego errado ou permitir comunicação sem TLS quando a intenção era bloqueá-la.

Por isso, não basta perguntar:

“Temos AT-TLS?”

A pergunta correta é:

“Quais conexões estão realmente protegidas, por qual política, usando qual versão de TLS e qual certificado?”


12. zERT: o inspetor que verifica se o casaco foi realmente vestido

zERT significa z/OS Encryption Readiness Technology.

Ele ajuda a descobrir e registrar atributos criptográficos das conexões.

Isso permite verificar:

  • se a conexão utilizou criptografia;

  • qual protocolo foi negociado;

  • qual versão;

  • quais algoritmos;

  • quais características de proteção;

  • quais fluxos permanecem sem criptografia.

Essa distinção é fundamental.

A documentação da aplicação pode dizer:

TODAS AS CONEXÕES DEVEM USAR TLS.

Mas a realidade pode ser:

97% usam TLS.
2% usam configuração antiga.
1% atravessa o laboratório sem calças.

O zERT ajuda a encontrar esse 1%.

A segurança madura não confia apenas na intenção da configuração. Ela observa o comportamento real.


13. SMF 119: a câmera da portaria

O Communications Server pode produzir registros SMF 119 relacionados a:

  • início e término de conexões;

  • estatísticas TCP/IP;

  • portas;

  • FTP;

  • túneis IPsec;

  • DVIPAs;

  • TN3270;

  • informações coletadas pelo zERT.

Com esses registros, a organização pode investigar:

  • quem se conectou;

  • quando;

  • de qual endereço;

  • em qual porta;

  • por quanto tempo;

  • usando qual proteção;

  • com qual comportamento;

  • em que volume.

Mas registrar não basta.

O processo ideal é:

  1. Coletar os registros.

  2. Preservá-los.

  3. Normalizá-los.

  4. Enviá-los ao SIEM.

  5. Correlacioná-los com RACF, CICS, Db2, USS e firewall.

  6. Criar alertas úteis.

  7. Investigar os desvios.

  8. Aprender com os incidentes.

Se o atacante fizer mil tentativas de conexão e o registro dormir numa fita até a auditoria anual, o sistema possui evidência, mas não possui defesa operacional.


14. Auditoria, STIG e pentest: os três médicos do monstro

Uma auditoria de segurança continua sendo importante.

Ela verifica políticas, segregação de funções, controles, evidências, conformidade e governança.

As STIGs ajudam a comparar configurações com baselines de endurecimento.

O IBM Health Checker pode examinar configurações ativas e compará-las com recomendações ou políticas definidas pela organização.

O pentest faz outra pergunta:

Um atacante autorizado consegue transformar essas fraquezas em impacto real?

Nenhuma dessas atividades substitui as demais.

Auditoria

Pergunta se o processo e os controles existem e são cumpridos.

Baseline ou STIG

Pergunta se a configuração está alinhada a um padrão seguro.

Vulnerability assessment

Procura vulnerabilidades conhecidas.

Pentest

Tenta explorar caminhos autorizados dentro de um escopo definido.

Purple team

Coloca atacantes e defensores colaborando para melhorar prevenção, detecção e resposta.

Monitoramento contínuo

Pergunta o que mudou depois da última fotografia.

Passar numa auditoria em março não prova que o ambiente continua seguro em agosto.

Segurança não é um JOB que termina com:

IEF142I SECURITY STEP WAS EXECUTED
MAXCC=0000

É uma started task permanente.


15. O atacante também ganhou um emulador

Em 1999, o projeto Hercules tornou possível emular arquiteturas mainframe em computadores comuns.

Seu valor educacional é imenso. Estudantes, pesquisadores e desenvolvedores passaram a experimentar sistemas históricos sem possuir um mainframe físico.

Documentação eletrônica, manuais, fóruns, ferramentas e ambientes de laboratório também reduziram a barreira de entrada.

Isso não significa que Hercules tenha “causado” invasões.

A ferramenta democratizou conhecimento. O mesmo conhecimento pode ser utilizado por:

  • estudantes;

  • desenvolvedores;

  • administradores;

  • pesquisadores;

  • pentesters;

  • atacantes.

O problema começa quando o invasor estuda o ambiente com mais profundidade que a equipe responsável por defendê-lo.

Hoje existem scanners e ferramentas capazes de reconhecer TN3270, identificar telas, testar configurações e auxiliar pesquisas de segurança.

O atacante já não está tateando no escuro.

Ele possui:

  • documentação;

  • scripts;

  • automação;

  • ambientes de teste;

  • mecanismos de busca;

  • inteligência artificial;

  • décadas de conhecimento acumulado.

Igor já não precisa roubar o manual do laboratório. Ele pode baixá-lo.


16. Três ataques que não precisam “quebrar o mainframe”

Primeiro ataque — roubar a credencial antes do RACF

  1. O usuário conecta-se por um protocolo sem criptografia.

  2. A rede utilizada está comprometida.

  3. A credencial é capturada.

  4. O atacante faz logon.

  5. O RACF reconhece uma identidade válida.

O RACF não foi derrotado. A credencial foi roubada antes da catraca.

Segundo ataque — explorar uma started task privilegiada

  1. Um produto executa com UID(0).

  2. O produto possui uma vulnerabilidade.

  3. O invasor compromete o processo.

  4. A autoridade excessiva amplia o impacto.

  5. A falha do produto torna-se uma falha do ambiente.

Por isso, menor privilégio limita o chamado raio da explosão.

Terceiro ataque — usar corretamente uma API mal protegida

  1. Uma credencial técnica de parceiro é comprometida.

  2. O atacante envia uma requisição formalmente válida.

  3. TLS funciona.

  4. O certificado funciona.

  5. RACF autoriza a conta.

  6. A aplicação não percebe que a transação é fraudulenta.

Tudo funcionou conforme configurado.

Esse é o terror elegante da segurança: controles técnicos corretos podem proteger uma operação de negócio mal concebida.


17. A arqueologia das configurações esquecidas

Os maiores riscos nem sempre foram instalados ontem.

Muitas vezes estão preservados como fósseis:

  • FTP ativo sem necessidade;

  • conta genérica sem proprietário;

  • UID(0) concedido em 1998;

  • diretório USS com permissão excessiva;

  • porta liberada para um parceiro que não existe mais;

  • segunda stack TCP/IP esquecida;

  • LPAR de contingência menos protegida;

  • certificado antigo;

  • started task com autoridade exagerada;

  • biblioteca APF contendo software desatualizado;

  • regra de firewall criada “temporariamente”;

  • usuário de emergência usado no cotidiano.

A longevidade é uma das maiores virtudes do mainframe.

Mas longevidade sem revisão transforma compatibilidade em dívida histórica de segurança.

Dica prática

Para cada exceção, registre:

  • o que é;

  • por que existe;

  • quem é o proprietário;

  • qual risco produz;

  • qual sistema depende dela;

  • quando foi revisada;

  • quando será removida;

  • qual controle compensatório existe.

Se a justificativa for “sempre foi assim”, Igor encontrou outro cérebro Abby Normal.


18. Passphrases: o parafuso estava invertido

O texto original afirma que passphrases seriam exponencialmente mais fáceis de quebrar que passwords.

Provavelmente houve uma inversão.

Uma passphrase longa, imprevisível e não reutilizada tende a ser muito mais resistente que uma senha curta.

Compare:

Senha curta:
V@gner12

Com uma frase longa e exclusiva:

Cafe-Lunar-Visita-7-Mainframes-Curiosos

Isso não significa copiar uma frase famosa, uma letra de música ou uma citação encontrada no LinkedIn. Comprimento sem imprevisibilidade pode criar apenas uma senha longa e óbvia.

Também não basta trocar senhas por passphrases e esquecer:

  • MFA;

  • bloqueio de credenciais comprometidas;

  • proteção contra phishing;

  • monitoração;

  • gerenciamento de contas;

  • autenticação por certificados;

  • passkeys onde aplicáveis.

E nunca devemos expor publicamente as senhas encontradas durante uma auditoria. A equipe pode apresentar padrões, categorias e estatísticas sem constranger usuários nem divulgar credenciais.

O objetivo é ensinar, não realizar um episódio de “Frau Blücher lê as senhas no auditório” — e todos os cavalos do datacenter relincham.


19. Computação quântica: o monstro ainda não comeu toda a criptografia

Existe uma ameaça real chamada harvest now, decrypt later.

Um adversário pode capturar dados criptografados hoje e guardá-los para tentar decifrá-los no futuro, quando computadores quânticos suficientemente poderosos estiverem disponíveis.

Mas isso não significa que toda criptografia desaparecerá de uma vez.

A preocupação principal envolve certos algoritmos de chave pública, como RSA e criptografia baseada em curvas elípticas.

O caminho correto é desenvolver criptoagilidade.

Passo a passo

  1. Inventarie certificados e algoritmos.

  2. Descubra onde RSA e ECC são utilizados.

  3. Identifique dados que precisam permanecer secretos por muitos anos.

  4. Localize protocolos e aplicações difíceis de atualizar.

  5. Avalie fornecedores e parceiros.

  6. Planeje a adoção de algoritmos pós-quânticos.

  7. Teste mecanismos híbridos.

  8. Defina renovação e substituição de certificados.

  9. Considere arquivos e backups conforme sua vida útil e sensibilidade.

  10. Repita o inventário periodicamente.

Não é necessário recriptografar, às cegas, cada cartucho produzido desde o Império Romano.

É necessário saber quais dados continuam sensíveis, quais algoritmos os protegem e quanto tempo essa proteção precisa durar.


20. O honeypot de Igor

A ideia de criar um ambiente isolado para observar tentativas de ataque pode ser útil.

Mas não devemos simplesmente abrir uma porta na Internet ligada à produção e anunciar:

— Igor, veja quem aparece!

Um laboratório, cyber range ou honeypot deve possuir:

  • autorização formal;

  • isolamento completo;

  • nenhuma informação verdadeira;

  • identidades artificiais;

  • controle de saída;

  • monitoramento detalhado;

  • limites de recursos;

  • plano de reconstrução;

  • ausência de rotas confiáveis para produção;

  • supervisão da equipe de segurança.

O objetivo é estudar o adversário.

Não é oferecer ao adversário um apartamento mobiliado no datacenter.


21. A nova fronteira: APIs, DevOps e nuvem

Em 1991, a discussão principal envolvia Ethernet, RS/6000, TN3270, FTP e UNIX.

Em 2024, a superfície inclui:

  • z/OSMF;

  • Zowe;

  • z/OS Connect;

  • APIs REST;

  • OpenSSH;

  • Git;

  • VS Code;

  • pipelines CI/CD;

  • Ansible;

  • Python;

  • Java;

  • containers;

  • zCX;

  • OpenShift;

  • observabilidade;

  • integração com cloud;

  • tokens;

  • secrets;

  • identidades de serviço;

  • cadeia de suprimentos de software.

Agora o risco pode surgir antes mesmo de o módulo chegar ao mainframe.

Uma credencial comprometida no pipeline pode modificar código. Uma extensão maliciosa pode capturar tokens. Um artefato adulterado pode entrar numa biblioteca. Uma API permissiva pode alcançar uma transação legítima por um caminho que os autores originais jamais imaginaram.

Por isso, modernização e segurança não são dois projetos executados em sequência.

Segurança deve estar dentro da modernização:

  • no desenho;

  • no código;

  • no build;

  • no deploy;

  • na identidade;

  • na rede;

  • nos testes;

  • nos logs;

  • na operação.


22. Plano de 90 dias para apertar os parafusos

Dias 1 a 30 — Descobrir

  1. Inventarie todas as stacks TCP/IP.

  2. Liste interfaces, VIPAs e rotas.

  3. Identifique portas abertas.

  4. Relacione cada porta a uma started task.

  5. Localize TN3270, FTP, SSH, APIs e z/OSMF.

  6. Identifique conexões sem criptografia.

  7. Liste usuários com UID(0).

  8. Examine permissões de arquivos críticos no USS.

  9. Localize IDs genéricos e contas sem proprietário.

  10. Verifique quais registros SMF são produzidos.

Dias 31 a 60 — Reduzir

  1. Feche serviços não utilizados.

  2. Restrinja redes de origem.

  3. Revise regras de firewall.

  4. Implemente ou fortaleça TLS e AT-TLS.

  5. Remova UID(0) quando houver alternativa segura.

  6. Corrija permissões USS.

  7. Desative contas órfãs.

  8. Reserve portas para as identidades corretas.

  9. Atualize produtos e correções.

  10. Documente exceções.

Dias 61 a 90 — Provar

  1. Execute uma avaliação de vulnerabilidades.

  2. Realize pentest autorizado.

  3. Teste controles SAF de rede.

  4. Integre SMF ao SIEM.

  5. Crie alertas para tentativas anormais.

  6. Simule credencial comprometida.

  7. Simule abuso de conta técnica.

  8. Teste resposta a incidente.

  9. Verifique se a equipe detectou o exercício.

  10. Registre riscos residuais e responsáveis.

Depois, execute novamente.

Segurança é um ciclo, não um projeto com festa de encerramento.


23. O encontro das gerações

Existe uma oportunidade maravilhosa nessa transformação.

De um lado, está o profissional veterano que conhece:

  • MVS;

  • RACF;

  • VTAM;

  • JES2;

  • CICS;

  • IMS;

  • canais;

  • integridade;

  • operação;

  • décadas de comportamento do ambiente.

Do outro, está o profissional mais novo que conhece:

  • Linux;

  • UNIX;

  • Python;

  • redes;

  • APIs;

  • VS Code;

  • containers;

  • pentest;

  • SIEM;

  • automação;

  • cloud.

Nenhum deles possui sozinho todo o mapa.

O veterano pode enxergar uma autoridade perigosa que o especialista em Linux não compreende.

O profissional moderno pode reconhecer uma exposição TCP/IP que o especialista tradicional nunca aprendeu a procurar.

Quando trabalham juntos, nasce uma equipe realmente poderosa.

O objetivo não é criar “eles contra nós”.

É colocar Gene Wilder, Igor, o COBOLzeiro, o hacker ético, o administrador RACF e o especialista em redes em volta da mesma mesa — preferencialmente antes da tempestade.


Epílogo — Puttin’ on the Ritz sobre TCP/IP

O IBM Z não perdeu sua segurança quando recebeu TCP/IP.

Ele ganhou conectividade.

E conectividade sempre cobra seu preço em superfície de ataque, complexidade, identidade, configuração e monitoramento.

A plataforma continua oferecendo alguns dos mecanismos defensivos mais sofisticados da indústria. Mas nenhum processador, HSM, ESM ou algoritmo consegue proteger sozinho um ambiente no qual:

  • ninguém revisa as portas;

  • contas antigas continuam ativas;

  • FTP transmite dados em claro;

  • processos executam com UID(0) sem necessidade;

  • certificados são esquecidos;

  • logs não são analisados;

  • exceções temporárias tornam-se permanentes;

  • a auditoria anual é confundida com segurança contínua.

O atacante não precisa derrotar simultaneamente RACF, SAF, LPAR, criptografia, CICS, Db2, VTAM e toda a arquitetura IBM Z.

Ele precisa encontrar apenas:

  • uma credencial;

  • uma porta;

  • uma configuração;

  • um produto vulnerável;

  • uma conta privilegiada;

  • um parceiro comprometido;

  • um diretório mal protegido;

  • um parafuso que Igor esqueceu de apertar.

Por isso, depois de aproximadamente 35 anos de TCP/IP, a pergunta não deve ser:

“O mainframe é seguro?”

A pergunta correta é:

“Nós conseguimos provar, hoje, que cada caminho até o mainframe está identificado, protegido, monitorado e testado?”

Se a resposta for sim, excelente.

Pode chamar a banda.

O mainframe coloca cartola e fraque. Igor sobe no palco. A criatura começa a dançar.

— Puttin’ on the Ritz!

Mas se ninguém souber quem abriu a porta 23, por que determinada started task possui UID(0) ou para onde aquela conexão FTP está enviando arquivos todas as madrugadas…

Bem, companheiro…

Talvez o cérebro instalado no laboratório fosse realmente Abby Normal.

quinta-feira, 17 de outubro de 2019

🕵️ DICK TRACY E O MALWARE QUE NUNCA ENTROU NO MAINFRAME

 

Bellacosa Mainframe e os malwares

☕ Um Café no Bellacosa Mainframe

🕵️ DICK TRACY E O MALWARE QUE NUNCA ENTROU NO MAINFRAME

RACF, vírus, worms, trojans, ransomware, wipers, spyware, infostealers, backdoors, USS, CICS, Db2, MQ, SMF, TCP/IP, Zero Trust — e o dia em que Dick Tracy descobriu que o criminoso não precisava arrombar a porta se já possuía a chave.

Sob a tutela de Dick Tracy, o detetive que sabia que encontrar o corpo era apenas o começo da investigação.



🎬 PRÓLOGO — HÁ UM VÍRUS NO MAINFRAME!

03:17 da manhã.

O telefone tocou.

O jovem programador COBOL acordou assustado.

— Produção está estranha.

— ABEND?

— Não.

— CICS caiu?

— Não.

— Db2?

— Também não.

— Então qual é o problema?

Do outro lado da linha veio a frase que nenhum programador COBOL esperava ouvir:

— Acho que pegamos um vírus.

O jovem olhou para o terminal.

Aquilo parecia absurdo.

Vírus?

No mainframe?

Ele imaginava vírus como aquelas coisas do PC de casa: anexos de e-mail, executáveis suspeitos, propagandas surgindo na tela e programas dizendo:

SEU COMPUTADOR POSSUI 847 AMEAÇAS! CLIQUE AQUI!

No terminal 3270 não havia pop-up.

Não havia ventoinha girando.

Não havia bateria descarregando.

Muito menos um ícone de caveira piscando sobre o ISPF.

Mas havia alguma coisa.

Um job estava consumindo CPU em horário incomum.

Um usuário havia acessado datasets que normalmente nunca consultava.

Um processo no UNIX System Services aparecera durante a madrugada.

E havia tráfego de rede onde ninguém esperava encontrá-lo.

Nesse momento surgiu Dick Tracy.

Ele olhou para o jovem programador e disse:

— Você está procurando um vírus.

— Sim.

— Esse é o primeiro erro.

— Então o que devemos procurar?

Dick Tracy puxou seu famoso relógio comunicador.

— Comportamento.

Bem-vindo ao mundo da segurança no mainframe.



🕵️ CAPÍTULO 1 — MALWARE NÃO É SINÔNIMO DE VÍRUS

Vamos começar pela primeira confusão.

Todo vírus é malware.

Nem todo malware é vírus.

Podemos imaginar:

                    MALWARE
                       │
        ┌──────────────┼──────────────┐
        │              │              │
      Virus           Worm          Trojan
        │              │              │
        ├──────────────┼──────────────┤
        │              │              │
    Ransomware      Spyware       Infostealer
        │              │              │
        ├──────────────┼──────────────┤
        │              │              │
      Wiper         Rootkit        Backdoor

Malware é o grande guarda-chuva.

Um vírus tradicional infecta outros objetos e possui algum mecanismo de propagação.

Um worm procura espalhar-se.

Um Trojan finge ser algo legítimo.

Ransomware tenta produzir extorsão.

Spyware procura observar.

Infostealers roubam informações.

Wipers destroem.

Backdoors criam caminhos escondidos.

A questão interessante para nós é outra:

Como esses conceitos aparecem quando saímos do notebook e entramos no IBM Z?

Não devemos procurar uma tradução literal.

O mainframe possui arquitetura, sistema operacional, segurança, armazenamento, processos e cultura operacional diferentes.

Portanto, Dick Tracy não procuraria VIRUS.EXE.

Ele procuraria evidências.



🏰 CAPÍTULO 2 — O MAINFRAME NÃO É UMA ILHA

Existe uma visão antiga do mainframe:

             ┌─────────────────┐
             │    MAINFRAME    │
             │                 │
             │ COBOL           │
             │ JCL             │
             │ CICS            │
             │ DB2             │
             └─────────────────┘

              Ninguém entra.
              Ninguém sai.

Seria confortável.

Mas não representa um ambiente corporativo moderno.

Podemos encontrar:

Internet
   │
Firewall
   │
Load Balancer
   │
API Gateway
   │
z/OS Connect
   │
CICS
   │
COBOL
   │
Db2

E também:

Aplicação distribuída
       │
       MQ
       │
      z/OS
       │
      CICS
       │
     COBOL

Além disso:

z/OS
 ├── TCP/IP
 ├── UNIX System Services
 ├── SSH
 ├── APIs
 ├── Java
 ├── Python
 ├── MQ
 ├── Db2
 ├── CICS
 └── IMS

Isso não significa que o mainframe seja inseguro.

Significa que ele participa da arquitetura corporativa.

E conectividade significa superfície de ataque.

A pergunta madura não é:

"O mainframe está conectado?"

A pergunta é:

"O que está conectado, através de quê, com qual identidade, utilizando qual protocolo e autorizado a fazer o quê?"

Essa é uma pergunta de Dick Tracy.



🦠 CAPÍTULO 3 — VÍRUS: E SE ALGUÉM ALTERAR O PROGRAMA COBOL?

Imagine:

BANK.PROD.LOADLIB

Dentro dela:

AUTORIZA
CADASTRO
PAGAMENTO
TRANSFER
SALDO

Agora suponha que alguém consiga substituir TRANSFER.

O invasor talvez nem precise criar um mecanismo autorreplicante.

Se TRANSFER for chamado milhares de vezes por dia, a própria arquitetura da aplicação distribui o efeito do programa adulterado.

Esse conceito merece um nome informal:

propagação lógica.

O código não precisa copiar-se para 10.000 lugares.

Um componente central comprometido pode ser executado 10.000 vezes.

Por isso LOADLIBs, bibliotecas de produção, pipelines e processos de deployment são tão importantes.

Perguntas:

Quem pode alterar a LOADLIB?

Quem pode promover programas?

Desenvolvedor pode alterar produção?

O artefato produzido no build é exatamente
o artefato colocado em produção?

Existe rastreabilidade?

O jovem COBOL começa a perceber que segurança não começa quando o programa executa.

Começa muito antes.



🐴 CAPÍTULO 4 — O CAVALO DE TROIA APRENDEU COBOL

Agora imagine este código:

       IF WS-USER-AUTHORIZED = 'Y'
           PERFORM PROCESS-TRANSACTION
       END-IF.

Parece normal.

Mas alguém adiciona:

       IF WS-USER-ID = 'SUPPORT99'
           MOVE 'Y' TO WS-USER-AUTHORIZED
       END-IF.

Pronto.

Talvez não exista vulnerabilidade de memória.

Nenhum buffer overflow.

Nenhum vírus.

O próprio programa possui uma regra escondida.

É uma backdoor lógica.

E aqui nasce uma das razões pelas quais Git, revisão de código e DevSecOps também são mecanismos de segurança.

Precisamos conseguir responder:

Quem escreveu?
       ↓
Quem alterou?
       ↓
Qual commit?
       ↓
Quem revisou?
       ↓
Quem aprovou?
       ↓
Qual build?
       ↓
Qual artefato?
       ↓
Quem promoveu?
       ↓
Quando chegou à produção?

Código-fonte também é evidência forense.

Dick Tracy aprovaria.


🪱 CAPÍTULO 5 — O WORM DESCOBRIU O TCP/IP

Um worm caracteriza-se especialmente pela capacidade de propagação.

No imaginário do programador iniciante:

Mainframe não pega worm porque mainframe não tem Internet.

Ops.

Temos TCP/IP.

Temos aplicações de rede.

Temos USS.

Temos SSH.

Temos APIs.

Temos integração com sistemas distribuídos.

Isso não significa automaticamente que exista um worm esperando para atacar cada LPAR.

Significa apenas que a premissa:

MAINFRAME = COMPUTADOR SEM REDE

está errada.

Uma análise de segurança deve investigar:

Quais portas estão abertas?

Quais serviços estão escutando?

Quais interfaces estão expostas?

Quais protocolos são utilizados?

Existe TLS?

Quem pode conectar?

Que serviço realmente precisa existir?

Aqui segurança encontra arquitetura.


🔐 CAPÍTULO 6 — RANSOMWARE NÃO PRECISA CRIPTOGRAFAR O DASD INTEIRO

Quando pensamos em ransomware, imaginamos:

arquivos
   ↓
criptografia
   ↓
indisponíveis
   ↓
pedido de resgate

Mas ataques modernos podem combinar indisponibilidade, roubo de dados e extorsão.

A chamada dupla extorsão acrescenta:

ROUBAR
  +
CRIPTOGRAFAR

A vítima então enfrenta duas ameaças:

"Se não pagar, você não recupera os dados."

e:

"Se não pagar, divulgamos os dados."

A chamada tripla extorsão pode ampliar a pressão para clientes, parceiros ou outras partes relacionadas.

No mainframe, não precisamos imaginar obrigatoriamente:

ENCRYPT ALL DASD

Um atacante procuraria ativos críticos.

Por exemplo:

Db2
VSAM
IMS
datasets
arquivos USS
configurações
credenciais
aplicações
backups

A questão é impacto.


💀 CAPÍTULO 7 — WIPER: O CRIMINOSO QUE NÃO QUER DINHEIRO

Dick Tracy encontra dois criminosos.

O primeiro diz:

— Dê-me dinheiro e talvez devolva seus dados.

Ransomware.

O segundo diz:

— Não quero dinheiro.

Esse é mais assustador.

Wipers têm como objetivo destruição ou inutilização.

No mundo mainframe, o raciocínio defensivo precisa considerar:

DADOS
  │
  ├── produção
  ├── cópia
  ├── backup
  └── recuperação

Se todas as cópias estiverem acessíveis pela mesma identidade comprometida, temos um problema arquitetural.

Por isso recuperação não pode signific apenas:

"Temos backup."

Precisamos perguntar:

"Um atacante que compromete produção consegue também destruir nossa capacidade de recuperação?"

Essa pergunta muda completamente a conversa.


👁️ CAPÍTULO 8 — SPYWARE: TALVEZ ELE NÃO QUEIRA SEU TECLADO

No PC doméstico, spyware observa atividades.

No mainframe, o prêmio pode estar atrás da aplicação.

Imagine:

CUSTOMER
ACCOUNT
PAYROLL
CARD
CLAIMS
TRANSACTIONS

Se alguém comprometer uma identidade autorizada a consultar essas informações, talvez nem precise instalar spyware no host.

O atacante possui aquilo que realmente queria:

acesso aos dados.

Por isso segurança de banco de dados e segurança do sistema operacional não podem viver isoladamente.

Imagine:

SQL
 │
 ▼
Db2 authorization
 │
 ▼
Db2
 │
 ▼
datasets
 │
 ▼
z/OS

Proteger apenas a porta da frente não basta se houver caminhos laterais inadequadamente protegidos.


🍪 CAPÍTULO 9 — INFOSTEALER: A INFECÇÃO PODE ESTAR FORA DO MAINFRAME

Aqui está uma das maiores armadilhas.

Imagine que o notebook de um administrador seja comprometido.

Um infostealer consegue roubar:

password
token
session
SSH key
API key
certificate
credencial técnica

Depois:

Notebook comprometido
        ↓
credencial roubada
        ↓
VPN
        ↓
ambiente corporativo
        ↓
mainframe

Pergunta:

O mainframe foi infectado?

Talvez não.

Existe um incidente envolvendo o mainframe?

Certamente pode existir.

E agora temos o grande problema:

o criminoso pode parecer um usuário legítimo.


🔑 CAPÍTULO 10 — RACF: DICK TRACY ENCONTRA O PORTEIRO

Chegamos ao RACF.

Para o iniciante:

RACF não é simplesmente:

"onde fica a senha."

Ele participa de um modelo muito maior:

IDENTIDADE
    ↓
AUTENTICAÇÃO
    ↓
AUTORIZAÇÃO
    ↓
RECURSO
    ↓
AUDITORIA

Suponha:

USER01

Quer acessar:

BANK.PROD.CUSTOMER

A pergunta relevante torna-se:

Quem é USER01?

Ele está autenticado?

Qual grupo possui?

Qual perfil protege o recurso?

Qual acesso recebeu?

READ?

UPDATE?

ALTER?

Agora Dick Tracy faz a pergunta incômoda:

E se USER01 estiver sendo utilizado por outra pessoa?

RACF pode estar funcionando corretamente.

A identidade está autenticada.

O acesso está autorizado.

Mas o humano atrás da identidade pode ser o criminoso.

É aí que entram autenticação forte, menor privilégio, auditoria, análise comportamental e Zero Trust.


🚪 CAPÍTULO 11 — A PORTA DOS FUNDOS NÃO PRECISA SER UMA PORTA

Backdoor costuma evocar:

porta TCP secreta

Mas uma backdoor pode ser simplesmente:

       IF USER-ID = 'XYZ123'
           MOVE 'Y' TO AUTHORIZED
       END-IF.

Ou uma conta esquecida.

Ou privilégio temporário que virou permanente.

Ou uma credencial técnica compartilhada.

Ou uma exceção operacional nunca removida.

Essa é uma lição maravilhosa:

Backdoor é um conceito de acesso, não obrigatoriamente uma porta de rede.


🐧 CAPÍTULO 12 — O MALWARE DESCOBRE O USS

O programador COBOL entra no ISPF todos os dias.

Ele conhece:

PDS
PDSE
VSAM
JCL
LOADLIB

Dick Tracy pergunta:

— E /u/app/bin?

Silêncio.

Existe um UNIX dentro do z/OS: UNIX System Services.

Isso muda a superfície de segurança.

Agora temos conceitos como:

directories
files
processes
shell
permissions
UID
GID
SSH
scripts
executables

Portanto, quem investiga segurança z/OS precisa conhecer os dois lados:

Mundo MVSMundo USS
DatasetFile
PDS/PDSEDirectory
JOB/STCProcess
USERIDUID associado
RACFRACF + permissões UNIX
LOADLIBexecutáveis/bibliotecas

O invasor não é obrigado a respeitar a fronteira mental do programador COBOL.

Se você só olha datasets, pode deixar metade da casa sem inspeção.


🤖 CAPÍTULO 13 — BOTNET: 100 MIL ZUMBIS BATENDO NA PORTA

Agora o ataque nem precisa comprometer o z/OS.

Imagine:

PC ─────┐
PC ─────┤
PC ─────┤
PC ─────┤
...     ├──► API ─► z/OS Connect ─► CICS ─► COBOL
PC ─────┤
PC ─────┘

São máquinas comprometidas formando uma botnet.

Milhares ou milhões de requisições podem produzir pressão sobre a infraestrutura.

O programa COBOL pode estar perfeito.

O RACF pode estar perfeito.

O Db2 pode estar perfeito.

Mesmo assim:

requests ↑
CPU ↑
threads/tasks ↑
Db2 work ↑
I/O ↑
latência ↑
filas ↑

Segurança encontrou performance.

E performance encontrou Capacity Planning.


⛏️ CAPÍTULO 14 — CRYPTOMINER: QUANDO CPU ROUBADA VIRA DINHEIRO

Cryptominers roubam recursos computacionais para mineração.

No mainframe, mesmo deixando a mineração específica de lado, o conceito mais amplo é excelente:

consumo computacional não autorizado.

Imagine que o SMF mostre:

00:00  normal
01:00  normal
02:00  normal
03:00  normal
03:17  █████████████████████ CPU
04:00  normal

O analista de performance pergunta:

— Quem consumiu isso?

Essa pergunta pode virar uma investigação de segurança.

SMF, RMF e outras fontes de telemetria não servem somente para Capacity Planning.

Também ajudam a reconstruir:

O QUE aconteceu?

QUANDO?

QUAL workload?

QUAL identidade?

QUAL recurso?

QUAL origem?

QUAL duração?

Observabilidade pode tornar-se ferramenta forense.

E, naturalmente, alguma coisa sempre acontece às 03:17 no Bellacosa Mainframe.

Easter egg encontrado. ☕😉


🕵️ CAPÍTULO 15 — OS 10 SINAIS DE INFECÇÃO, VERSÃO MAINFRAME

Agora podemos reinterpretar o primeiro infográfico.

No PC temos lentidão, pop-ups, bateria, navegador alterado etc.

No mainframe, procure anomalias como:

01 — CPU inesperadamente alta

02 — jobs desconhecidos

03 — STCs inesperadas

04 — processos USS estranhos

05 — acessos RACF fora do padrão

06 — datasets modificados inesperadamente

07 — tráfego TCP/IP anormal

08 — transferência incomum de dados

09 — alterações de configuração

10 — comportamento inesperado de aplicações

Mas atenção.

CPU alta não prova ataque.

Job desconhecido não prova malware.

Falha RACF não prova invasão.

Tráfego elevado não prova exfiltração.

Por isso precisamos de uma palavra fundamental:

BASELINE.


📊 CAPÍTULO 16 — BASELINE: COMO SABER QUE ALGO É ESTRANHO?

Dick Tracy encontra uma pegada tamanho 44.

Isso é suspeito?

Depende.

Se todas as pessoas da sala usam tamanho 44, talvez não.

Se somente uma pessoa possui esse tamanho e ela deveria estar a 500 quilômetros dali, temos algo interessante.

Mainframe funciona da mesma maneira.

Você precisa conhecer o normal.

CPU NORMAL
      │
      ├───────────────
      │
      │       /\          ← anomalia
      │      /  \
      │_____/    \________

Baseline pode incluir:

CPU
I/O
rede
jobs
horários
volume de transações
acessos
datasets
falhas RACF
origens de conexão
processos USS

Segurança sem contexto gera alertas.

Segurança com contexto produz investigação.


🔎 CAPÍTULO 17 — O PASSO A PASSO DE DICK TRACY

Imagine um incidente suspeito.

O iniciante quer imediatamente matar o job.

Dick Tracy segura sua mão.

— Primeiro preserve evidências.

Uma investigação conceitual pode seguir:

1. DETECTAR
      ↓
2. VALIDAR
      ↓
3. DELIMITAR
      ↓
4. PRESERVAR EVIDÊNCIAS
      ↓
5. IDENTIFICAR IDENTIDADES
      ↓
6. IDENTIFICAR RECURSOS
      ↓
7. RECONSTRUIR TIMELINE
      ↓
8. CONTER
      ↓
9. ERRADICAR
      ↓
10. RECUPERAR
      ↓
11. APRENDER

A ordem concreta dependerá da gravidade e dos procedimentos da organização. Um ataque em andamento pode exigir contenção urgente.

Mas existe uma regra preciosa:

Não destrua as pistas tentando resolver rapidamente o problema.

Logs importam.

SMF importa.

Horários importam.

IDs importam.

Mudanças importam.


🧬 CAPÍTULO 18 — DEFESA EM PROFUNDIDADE

Agora chegamos ao coração do artigo.

Não existe um botão:

[ PROTEGER MAINFRAME ]

Existe um conjunto de controles:

                IDENTIDADE
                    │
                 RACF/SAF
                    │
              menor privilégio
                    │
              autenticação forte
                    │
                   REDE
                    │
           TLS / AT-TLS / filtros
                    │
                 SISTEMA
                    │
            z/OS + USS + hardening
                    │
                APLICAÇÃO
                    │
          CICS / Db2 / IMS / MQ
                    │
                  DADOS
                    │
               criptografia
                    │
              MONITORAMENTO
                    │
              SMF / telemetria
                    │
                RESILIÊNCIA
                    │
          backup / recuperação

Isso é defesa em profundidade.

Se uma camada falhar, outra pode conter o ataque.


🧯 CAPÍTULO 19 — MENOR PRIVILÉGIO É UM EXTINTOR INVISÍVEL

Imagine dois usuários comprometidos.

Primeiro:

USERA

READ CUSTOMER.TEST

Segundo:

USERB

ALTER *

Qual comprometimento possui maior raio de impacto?

Óbvio.

O princípio do menor privilégio não existe porque administradores gostam de burocracia.

Existe para reduzir:

BLAST RADIUS

Se uma identidade for comprometida, o atacante herda aquilo que ela consegue fazer.

Logo:

cada privilégio desnecessário também pode tornar-se privilégio disponível ao invasor.


🔐 CAPÍTULO 20 — CRIPTOGRAFIA: A IRONIA DO RANSOMWARE

Existe uma ironia deliciosa.

Ransomware utiliza criptografia para prejudicar o proprietário.

Segurança utiliza criptografia para protegê-lo.

RANSOMWARE

dados
  ↓
chave controlada pelo atacante
  ↓
proprietário perde acesso

Contra:

CRIPTOGRAFIA CORPORATIVA

dados
  ↓
chave controlada adequadamente
  ↓
atacante não consegue interpretar dados

O algoritmo pode até compartilhar fundamentos criptográficos.

O que muda completamente é:

quem controla as chaves e com qual finalidade.


🧠 CAPÍTULO 21 — O ATAQUE MAIS PERIGOSO TALVEZ NÃO TENHA MALWARE

Voltamos à cena inicial.

Dick Tracy reuniu as evidências.

Nenhum vírus.

Nenhum worm.

Nenhum ransomware.

Nenhum executável misterioso.

O jovem programador perguntou:

— Então não houve ataque?

Dick Tracy respondeu:

— Houve.

— Cadê o malware?

— Não precisava.

Uma credencial válida havia sido comprometida.

O criminoso entrou utilizando mecanismos legítimos.

Consultou recursos para os quais aquela identidade possuía autorização.

Executou comandos permitidos.

Usou ferramentas administrativas existentes.

O sistema fez exatamente aquilo que havia sido configurado para fazer.

Esse cenário nos leva a uma conclusão extremamente importante:

O atacante não precisa necessariamente fazer o mainframe executar código malicioso. Às vezes basta conseguir autorização para executar operações legítimas com intenção maliciosa.


🧪 CAPÍTULO 22 — EXERCÍCIO PARA O PADAWAN COBOL

Pegue uma aplicação fictícia:

BANCO
 │
 ├── CICS
 │    └── COBOL
 │
 ├── Db2
 │
 ├── MQ
 │
 ├── Batch/JCL
 │
 └── USS/API

Agora não pergunte:

"Onde instalaríamos antivírus?"

Faça estas perguntas:

Passo 1 — Identidade: quem consegue entrar?

Passo 2 — Autorização: depois de entrar, o que cada identidade consegue fazer?

Passo 3 — Aplicação: existe regra que contorna controles?

Passo 4 — Dados: quem consegue ler, alterar ou destruir?

Passo 5 — Rede: quem consegue conversar com quais serviços?

Passo 6 — Software: quem consegue alterar código e executáveis?

Passo 7 — Produção: quem consegue promover mudanças?

Passo 8 — Auditoria: conseguiríamos descobrir posteriormente quem fez determinada operação?

Passo 9 — Recuperação: conseguimos restaurar o ambiente se produção for destruída?

Passo 10 — Blast radius: se uma única credencial for comprometida, até onde o atacante chega?

Esse exercício vale mais do que decorar 30 nomes de malware.


🕵️ CAPÍTULO 23 — DICK TRACY ENSINA O PROGRAMADOR COBOL A PENSAR COMO INVESTIGADOR

O COBOL ensina:

IF condição
   THEN ação
END-IF

Segurança ensina algo parecido:

IF evidência
   THEN hipótese
   ELSE continue investigando
END-IF

Mas existe uma diferença essencial.

Não faça:

CPU ALTA
    =
HACKER

Faça:

CPU ALTA
   ↓
qual workload?
   ↓
qual horário?
   ↓
qual USERID?
   ↓
qual programa?
   ↓
qual origem?
   ↓
é comportamento normal?
   ↓
existem outras evidências?

Isso é investigação.


🎁 CURIOSIDADE — O MAINFRAME PODE AJUDAR A INVESTIGAR A PRÓPRIA CENA DO CRIME

Uma característica fascinante de ambientes corporativos maduros é a quantidade de telemetria disponível.

O mesmo ecossistema utilizado para:

performance
capacity
billing
auditoria
operação

pode ajudar na segurança.

SMF é um exemplo extraordinário dessa convergência.

Aquilo que para o analista de performance significa:

"Quem gastou CPU?"

para segurança pode significar:

"Quem executou essa atividade?"

Para Capacity Planning:

"Quando começou?"

Para investigação:

"Essa hora coincide com o acesso suspeito?"

Os mesmos dados podem contar histórias diferentes.

O segredo é saber fazer perguntas.


🏁 EPÍLOGO — O CRIMINOSO TINHA A CHAVE

05:42.

O incidente estava finalmente compreendido.

O jovem programador fechou o ISPF.

— Dick, então o que devo guardar dessa noite?

O detetive colocou o chapéu.

— Não procure apenas criminosos arrombando janelas.

— Por quê?

— Porque os melhores entram pela porta.

— E como impedimos isso?

Dick Tracy olhou novamente para o mainframe.

Na tela estavam:

RACF
SMF
CICS
Db2
MQ
USS
TCP/IP
JCL
COBOL

— Não existe uma única defesa. Identifique quem entra. Limite o que pode fazer. Proteja os dados. Observe o comportamento. Registre evidências. Separe responsabilidades. Proteja a recuperação. E nunca confunda uma credencial válida com uma intenção legítima.

O jovem programador pensou por alguns segundos.

Finalmente entendeu.

O mainframe não precisava estar "infectado".

O criminoso poderia estar simplesmente usando o sistema.

E essa talvez fosse a descoberta mais inquietante de toda a investigação.


☕ A LIÇÃO DO BELLACOSA MAINFRAME

Para quem está começando em COBOL, malware pode parecer assunto de outra equipe.

Não é.

Quando você escreve:

IF USER-AUTHORIZED
    PERFORM TRANSACTION
END-IF

você está tomando uma decisão de segurança.

Quando lê um dataset, está acessando um ativo.

Quando executa JCL, está solicitando recursos.

Quando uma aplicação chama Db2, MQ ou CICS, existe uma relação de confiança.

Quando um programa vai para produção, existe uma cadeia de custódia do software.

Quando alguém recebe privilégio demais, aumenta-se o potencial raio de impacto de um comprometimento.

E quando ninguém observa os registros, as pistas podem existir sem que ninguém monte o quebra-cabeça.

Portanto, a evolução mental do padawan deveria ser:

"MAINFRAME NÃO PEGA VÍRUS"
             ↓
"MAINFRAME POSSUI SUPERFÍCIE DE ATAQUE"
             ↓
"PRECISO PROTEGER O SISTEMA"
             ↓
"PRECISO PROTEGER IDENTIDADES E DADOS"
             ↓
"PRECISO OBSERVAR COMPORTAMENTO"
             ↓
"PRECISO LIMITAR O IMPACTO
MESMO QUANDO UMA DEFESA FALHAR"

Essa última etapa é maturidade.

Porque segurança não consiste em acreditar que ninguém conseguirá atravessar a primeira porta.

Consiste também em garantir que, se alguém atravessar, não encontre todas as outras portas abertas.

E talvez seja esse o maior ensinamento de Dick Tracy para o jovem programador COBOL:

Em segurança, encontrar a arma é interessante. Descobrir quem tinha acesso, como entrou, o que fez, quais pistas deixou e por que conseguiu chegar tão longe é a verdadeira investigação.

No Bellacosa Mainframe, o mistério nunca termina no virus.exe.

Às vezes não existe vírus.

Às vezes não existe exploit.

Às vezes não existe sequer uma porta arrombada.

Existe apenas um USERID.

Uma autorização excessiva.

Uma atividade às 03:17.

E um detetive olhando para o SMF e perguntando:

— Muito bem... quem estava usando essa chave? ☕🕵️

quinta-feira, 9 de maio de 2019

⛩️ YOUJI ITAMI E O GATE: USS PARA O OUTRO MUNDO DO z/OS

 

Bellacosa Mainframe apresenta o USS Unix Posix no Zos

☕ Um Café no Bellacosa Mainframe

⛩️ YOUJI ITAMI E O GATE PARA O OUTRO MUNDO DO z/OS

UNIX System Services, MVS, datasets, JCL, ISPF, zFS, shell, POSIX, RACF, EBCDIC, UTF-8, Git, APIs, Python, Java, DevOps — e o dia em que um programador COBOL atravessou um portal e descobriu que havia UNIX dentro do mainframe.



🎬 PRÓLOGO — UM GATE APARECEU NO MEIO DO ISPF

Imagine nosso jovem programador COBOL.

Chamaremos o rapaz de Padawan-01.

Depois de algumas semanas estudando mainframe, ele já estava começando a se sentir confortável.

Sabia entrar no TSO.

Conhecia o ISPF.

Já não entrava em pânico diante de:

USER01.COBOL.SOURCE
USER01.JCL
USER01.COPYLIB
USER01.LOADLIB

Conseguia navegar por um PDS, abrir um member e até escrever um pequeno programa COBOL.

Seu universo parecia perfeitamente organizado:

IBM Z
  │
  ▼
z/OS
  │
  ├── TSO
  ├── ISPF
  ├── datasets
  ├── JCL
  ├── JES2
  ├── COBOL
  ├── CICS
  ├── VSAM
  └── Db2

Até que, numa tarde aparentemente normal, apareceu um estranho portal no meio do reino.

No portal estava escrito:

UNIX SYSTEM SERVICES

O jovem olhou assustado.

— UNIX? Professor, acho que entrei no curso errado.

Sentado tranquilamente diante do terminal estava Youji Itami, protagonista de GATE, com aquela expressão típica de alguém que preferia estar cuidando de seus hobbies em vez de resolver mais uma crise internacional.

Itami olhou para o garoto.

— Não. Você continua no z/OS.

— Mas tem UNIX aqui!

— Tem.

— Shell?

— Tem.

— Diretórios?

— Tem.

— grep?

— Tem.

— Processos?

— Tem.

— POSIX?

— Também.

Padawan-01 ficou alguns segundos olhando para a tela.

Itami levantou-se.

— Bem-vindo ao outro lado do GATE.

E é exatamente aqui que começa uma das descobertas mais importantes para qualquer profissional de mainframe moderno:

z/OS não é apenas MVS + datasets + JCL + ISPF.

Existe outro mundo dentro da mesma plataforma.

Seu nome é UNIX System Services — USS.



🏛️ CAPÍTULO 1 — O REINO QUE O PROGRAMADOR COBOL NÃO CONHECIA

Existe um problema curioso na maneira como muita gente aprende mainframe.

O treinamento começa corretamente por conceitos fundamentais:

  • IBM Z;

  • z/OS;

  • TSO;

  • ISPF;

  • datasets;

  • JCL;

  • JES;

  • COBOL.

Nada está errado nisso.

O problema surge quando o estudante começa a acreditar que isso é todo o z/OS.

Não é.

É como atravessar o GATE, conhecer uma única cidade da Região Especial e concluir que conhece todo aquele mundo.

O z/OS possui diferentes ambientes e modelos de utilização.

Uma visão simplificada seria:

                         z/OS
                           │
              ┌────────────┴────────────┐
              │                         │
      AMBIENTE TRADICIONAL             USS
              │                         │
            TSO                       shell
            ISPF                      files
            JCL                    directories
            JES                    processes
         datasets                    pipes
          COBOL                      POSIX
              │                         │
              └────────────┬────────────┘
                           │
                       IBM Z

Quando mostramos isso cedo ao iniciante, acontece algo importante.

Ele deixa de associar:

MAINFRAME = COBOL

e começa a compreender:

COBOL
   │
   ▼
uma das tecnologias
   │
   ▼
z/OS
   │
   ▼
uma das plataformas
   │
   ▼
IBM Z

Essa mudança mental parece pequena.

Profissionalmente, é gigantesca.



⛩️ CAPÍTULO 2 — O QUE É UNIX SYSTEM SERVICES?

UNIX System Services é um ambiente UNIX integrado ao z/OS.

Ele oferece recursos e interfaces baseados em padrões UNIX e POSIX.

Isso significa que alguém vindo de Linux ou UNIX pode encontrar conceitos extremamente familiares:

pwd
ls
cd
mkdir
cp
mv
rm
cat
grep
find
chmod
ps
kill

Padawan-01 atravessa o portal.

Do outro lado, digita:

pwd

E recebe:

/u/padawan01

Ele olha para Itami.

— Cadê meu HLQ?

Itami responde:

— Continue.

ls -l

Aparece algo parecido com:

-rw-r--r--  1 padawan users   840 Sep 17 15:30 config.json
drwxr-xr-x  2 padawan users  8192 Sep 17 15:40 scripts

— PROFESSOR! SUMIRAM OS DATASETS!

Não.

Eles não sumiram.

Você simplesmente atravessou para outro modelo de filesystem.

Essa distinção é essencial.



🗄️ CAPÍTULO 3 — DATASET NÃO É FILE

No mundo tradicional do z/OS podemos encontrar:

VAGNER.COBOL.SOURCE
VAGNER.COBOL.COPYLIB
VAGNER.JCL
VAGNER.CNTL

No USS podemos encontrar:

/u/vagner/project/src
/u/vagner/project/scripts
/u/vagner/project/config

Parece equivalente?

Em determinados contextos podemos criar analogias didáticas.

Mas cuidado.

Dataset não é simplesmente o nome mainframe para arquivo UNIX.

Da mesma maneira:

PDS/PDSE ≠ directory
member   ≠ file
HLQ      ≠ /

Existem semelhanças funcionais que ajudam o iniciante a criar referências mentais, mas as estruturas possuem características próprias.

Essa é uma excelente oportunidade para ensinar arquitetura em vez de apenas comandos.



🌳 CAPÍTULO 4 — ITAMI ENCONTRA UMA ÁRVORE NO MAINFRAME

No USS encontramos uma estrutura hierárquica típica do mundo UNIX:

/
├── bin
├── dev
├── etc
├── tmp
├── u
│   ├── itami
│   ├── padawan01
│   └── bellacosa
├── usr
└── var

Agora compare com datasets:

PADAWAN.COBOL
PADAWAN.JCL
PADAWAN.COPYLIB
PADAWAN.TEST.DATA

O primeiro modelo trabalha naturalmente com uma árvore de diretórios.

O segundo utiliza a organização e nomenclatura próprias de datasets do z/OS.

É importante conhecer ambos porque aplicações modernas no mainframe frequentemente atravessam esses mundos.

E existe aqui outro nome que o jovem programador deve aprender:

zFS

O z/OS File System, conhecido como zFS, é peça importante do filesystem utilizado pelo USS.

Podemos ter filesystems montados na hierarquia USS.

Conceitualmente:

zFS
 │
 ▼
mount
 │
 ▼
/u/projeto
 │
 ├── bin
 ├── config
 ├── logs
 └── scripts

Isso já é muito diferente da visão inicial:

MAINFRAME = PDS + JCL

O mapa ficou maior.


🐚 CAPÍTULO 5 — O DIA EM QUE O MAINFRAME RESPONDEU ls

Itami entrega o terminal ao Padawan.

— Sua missão é criar uma área de trabalho.

cd /u/padawan01
mkdir treinamento
cd treinamento

Agora:

pwd

Resultado:

/u/padawan01/treinamento

Criamos um arquivo:

echo "Hello Mainframe" > teste.txt

E verificamos:

cat teste.txt

Resultado:

Hello Mainframe

O jovem fica em silêncio.

Não apareceu ISPF.

Não apareceu JCL.

Não apareceu //SYSIN DD *.

E, mesmo assim, ele continua trabalhando no z/OS.

Esse laboratório de cinco minutos vale uma longa explicação teórica porque quebra imediatamente o estereótipo de que mainframe significa apenas terminal 3270.


🔗 CAPÍTULO 6 — ITAMI DESCOBRE O PODER DOS PIPES

No mundo UNIX existe uma filosofia extremamente elegante:

faça pequenas ferramentas realizarem tarefas específicas e combine seus resultados.

Imagine um arquivo:

application.log

Queremos encontrar erros.

grep ERROR application.log

Queremos procurar ABENDs:

grep ABEND application.log

Podemos combinar comandos:

cat application.log | grep ERROR

E criar cadeias:

cat application.log |
grep ERROR |
sort |
uniq

O símbolo:

|

é um pipe.

A saída de um comando pode alimentar outro.

Para alguém acostumado ao processamento batch, podemos fazer uma analogia.

No JCL:

INPUT
  │
  ▼
STEP01
  │
  ▼
TEMP
  │
  ▼
STEP02
  │
  ▼
OUTPUT

No shell:

INPUT → comando | comando | comando → OUTPUT

Não são exatamente a mesma arquitetura.

Mas comparar os modelos ensina algo muito mais importante do que decorar sintaxe:

fluxo de processamento.


🕵️ CAPÍTULO 7 — GREP, O DETETIVE DO GATE

Imagine um log com 200 mil linhas.

O programador abre o arquivo e começa:

FIND 'ERROR'

Itami observa.

Um minuto.

Dois minutos.

Cinco minutos.

Finalmente pergunta:

— O que você está fazendo?

— Investigando o incidente.

Itami aponta para o shell:

grep ERROR application.log

Agora queremos contar ocorrências:

grep ERROR application.log | wc -l

Queremos encontrar determinados arquivos:

find /u/projeto -name "*.log"

Queremos procurar determinado conteúdo dentro deles.

O profissional começa a construir uma nova caixa de ferramentas.

Essa habilidade torna-se especialmente valiosa em troubleshooting, automação, análise de logs e operações.


🔐 CAPÍTULO 8 — RACF ATRAVESSA O GATE

Padawan aprende:

chmod 777 deploy.sh

Itami imediatamente aparece atrás dele.

— O que você está fazendo?

— Resolvendo o problema de permissão.

Silêncio constrangedor.

Essa é outra aula importante.

No UNIX encontramos conceitos como:

owner
group
other

e permissões:

r = read
w = write
x = execute

Por exemplo:

-rwxr-x---

Podemos representar:

           USER     GROUP     OTHER

READ         X        X
WRITE        X
EXECUTE      X        X

No entanto, USS continua integrado ao modelo de segurança do z/OS.

Entram conceitos relacionados a:

SAF
RACF
UID
GID
owner
group
permissions

Portanto, ensinar USS também cria uma excelente oportunidade para ensinar segurança.

E uma regra deve ficar gravada:

chmod 777 não é estratégia de troubleshooting.

É muitas vezes a confissão:

"Não descobri qual permissão estava errada, então liberei tudo."

Em laboratório pode aparecer.

Em produção merece investigação.


👹 CAPÍTULO 9 — O MONSTRO EBCDIC ATRAVESSA O PORTAL

Itami acreditava que a missão estava tranquila.

Então chegou o verdadeiro monstro da Região Especial:

ENCODING

No mundo tradicional z/OS existe uma longa história relacionada a EBCDIC.

No mundo distribuído encontramos frequentemente:

ASCII
UTF-8

Agora imagine integração moderna:

COBOL
 │
 ▼
dados EBCDIC
 │
 ▼
API
 │
 ▼
JSON / UTF-8
 │
 ▼
aplicação distribuída

Pronto.

Temos terreno fértil para problemas.

Caracteres especiais, acentos e conversões podem produzir surpresas.

O programador manda:

JOÃO

e alguma camada mal configurada responde com algo que parece ter sido escrito por um mago bêbado da Região Especial.

Por isso, aprender USS também deveria envolver:

  • encoding;

  • code pages;

  • ASCII;

  • EBCDIC;

  • UTF-8;

  • conversão;

  • tagging de arquivos.

Não trate encoding como detalhe.

Em integração, detalhe vira incidente.


⚙️ CAPÍTULO 10 — PROCESSOS TAMBÉM EXISTEM DO OUTRO LADO

Outro conceito UNIX importante é processo.

Comandos como:

ps

permitem observar processos.

Podemos então introduzir conceitos relacionados a:

PID
process
parent process
signal
environment

E eventualmente:

kill

Aqui é preciso explicar ao iniciante que aprender comandos não significa sair executando-os indiscriminadamente.

Especialmente kill.

No mainframe, como em qualquer ambiente corporativo sério, antes de terminar alguma coisa devemos saber:

O que é?

Quem iniciou?

Quem depende disso?

Qual impacto?

Existe procedimento operacional?

O botão funciona.

O problema é descobrir o que acontece depois que você aperta.


🚪 CAPÍTULO 11 — BPXBATCH: UM PORTAL DENTRO DO PORTAL

Agora Itami encontra algo particularmente interessante.

Os dois mundos podem conversar.

Um exemplo conceitual importante é BPXBATCH.

Podemos ter:

JCL
 │
 ▼
BPXBATCH
 │
 ▼
USS
 │
 ▼
shell / programa

Isso destrói a ideia de que existem dois sistemas completamente separados:

MVS      USS
 │        │
X        X

Uma representação melhor seria:

                  z/OS
                    │
          ┌─────────┴─────────┐
          │                   │
       clássico              USS
          │                   │
         JCL                shell
         JES                files
      datasets             processes
          │                   │
          └─────────┬─────────┘
                    │
                integração

É o GATE funcionando nos dois sentidos.


🌐 CAPÍTULO 12 — DO OUTRO LADO EXISTIAM APIs

Agora começamos a entender por que USS é tão relevante numa formação moderna.

O jovem programador pode encontrar tecnologias e conceitos como:

shell
SSH
Git
Java
Python
JSON
XML
REST
automação
CI/CD
APIs

Isso não significa que USS seja simplesmente Linux.

Esse erro também deve ser evitado.

USS não é "Ubuntu escondido dentro do z/OS".

Existem padrões e conceitos familiares ao universo UNIX, mas estamos dentro da arquitetura, segurança, operação e características do z/OS.

É justamente isso que torna o assunto interessante.


🧬 CAPÍTULO 13 — GIT ENCONTRA COBOL

Agora imagine um programador moderno.

Ele escreve COBOL.

Mas seu código está versionado.

Temos:

Developer
    │
    ▼
   Git
    │
    ▼
Pipeline
    │
    ├── build
    ├── test
    ├── quality gate
    ├── security
    └── deploy
           │
           ▼
          z/OS

De repente, conhecimentos de USS tornam-se extremamente úteis.

O profissional não vive necessariamente apenas em:

3270 → TSO → ISPF

Ele pode transitar por:

                    DEVELOPER
                        │
       ┌────────────────┼────────────────┐
       │                │                │
     ISPF              USS             IDE
       │                │                │
     COBOL            shell             Git
       │                │                │
       └────────────────┼────────────────┘
                        │
                      CI/CD
                        │
                       API
                        │
                      z/OS

Isso muda inclusive nossa definição de "programador mainframe".


🐍 CAPÍTULO 14 — PYTHON, JAVA E OS NOVOS HABITANTES DA REGIÃO ESPECIAL

Outro erro comum é imaginar:

mainframe = COBOL

COBOL continua importantíssimo.

Mas IBM Z e z/OS não são sinônimos de COBOL.

No ecossistema moderno podemos encontrar outras linguagens e runtimes.

Isso abre possibilidades relacionadas a Java, Python, shell scripting e outras tecnologias.

Não significa substituir COBOL gratuitamente.

Imagine um programa COBOL que processa milhões de transações diariamente há vinte anos e funciona perfeitamente.

Alguém chega:

— Vamos reescrever porque COBOL é velho.

Itami provavelmente perguntaria:

— Qual problema estamos tentando resolver?

Essa deveria ser sempre a pergunta.

Modernização séria começa pelo problema, não pela idade da linguagem.


🏗️ CAPÍTULO 15 — MODERNIZAR NÃO SIGNIFICA DEMOLIR A CIDADE

Esse talvez seja o ensinamento mais importante.

Modernização pode significar:

Git
CI/CD
APIs
automação
observabilidade
novas interfaces
melhores testes
segurança
integração

sem necessariamente significar:

APAGUE TODO O COBOL!

Imagine:

            SISTEMA EXISTENTE
                   │
              COBOL/CICS
                   │
              lógica madura
                   │
         ┌─────────┴─────────┐
         │                   │
        API                  MQ
         │                   │
         └─────────┬─────────┘
                   │
             novos canais

O patrimônio existente continua entregando valor enquanto novas formas de acesso e desenvolvimento são incorporadas.

É a diferença entre modernizar a cidade e incendiar a cidade para construir outra.


🧪 CAPÍTULO 16 — O LABORATÓRIO DOS PADAWANS

Se eu estivesse estruturando essa formação, USS não seria apenas PowerPoint.

Itami entregaria uma missão.

MISSÃO 1 — Descubra onde você está

pwd

MISSÃO 2 — Veja o território

ls -l

MISSÃO 3 — Construa sua base

mkdir treinamento
cd treinamento

MISSÃO 4 — Crie informação

echo "Hello z/OS" > hello.txt

MISSÃO 5 — Leia

cat hello.txt

MISSÃO 6 — Copie

cp hello.txt copia.txt

MISSÃO 7 — Mova

mv copia.txt backup.txt

MISSÃO 8 — Investigue

grep "z/OS" hello.txt

MISSÃO 9 — Procure

find . -name "*.txt"

MISSÃO 10 — Entenda permissões

ls -l

Depois:

chmod 750 algum_script.sh

Mas somente depois de explicar por quê.

MISSÃO 11 — Crie um shell script

Algo simples:

#!/bin/sh

echo "Bom dia, Padawan."
date
pwd

Então execute e observe.

O objetivo não é transformar o aluno em administrador UNIX em uma tarde.

O objetivo é retirar o medo.


🔥 CAPÍTULO 17 — O DESAFIO FINAL DE ITAMI

Agora entregamos:

incident.log

Com milhares de registros.

A missão:

Localize todos os ERROR.

Depois:

Localize todos os ABEND.

Depois:

Conte-os.

Depois:

Gere um arquivo apenas com as ocorrências.

Depois:

Descubra quais mensagens se repetem.

Agora o aluno começa a combinar:

grep
sort
uniq
wc

Nesse momento aconteceu algo importante.

Ele não está mais decorando UNIX.

Está pensando UNIX.

Essa diferença vale ouro.


🎓 CAPÍTULO 18 — QUANDO ENSINAR USS?

Eu não esconderia USS no final da formação como "conteúdo avançado".

Colocaria relativamente cedo.

Algo como:

IBM Z
  ↓
arquitetura
  ↓
z/OS
  ↓
TSO/ISPF
  ↓
datasets
  ↓
JCL/JES
  ↓
COBOL básico
  ↓
════════════════════
     ABRE-SE O GATE
════════════════════
  ↓
USS
  ├── filesystem
  ├── shell
  ├── zFS
  ├── POSIX
  ├── processos
  ├── pipes
  ├── permissões
  ├── RACF/SAF
  └── encoding
  ↓
Db2 / VSAM
  ↓
CICS
  ↓
MQ
  ↓
APIs
  ↓
Git
  ↓
CI/CD
  ↓
observabilidade
  ↓
modernização

Depois USS reaparece continuamente.

Essa é a chave.

Não deveria existir:

"Aula de USS concluída. Nunca mais falaremos disso."

USS precisa reaparecer quando estudamos segurança, desenvolvimento, integração, APIs, DevOps, automação e troubleshooting.


🧠 CAPÍTULO 19 — DE PROGRAMADOR COBOL PARA PROFISSIONAL z/OS

Esse é o verdadeiro objetivo.

Começamos com:

PROGRAMADOR COBOL

Depois adicionamos:

COBOL
JCL
ISPF
datasets

Depois:

CICS
Db2
VSAM
MQ

E finalmente:

USS
Git
APIs
shell
Python
Java
CI/CD
observabilidade
segurança

A pessoa começa a compreender o ecossistema.

Então podemos mudar a placa:

PROGRAMADOR COBOL
        ↓
DESENVOLVEDOR MAINFRAME
        ↓
PROFISSIONAL z/OS
        ↓
PROFISSIONAL IBM Z

Não porque abandonou COBOL.

Mas porque entendeu onde COBOL vive.


🥚 EASTER EGG — INCIDENTE 03:17

No final do laboratório, Itami entrega uma última missão.

Existe um arquivo misterioso:

/u/padawan/logs/gate.log

Padawan executa:

grep "03:17" /u/padawan/logs/gate.log

A tela responde:

03:17:00 BPXF024I GATE OPENED
03:17:01 PADAWAN ENTERED UNIX SYSTEM SERVICES
03:17:02 PADAWAN DISCOVERED GREP
03:17:03 PADAWAN STOPPED SEARCHING 300000 LINES MANUALLY
03:17:04 ITAMI REQUESTED COFFEE
03:17:05 BELLACOSA REQUESTED ANOTHER INCIDENT

O aluno olha para Itami.

— Professor... o que significa 03:17?

Itami toma um gole de café.

— Algumas coisas no mainframe você descobre sozinho.


☕ EPÍLOGO — O GATE NUNCA MAIS SE FECHOU

Padawan-01 voltou ao ISPF.

A tela era exatamente a mesma.

ISPF PRIMARY OPTION MENU

Mas alguma coisa havia mudado.

Não no mainframe.

Nele.

Antes enxergava:

MAINFRAME
   =
COBOL + JCL + ISPF

Agora enxergava:

                         IBM Z
                           │
                          z/OS
                           │
            ┌──────────────┼──────────────┐
            │              │              │
         CLÁSSICO         USS          MODERNO
            │              │              │
          COBOL           zFS            Git
           JCL           shell           APIs
          ISPF           POSIX          CI/CD
          CICS          processes       Java
          VSAM           pipes          Python
           Db2          security     observability
            │              │              │
            └──────────────┼──────────────┘
                           │
                    MAINFRAME MODERNO

Itami caminhou novamente em direção ao GATE.

Antes de atravessar, virou-se para o jovem programador.

— Você ainda gosta de COBOL?

— Muito.

— Ótimo. Continue estudando.

— Então por que me mostrou tudo isso?

Itami apontou para o enorme IBM Z atrás deles.

— Porque COBOL é uma linguagem. Isso aqui é uma plataforma.

E talvez essa seja uma das lições mais importantes que podemos ensinar para uma nova geração de profissionais.

COBOL continua sendo parte extraordinariamente importante da história e do presente do mainframe.

JCL continua importante.

ISPF continua importante.

Datasets continuam importantes.

CICS, Db2, VSAM, JES e RACF continuam importantes.

Mas ensinar somente isso cria uma janela estreita para uma plataforma gigantesca.

UNIX System Services abre outra janela.

Ali aparecem filesystem hierárquico, shell, POSIX, processos, pipes, permissões, zFS, integração com segurança do z/OS, encoding, automação e ferramentas modernas.

Depois surgem Git, APIs, Java, Python, CI/CD e novas formas de desenvolver e operar aplicações.

É nesse momento que o jovem deixa de perguntar:

"Como faço isso em COBOL?"

e começa a perguntar:

"Qual é a melhor maneira de resolver este problema no z/OS?"

Essa segunda pergunta forma profissionais muito mais completos.

Porque o futuro do mainframe não está em escolher entre o mundo antigo e o mundo novo.

Está em entender como os dois mundos atravessam o mesmo GATE.

E o profissional que consegue caminhar tranquilamente entre:

ISPF
 ↕
USS
 ↕
Git
 ↕
APIs
 ↕
CI/CD
 ↕
Cloud

sem esquecer de COBOL, JCL, CICS, Db2 e RACF não é apenas alguém mantendo sistemas antigos.

Ele está aprendendo a trabalhar com uma plataforma que passou décadas fazendo algo extremamente difícil:

evoluir sem obrigar o mundo inteiro a começar novamente do zero.

Itami provavelmente aprovaria.

Especialmente se a missão terminasse cedo o suficiente para ele voltar aos seus hobbies.

E o Bellacosa?

Provavelmente estaria no outro lado do GATE perguntando:

WHO CHANGED THIS FILE AT 03:17?

☕ Um Café no Bellacosa Mainframe

"Existem dois tipos de programadores z/OS: aqueles que já atravessaram o GATE para o USS... e aqueles que ainda estão procurando a opção dele no menu do ISPF."

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