☕ 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

sexta-feira, 10 de janeiro de 2020

🕸️ BELL CRANEL ENTRA NA DUNGEON DO RACF — QUANDO O PROGRAMADOR COBOL DESCOBRIU QUE NÃO PRECISAVA TER ACESSO AO DADO PARA CHEGAR ATÉ ELE

Bellacosa Mainframe atalhas na segurança que podem comprometer um sistema

☕ UM CAFÉ NO BELLACOSA MAINFRAME

🕸️ BELL CRANEL ENTRA NA DUNGEON DO RACF — QUANDO O PROGRAMADOR COBOL DESCOBRIU QUE NÃO PRECISAVA TER ACESSO AO DADO PARA CHEGAR ATÉ ELE

RACF, privilege paths, grafos, grupos, JCL, SURROGAT, started tasks, CICS, Db2, MQ, COBOL, confused deputy, least privilege, blast radius, graph analytics — e o dia em que Bell Cranel descobriu que derrotar o monstro não exigia atravessar a porta da frente.



🎬 PRÓLOGO — BELL, VOCÊ NÃO TEM ACESSO

Bell Cranel estava parado diante de uma enorme porta de ferro.

No centro dela havia uma pequena placa:

PROD.PAYROLL.MASTER

Bell aproximou seu cartão de identificação.

Uma luz vermelha apareceu.

ICH408I USER(BELL)
DATASET(PROD.PAYROLL.MASTER)
ACCESS INTENT(READ)
ACCESS ALLOWED(NONE)

— Negado — disse Bell.

O veterano COBOLzeiro sentado alguns metros atrás tomou tranquilamente seu café.

— Excelente.

Bell olhou desconfiado.

— Excelente? Eu não consigo entrar.

— Você tentou a porta.

— Claro. Como mais eu entraria?

O velho apontou para a gigantesca construção atrás da porta.

Havia corredores, escadas, elevadores, passagens de manutenção, túneis, portas laterais, filas MQ, regiões CICS, jobs batch, started tasks e conexões Db2.

— Bell... isso aqui é um mainframe.

Ele tomou outro gole.

— Nunca presuma que existe apenas uma entrada.

Foi naquele momento que Bell Cranel descobriu que estava prestes a entrar em uma nova Dungeon.

Não uma Dungeon de monstros.

Uma Dungeon de privilégios.



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

Se você começou agora em COBOL e mainframe, precisamos começar do começo.

Em sistemas IBM z/OS existe um componente fundamental chamado RACF — Resource Access Control Facility.

Simplificando bastante, RACF ajuda a responder perguntas como:

Quem é você?
Você conseguiu provar que é você?

e:

Você pode fazer isso?

Imagine um usuário:

BELL01

e um dataset:

PROD.CLIENTES.MASTER

RACF pode determinar que Bell possui:

READ

ou:

UPDATE

ou:

ALTER

ou simplesmente:

NONE

Para quem está começando, é tentador imaginar segurança assim:

USER
 |
 |
 v
RESOURCE

Perguntamos:

BELL01 pode acessar PROD.CLIENTES.MASTER?

Se a resposta for:

NO

parece que terminamos.

Bell não pode acessar o arquivo.

Caso encerrado.

Mas não.

Na verdade, acabamos de começar.



🚪 CAPÍTULO 2 — NÃO TER A CHAVE NÃO SIGNIFICA NÃO CONSEGUIR ENTRAR

Bell voltou até a porta.

Tentou novamente.

ACCESS DENIED

— Eu definitivamente não tenho acesso.

O COBOLzeiro perguntou:

— Você consegue chamar alguém que tenha?

Bell parou.

Essa pequena pergunta muda completamente nosso modelo de segurança.

Considere:

BELL
  |
  X
  |
PAYROLL

Bell não consegue acessar PAYROLL.

Mas imagine agora:

BELL
  |
  v
PROGRAMA
  |
  v
PAYROLL

O programa possui autoridade para consultar os dados.

Bell possui autoridade para executar o programa.

Então temos uma situação perfeitamente normal:

BELL
   ↓
PROGRAMA
   ↓
PAYROLL

Isso não significa automaticamente que existe uma vulnerabilidade.

Na verdade, é exatamente assim que aplicações empresariais devem funcionar.

Um caixa eletrônico não deveria entregar ao cliente acesso direto ao banco de dados.

Você solicita:

CONSULTAR SALDO

A aplicação verifica quem você é, executa uma operação autorizada e devolve somente aquilo que deveria.

A aplicação funciona como intermediária.

E é aqui que aparece nossa primeira grande lição:

Acesso direto e capacidade de provocar uma operação são coisas diferentes.



🕸️ CAPÍTULO 3 — BEM-VINDO À DUNGEON DOS GRAFOS

Bell abriu o mapa.

Havia dezenas de salas.

USER
GROUP
DATASET
JCL
SURROGATE
STARTED TASK
CICS
PROGRAM
DB2
MQ

O veterano explicou:

— Pare de pensar nisso como uma lista.

— Como devo pensar?

— Como um grafo.

Um grafo é uma estrutura matemática formada basicamente por:

NÓS

e:

ARESTAS

Os nós representam coisas.

Por exemplo:

USER:BELL
GROUP:APPDEV
CICS:PAYR
PROGRAM:PAY001
DB2:PAYROLL

As arestas representam relações entre essas coisas:

BELL ──member_of──> APPDEV
BELL ──execute──> PAYR
PAYR ──invokes──> PAY001
PAY001 ──reads──> PAYROLL

Quando conectamos tudo:

BELL
  ↓
APPDEV
  ↓
PAYR
  ↓
PAY001
  ↓
PAYROLL

acabamos de encontrar um caminho.

Em segurança, podemos chamar esse tipo de relacionamento de privilege path.



🧙 CAPÍTULO 4 — O GRUPO QUE PARECIA INOCENTE

Bell encontrou a primeira bifurcação da Dungeon.

Na parede estava escrito:

GROUP APPDEV

Usuários RACF podem pertencer a grupos.

Isso facilita tremendamente a administração.

Imagine 300 programadores.

Em vez de concedermos individualmente:

PERMIT ...

para cada pessoa, podemos criar:

APPDEV

e conceder determinados acessos ao grupo.

Então:

BELL
 ↓
APPDEV
 ↓
RESOURCE

Mas grupos também podem participar de contextos de autorização em outros componentes.

No Db2 for z/OS, por exemplo, dependendo da configuração, grupos RACF podem aparecer como secondary authorization IDs.

Agora temos:

BELL
 ↓
RACF GROUP
 ↓
SECONDARY AUTHID
 ↓
DB2 PRIVILEGE

Talvez Bell nunca tenha recebido diretamente:

GRANT SELECT

Mas isso não significa necessariamente que seu contexto de execução não possa possuir determinada capacidade.

Esse detalhe ensina algo importante:

Permissões podem ser herdadas ou adquiridas através de relacionamentos.

Bell encontrou sua primeira passagem secreta.


📜 CAPÍTULO 5 — JCL NÃO É APENAS AQUELA COISA ESTRANHA COM DUAS BARRAS

Para o iniciante COBOL, JCL inicialmente parece uma coleção de encantamentos ancestrais:

//BELLJOB JOB ...
//STEP01  EXEC PGM=PAY001
//INFILE  DD DSN=PROD.INPUT,DISP=SHR
//OUTFILE DD DSN=PROD.OUTPUT,DISP=OLD

Mas JCL não é COBOL.

COBOL descreve a lógica do programa.

JCL descreve, entre outras coisas, como determinado trabalho será executado no ambiente batch.

Um programa COBOL pode dizer:

READ CLIENTES

Mas alguma coisa precisa dizer qual dataset corresponde a CLIENTES.

No ambiente batch, JCL frequentemente participa dessa associação.

Agora pense em segurança.

Se alguém pode modificar JCL usado por uma execução poderosa, talvez essa pessoa consiga alterar:

programas
datasets
parâmetros
procedures
fluxo de execução

Por isso bibliotecas de JCL e procedures precisam ser cuidadosamente protegidas.

Surge outra regra importante:

Quem controla aquilo que será executado pode adquirir influência sobre o contexto que executará aquilo.

No grafo:

USER
 ↓
MODIFY JCL
 ↓
EXECUTION
 ↓
SERVICE ID
 ↓
RESOURCE

Bell olhou para o mapa.

A Dungeon acabara de ganhar outro andar.


🎭 CAPÍTULO 6 — SURROGATE: “EU NÃO SOU ELE, MAS POSSO PEDIR QUE ELE EXECUTE”

Agora Bell encontrou uma habilidade peculiar.

Chamava-se:

SURROGAT

Em determinados cenários controlados pelo RACF, um usuário autorizado pode submeter trabalho para execução sob outro userid sem precisar conhecer a senha desse userid.

Imagine:

BELL

não possui acesso ao payroll.

Mas existe um userid técnico:

PAYBATCH

que precisa processar folha de pagamento.

Naturalmente:

PAYBATCH
 ↓
PAYROLL

Se houver uma relação surrogate devidamente autorizada:

BELL
 ↓
SURROGATE
 ↓
PAYBATCH

temos:

BELL
 ↓
SURROGATE
 ↓
PAYBATCH
 ↓
PAYROLL

Observe a diferença.

Pergunta:

BELL possui READ diretamente em PAYROLL?

Resposta:

NO

Pergunta:

Existe um caminho autorizado entre BELL e alguma execução capaz de alcançar PAYROLL?

Possível resposta:

YES

São perguntas completamente diferentes.


🚂 CAPÍTULO 7 — STARTED TASK: QUANDO OUTRA IDENTIDADE ASSUME O TRABALHO

Bell continuou descendo.

Encontrou:

PAYSTC

Uma started task é um workload iniciado no z/OS, frequentemente utilizado para serviços de longa duração e componentes do sistema ou middleware.

CICS pode executar como started task.

MQ pode executar como started task.

Diversos produtos e serviços utilizam esse mecanismo.

O RACF permite associar started procedures a identidades específicas.

Conceitualmente:

PAYSTC
 ↓
STARTED
 ↓
PAYUSER

