Translate

Mostrar mensagens com a etiqueta API Gateway. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta API Gateway. Mostrar todas as mensagens

quarta-feira, 8 de maio de 2024

API Security: O Guia Definitivo Para Programadores Juniores (e Para Todo Mundo que Acha que HTTPS Resolve Tudo)

 

Bellacosa Mainframe api security um guia para padawans

☕ Um Café no Bellacosa Mainframe

API Security: O Guia Definitivo Para Programadores Juniores (e Para Todo Mundo que Acha que HTTPS Resolve Tudo)

"Uma API não é apenas uma porta de entrada para sua aplicação. Ela é a porta da frente da empresa inteira. Se ela estiver destrancada, não importa o quão seguro seja o resto da casa."

Existe uma frase muito famosa entre profissionais de segurança:

"Os hackers raramente quebram algoritmos. Eles exploram erros de implementação."

E isso nunca foi tão verdadeiro quanto no mundo das APIs.

Nos últimos anos, praticamente todos os grandes vazamentos de dados envolveram APIs.

Facebook.

Twitter.

T-Mobile.

Optus.

Experian.

Até empresas que investem milhões em segurança acabam descobrindo que um simples endpoint mal protegido era suficiente para entregar milhares de registros para qualquer pessoa.

O mais curioso?

Na maioria dos casos...

O problema não era criptografia.

Não era um vírus.

Não era um super hacker usando inteligência artificial.

Era simplesmente uma API que confiava demais no usuário.

Hoje vamos conversar sobre isso.

Pegue seu café.

Porque este assunto vale ouro para qualquer desenvolvedor — principalmente para quem está começando.


O que é uma API, afinal?

Imagine um restaurante.

Você não entra na cozinha para preparar seu próprio prato.

Existe um garçom.

Você faz um pedido.

O garçom leva o pedido.

A cozinha prepara.

O garçom entrega o resultado.

A API é exatamente esse garçom.

Cliente

↓

API

↓

Sistema

↓

Banco de Dados

Ela recebe pedidos.

Executa regras.

Consulta bancos.

Chama outros sistemas.

Retorna respostas.

Simples.

Até alguém decidir fazer um pedido que nunca deveria existir.


O maior erro dos programadores iniciantes

Todo desenvolvedor júnior já escreveu algo parecido:

GET /clientes/100

A API devolve:

{
   "nome":"João",
   "saldo":5000
}

Legal.

Então alguém abre o navegador e altera a URL.

GET /clientes/101

Se aparecer o cliente do vizinho...

Parabéns.

Sua API acabou de sofrer um ataque chamado BOLA.

(Broken Object Level Authorization)

É atualmente a vulnerabilidade número 1 do OWASP API Security Top 10.

O problema não foi o usuário alterar a URL.

O problema foi a API acreditar nela.


A API nunca deve confiar em ninguém

Essa talvez seja a regra mais importante deste artigo.

Repita comigo:

Nunca confie na entrada do usuário.

Nunca.

Nem no navegador.

Nem no aplicativo mobile.

Nem no frontend.

Nem porque "foi o React que enviou".

Nem porque "é um aplicativo interno".

Toda requisição pode ter sido criada manualmente.

Ferramentas como Postman, Insomnia ou Burp Suite permitem montar qualquer requisição imaginável.

Para um atacante, sua tela bonita simplesmente não existe.

Ele conversa diretamente com a API.


HTTPS não significa segurança

Esse é um mito extremamente comum.

"Minha API usa HTTPS."

Ótimo.

Isso apenas significa que a comunicação é criptografada.

Não significa que a pessoa tenha autorização.

Imagine um carro-forte.

Ele transporta dinheiro de forma segura.

Mas isso não significa que qualquer pessoa possa entrar nele.

HTTPS protege o caminho.

Não protege a autorização.


OAuth2 não é login

Outro erro muito comum.

OAuth2 resolve autorização.

Quem resolve identidade normalmente é o OpenID Connect (OIDC).

Funciona assim:

