Visão geral das APIs Web
As interfaces de programação (APIs) permitem que sistemas distintos troquem dados, independentemente de linguagem ou plataforma. São amplamente utilizadas em aplicativos móveis, dispositivos IoT, aplicações web e integrações entre serviços.
Estilos de implementação
SOAP/XML
O SOAP (Simple Object Access Protocol) transporta mensagens em XML e frequentemente usa WSDL para descrever as operações. Trata-se de um padrão mais antigo e estruturado, sendo gradativamente substituído por arquiteturas REST.
REST/JSON
O REST (Representational State Transfer) adota uma arquitetura orientada a recursos. APIs que seguem esse modelo são chamadas RESTful e, embora possam usar XML, normalmente empregam JSON por ser mais leve.
Exemplo em XML:
<?xml version="1.0" encoding="UTF-8"? >
<usuario>
<nome>Ana</nome>
<idade>28</idade>
<contato>
<email>ana@exemplo.com</email>
<telefone>5511987654321</telefone>
</contato>
</usuario>
Exemplo equivalente em JSON:
{
"usuario": {
"nome": "Ana",
"idade": "28",
"contato": {
"email": "ana@exemplo.com",
"telefone": "5511987654321"
}
}
}
Pilares de segurança em APIs
- Autenticação e autorização: verificar quem é o usuário e quais recursos ele pode acessar. Como o HTTP é stateless, cada requisição costuma transportar um token de API ou chave de acesso.
- Criptografia e assinatura: TLS/SSL protege a confidencialidade dos dados em trânsito; assinaturas garantem a integridade das mensagens e impedem alterações.
- Proteção contra vulnerabilidades: prevenir injeções, vazamento de dados sensíveis, acesso indevido e outras falhas comuns.
Mapeamento da superfície de ataque
- Enumerar endpoints, métodos, parâmetros e comportamentos esperados.
- Coletar metadados e documentação, como Swagger, OpenAPI e WSDL.
- Capturar e inspecionar o tráfego para compreender o fluxo da aplicação.
- Testar variações de caminhos e recursos por meio de força bruta.
Técnicas de ataque
- Fuzzing: enviar grandes volumes de entradas inesperadas e observar respostas anômalas.
- Injeção: tentar vetores SQL, XML, XPath, JSON, JavaScript e outros.
- Valores inválidos ou fora do intervalo: verificar a validação e o tratamento de erros.
- Conteúdo malicioso: enviar arquivos executáveis ou scripts em pontos de upload.
- XSS: testar vetores de reflexão e armazenamento.
- CSRF: verificar ausência, reutilização ou falsificação de tokens.
- Referência direta a objetos insegura: alterar identificadores sequenciais para acessar dados alheios.
- Sessões e configurações: avaliar o uso correto de tokens e a exposição de informações do sistema.
Demonstrações práticas
1. Enumeração de WSDL no DVWS
Em aplicações SOAP, o arquivo WSDL pode listar todas as operações disponíveis. Utilizando o Ready!API ou o SoapUI, carregamos o WSDL e visualizamos métodos como consultar_usuario. Ao invocar esse método com um nome válido, a API pode retornar dados pessoais, revelando informação sensível.
2. XXE no DVWS
Requisição legítima:
<nome>Sr. Silva</nome>
Payload explorando XXE:
<?xml version="1.0"? >
]>
<nome>&xxe;</nome>
3. SSRF no DVWS
Um endpoint REST que aceita uma URL pode ser abusado para acessar recursos internos. Se a aplicação normalmente busca http://api.interna/dados, alterar o parâmetro para http://127.0.0.1:8080/admin pode expor intrefaces administrativas internas.
4. SQL Injection em API REST no DVWS
Requisição esperada:
GET /api/produtos?id=42 HTTP/1.1
Host: dvws.local
Tentativa de injeção:
GET /api/produtos?id=42' OR '1'='1 HTTP/1.1
Host: dvws.local
5. SQL Injection cego em serviço SOAP (bWAPP)
Quando o cliente não enxerga a API, a injeção pode estar no backend. O trecho a seguir simula um consumidor SOAP vulnerável:
<?php
if (isset($_REQUEST['titulo'])) {
require_once('soap/nusoap.php');
$cliente = new nusoap_client('http://localhost/bWAPP/ws_soap.php');
$estoque = $cliente->call(
'obter_estoque_filme',
array('titulo' => sqli($_REQUEST['titulo']))
);
echo "Existem <b>" . $estoque . "</b> ingressos disponíveis.";
}
?>
Se a função sqli() não sanitizar corretamente, o parâmetro titulo pode ser explorado por injeção cega.
Ferramentas e laboratórios recomendados
- Ready!API / SoapUI
- Burp Suite
- FuzzAPI
- DVWS
- bWAPP
- Hackazon
- Mutillidae
- OWASP Juice Shop