Portanto, não basta perguntar:

Quem iniciou a operação?

Precisamos perguntar:

Sob qual identidade a operação efetivamente executará?

Essa distinção é fundamental.

Além disso, existem conceitos poderosos associados a started procedures, incluindo atributos como:

TRUSTED

e:

PRIVILEGED

São configurações que exigem enorme cuidado porque ampliam significativamente as capacidades daquele contexto de execução.

Bell encontrou uma sala onde estava escrito:

COM GRANDES PRIVILÉGIOS
VÊM GRANDES AUDITORIAS.

Ele jurava já ter ouvido algo parecido em outro universo.

Easter egg número 1 encontrado.


💳 CAPÍTULO 8 — CICS: BELL ENTRA NA CIDADE

Depois do mundo batch, Bell chegou ao CICS.

Para um iniciante:

CICS — Customer Information Control System é uma plataforma de processamento transacional extremamente importante no universo mainframe.

Imagine um sistema bancário.

Quando alguém consulta uma conta, talvez exista uma transação:

SALO

que executa:

SALDO01

Podemos representar:

USER
 ↓
TRANSACTION
 ↓
COBOL PROGRAM

O programa COBOL então acessa Db2, VSAM, MQ ou outros recursos.

Algo conceitualmente assim:

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

A questão de segurança agora fica interessantíssima.

Bell talvez não possua:

SELECT ON CONTA

Mas pode possuir:

EXECUTE TRANSACTION SALO

Então:

BELL
 ↓
CICS:SALO
 ↓
SALDO01
 ↓
DB2
 ↓
CONTA

Novamente, isso é normal.

Na verdade, desejável.

Bell não deveria receber acesso irrestrito à tabela inteira só porque precisa consultar uma conta.


🪪 CAPÍTULO 9 — QUEM CHEGA AO DB2?

Aqui encontramos outra transformação importante.

Uma aplicação CICS acessando Db2 possui regras específicas de conexão e autorização.

Dependendo da configuração, elementos como:

DB2CONN
DB2ENTRY
AUTHID
AUTHTYPE

participam da determinação do contexto utilizado.

Portanto, podemos chegar a algo conceitualmente semelhante a:

BELL
 ↓
CICS
 ↓
TRANSACTION
 ↓
COBOL PROGRAM
 ↓
DB2ENTRY
 ↓
APPDB2
 ↓
PACKAGE
 ↓
TABLE

Perceba quantos saltos apareceram.

A pergunta inicial era:

Bell pode ler a tabela?

Agora percebemos que a pergunta deveria ser:

Bell consegue iniciar alguma cadeia de execução
que termine em uma operação sobre a tabela?

E, principalmente:

QUAL operação?

Porque talvez Bell possa solicitar:

SELECT saldo da própria conta

mas não:

SELECT * FROM TODAS_AS_CONTAS

A diferença entre essas duas coisas não está necessariamente numa ACL.

Pode estar na lógica COBOL.


👮 CAPÍTULO 10 — O PROGRAMA COBOL TAMBÉM É UMA BARREIRA DE SEGURANÇA

Essa conclusão é importantíssima para quem está começando.

Você pode pensar:

Segurança é trabalho do RACF.

Não.

RACF é uma camada fundamental.

Mas segurança também pode depender da aplicação.

Imagine:

EXEC SQL
   SELECT NOME, SALDO
   FROM CONTA
   WHERE CLIENTE = :WS-CLIENTE
END-EXEC.

Quem controla WS-CLIENTE?

De onde veio esse valor?

Foi validado?

O usuário pode substituir o identificador?

Existe verificação de propriedade?

O programa garante que:

CLIENTE SOLICITADO = CLIENTE AUTENTICADO

?

Essas perguntas pertencem à segurança da aplicação.

O RACF pode estar perfeitamente configurado enquanto a lógica da aplicação permite operações indevidas.


🤵 CAPÍTULO 11 — O CONFUSED DEPUTY

Bell encontrou um NPC poderoso.

Ele possuía autorização para entrar na sala do tesouro.

Bell não.

Mas Bell podia entregar ordens ao NPC.

O veterano perguntou:

— O que acontece se o NPC não verificar corretamente o pedido?

Temos o clássico problema conhecido como confused deputy.

O intermediário possui privilégios legítimos.

O problema surge quando uma entidade menos privilegiada consegue induzi-lo a usar esses privilégios de forma não pretendida.

Imagine:

USER
 ↓
APPLICATION
 ↓
SERVICE ID
 ↓
DB2

O service ID precisa acessar:

CUSTOMERS
ACCOUNTS
TRANSACTIONS

Isso é legítimo.

Mas o usuário deveria enxergar somente:

CUSTOMER 8472

Se uma falha permitir solicitar:

CUSTOMER *

o usuário não ganhou:

DBADM
SYSADM
SELECT *

Ele conseguiu controlar uma aplicação que já possuía autoridade.

Essa diferença é crucial.


📬 CAPÍTULO 12 — E ENTÃO APARECE MQ

Bell ouviu um barulho.

Não era um Minotauro.

Era uma mensagem chegando.

PAY.REQUEST

IBM MQ introduz comunicação assíncrona e mensageria no cenário.

Imagine:

CICS
 ↓
PUT
 ↓
PAY.REQUEST

Uma aplicação consumidora recebe a mensagem:

PAY.REQUEST
 ↓
PAYCONSUMER

Ela executa sob uma started task:

PAYCONSUMER
 ↓
PAYSTC
 ↓
PAYUSER

e acessa Db2:

PAYUSER
 ↓
DB2
 ↓
PAYROLL

Junte tudo:

BELL
 ↓
CICS
 ↓
COBOL PROGRAM
 ↓
MQ PUT
 ↓
QUEUE
 ↓
CONSUMER
 ↓
STARTED TASK
 ↓
SERVICE ID
 ↓
DB2
 ↓
PAYROLL

Agora volte à primeira pergunta:

Bell possui READ em PAYROLL?

Não.

E isso praticamente deixou de ser a pergunta mais interessante.


💥 CAPÍTULO 13 — BLAST RADIUS

Bell agora recebeu outra missão:

Descubra tudo aquilo que BELL consegue alcançar.

Isso é muito mais interessante.

Podemos pensar no blast radius de uma identidade.

Imagine:

BELL
├── GROUP APPDEV
│   ├── DEV datasets
│   └── DB2 secondary authorization
│
├── CICS
│   ├── SALO
│   ├── EXTR
│   └── TRNF
│
├── MQ
│   └── APP.REQUEST
│
└── SURROGATE
    └── APPBATCH

Cada um desses nós abre outros caminhos.

Então o blast radius não é somente aquilo que aparece diretamente no userid.

É o conjunto de capacidades alcançáveis através das relações existentes.


🧠 CAPÍTULO 14 — LEAST PRIVILEGE GANHA OUTRO SIGNIFICADO

Você provavelmente já ouviu:

Principle of Least Privilege.

Ou:

conceda somente os privilégios necessários.

Perfeito.

Mas nosso grafo permite uma interpretação mais profunda.

Least privilege não deveria significar somente:

minimizar permissões diretas

Também precisamos pensar em:

minimizar caminhos desnecessários

Você pode remover:

BELL → PAYROLL

e continuar possuindo:

BELL
 ↓
APPDEV
 ↓
CICS
 ↓
PROGRAM
 ↓
SERVICE
 ↓
PAYROLL

A ACL ficou menor.

A capacidade talvez continue existindo.


🕷️ CAPÍTULO 15 — SECURITY CHOKE POINTS

Bell percebeu algo estranho no mapa.

Centenas de caminhos diferentes passavam pela mesma sala:

PROD.CICS.LOADLIB

Isso é interessante.

Em teoria dos grafos existe uma medida chamada betweenness centrality.

Simplificando brutalmente:

Quantos caminhos importantes passam por determinado nó?

Imagine:

400 USERS
   ↓
CICS
   ↓
PROD.CICS.LOADLIB
   ↓
72 PROGRAMS
   ↓
DB2 / MQ / VSAM

Talvez essa load library seja muito mais importante para segurança do que sua aparência sugere.

O mesmo poderia acontecer com:

PROD.JCL.PROCLIB

ou:

APP_SUPPORT

ou:

REQUEST.QUEUE

Esses elementos tornam-se choke points.

Se forem comprometidos ou excessivamente permissivos, muitos caminhos podem ser afetados.


🧮 CAPÍTULO 16 — Dijkstra ENTRA NO CPD

Agora Bell precisava encontrar a rota mais curta.

Quem já estudou estruturas de dados talvez reconheça nomes como:

Breadth-First Search
Depth-First Search
Dijkstra
Shortest Path
Connected Components

Esses algoritmos podem ser aplicados conceitualmente ao problema.

Queremos descobrir:

SHORTEST PATH
FROM USER:BELL
TO DB2:PAYROLL

Talvez o resultado seja:

BELL
 ↓
APPDEV
 ↓
CICS:PAYR
 ↓
PROGRAM:PAY001
 ↓
AUTHID:PAYDB2
 ↓
PAYROLL

Cinco saltos.

Mas podemos melhorar.

Nem toda aresta possui o mesmo significado.

Podemos atribuir pesos hipotéticos:

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

Agora não procuramos apenas:

shortest path

Podemos procurar:

lowest-cost privilege path

ou caminhos que atravessem relações consideradas particularmente sensíveis.


🤖 CAPÍTULO 17 — IA NÃO PRECISA SER O ORÁCULO

E aqui aparece uma aplicação muito interessante de inteligência artificial.

Não precisamos entregar os dados para um LLM e perguntar:

“Quem é perigoso?”

Isso seria uma péssima abstração.

Podemos primeiro usar mecanismos determinísticos para construir:

ENTERPRISE PRIVILEGE GRAPH

alimentado por informações de:

RACF
JES
JCL
STARTED
SURROGAT
CICS
Db2
MQ
USS
SMF

Algoritmos tradicionais encontram os caminhos.

Depois uma IA pode ajudar a explicar o resultado.

Por exemplo:

USER BELL não possui acesso direto a PAYROLL.

Entretanto:

BELL pertence a APPDEV.
APPDEV permite executar CICS transaction PAYR.
PAYR chama PAY001.
PAY001 utiliza determinado contexto Db2.
Esse contexto executa PAYPKG.
PAYPKG acessa PAYROLL.

Agora temos:

WHAT

mais:

HOW

mais:

WHY

Essa combinação é muito mais útil para um analista.


⏰ CAPÍTULO 18 — O GRAFO TEM TEMPO

Bell finalmente achou que havia entendido a Dungeon.

Então o mapa mudou.

Às:

08:00

tínhamos:

BELL → APPDEV

Às:

10:12

um administrador adicionou uma relação.

Agora:

APPDEV → PROD_SUPPORT

Instantaneamente apareceram novos caminhos.

Esse é um detalhe fantástico.

O grafo de privilégios não é estático.

Podemos pensar:

GRAPH(t0)

e:

GRAPH(t1)

Então perguntar:

DIFF GRAPH(t0,t1)

Talvez uma única mudança tenha criado:

1 nova permissão direta

mas, transitivamente:

37 novos caminhos

ou:

317 novos caminhos

incluindo:

12 caminhos até recursos críticos.

Agora imagine isso integrado ao Change Management.

Antes de aprovar:

PERMIT ...

o sistema calcula:

DIRECT CHANGE:

1 permission

TRANSITIVE EFFECT:

317 new reachable paths

CRITICAL RESOURCES AFFECTED:

12

Nesse momento alguém no Security Operations Center olha para a tela e pergunta:

— Quem diabos pediu essa mudança?

Bell discretamente esconde o formulário.


🔬 CAPÍTULO 19 — PASSO A PASSO PARA PENSAR COMO ANALISTA

Você é um programador COBOL iniciante.

Como aplicar tudo isso sem virar especialista RACF amanhã?

Comece simples.

Pegue uma transação qualquer.

Por exemplo:

CICS transaction: SALO

Pergunte:

1. Quem pode executá-la?

Depois:

2. Qual programa ela chama?

SALO
 ↓
SALDO01

3. Esse programa acessa o quê?

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

4. Sob qual contexto de autorização?

5. Existem packages Db2 envolvidos?

6. Existem filas MQ?

7. Quem consome essas filas?

8. O consumidor executa sob qual userid?

9. Existe uma started task?

10. Quais recursos essa identidade alcança?

De repente você construiu manualmente:

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

Parabéns.

Você acabou de fazer sua primeira análise de privilege path.


🧰 CAPÍTULO 20 — DICAS PARA O COBOLZEIRO

Primeira dica:

não olhe somente para o programa.

Descubra como ele é executado.

Segunda:

aprenda JCL.

O COBOL pode ser o motor, mas JCL frequentemente explica como aquele motor entra na estrada no mundo batch.

Terceira:

aprenda o básico de RACF.

Mesmo que você nunca seja administrador RACF.

Entenda pelo menos:

USER
GROUP
PROFILE
ACCESS
PERMIT
SURROGAT
STARTED

Quarta:

quando encontrar CICS, pergunte pelo contexto de segurança.

Quinta:

quando encontrar MQ, siga a mensagem.

Não pare na fila.

Pergunte:

Quem consome?

Depois:

Sob qual identidade?

Depois:

O consumidor faz o quê?

Sexta:

quando encontrar Db2, não pense somente em tabela.

Lembre-se de:

AUTHID
secondary IDs
roles
packages
plans
privileges

Sétima:

aprenda a desenhar.

Uma folha de papel com:

USER
 ↓
CICS
 ↓
PGM
 ↓
MQ
 ↓
STC
 ↓
DB2

às vezes explica mais que cinquenta páginas de relatório.


🥚 CAPÍTULO 21 — O EASTER EGG DO NÍVEL 37

Bell finalmente chegou ao nível 37 da Dungeon.

Encontrou uma porta.

Na placa estava escrito:

PF3 = EXIT

Bell apertou PF3.

Nada aconteceu.

Apareceu:

IKJ56700A ENTER USERID -

Bell olhou para o veterano.

— Isso não faz sentido.

O COBOLzeiro terminou seu café.

— Bem-vindo ao mainframe.

Bell tentou PF12.

Funcionou.

Ninguém jamais descobriu por quê.

Os arqueólogos de sistemas ainda investigam o incidente.


🗺️ CAPÍTULO 22 — O GOOGLE MAPS DOS PRIVILÉGIOS

Agora podemos imaginar uma ferramenta fascinante.

Você informa:

SOURCE:

USER:BELL

e:

TARGET:

DB2:PAYROLL

A ferramenta responde:

DIRECT ACCESS:

NO

Mas não termina aí.

Ela mostra:

3 INDIRECT PATHS FOUND

PATH 01

BELL
 ↓
APPDEV
 ↓
CICS PAYR
 ↓
PAY001
 ↓
PAYDB2
 ↓
PAYROLL

PATH 02

BELL
 ↓
MQ PUT
 ↓
PAY.REQUEST
 ↓
PAYSTC
 ↓
PAYUSER
 ↓
PAYROLL

PATH 03

BELL
 ↓
SURROGATE
 ↓
PAYBATCH
 ↓
PAYROLL

E ainda poderia dizer:

REMOVE EDGE:

BELL → PAY.REQUEST

RESULT:

PATH 02 eliminated.

Ou:

REMOVE EDGE:

APPDEV → PAYR

RESULT:

PATH 01 eliminated.

Isso transforma segurança em algo visual e explicável.

Quase um:

Google Maps do RACF

Só que, em vez de:

São Paulo → Campinas

perguntamos:

USER01 → PAYROLL

E o sistema responde:

Você chegará ao destino em 5 privilégios.

Existe uma rota alternativa via MQ.

Evite SURROGAT:
tráfego intenso.

Bell riu.

O auditor RACF não.


🏁 EPÍLOGO — A PORTA CONTINUAVA TRANCADA

Bell retornou ao começo da Dungeon.

A velha porta continuava lá:

PROD.PAYROLL.MASTER

Passou seu userid novamente.

ACCESS DENIED

Bell sorriu.

Agora entendia.

A mensagem estava correta.

Ele realmente não possuía acesso direto.

Mas essa informação, sozinha, não descrevia todo o sistema.

Atrás dela existiam:

GROUPS
JCL
SURROGATES
STARTED TASKS
CICS
COBOL
DB2
MQ
SERVICE IDs
PACKAGES
QUEUES
APPLICATION LOGIC

Todos conectados.

A segurança tradicional havia perguntado:

WHO HAS ACCESS?

Bell aprendera a fazer outra pergunta:

WHO CAN REACH IT?

E depois uma ainda melhor:

HOW?

Essa talvez seja uma das mudanças de perspectiva mais importantes para quem começa a estudar segurança em ambientes corporativos complexos.

Um privilégio não precisa ser uma linha dizendo:

USER01 READ PAYROLL

Ele pode estar espalhado por cinco sistemas diferentes.

Pode começar em um grupo RACF.

Passar por JCL.

Trocar de identidade numa started task.

Entrar em CICS.

Executar um programa COBOL.

Publicar uma mensagem MQ.

Ser consumido por outro serviço.

Terminar em um package Db2.

E somente então alcançar o dado.

Nenhum componente isolado necessariamente está errado.

O risco pode existir na composição.

Essa é a beleza — e também a dificuldade — dos sistemas grandes.

Bell guardou a adaga.

O COBOLzeiro fechou o SDSF.

E na última tela verde da Dungeon apareceu:

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

USER BELL01
DIRECT ACCESS TO PAYROLL: NONE

INDIRECT PRIVILEGE PATHS: 3

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

Bell ficou alguns segundos olhando.

Então perguntou:

— Então segurança não é descobrir quem tem a chave?

O velho levantou a xícara.

— Não, Bell.

Na tela apareceu o último ensinamento:

       PERMISSION != REACHABILITY

— Segurança também é descobrir quem conhece o caminho.

E, em algum lugar profundamente enterrado dentro do z/OS, um job terminou:

IEF404I BELLJOB - ENDED - TIME=03.17.42

MAXCC=0000

Porque algumas tradições são sagradas.

☕

quinta-feira, 9 de janeiro de 2020

A Deep Web que Não Era Deep — o dia em que o Google esqueceu a velha Internet

 

Bellacosa Mainframe e a web que o google expulsou do radar

☕ Um Café no Bellacosa Mainframe

A Deep Web que Não Era Deep — o dia em que o Google esqueceu a velha Internet

🕸️ Quando páginas públicas, blogs esquecidos, fóruns mortos, fanpages obscuras e bizarrices culturais continuaram existindo — mas desapareceram do mapa

Existe um tipo muito específico de solidão digital.

Você lembra que uma coisa existia.

Tem quase certeza de que viu aquilo em algum lugar.

Talvez fosse um blog sobre anime de 2007.

Talvez um fórum sobre computadores japoneses.

Talvez uma página de fã dedicada a uma atriz secundária de uma série esquecida.

Talvez uma propaganda brasileira de 1989.

Talvez um texto obscuro sobre COBOL escrito por alguém que trabalhou num banco em 1996.

Você abre o Google.

Pesquisa.

Nada.

Tenta de novo.

Troca as palavras.

Coloca aspas.

Remove as aspas.

Adiciona o ano.

Adiciona “blogspot”.

Adiciona “forum”.

Adiciona “archive”.

E então acontece aquela sensação estranha:

a Internet está enorme, mas parece menor.

Bem-vindo à Deep Web que não era Deep.



🎹 Play it again, Sam

Existe uma frase que todo mundo conhece:

“Play it again, Sam.”

Só há um detalhe divertido.

Rick não fala exatamente isso em Casablanca.

A frase foi sendo reconstruída pela memória popular até se tornar mais famosa que a versão original.

Isso é cultura.

Não funciona como checksum.

Não funciona como hash.

Não funciona como um banco de dados perfeitamente normalizado.

Funciona como uma gigantesca memória distribuída cheia de erros, repetições, interpretações, referências cruzadas e pequenas corrupções.

E durante muito tempo a Web foi provavelmente a melhor máquina já criada para preservar essa bagunça maravilhosa.