Usuário

↓

Identity Provider

↓

Token JWT

↓

API

A API nunca recebe a senha.

Ela recebe apenas um token dizendo:

"Este usuário já foi autenticado."

Isso reduz muito a superfície de ataque.


Bellacosa Mainframe boas praticas na segurança de api

Adeus Password Grant

Se você ainda encontrar isso:

username

password

↓

API

Desconfie.

Os fluxos Password Grant e Implicit praticamente desapareceram dos projetos modernos.

Hoje usamos Authorization Code + PKCE.

Principalmente em:

  • aplicativos mobile

  • SPAs

  • aplicações desktop

PKCE impede o roubo do Authorization Code.

É uma camada extra que praticamente virou padrão.


Tokens também envelhecem

Imagine um token válido por 24 horas.

Agora imagine que alguém o roubou.

Esse invasor terá um dia inteiro para fazer estragos.

Por isso usamos:

Access Token

5~15 minutos

Depois disso...

Adeus.

Se precisar continuar, utiliza um Refresh Token.

Curiosamente, muitos ataques modernos acontecem justamente porque empresas deixam tokens válidos durante dias.


O princípio do menor privilégio

Existe uma regra clássica na segurança chamada:

Least Privilege

Se alguém precisa apenas consultar pedidos...

Não entregue permissões de administrador.

Errado:

scope=admin

Melhor:

orders.read

Quanto menor o privilégio...

Menor o estrago.


Menos dados também é segurança

Outro hábito muito comum:

SELECT *

O problema?

Talvez o cliente precise apenas do nome.

Mas você devolve:

  • CPF

  • RG

  • salário

  • endereço

  • telefone

  • hash da senha

Tudo isso via API.

Mesmo que o frontend esconda essas informações.

Lembre-se:

Quem vê a resposta da API é o atacante.

Não o usuário.


Cuidado com o Field-Level Authorization

Esse é um assunto que pouca gente comenta.

Imagine um gerente e um atendente.

Ambos consultam o mesmo cliente.

O gerente pode ver:

Nome

Salário

Limite

CPF

O atendente precisa apenas:

Nome

Telefone

A autorização pode acontecer até no nível dos campos.

É uma das práticas mais sofisticadas em APIs modernas.


TLS protege a estrada

Imagine a internet como uma rodovia.

TLS coloca um caminhão blindado nela.

Mas...

Depois que o caminhão chega ao destino...

Os dados continuam circulando entre diversos serviços.

Gateway

↓

Microserviço

↓

Fila MQ

↓

Banco

↓

Cache

Cada salto precisa ser protegido.

É aí que entra o mTLS.


mTLS: quando os servidores também apresentam documento

No HTTPS comum...

O cliente verifica o certificado do servidor.

No mTLS...

Os dois lados apresentam certificados.

É quase como entrar num prédio onde tanto o visitante quanto o porteiro mostram identidade.

Muito usado entre microserviços.


O segredo mais famoso do GitHub

Existe uma piada entre desenvolvedores:

"Todo iniciante já publicou uma senha no GitHub."

Infelizmente...

Ela não é totalmente piada.

Nunca faça isso:

SECRET="123456"

Nem isso:

password=admin

Muito menos:

git push

Hoje existem robôs que monitoram commits públicos procurando:

  • AWS Keys

  • Azure Keys

  • Google Keys

  • Tokens GitHub

  • Tokens JWT

  • Senhas

Às vezes em poucos segundos.


Vault é o cofre da aplicação

Em vez de guardar senhas no código...

Utilizamos Vaults.

Como:

  • Hashicorp Vault

  • IBM Hyper Protect

  • Azure Key Vault

  • AWS Secrets Manager

Esses sistemas armazenam segredos de forma segura.

Melhor ainda quando utilizam HSM.


HSM: a chave que nunca sai do cofre

Imagine um cofre de banco.

Você leva um documento.

O funcionário entra.

Assina.

Volta.

Você nunca vê a chave.

É exatamente isso que faz um Hardware Security Module.