Você pesquisava:

Play it again, Sam

e não encontrava apenas Casablanca.

Encontrava um blog de cinema.

Depois um fórum.

Depois Woody Allen.

Depois alguém discutindo citações erradas de filmes.

Depois uma página pessoal de 1998 sobre Humphrey Bogart.

Depois um sujeito explicando por que determinada tradução brasileira estava errada.

Três horas depois você estava lendo sobre algum projetor soviético usado numa universidade da antiga Tchecoslováquia.

E pensava:

como diabos eu vim parar aqui?

Essa era a magia.

A velha Internet não era particularmente eficiente.

Mas era extraordinariamente boa em permitir que você se perdesse com qualidade.



🏺 A Internet como sítio arqueológico

Quem começou a navegar nos anos 1990 ou 2000 provavelmente se lembra de uma Web muito diferente.

Sites pessoais.

GeoCities.

Tripod.

Angelfire.

Fóruns.

Guestbooks.

FTP.

Usenet.

BBS sobreviventes.

Páginas de universidades.

Blogs independentes.

Blogspot.

LiveJournal.

Fotolog.

Orkut.

Sites de fãs.

Páginas feitas em FrontPage.

HTML escrito à mão.

GIFs piscando.

Contadores de visitas.

Cursores personalizados.

MIDI tocando automaticamente.

Era bonito?

Frequentemente não.

Era organizado?

De jeito nenhum.

Mas havia uma coisa preciosa ali:

densidade humana.

Cada página parecia ter sido feita por alguém.

Não necessariamente por uma empresa.

Não necessariamente por um especialista.

Não necessariamente por alguém tentando vender alguma coisa.

Às vezes era apenas um sujeito de Campinas apaixonado por locomotivas japonesas.

Ou uma estudante portuguesa catalogando filmes de terror italianos.

Ou um programador alemão documentando uma biblioteca obscura.

Ou alguém no Japão fotografando máquinas de vending.

E essas pessoas criavam páginas.

E essas páginas apontavam para outras páginas.

Era um gigantesco organismo descentralizado.



🔗 A Web era uma rede de verdade

Talvez esse seja o ponto mais importante.

A palavra Web não foi escolhida por acaso.

Teia.

Uma página apontava para outra.

Um blog possuía um blogroll.

O blogroll apontava para quinze outros blogs.

Os comentários tinham URLs.

Os autores respondiam citando outro texto.

Um fórum apontava para uma página pessoal.

A página pessoal apontava para um FTP.

O FTP possuía uma documentação.

A documentação mencionava um software.

Você pesquisava o software.

Encontrava outro fórum.

Era uma espécie de random walk cultural.

Em termos de teoria de grafos, aquilo era maravilhoso.

Imagine:

BLOG A
   |
   +------ BLOG B
   |          |
   |          +------ FÓRUM C
   |                     |
   |                     +------ SITE D
   |
   +------ PÁGINA PESSOAL E
              |
              +------ FTP F

O usuário não precisava conhecer previamente o destino.

Bastava entrar no grafo.

A própria arquitetura levava você adiante.


🧱 Então construímos jardins murados

Aos poucos, grande parte da produção humana migrou.

Facebook.

Instagram.

TikTok.

Discord.

Telegram.

WhatsApp.

Aplicativos.

Plataformas privadas.

Comunidades fechadas.

O conteúdo continuou sendo produzido.

Provavelmente mais conteúdo do que em qualquer momento anterior da história.

Só que algo mudou.

O hyperlink começou a desaparecer.

Você não publica necessariamente uma página.

Você publica dentro de uma plataforma.

O conteúdo passa a possuir contexto interno.

O relacionamento entre pessoas passa a existir dentro do sistema.

O grafo deixa de ser:

SITE A → SITE B → SITE C

e passa a ser:

PLATAFORMA
   |
   +-- usuário
   +-- usuário
   +-- usuário
   +-- post
   +-- vídeo
   +-- grupo

Do lado de fora existe apenas um muro.

Muito conteúdo.

Poucas portas.


🕳️ A verdadeira Deep Web cotidiana

Tecnicamente, Deep Web significa conteúdo não indexado por mecanismos de busca.

Sistemas internos.

Bases de dados.

Conteúdo protegido por autenticação.

Painéis privados.

Aplicações.

Nada de particularmente misterioso.

Mas surgiu uma segunda categoria curiosa.

Conteúdo que:

  • é público;

  • pode ser acessado por URL;

  • não exige login;

  • não está criptograficamente escondido;

  • continua disponível no servidor;

e mesmo assim praticamente desapareceu da descoberta cotidiana.

Não porque esteja secreto.

Mas porque ninguém mais chega até ele.

Eu gosto de chamar isso de:

Dark Long Tail da Web

A cauda longa obscura da Internet.

Milhões de páginas que ainda estão tecnicamente online, mas culturalmente desconectadas.


👻 O site fantasma

Imagine um blog criado em 2006.

Última postagem:

17 de março de 2011.

Existem 438 artigos.

Uma sidebar.

Setenta links.

Comentários.

Fotos.

Relatos pessoais.

Referências.

Reviews.

Tutoriais.

Curiosidades.

O autor abandonou o projeto.

Mas o servidor continua respondendo:

HTTP 200 OK

A página está viva.

Só que ninguém visita.

Ela não aparece nas buscas comuns.

Os blogs que apontavam para ela morreram.

Os fóruns que mencionavam o endereço desapareceram.

As redes sociais que compartilhavam aquele conteúdo foram encerradas.

O domínio talvez ainda exista.

Tecnicamente:

online.

Culturalmente:

morto.

É praticamente uma cidade romana soterrada.

As paredes estão lá.

As ruas estão lá.

As inscrições estão lá.

O problema é descobrir onde cavar.


🏛️ E então temos o Blogspot

Aqui começa a parte divertida.

O Blogspot é uma coisa extraordinária.

Não necessariamente porque seja moderno.

Justamente pelo contrário.

Ele preservou uma arquitetura quase fóssil da Web.

Arquivos mensais.

Posts individuais.

Labels.

Sidebars.

Blogrolls.

Comentários.

Links permanentes.

Imagens.

Páginas estáticas.

E principalmente:

URLs que continuam funcionando depois de quinze ou vinte anos.

Há blogs abandonados que hoje parecem pequenas Pompeias digitais.

O autor foi embora.

A comunidade desapareceu.

Os comentários pararam.

Mas tudo ficou congelado.

Você entra.

E parece ouvir os fantasmas da velha Web conversando.


🔍 Google, encontre isso para mim

Durante muitos anos havia uma sensação quase mística:

Se está na Internet, o Google encontra.

Nunca foi literalmente verdade.

Mas parecia verdade o suficiente.

O índice era gigantesco.

Links eram seguidos.

Páginas obscuras apareciam.

Consultas estranhas retornavam resultados igualmente estranhos.

Então a Web cresceu absurdamente.

E indexar a Web inteira deixou de ser apenas uma questão de encontrar páginas.

Virou uma questão de decidir:

o que vale a pena rastrear?

o que vale a pena indexar?

o que vale a pena apresentar?

E aqui nasce uma distinção importante.

Existem três operações diferentes:

CRAWL
  ↓
INDEX
  ↓
RANK

Primeiro o mecanismo precisa descobrir a página.

Depois decidir armazená-la no índice.

Depois decidir se ela merece aparecer para você.

Uma página pode existir e falhar em qualquer um desses pontos.


🧮 Bem-vindo ao WLM da Internet

Programador de mainframe vai entender imediatamente.

O Google tem recursos finitos.

CPU.

Storage.

Network.

Crawl budget.

Prioridade.

Classificação.

Pense nisso como um Workload Manager planetário.

Temos workloads.

Alguns recebem prioridade alta.

Outros recebem baixa.

Se você administra bilhões de URLs, precisa decidir onde gastar recursos.

Então imagine algo parecido com:

SERVICE CLASS: IMPORTANT_CURRENT_CONTENT
IMPORTANCE: 1

SERVICE CLASS: COMMERCIAL_INFORMATION
IMPORTANCE: 2

SERVICE CLASS: CURRENT_POPULAR_PAGES
IMPORTANCE: 2

SERVICE CLASS: BLOG_ABANDONADO_2009
IMPORTANCE: 5

😂

O Blogspot sobre VHS japoneses pode continuar existindo.

Mas talvez ninguém queira gastar CPU nele.


🦖 O COBOL cultural

Aqui surge uma analogia especialmente deliciosa.

COBOL sofre exatamente do mesmo preconceito.

Algo é antigo.

Então presumimos:

irrelevante.

Só que idade e irrelevância não são a mesma variável.

Um programa COBOL escrito em 1988 pode continuar processando milhões de transações.

Um blog escrito em 2008 pode possuir a única descrição existente de determinado acontecimento.

Um fórum de 2004 pode conter a única solução conhecida para determinado equipamento.

Uma página pessoal de 1999 pode guardar fotos que não existem em nenhum outro lugar.

Velho não significa lixo.

Velho significa:

precisa de contexto para sabermos se é lixo.


🤖 A ironia da Inteligência Artificial

E agora chegamos a uma ironia magnífica.

Vivemos na era dos modelos gigantes.

LLMs.

RAG.

Knowledge graphs.

Vector databases.

Semantic search.

Agentes.

Embeddings.

Todo mundo quer construir máquinas capazes de compreender o conhecimento humano.

Só que paralelamente estamos permitindo que pedaços enormes do conhecimento humano desapareçam da superfície pesquisável.

É quase como construir a Enterprise enquanto queimamos a biblioteca.

A IA pergunta:

Onde estão os dados?

A humanidade responde:

Estavam num fórum.

Qual fórum?

Não lembro.

Existe?

Acho que sim.

URL?

Não tenho.

Parabéns. Temos 300 bilhões de parâmetros e não encontramos a página do Seu Arnaldo sobre rádios valvulados de 1973.


🗺️ Search virou answer engine

Também ocorreu outra transformação.

Antes, o mecanismo de busca dizia:

Aqui estão dez caminhos.