Ele assina.

Mas nunca entrega a chave privada.

Nem para o sistema operacional.


Validação de entrada salva vidas

Uma API recebe:

{
   "idade":"abc"
}

Sua aplicação espera:

idade = inteiro

Quem deveria descobrir isso?

O código?

Não.

O Gateway.

Hoje utilizamos OpenAPI e JSON Schema para validar tudo antes da aplicação receber.

Isso reduz bugs e ataques.


Nunca aceite campos desconhecidos

Imagine:

{
   "nome":"Carlos",
   "idade":30,
   "admin":true
}

Você nunca criou o campo admin.

Mas o atacante criou.

Se sua API simplesmente copiar tudo para o banco...

Você acabou de criar um administrador.

Esse tipo de problema é conhecido como Mass Assignment.


Rate Limit: educando clientes mal comportados

Nem todo ataque é malicioso.

Às vezes um bug faz um aplicativo repetir milhares de chamadas.

Resultado:

CPU em 100%.

Banco sobrecarregado.

Sistema fora do ar.

Por isso usamos limites.

Exemplo:

100 requisições/minuto

Além disso:

  • limite de payload

  • timeout

  • limite de memória

  • limite por IP


Idempotência: a arte de não cobrar duas vezes

Imagine um PIX.

Você aperta Confirmar.

A internet cai.

Você aperta novamente.

Sem idempotência:

R$100

↓

R$100

Cobrança duplicada.

Com Idempotency Key:

Mesmo identificador

↓

Resposta antiga

↓

Nenhuma nova cobrança

Bancos usam isso o tempo todo.


SSRF: quando sua API ataca por você

Esse é um dos ataques mais interessantes.

O usuário envia:

https://empresa.com/imagem.jpg

Mas na verdade envia:

http://169.254.169.254

Esse endereço existe em praticamente todos os provedores de nuvem.

Ele contém metadados da máquina.

Se a API acessar...

Pode entregar credenciais internas.

Solução?

Allowlist.

Sempre.


CORS não é um botão mágico

Muitos desenvolvedores fazem:

Access-Control-Allow-Origin: *

Funciona.

Até alguém descobrir.

CORS deveria liberar apenas domínios conhecidos.

Nunca o mundo inteiro.


Shadow APIs

Essa talvez seja minha curiosidade favorita.

Grandes empresas frequentemente descobrem APIs que ninguém lembrava que existiam.

Criadas por:

  • estagiários

  • provas de conceito

  • sistemas antigos

  • versões esquecidas

  • ambientes de teste

Chamamos isso de Shadow APIs.

Curiosamente...

Muitos ataques começam justamente por elas.


Logs são a caixa-preta do avião

Imagine um acidente.

Sem caixa-preta...

Nunca saberemos o que aconteceu.

Com APIs é igual.

Registre:

  • autenticações

  • autorizações

  • erros

  • tokens inválidos

  • mudanças de configuração

  • tentativas suspeitas

Mas atenção.

Nunca registre:

  • senhas

  • cartões

  • tokens completos

  • chaves privadas

Logs também vazam.


SIEM: o cérebro da segurança

Imagine milhares de servidores enviando eventos.

O SIEM junta tudo.

Percebe padrões.

Por exemplo:

500 erros 401

↓

Mesmo IP

↓

Mesmo minuto

Provável ataque de força bruta.

Outro exemplo:

Login

Brasil

↓

3 segundos

↓

Japão

Fisicamente impossível.

Alerta.


Como isso tudo conversa com o Mainframe?

Quem trabalha com IBM Z pode pensar:

"Isso é coisa de microsserviços."

Não é.

Hoje milhares de programas COBOL são publicados como APIs através do IBM z/OS Connect Enterprise Edition.

Quem faz a autenticação?

OAuth2.

Quem autoriza?

RACF.

Quem protege certificados?

AT-TLS.

Quem registra auditoria?

SMF.

Quem envia eventos?

QRadar.

Ou seja...