Agora cada vez mais tenta dizer:

Aqui está a resposta.

Isso parece uma melhoria.

E muitas vezes é.

Mas existe um custo filosófico.

Quando você recebe uma resposta sintetizada, não necessariamente percorre os caminhos que levariam às fontes marginais.

A resposta fica melhor.

A aventura piora.


🧭 A serendipidade morreu?

Serendipidade é descobrir algo valioso sem estar procurando exatamente aquilo.

A velha Web era uma máquina extraordinária de serendipidade.

Você pesquisava:

IBM 3270 terminal

Encontrava:

3270
 ↓
mainframe museum
 ↓
computadores dos anos 1970
 ↓
companhias aéreas
 ↓
sistemas de reservas
 ↓
Sabre
 ↓
história da American Airlines
 ↓
algum blog obscuro
 ↓
um sujeito contando como trabalhava num aeroporto em 1994

E então percebia que acabou aprendendo alguma coisa que nem sabia que queria aprender.

Pesquisa moderna frequentemente tenta eliminar esse ruído.

Só que aquele ruído também era cultura.


🪦 Link rot: o cemitério invisível

Existe ainda outro inimigo.

Links morrem.

Domínios expiram.

Sites mudam.

Serviços encerram.

CMS são migrados.

URLs mudam.

Empresas desaparecem.

Isso é chamado de link rot.

Você encontra um artigo de 2005 contendo:

Para saber mais:
http://www.exemplo.com/artigo/123.html

Clica.

Nada.

Domain parking.

Cassino online.

Página vendendo suplemento.

A referência desapareceu.

O texto sobreviveu.

A evidência morreu.

É devastador para história digital.


📚 O hyperlink também é citação

Nós tratamos links como elementos técnicos.

Mas eles são muito mais do que isso.

Um link diz:

“Eu estava lendo aquilo quando escrevi isto.”

É uma relação intelectual.

Um fragmento de contexto.

Uma pequena linha genealógica do conhecimento.

Quando os links desaparecem, perdemos não apenas navegação.

Perdemos proveniência.


🧬 O grafo cultural vai se desfazendo

Imagine:

A → B → C → D

D desaparece.

Depois C sai do índice.

Depois B perde relevância.

A continua vivo.

Mas agora o caminho desapareceu.

Depois o próprio A para de receber links.

O conteúdo continua tecnicamente disponível.

Só que o grafo cultural foi desmontado.


🩺 Dr. House entra na sala

House olha o paciente.

Sintoma:

“Eu não encontro mais coisas estranhas na Internet.”

Equipe:

— Google piorou?

House:

— Sintoma idiota. Próximo.

Foreman:

— Talvez o conteúdo tenha sido removido.

House:

— Algumas páginas continuam online.

Chase:

— Então é problema de ranking.

House:

— Parcial.

Cameron:

— Mudança da arquitetura social?

House olha para o quadro.

Escreve:

CONTENT ≠ DISCOVERABILITY

E sai mancando.

Diagnóstico:

a informação não morreu. A circulação sanguínea morreu.


🧟 O conteúdo zumbi

Temos então um novo tipo de objeto digital.

Não está morto.

Não está vivo.

É um conteúdo zumbi.

Servidor responde.

HTML renderiza.

Imagens carregam.

Mas ele não participa mais da circulação cultural.

É uma URL sem comunidade.


🏴‍☠️ A arqueologia de busca

Para encontrar essas coisas, começamos novamente a usar técnicas quase artesanais.

Aspas:

"frase extremamente específica"

Restrição:

site:blogspot.com

Combinação:

site:blogspot.com "IBM 3270"

Datas:

"termo obscuro" 2007

Variações linguísticas.

Nomes antigos.

Nicknames.

Domínios extintos.

Trechos conhecidos.

E então uma página aparece.

Você abre.

E começa a seguir os links.

Nesse momento você não está mais pesquisando.

Está escavando.


⛏️ Indiana Jones da Internet

O arqueólogo digital moderno possui ferramentas peculiares.

Google.

Bing.

Internet Archive.

Caches.

Mirrors.

GitHub.

Reddit.

Usenet archives.

Blogspot.

Sites pessoais sobreviventes.

Às vezes uma única palavra encontrada em um comentário permite reconstruir uma cadeia inteira.

É OSINT cultural.


🗃️ O mainframe conhece esse problema

Existe uma velha máxima implícita em sistemas corporativos:

o dado que ninguém consegue localizar é quase equivalente ao dado inexistente.

Você pode possuir cinquenta anos de registros.

Mas se não houver catálogo, índice, metadata e relacionamentos...

boa sorte.

Em mainframe, inventamos ferramentas exatamente para impedir isso.

Catálogos.

Indexes.

VTOC.

GDG.

DB2 indexes.

Metadata.

RACF profiles.

Naming conventions.

O objetivo é simples:

saber onde as coisas estão.

A Internet está descobrindo a versão cultural desse problema.


📦 Temos os datasets. Perdemos o catálogo.

Talvez essa seja a metáfora mainframe perfeita.

Imagine um data center contendo milhões de datasets.

Todos intactos.

Mas alguém perdeu o catálogo.

Tecnicamente os dados ainda existem nos volumes.

Operacionalmente:

boa sorte.

A velha Web está caminhando para algo parecido.

Os volumes continuam montados.

As páginas continuam nos discos.

Mas o catálogo cultural está desaparecendo.


🕸️ Por isso links internos importam mais do que SEO

Quem possui um blog antigo pode fazer algo muito poderoso.

Criar ligações entre textos.

Não apenas:

“clique aqui para melhorar meu ranking.”

Mas:

“este assunto possui história.”

Um artigo sobre COBOL aponta para outro sobre System/360.

Que aponta para outro sobre Grace Hopper.

Que aponta para um sobre bancos.

Que aponta para um sobre história da computação.

O leitor entra por uma porta.

Depois começa a caminhar.

Isso cria um grafo.


🧠 O blog como knowledge graph humano

Um grande blog pode ser visto como:

POST
 |
 +-- conceito
 |
 +-- pessoa
 |
 +-- tecnologia
 |
 +-- evento histórico
 |
 +-- filme
 |
 +-- piada
 |
 +-- outro post

Milhares de textos interligados formam algo maior.

Não é apenas conteúdo.

É uma representação parcial de como alguém pensa.

Quase um knowledge graph autobiográfico.


🧱 O artigo isolado é uma ilha

Publicar um artigo sem links é fácil.

Ele nasce.

Recebe algumas visitas.

Desaparece.

Já um artigo conectado torna-se uma ponte.

Mesmo anos depois alguém pode chegar até ele por caminhos inesperados.

Isso é especialmente importante para conteúdo estranho.

Porque conteúdo estranho raramente possui volume de pesquisa suficiente para competir por ranking.

Mas pode ser encontrado por associação.


🐇 Follow the white rabbit

A melhor Internet sempre funcionou assim.

Você encontra uma coisa.

Ela aponta para outra.

Depois outra.

Depois outra.

É o buraco do coelho.

A Web sem buracos de coelho é apenas um catálogo.

E catálogos são úteis.

Mas ninguém conta histórias sobre o dia em que passou quatro horas navegando num catálogo eficiente.


📼 Cultura popular precisa dessa bagunça

Especialmente cultura popular.

Porque cultura popular raramente possui documentação formal completa.

Memes.

Dublagens.

Programas de televisão.

Propagandas.

Brinquedos.

Animes obscuros.

Revistas.

Quadrinhos.

Locadoras.

Videocassetes.

Programas de rádio.

Jogos.

Fanzines.

Músicas locais.

Boa parte dessa memória viveu em páginas amadoras.

Se essas páginas desaparecem da descoberta, a memória coletiva começa a ser reescrita pelas fontes que sobreviveram.


⚠️ E quem sobrevive normalmente é grande

Sites institucionais.

Enciclopédias.

Grandes plataformas.

Empresas.

Portais.

Isso cria um risco silencioso.

A história continua existindo.

Mas passa a ser contada apenas pelos sobreviventes mais fortes.

É survivorship bias aplicado à Internet.


🎬 Casablanca novamente

Voltemos a Sam.

A citação errada sobreviveu porque foi repetida.

Milhões de vezes.

Mas imagine uma pequena curiosidade cinematográfica que apareceu apenas em três blogs de 2004.

Dois morreram.

O terceiro continua online.

Só que ninguém o encontra.

Do ponto de vista cultural:

a informação praticamente deixou de existir.

Isso demonstra uma coisa interessante.

A memória coletiva depende menos de verdade absoluta do que de:

redundância.


💾 3-2-1 para cultura

Quem trabalha com backup conhece:

3 cópias.

2 mídias.

1 fora do local.

Talvez a cultura digital precise de uma versão semelhante.

Uma informação importante deveria existir:

em diferentes sites,

em diferentes formatos,

em diferentes comunidades.

Porque uma única URL não é preservação.

É fé.


🤖 IA pode piorar e melhorar isso

A Inteligência Artificial tem dois papéis possíveis.

O primeiro é ruim.

Modelos sintetizam respostas.

Usuários deixam de visitar páginas.

Sites recebem menos tráfego.

Autores deixam de publicar.

Fontes marginais desaparecem.

Mas existe outro cenário.

IA pode ser usada para reconstruir relações.

Extrair entidades.

Detectar referências.

Criar grafos.

Relacionar arquivos.

Descobrir páginas esquecidas.

Semantic search pode finalmente encontrar algo mesmo quando você não lembra exatamente as palavras.

Isso pode ser maravilhoso.

Desde que os documentos ainda estejam disponíveis.


🕯️ Porque IA não ressuscita o que foi apagado

Essa é uma distinção fundamental.

AI retrieval não é necromancia.

Se o documento não existe mais, o modelo não pode magicamente reconstruí-lo com fidelidade.

Pode inferir.

Pode imaginar.

Pode aproximar.

Mas isso não é arquivo.

Preservação vem primeiro.

Inteligência vem depois.


🧙 Sam ainda está no piano

Talvez a velha Web nunca tenha realmente desaparecido.

Talvez esteja apenas ficando silenciosa.

Ela continua lá.

Em servidores antigos.

Blogs abandonados.

Páginas pessoais.

Mirrors.

Arquivos.

Diretórios esquecidos.

Como um bar quase vazio depois da meia-noite.

As cadeiras continuam ali.

As garrafas continuam atrás do balcão.

E num canto existe um piano.

Você chega.

Olha para o músico.

E diz:

Play it again, Sam.

Ele começa a tocar.

E por alguns minutos voltamos à Internet onde você pesquisava uma coisa...

e encontrava o mundo.


☕ Café encerrado

Talvez estejamos vivendo uma inversão histórica curiosa.

1998

“Precisamos colocar isso na Internet para que as pessoas encontrem.”

2008

“Se existe, o Google encontra.”

2018

“Está nas redes sociais.”

2026

“Eu sei que existe. Só não consigo encontrar.”

E talvez o maior problema da Web futura não seja falta de informação.

Será exatamente o contrário.

Teremos informação demais.

Armazenada em lugares demais.

Produzida por gente demais.

Mas com cada vez menos caminhos ligando uma coisa à outra.

A Deep Web do futuro talvez não seja um lugar misterioso cheio de hackers usando capuz.

Pode simplesmente ser:

uma página pública de 2009 que ninguém mais sabe que existe.

HTTP 200.

Sem visitas.

Sem links.

Sem citações.

Sem testemunhas.

E em algum Blogspot esquecido, com sidebar gigantesca, GIF antigo, fonte duvidosa e um comentário de quinze anos atrás dizendo:

“Muito bom o texto, amigo. Abraço.”

estará guardado um pedaço da história humana que nenhum algoritmo julgou importante o suficiente para mostrar.

Talvez seja hora de começarmos a tratá-los não como páginas velhas.

Mas como aquilo que realmente são.

Artefatos arqueológicos de uma civilização digital que ainda está viva — mas já começou a esquecer o próprio passado.

☕🕸️🏺

Um Café no Bellacosa Mainframe

Onde até um HTML de 2007 merece backup antes que alguém dê DELETE PURGE na memória coletiva.

https://eljefemidnightlunch.blogspot.com/2026/08/organizacoes-tabajara-mainframe-seus.html

Time machine web

  • Marginalia Search — provavelmente é o mais próximo do que você está procurando. O próprio projeto diz priorizar conteúdo não comercial e oferecer ferramentas para encontrar “lost old websites”. Tem crawler e índice próprios e foi pensado justamente para revelar sites que você provavelmente não conhecia.
  • Wiby — voltado à Classic Web. É especialmente interessante para páginas simples, pessoais e antigas. O próprio Mwmbl o cataloga como “Search Engine for the Classic Web”.
  • Mwmbl — buscador independente, open source e sem fins lucrativos. O detalhe fantástico é que usuários podem inclusive submeter sites para serem rastreados, ajudando a reconstruir um índice alternativo.
  • Million Short — abordagem diferente e genial para nosso experimento: permite retirar da busca os sites dominantes e procurar aquilo que sobra. O objetivo declarado é justamente escapar de resultados excessivamente dominados por SEO.
  • Wayback Machine — Internet Archive — aqui mudamos de busca para arqueologia propriamente dita. Se você conhece uma URL, domínio ou pelo menos consegue descobrir o antigo endereço, pode voltar no tempo e procurar capturas históricas. A Wayback também oferece APIs para verificar e listar capturas.


quarta-feira, 8 de janeiro de 2020

☕💥 Algoritmos no Mainframe: Da Matemática de Al-Khwarizmi ao COBOL no z/OS

 

Bellacosa Mainframe apresenta algoritmos na programação

☕💥 Algoritmos no Mainframe: Da Matemática de Al-Khwarizmi ao COBOL no z/OS

Ou como um programador COBOL Padawan descobre que, antes de existir código, existia lógica

"Um bom algoritmo faz um bom programa. Um excelente algoritmo faz o programador parecer um mago. Um algoritmo ruim faz o operador do turno da madrugada querer abrir um chamado para exorcismo."

— Bellacosa Mainframe

Introdução

Existe uma frase que gosto de repetir aos meus alunos padawans:

"COBOL não é difícil. Difícil é pensar."

E isso pode soar estranho.

Muitos acreditam que programar significa decorar comandos, aprender sintaxe, conhecer verbos COBOL ou dominar JCL.

Não.

Programar é, essencialmente, aprender a pensar de forma estruturada.

E isso possui um nome.

Algoritmo.

Antes do COBOL.

Antes do Assembler.

Antes do FORTRAN.

Antes do System/360.

Antes do z16.

Antes do ChatGPT.

Já existiam algoritmos.

E a história deles é simplesmente fantástica.


O nascimento dos algoritmos

A palavra algoritmo deriva do nome do matemático persa:

Muhammad ibn Musa al-Khwarizmi

(cerca de 780–850 d.C.)

Ele escreveu um tratado chamado:

"Kitab al-Jabr wa-l-Muqabala"

Livro que deu origem à palavra:

Algebra

E seu nome latinizado tornou-se:

Algorismus

Posteriormente:

Algorithm

Ou seja...

Cada vez que fazemos:

ADD A TO B GIVING TOTAL

estamos usando ideias desenvolvidas há mais de mil anos.


Algoritmos antes dos computadores

Curiosamente, algoritmos são muito mais antigos que computadores.

Exemplos:

Receitas culinárias

Procedimentos militares

Construção de pirâmides

Cálculos astronômicos

Navegação marítima

Tributação romana

Tudo era algoritmo.

Apenas não era chamado assim.


O primeiro algoritmo famoso

O algoritmo de Euclides.

300 a.C.

Encontrar o MDC.

Exemplo:

MDC(48,18)

Passo 1

48 mod 18 = 12

Passo 2

18 mod 12 = 6

Passo 3

12 mod 6 =0

Resposta

6

Dois mil anos depois...

Continuamos utilizando a mesma lógica.


A chegada dos computadores

Década de 1940.

ENIAC

UNIVAC

EDSAC

LEO I

IBM 650

IBM 7070

A grande dificuldade não era processador.

Era ensinar uma máquina a pensar.

E pensar significava:

Transformar problemas em algoritmos.


O nascimento do mainframe

1952

IBM 701

1954

IBM 704

1964

System/360

Um dos projetos mais revolucionários da história.

Pela primeira vez:

Uma arquitetura única.

Diversos equipamentos.

Compatibilidade.

E o software começava a ganhar importância.


O problema dos programas gigantes

Década de 50.

Empresas começavam a automatizar:

Folha de pagamento

Seguros

Bancos

Governo

Previdência

Surgiu um problema.

Como ensinar milhares de pessoas a desenvolver sistemas?

Resposta:

Criando linguagens de alto nível.


COBOL nasce em 1959

CODASYL.

Grace Hopper.

Departamento de Defesa Americano.

Objetivo:

Criar uma linguagem próxima do inglês.

Exemplo:

READ CLIENTE

IF SALDO > 1000

   PERFORM LIBERA-CREDITO

END-IF

Mas existe um detalhe importante.

COBOL não pensa.

Quem pensa é o desenvolvedor.

COBOL apenas executa.

O algoritmo continua sendo o verdadeiro cérebro.


O algoritmo escondido dentro do COBOL

Muitos iniciantes acreditam:

"Aprendi COBOL."

Não.

Aprendeu comandos.

Programar é construir algoritmos.

Exemplo.

Problema:

Calcular média.

Padawan inexperiente:

ADD A TO B
ADD C TO TOTAL
DIVIDE 3 INTO TOTAL

Padawan treinado:

Entrada

3 notas

Processamento

Somar

Dividir

Saída

Média

Ele pensa primeiro.

Codifica depois.


Características de um algoritmo

Entrada

Pode possuir dados.

Exemplo:

Arquivo VSAM

DB2

MQ

GDG

SYSIN


Saída

Relatório

Arquivo

Mensagem

Tela CICS

API JSON


Finitude

Todo algoritmo precisa terminar.

Exemplo ruim:

PERFORM FOREVER

Exemplo bom:

PERFORM UNTIL EOF='S'

Clareza

Evitar ambiguidades.

Ruim:

"Processar cliente"

Bom:

Ler registro

Validar CPF

Consultar saldo

Atualizar DB2

Gravar auditoria


Algoritmos nos Batchs Mainframe

Imagine.

Banco processando PIX.

2 bilhões de registros.

A lógica continua igual.

Entrada

SORTIN

Processamento

JOINKEYS

ICETOOL

COBOL

Saída

SORTOUT

Relatórios

DB2

MQ


O algoritmo do fechamento bancário

Leitura

Validação

Consolidação

Apuração

Tributação

Geração de extrato

Backup

Auditoria

Tudo algoritmo.


Algoritmos no CICS

O novato vê:

EXEC CICS RECEIVE

EXEC CICS SEND

EXEC CICS LINK

Mas por trás existe:

Receber dados

Validar

Consultar

Persistir

Retornar

Fluxo decisório.


Algoritmos no Natural

Mesmo conceito.

MAP

READ

FIND

END-FIND

ESCAPE TOP

DECIDE ON

São apenas ferramentas.

O raciocínio continua sendo algoritmo.


Pseudocódigo

Excelente ferramenta para padawans.

Exemplo.

Transferência bancária.



Inicio


Ler conta origem


Ler conta destino


Ler valor


Saldo suficiente ?


SIM


Debitar


Creditar


Gerar log


Nao


Retornar erro



Fim



Só depois escrevemos COBOL.


Fluxogramas

Muito utilizados nos anos 70.

Analistas desenhavam:

Retângulos

Losangos

Setas

Pastas físicas.

Canetas.

Régua.

Pranchetas.

Sim.

Mainframe já existia antes do Visio.


Algoritmos de busca

Busca sequencial.

Busca binária.

Hash.

Índices VSAM.

DB2 Index.

B-tree.

LSM Trees.

Todos são algoritmos.


Algoritmos de ordenação

Mainframe ama ordenação.

DFSORT.

SYNCSORT.

ICETOOL.

Métodos famosos:

Bubble Sort

Merge Sort

QuickSort