O mundo moderno e o mainframe estão muito mais próximos do que muita gente imagina.


☕ Curiosidades do Café

Você sabia?

O ataque BOLA aparece entre as vulnerabilidades mais exploradas do mundo há vários anos consecutivos.


Você sabia?

Mais de 80% do tráfego da internet atualmente é composto por chamadas de APIs, não por pessoas navegando em páginas web.


Você sabia?

Empresas frequentemente possuem mais APIs do que desenvolvedores.

Em grandes bancos não é raro encontrar dezenas de milhares de endpoints ativos.


Você sabia?

O famoso código HTTP 418 – I'm a Teapot nasceu como uma brincadeira em um protocolo criado no Dia da Mentira (RFC 2324), simulando um "protocolo para cafeteiras". Embora seja um easter egg da internet, alguns servidores realmente retornam esse status.


🥚 Easter Eggs para Programadores

🥚 Se você encontrou uma API que aceita:

?id=1

Experimente trocar por:

?id=2

Se funcionar...

Você acabou de encontrar um candidato a BOLA.

(Não faça isso em sistemas que você não possui autorização para testar.)


🥚 O famoso endereço:

169.254.169.254

é praticamente um "portal secreto" dos provedores de nuvem para acesso a metadados da instância. Por isso ele aparece em tantos estudos sobre SSRF.


🥚 Os famosos códigos:

401
403
404

não significam a mesma coisa.

401

Você não está autenticado.

403

Você está autenticado, mas não possui autorização.

404

O recurso não existe (ou o servidor decidiu ocultar sua existência por segurança).

Grandes empresas frequentemente devolvem 404 em vez de 403 para não revelar que determinado recurso realmente existe.


Conclusão

Segurança de APIs não é um recurso que se instala.

É uma forma de pensar.

Cada requisição deve ser tratada como potencialmente maliciosa. Cada parâmetro precisa ser validado. Cada autorização deve ser conferida. Cada segredo precisa ser protegido. Cada log pode ser a diferença entre identificar um ataque em segundos ou descobrir um vazamento dias depois.

Se existe uma única lição que eu gostaria que todo programador júnior levasse deste café, seria esta:

Nunca confie na requisição; confie apenas nas verificações que sua aplicação faz sobre ela.

É exatamente essa mentalidade que transforma um desenvolvedor que apenas "faz a API funcionar" em um engenheiro capaz de construir sistemas confiáveis, resilientes e preparados para enfrentar o mundo real — seja em microsserviços na nuvem, seja em aplicações COBOL rodando há décadas no IBM Z.

Porque, no fim das contas, a tecnologia muda, os frameworks mudam, os protocolos evoluem... mas um princípio continua imutável:

A melhor API não é apenas rápida ou elegante. É aquela que continua segura mesmo quando alguém tenta usá-la da pior maneira possível.

 

sexta-feira, 28 de fevereiro de 2020

☕🔥 “A ARQUITETURA QUE SEGURA O MUNDO” — OS 12 CONCEITOS QUE TODO PROFISSIONAL MAINFRAME USA… MESMO SEM PERCEBER

 

Bellacosa Mainframe e 12 conceitos importante para a arquitetura mainframe

☕🔥 “A ARQUITETURA QUE SEGURA O MUNDO” — OS 12 CONCEITOS QUE TODO PROFISSIONAL MAINFRAME USA… MESMO SEM PERCEBER

Quando alguém fala de:

  • microservices,

  • cloud-native,

  • autoscaling,

  • API Gateway,

  • event-driven,

  • sharding,

  • caching,

muita gente imagina:

“Kubernetes inventou isso.”

Mas aqui vem a verdade que pouca gente gosta de admitir:

☕ O MAINFRAME JÁ RESOLVIA MUITOS DESSES PROBLEMAS HÁ DÉCADAS.

Só que com outros nomes.

E frequentemente:

  • mais estabilidade,

  • mais previsibilidade,

  • mais segurança,

  • e MUITO menos caos operacional.