HeapSort

No universo IBM, o Merge Sort praticamente reina.


Complexidade computacional

Nem todo algoritmo é igual.

O(1)

Constante

O(log n)

Busca binária

O(n)

Linear

O(n²)

Bubble

O(2ⁿ)

Exponencial


O dia em que um COBOL virou um monstro

Já vi programa COBOL com:

70 mil linhas.

350 PERFORM.

1200 IF.

85 GO TO.

Documentação inexistente.

Autor aposentado em 1998.

Chamado aberto em produção.

Ninguém sabe mexer.

Por quê?

Ausência de algoritmo.

Código cresceu.

Pensamento não.


Design de algoritmos

Força Bruta

Dividir e conquistar

Backtracking

Greedy

Programação dinâmica

Mesmo em bancos.

Mesmo em seguradoras.

Mesmo em governo.


Algoritmos modernos no IBM Z

Hoje temos:

z16

z17

LinuxONE

OpenShift

zCX

API Connect

z/OS Connect

Kafka

Python

Java

Node.js

AI

Machine Learning

Mas adivinhe.

O algoritmo continua sendo rei.


Inteligência Artificial também vive de algoritmos

Redes neurais.

Transformers.

LLMs.

Árvores.

Regressão.

Clustering.

Tudo algoritmo.

A IA não substituiu algoritmos.

Ela apenas os sofisticou.


O maior erro dos novos programadores

Querer aprender linguagem.

Antes de aprender lógica.

É equivalente a comprar um sabre de luz sem saber usar a Força.


Conselhos para um Padawan COBOL

Primeiro pense.

Depois desenhe.

Depois escreva.

Depois teste.

Depois otimize.

Nunca faça o inverso.

Pergunte sempre:

Quais entradas?

Qual processamento?

Qual saída?

Existem exceções?

Qual volume?

Como recuperar falhas?

Como auditar?

Como escalar?


O algoritmo invisível que move o mundo

Quando um cliente faz PIX.

Existe algoritmo.

Quando um avião decola.

Existe algoritmo.

Quando uma seguradora calcula prêmio.

Existe algoritmo.

Quando um cartão aprova compra.

Existe algoritmo.

Quando o INSS paga benefícios.

Existe algoritmo.

Quando um CICS responde em menos de um segundo.

Existe algoritmo.

E quando um velho programa COBOL criado em 1987 continua funcionando perfeitamente em um IBM Z moderno...

Existe um bom algoritmo escondido ali.


Considerações finais

Muitos dizem que COBOL é uma linguagem antiga.

Discordo.

COBOL é apenas um meio de expressão.

A verdadeira tecnologia imortal chama-se algoritmo.

Ela nasceu com matemáticos árabes, sobreviveu aos impérios, atravessou a Revolução Industrial, alimentou os primeiros computadores, ajudou a criar o System/360, sustentou bancos por décadas, acompanhou a internet, chegou ao z/OS, conversa hoje com APIs REST e provavelmente continuará existindo quando estivermos programando computadores quânticos.

Portanto, jovem Padawan, lembre-se:

Você não é pago para escrever DISPLAY, MOVE, ADD ou EXEC CICS.

Você é pago para transformar problemas caóticos em sequências ordenadas de decisões capazes de gerar valor para empresas, governos e pessoas.

E esse poder, desde Al-Khwarizmi até o IBM z17, continua tendo exatamente o mesmo nome:

Algoritmo.

☕🚀 E como diria um velho mestre do Bellacosa Mainframe:

"Código envelhece. Linguagens mudam. Frameworks desaparecem. Mas um algoritmo elegante continua sendo reconhecido por qualquer programador, em qualquer época, em qualquer plataforma."

 

terça-feira, 7 de janeiro de 2020

☕👓🖥️ OS ÓCULOS QUE ESCONDEM OS OLHOS — O MISTÉRIO VISUAL DOS ANIMES JAPONESES E O SEGREDO QUE O OCIDENTE QUASE NUNCA PERCEBE

Bellacosa Mainframe e o significado dos oculos que escondem olhos em anime


☕👓🖥️ OS ÓCULOS QUE ESCONDEM OS OLHOS — O MISTÉRIO VISUAL DOS ANIMES JAPONESES E O SEGREDO QUE O OCIDENTE QUASE NUNCA PERCEBE

Existe uma pergunta aparentemente simples que muitos espectadores fazem ao assistir animes pela primeira vez:

"Por que alguns personagens de óculos não mostram os olhos?"

À primeira vista parece apenas uma escolha estética.

Um brilho branco cobre as lentes.

Os olhos desaparecem.

O personagem fala normalmente.

A cena continua.

Mas, para quem estuda narrativa visual japonesa, psicologia comportamental, semiótica e construção de personagens, aquilo está longe de ser um detalhe.

Na verdade, estamos diante de uma das linguagens visuais mais antigas, sofisticadas e eficientes dos animes e mangás.

E como acontece com muitas coisas no Japão, por trás de uma imagem aparentemente simples existe uma camada enorme de significado cultural.

Hoje vamos tomar um café e mergulhar nesse assunto.


Quando o rosto para de falar

O ser humano nasceu programado para interpretar rostos.

Muito antes da escrita.

Muito antes da linguagem.

Muito antes da tecnologia.

Nosso cérebro aprendeu a sobreviver observando expressões faciais.

Raiva.

Medo.

Tristeza.

Alegria.

Mentira.

Confiança.

Tudo isso é lido principalmente pelos olhos.

Não é por acaso que existe o ditado:

Os olhos são a janela da alma.

Diversos estudos de psicologia mostram que quando conversamos com alguém nossa atenção se concentra principalmente na região dos olhos.

É ali que buscamos sinais emocionais.

É ali que tentamos descobrir intenções.

É ali que avaliamos riscos.

Agora imagine que alguém retire justamente essa informação.

O cérebro continua tentando interpretar a pessoa.

Mas perde seu principal instrumento.

Surge então uma sensação curiosa.

Desconforto.

Mistério.

Incerteza.

E é exatamente isso que os autores japoneses exploram.


O personagem que se torna impossível de ler

Quando um personagem tem os olhos ocultos, ele se torna imprevisível.

Você não sabe se está feliz.

Não sabe se está irritado.

Não sabe se está mentindo.

Não sabe se está planejando algo.

Seu cérebro entra em modo de observação.

É como um operador de mainframe observando um job que continua rodando sem emitir mensagens no console.

Você sabe que algo está acontecendo.

Mas não sabe exatamente o quê.

A ausência de informação gera tensão.

Essa é uma das regras mais antigas da narrativa.

O desconhecido sempre produz mais curiosidade do que o conhecido.


O brilho nos óculos

Existe até um trope famoso dos animes.

Os japoneses chamam informalmente de "megane flash".

O famoso brilho nos óculos.

A cena normalmente acontece assim:

O personagem está ouvindo uma conversa.

Permanece calado.

De repente:

BRILHO.

Os olhos desaparecem.

E ele diz algo decisivo.

Instantaneamente o espectador entende que alguma coisa mudou.

Não porque ouviu.

Mas porque viu.

É uma linguagem visual.

Uma comunicação silenciosa.

O diretor não precisa explicar nada.

O cérebro do espectador completa sozinho.


O equivalente corporativo

Imagine uma reunião de crise.

Todos discutindo.

Todos nervosos.

Todos emitindo opiniões.

No canto da sala existe um analista experiente.

Quieto.

Observando.

Anotando.

Sem demonstrar emoção.

Então ele ajusta os óculos e diz:

— Acho que encontrei o problema.

Pronto.

A sala inteira congela.

Por quê?

Porque durante todo o tempo ele estava processando informações.

Nos animes, o brilho nos óculos comunica exatamente isso.

O personagem acabou de concluir uma análise.


O Japão e a cultura das emoções ocultas

Aqui chegamos em um ponto extremamente interessante.

Para entender esse recurso visual precisamos compreender um aspecto importante da cultura japonesa.

Existe um conceito chamado:

Honne

e

Tatemae

Honne representa os sentimentos verdadeiros.

Aquilo que a pessoa realmente pensa.

Tatemae representa a máscara social.

Aquilo que ela mostra ao mundo.

A sociedade japonesa historicamente valoriza harmonia social.

Conflitos diretos costumam ser evitados.

Expressões emocionais intensas nem sempre são incentivadas.

Consequentemente surgiu uma cultura altamente especializada em comunicação indireta.

Nem tudo é dito.

Nem tudo é mostrado.

Nem tudo é revelado.

O personagem de óculos com olhos ocultos se encaixa perfeitamente nessa lógica.

Ele possui uma camada invisível.

Algo que ainda não foi revelado.


O caso clássico dos vilões

Observe quantos vilões memoráveis utilizam esse recurso.

Eles raramente mostram tudo o que sentem.

Aizen.

Kabuto.

Gendo Ikari.

Vários personagens de Death Note.

Diversos antagonistas de Gundam.

Muitos executivos corruptos de animes corporativos.

O motivo é simples.

O vilão precisa parecer difícil de interpretar.

Se enxergarmos claramente suas emoções, ele perde parte do mistério.

Ao esconder os olhos, o autor esconde também suas intenções.


O poder do olhar humano

Curiosamente, isso não surgiu apenas nos animes.

O cinema faz a mesma coisa há décadas.

Pense em quantos personagens usam:

  • óculos escuros;

  • sombras;

  • chapéus;

  • máscaras;

  • fumaça;

  • iluminação parcial.

Todos esses elementos possuem o mesmo objetivo.

Reduzir o acesso emocional do público.

Quanto menos vemos os olhos, menos compreendemos a pessoa.


Mob Psycho 100 e o vazio emocional

Na imagem que motivou este artigo vemos um exemplo fascinante.

Shigeo Kageyama.

O famoso Mob.

À primeira vista ele parece apenas um garoto comum.

Mas o design do personagem é extremamente inteligente.

Mob possui emoções reprimidas.

Tem dificuldades de expressão.

Passa boa parte da história vivendo quase em piloto automático.

Seus olhos frequentemente parecem vazios.

Neutros.

Distantes.