A imagem mostra 12 conceitos modernos de arquitetura.

Agora vamos traduzir isso para:

☕ IBM Z / zOS / COBOL / CICS / DB2 / MQ / Sysplex no estilo Bellacosa Mainframe.


☕ 1. LOAD BALANCING — “DIVIDIR A PRESSÃO ANTES DO COLAPSO”

No mundo distribuído:

  • Load Balancer distribui tráfego entre servidores.

No Mainframe:

WLM + Sysplex fazem isso há MUITO tempo.


🔥 Exemplo real

Você possui:

  • 4 regiões CICS,

  • milhares de TPS,

  • milhões de usuários.

O Workload Manager:

  • distribui carga,

  • evita gargalo,

  • prioriza serviços críticos.


☕ O detalhe brutal

Na cloud:

Load Balancer frequentemente é “reativo”.

No z/OS:

WLM é orientado por política de negócio.

O sistema entende:

  • prioridade,

  • SLA,

  • criticidade,

  • classe de serviço.

Isso é absurdamente sofisticado.


☕ 2. CACHING — “NÃO BUSQUE DUAS VEZES O QUE JÁ ESTÁ NA MEMÓRIA”


🔥 Mainframe vive de cache

O IBM Z inteiro é obcecado por minimizar I/O.

Porque:

DISCO É CARO EM TEMPO


☕ Exemplos reais

DB2 Buffer Pool

Páginas ficam em memória.


VSAM Buffering

Evita leitura física excessiva.


CICS TSQ/Temporary Storage

Dados temporários rápidos.


Hiperspace / Dataspaces

Memória expandida ultra rápida.


🔥 O mantra do performance analyst

“Se foi ao disco demais…

já perdeu.”


☕ 3. CDN — CONTENT DELIVERY NETWORK

À primeira vista parece “coisa web”.

Mas no mainframe existe conceito parecido.


☕ No IBM Z isso aparece como:

  • replicação geográfica,

  • GDPS,

  • Sysplex Distributor,

  • caching distribuído,

  • data locality.


🔥 Exemplo bancário

Uma consulta:

  • não precisa cruzar o país inteiro,

  • pode ser atendida por nó mais próximo,

  • reduzindo latência.


☕ Filosofia importante

O Mainframe sempre entendeu:

mover dado custa caro.


☕ 4. MESSAGE QUEUE — “O SEGREDO DA DESCOPLAGEM”

Aqui entramos numa das áreas mais poderosas do IBM Z.


🔥 IBM MQ é praticamente o sistema nervoso corporativo

Ele desacopla aplicações.


☕ Exemplo clássico

Sistema A:

gera pagamento

Sistema B:

processa fraude

Sistema C:

envia PIX

Tudo via fila.


☕ O benefício monstruoso

Se um sistema cai:

  • mensagem continua na fila,

  • processamento continua depois,

  • nada se perde.


🔥 O mainframe odeia perda de transação

Esse é um ponto cultural importante.


☕ 5. PUBLISH/SUBSCRIBE — EVENT DRIVEN ANTES DA MODA


🔥 O mundo moderno chama:

event-driven architecture

O mainframe chama há décadas de:

  • MQ Pub/Sub,

  • eventos CICS,

  • triggers,

  • integração assíncrona.


☕ Exemplo real

Quando uma compra é aprovada:

  • antifraude recebe evento,

  • CRM recebe evento,

  • analytics recebe evento,

  • billing recebe evento.

Tudo desacoplado.


☕ 6. API GATEWAY — “A PORTA DE ENTRADA DO LEGADO”

Muita gente pensa:

“COBOL não fala REST.”

Erro clássico.


🔥 Hoje o Mainframe expõe:

  • REST APIs,

  • JSON,

  • SOAP,

  • GraphQL integration,

  • OpenAPI.


☕ Ferramentas

  • z/OS Connect

  • CICS Web Services

  • API Connect

  • MQ REST bridge


☕ O segredo

O COBOL continua fazendo:

  • regra de negócio,

  • consistência,

  • transação ACID.