Quando o brilho dos óculos surge, essa sensação aumenta.

É como se estivéssemos olhando para alguém cujo mundo interior permanece inacessível.

E isso é proposital.

O autor está usando linguagem visual para contar a história sem precisar explicá-la.


O cabelo sobre os olhos

Existe um recurso semelhante.

Talvez você já tenha notado.

Muitos personagens possuem franjas cobrindo parcialmente os olhos.

Especialmente em:

  • terror;

  • horror psicológico;

  • dramas;

  • romances melancólicos.

O simbolismo é parecido.

O personagem está escondendo algo.

Pode ser:

  • trauma;

  • tristeza;

  • culpa;

  • insegurança;

  • isolamento.

O espectador percebe isso mesmo sem receber nenhuma explicação.


Por que isso funciona tão bem?

Porque o cérebro humano odeia lacunas.

Quando falta informação, tentamos preenchê-la.

É exatamente o mesmo princípio que faz funcionar:

  • histórias de mistério;

  • thrillers;

  • investigações;

  • conspirações.

O cérebro se torna participante da narrativa.

Ele começa a fazer hipóteses.

E quando o cérebro participa, o envolvimento emocional aumenta.


O operador de produção que não mostra os logs

Agora vamos trazer a discussão para nosso mundo.

Imagine um sistema crítico.

O job executa normalmente.

Nenhum erro aparece.

Nenhuma mensagem surge.

Nenhum alerta dispara.

Mas o processamento está mais lento.

Algo parece errado.

Você sabe que existe um problema.

Mas não consegue vê-lo.

Essa sensação é muito semelhante ao que sentimos diante de um personagem cujos olhos permanecem ocultos.

A informação existe.

Mas não está disponível.

O mistério gera atenção.


A evolução dos personagens

Outro detalhe interessante.

Muitos autores utilizam esse recurso apenas no início da história.

Conforme o personagem amadurece, seus olhos passam a ser mostrados com mais frequência.

É uma representação visual de crescimento emocional.

O personagem deixa de esconder quem é.

O público passa a enxergar seu interior.

Sem perceber, estamos assistindo uma transformação psicológica traduzida em elementos gráficos.


O terror japonês entende isso melhor do que ninguém

Os mestres do horror japonês exploram essa técnica há décadas.

Sadako.

Kayako.

Tomie.

Inúmeros fantasmas e espíritos.

Muitas vezes seus olhos estão:

  • escondidos;

  • cobertos;

  • sombreados;

  • distorcidos.

O motivo é profundamente psicológico.

O cérebro humano precisa dos olhos para classificar intenções.

Quando eles desaparecem, surge uma sensação ancestral de perigo.

Não sabemos o que aquela entidade quer.

Não sabemos o que está pensando.

Não sabemos se vai atacar.

A incerteza gera medo.


O oposto dos heróis clássicos

Agora observe os protagonistas tradicionais.

Dragon Ball.

Naruto.

One Piece.

My Hero Academia.

Eles geralmente possuem olhos enormes e expressivos.

O objetivo é exatamente o contrário.

O espectador deve compreender instantaneamente seus sentimentos.

Tudo é transparente.

Tudo é visível.

Tudo é emocionalmente acessível.

Por isso são personagens fáceis de gostar.

Você entende quem eles são.

Você entende o que sentem.

Você entende o que desejam.


A genialidade da linguagem visual japonesa

O que mais me impressiona nesse tema é perceber como o Japão transformou detalhes aparentemente simples em ferramentas narrativas sofisticadas.

Um brilho numa lente.

Uma sombra.

Uma franja.

Um reflexo.

Nada disso está ali por acaso.

São mensagens.

São códigos.

São informações transmitidas visualmente.

O espectador não precisa estudar psicologia para compreendê-las.

Seu cérebro interpreta tudo automaticamente.

E talvez seja exatamente por isso que os animes conseguem transmitir tantas emoções mesmo em cenas silenciosas.


Considerações finais

Quando assistimos um anime e vemos um personagem cujos olhos desaparecem atrás dos óculos, estamos observando muito mais do que um simples efeito gráfico.

Estamos vendo um recurso narrativo construído ao longo de décadas.

Uma ferramenta que mistura:

  • psicologia humana;

  • semiótica;

  • cultura japonesa;

  • linguagem cinematográfica;

  • design de personagens.

Os olhos representam acesso.

Quando aparecem, conhecemos a pessoa.

Quando desaparecem, surge o mistério.

E talvez essa seja a verdadeira magia dos animes.

Eles entendem algo que a tecnologia, os sistemas e até os ambientes corporativos nos ensinam diariamente:

Nem sempre o que mais importa está visível.

Às vezes os dados mais importantes estão escondidos atrás da interface.

Atrás da tela.

Atrás do log.

Ou, como gostam os mestres da animação japonesa...

Atrás de um simples par de óculos.


🥃 Cachaça, Uísque e Vodka – a Guerra Fria dos Copos Paulistanos

 



🥃 Cachaça, Uísque e Vodka – a Guerra Fria dos Copos Paulistanos
por El Jefe – Bellacosa Mainframe / Filosofia de Balcão Edition

Em São Paulo, o mundo se divide em três castas invisíveis, mais antigas que o DDD 011:
os que bebem cachaça, os que juram por uísque, e os que se acham modernos com vodka.
Três destilados, três ideologias, três maneiras de encarar a vida — e a ressaca.
É a luta de classes em estado líquido.

💥 CENA 1: O BOTECÃO DO PROLETARIADO
Num balcão de zinco em São Miguel, o proletário chega de macacão azul, suando dignidade.
Pede sua caninha sem olhar o rótulo.
Cachaça é cachaça — e conversa encerrada.
Bebe num copo 7, puro, sem frescura, com aquele golpe seco que parece bronca de pai.
É a bebida da honra operária, do salário suado, da marmita de alumínio e da conversa direta:

“Aqui é pinga, não é perfuminho de russo.”

A cachaça nasceu com o Brasil.
É o log do país: destilada da cana, ignorada pela elite, mas mantida viva pelo povo.
Aguardente, caninha, marvada — chame como quiser.
Ela atravessou impérios, repúblicas, planos econômicos e amores de bar.
É o firmware etílico nacional, o código-fonte da brasilidade.

📈 CENA 2: O BURGUÊS DE BLAZER E GELO IMPORTADO
Corta para o Jardins.
A taça de cristal, o terno alinhado, o “me vê um uísque com duas pedras de gelo, por favor”.
O uísque é o login do status.
É o jeito de dizer “trabalho com importação e exportação” sem precisar provar nada.
É a bebida de quem acha que “boteco” é conceito gourmet e não sobrevivência.

Mas há que se reconhecer: o uísque tem sua história.
Chegou aos bares paulistanos nos anos 50, quando os diplomatas e os publicitários começaram a sonhar em inglês.
No fim dos 70, virou febre entre os executivos da Paulista, os mesmos que usavam terno no calor e falavam “weekend” em vez de fim de semana.
Foi a era do Teacher’s, do Old Eight, do Red Label — e da pretensão líquida.

Mas até ele tem seu lado humano.
Porque depois da terceira dose, o executivo também chora, também fala da ex, e também termina a noite no pastel da esquina com os proletários.
No fim, o uísque só disfarça o mesmo bug: a solidão bem servida.

❄️ CENA 3: O FRESCO URBANO DE COPINHO TRANSPARENTE
E então veio ela: a vodka.
Filha da era pós-moderna, sem cheiro, sem cor, sem culpa.
A preferida da geração que troca “boteco” por “bar descolado” e pinga por “shot gelado”.
Nos anos 90, quando os DJs tomaram o lugar dos sanfoneiros e a Balalaika invadiu os supermercados, nasceu o beber cosmopolita.

A vodka era o símbolo da modernidade líquida de Bauman, só que servida com groselha.
Foi a bebida dos jovens da Augusta, das raves em galpão, das baladas onde a autenticidade era medida pelo teor alcoólico.
E convenhamos: vodka é uma delícia travestida de neutralidade.
Ela combina com tudo — suco, energético, drama, carência — e não fede a nada.
É o sistema operacional multiplataforma da bebedeira.

⚙️ O CHOQUE DE SISTEMAS
Cachaça é mainframe: sólida, confiável, roda há séculos.
Uísque é middleware: precisa de status, licenciamento e manual de uso.
Vodka é nuvem: leve, translúcida e cheia de bug emocional.

Mas no boteco da Sé, todos rodam no mesmo servidor.
Porque ali, a filosofia de balcão é simples:

“O copo é o mesmo. O que muda é o código-fonte da vergonha.”

🔮 ADAPTAÇÕES, GOURMETIZAÇÕES E HERESIAS
Nos anos 2000, inventaram a cachaça premium — envelhecida em barril francês e vendida em shopping.
O uísque ganhou versão com energético, pra parecer jovem.
E a vodka virou base de drink “fit” com água de coco.
A guerra virou comédia.
A elite bebe o que o povo inventou, o povo sonha com o que a elite bebe, e o fresco fotografa tudo pro Instagram.

🗣️ LENDAS DE BALCÃO
Dizem que a cachaça foi quem derrubou mais presidentes que qualquer golpe.
O uísque inspirou mais demissões que o FMI.
E a vodka... bem, a vodka é responsável por mais mensagens indevidas às 3h da manhã do que qualquer outro software emocional.

💬 REFLEXÃO FINAL – A DEMOCRACIA DO GOLÉ
No fundo, toda bebida é igual.
Todas queimam, todas consolam, todas mentem.
O que muda é a interface social.
O proletário brinda à sobrevivência.
O burguês, à aparência.
E o fresco, à estética do gole perfeito.

Mas o Bellacosa te lembra:

“No fim da noite, o copo é um espelho. E o que você bebe é o reflexo do que não quer admitir.”

🥂 Moral do balcão:
A cachaça fala a verdade.
O uísque disfarça a dor.
E a vodka finge que nada aconteceu.
Mas, no fundo, todos os três rodam sob o mesmo sistema operacional: o coração humano em modo debug.


🕶️ Bellacosa Mainframe – onde filosofia e pinga rodam na mesma partição.

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