A API só traduz o mundo externo.


☕ 7. CIRCUIT BREAKER — “EVITAR EFEITO CASCATA”


🔥 O Mainframe sempre teve paranoia com disponibilidade

Porque downtime custa milhões.


☕ Exemplo prático

Se DB2 degrada:

  • CICS pode limitar requests,

  • workload é redirecionado,

  • regiões são isoladas.


☕ Resultado

O problema não destrói o ecossistema inteiro.


🔥 Filosofia do z/OS

“Falha controlada é melhor que colapso generalizado.”


☕ 8. SERVICE DISCOVERY — “ENCONTRAR O SERVIÇO CERTO”

No cloud:

  • Kubernetes,

  • Consul,

  • Eureka.

No mainframe:

  • VTAM,

  • TCP/IP stacks,

  • CICSPlex SM,

  • Sysplex Distributor.


☕ O sistema descobre:

  • onde está a região disponível,

  • qual nó está saudável,

  • quem responde mais rápido.


☕ 9. SHARDING — “DIVIDIR O GIGANTE”


🔥 Mainframe já fazia particionamento gigantesco

Muito antes do hype NoSQL.


☕ Exemplos

DB2 Partitioning

Tabela gigantesca dividida.


VSAM split

Segmentação de dados.


GDG distribution

Separação temporal.


☕ Objetivo

  • reduzir contenção,

  • aumentar paralelismo,

  • melhorar throughput.


☕ 10. RATE LIMITING — “CONTROLAR O CAOS”


🔥 Mainframe é obcecado por governança

Você NÃO deixa qualquer workload destruir o ambiente.


☕ Exemplos reais

WLM

Controla prioridade.


CICS MAXTASK

Limita tasks simultâneas.


DB2 Thread Limits

Evita explosão de conexão.


MQ Queue Depth

Controla saturação.


☕ Resultado

O sistema continua respirando sob pressão.


☕ 11. CONSISTENT HASHING — “DISTRIBUIÇÃO INTELIGENTE”


🔥 Aqui aparece no:

  • Parallel Sysplex,

  • DB2 data sharing,

  • cache distribution,

  • workload routing.


☕ Objetivo

Distribuir carga:

  • sem destruir consistência,

  • sem mover tudo,

  • sem gerar caos.


☕ 12. AUTO SCALING — “O MAINFRAME ESCALA DIFERENTE”

Na cloud:

sobe VM

No Mainframe:

  • ativa engines,

  • redistribui workload,

  • muda prioridade,

  • usa Capacity on Demand,

  • explora Sysplex.


🔥 O detalhe mais impressionante

O IBM Z consegue crescer:

SEM PARAR O BANCO

Isso é engenharia absurda.


☕ O QUE O MAINFRAME ENSINA SOBRE ARQUITETURA

A cloud moderna popularizou vários conceitos.

Mas o IBM Z já conhecia muitos deles:

  • em escala gigantesca,

  • com confiabilidade extrema,

  • em ambientes mission critical.


🔥 O erro de muita gente

Pensar que:

Mainframe = tecnologia antiga

quando na prática:

Mainframe = engenharia corporativa refinada por décadas de guerra operacional.

☕ RESUMO BELLACOSA MAINFRAME

ConceitoNo IBM Mainframe
Load BalancingWLM + Sysplex
CachingBuffer Pools + VSAM Buffers
CDNDistribuição geográfica/Sysplex
Message QueueIBM MQ
Publish/SubscribeEvent-driven corporativo
API Gatewayz/OS Connect + CICS
Circuit BreakerIsolamento operacional
Service DiscoveryCICSPlex + Sysplex
ShardingDB2 partitioning
Rate LimitingWLM + MAXTASK
Consistent HashingDistribuição de workload
Auto ScalingCapacity on Demand

☕🔥 Frase final no estilo Bellacosa Mainframe

“A cloud reinventou vários conceitos.

O Mainframe apenas ficou quieto…

porque já fazia isso desde o século passado.”