O Open Worldwide Application Security Project é uma comunidade online que produz artigos, metodologias, documentação, ferramentas e tecnologias gratuitas e disponíveis para todos nos campos de segurança de IoT, software de sistema e aplicações web. A OWASP fornece recursos gratuitos e abertos. É liderada por uma organização sem fins lucrativos chamada The OWASP Foundation. A OWASP Top 10 – 2021 é o resultado publicado de uma pesquisa recente baseada em dados abrangentes compilados de mais de 40 organizações parceiras.
A OWASP publica regularmente um relatório de top 10 de vulnerabilidades. O relatório destina-se a vulnerabilidades em aplicações web.
Neste post, gostaria de descrever como corrigir alguns deles através do Apache APISIX API Gateway.
A OWASP Top 10 2021
Em 2021, o relatório menciona:
- A01:2021-Controle de Acesso Quebrado
- A02:2021-Falhas de Criptografia
- A03:2021-Injeção
- A04:2021-Inseguro
- A05:2021-Configuração de Segurança Errada
- A06:2021-Componentes Vulneráveis e Desatualizados
- A07:2021-Falhas de Identificação e Autenticação
- A08:2021-Falhas de Integridade de Software e Dados
- A09:2021-Falhas de Registro e Monitoramento de Segurança
- A10:2021-Força Bruta de Solicitação do Servidor
Para mais detalhes, por favor verifique o relatório completo report.
Corrigir uma vulnerabilidade depende de sua natureza exata. Por exemplo, corrigir Componentes Vulneráveis e Desatualizados é um processo orientado, exigindo disciplina na gestão de versões e na aposentadoria das mais antigas. No entanto, algumas são técnicas e exigem apenas a configuração adequada no proxy reverso ou na API Gateway, por exemplo, Solicitação de Forjamento do Lado do Servidor.
Ninguém Se Importa Com Segurança
A segurança é um assunto delicado porque aperfeiçoar a segurança não traz nenhum valor para o negócio. Gerentes orientados à carreira não se preocuparão com a segurança, pois não poderão mostrar que aumentaram o lucro da empresa em X% em sua próxima avaliação anual. A menos que o conselho considere a segurança seriamente, é provável que ninguém se importe. Por esse motivo, a maioria das organizações implementa a segurança baseada em caixas de seleção, ou seja, denegação plausível. Se você estiver interessado em implementar a segurança corretamente, escrevi alguns pensamentos em um post de blog anterior: “Trate a Segurança como um Risco.”
Tudo considerado, proteger aplicativos não terá muito orçamento, se é que terá algum. Portanto, devemos ser espertos e procurar um componente existente. Felizmente, a OWASP oferece uma configuração pronta para lidar com os Top 10, que é corrigida por meio de uma configuração chamada Conjunto de Regras Principais. Infelizmente, isso se destina ao ModSecurity:
ModSecurity, às vezes chamado de Modsec, é um firewall de aplicativos web de código aberto (WAF). Originalmente projetado como um módulo para o Apache HTTP Server, evoluiu para fornecer uma variedade de capacidades de filtragem de solicitação e resposta do Hypertext Transfer Protocol, juntamente com outras características de segurança, em várias plataformas diferentes, incluindo o Apache HTTP Server, o Microsoft IIS e o Nginx. É um software livre lançado sob a licença Apache 2.0.
Embora seja teoricamente possível configurar o Nginx via configuração do Apache APISIX, há outra maneira mais direta.
O Conjunto de Regras Principais da OWASP e o Coraza
A descrição do Conjunto de Regras Principais é bastante relevante para nossas necessidades:
O Conjunto de Regras Principais do OWASP® ModSecurity (CRS) é um conjunto de regras de detecção de ataques genéricas para uso com o ModSecurity ou firewalls de aplicativos web compatíveis. O CRS visa proteger aplicativos web de uma ampla gama de ataques, incluindo as Dez Principais da OWASP, com um mínimo de alertas falsos. O CRS oferece proteção contra muitas categorias de ataque comuns, incluindo:
- SQL Injection (SQLi)
- Cross Site Scripting (XSS)
- Inclusão de Arquivo Local (LFI)
- Inclusão de Arquivo Remoto (RFI)
- Injeção de Código PHP
- Injeção de Código Java
- HTTPoxy
- Shellshock
- Injeção de Shell Unix/Windows
- Fixação de Sessão
- Detecção de Scripts/Scanner/Bot
- Metadados/Fluxos de Erro
– Website do Conjunto de Regras Principais do OWASP® ModSecurity
O OWASP também fornece Coraza, uma porta do ModSecurity disponível como uma biblioteca Go. Coraza Proxy Wasm é construído sobre Coraza e implementa a ABI proxy-wasm, que especifica um conjunto de interfaces Wasm para proxies. Por fim, o Apache APISIX oferece integração proxy-wasm.
Juntando Tudo
Vamos resumir:
- O OWASP fornece uma lista das 10 principais vulnerabilidades de segurança web.
- Ele as implementa para o ModSecurity através do Conjunto de Regras Principais.
- Coraza é uma porta do ModSecurity, disponível como uma implementação proxy-wasm.
Podemos configurar o Apache APISIX com padrões razoáveis e seguros dessa maneira. Vamos fazer isso.
Antes de tudo: Coraza não faz parte da distribuição do Apache APISIX. No entanto, é simples adicioná-lo aqui com Docker:
FROM apache/apisix:3.8.0-debian
ENV VERSION 0.5.0 #1
ENV CORAZA_FILENAME coraza-proxy-wasm-${VERSION}.zip #1
ADD https://github.com/corazawaf/coraza-proxy-wasm/releases/download/$VERSION/$CORAZA_FILENAME . #2
USER root #3
RUN <<EOF
apt-get install zip -y #4
unzip $CORAZA_FILENAME -d /usr/local/apisix/proxywasm
rm $CORAZA_FILENAME
apt-get remove zip -y
chown -R apisix:apisix /usr/local/apisix/proxywasm
EOF
USER apisix #5
- Defina variáveis para melhor manutenibilidade
- Obtenha a versão Coraza Wasm.
- Nas versões recentes do APISIX, o usuário é
apisix
para endurecer a segurança. Como precisamos instalar pacotes, devemos mudar pararoot
. - Instale
unzip
pois não está instalado, descompacte o arquivo baixado, remova o arquivo, desinstaleunzip
e mude o dono da pasta extraída. - Switch back para o usuário
apisix
.
O próximo passo é configurar o próprio APISIX para usar o plugin Coraza Wasm.
wasm:
plugins:
- name: coraza-filter #1
priority: 7999 #2
file: /usr/local/apisix/proxywasm/coraza-proxy-wasm.wasm #3
- Nome do filtro definido no código Wasm
- Defina a prioridade mais alta para que ele execute antes de qualquer outro plugin.
- Caminho para o arquivo extraído (veja o
Dockerfile
acima)
Finalmente, podemos atribuir o plugin a rotas ou configurá-lo como uma regra global para aplicar a todas as rotas. Estou usando configuração estática:
global_rules:
- id: 1
plugins:
coraza-filter: #1
conf:
directives_map: #2
default:
- SecDebugLogLevel 9 #3
- SecRuleEngine On #4
- Include @crs-setup-conf #5
- Include @owasp_crs/*.conf #6
default_directives: default #7
- Configure o plugin
coraza-filter
, agora que está disponível. - Defina configurações. Aqui, definimos uma única,
default
, mas poderíamos definir várias e usar diferentes em rotas diferentes. - Aumente o nível de log para ver o que acontece nos logs.
- Ligue o motor.
- Use a configuração Coraza.
- Use todas as regras. Poderíamos escolher as que queremos para um controle mais detalhado.
- Use a configuração
default
definida acima.
Prosseguimos para definir rotas para testar nossa configuração. Vamos chamar a rota para /get
:
curl localhost:9080?user=foobar
A resposta é conforme o esperado:
{
"args": {
"user": "foobar"
},
"headers": {
"Accept": "*/*",
"Host": "localhost",
"User-Agent": "curl/8.4.0",
"X-Amzn-Trace-Id": "Root=1-65b9fa13-75900dc029e156ec764ae204",
"X-Forwarded-Host": "localhost"
},
"origin": "192.168.65.1, 176.153.7.175",
"url": "http://localhost/get?user=foobar"
}
Agora, vamos tentar enviar JavaScript na string de consulta. Não há como esta requisição ser esperada no lado do servidor, então nossa infraestrutura deve nos proteger disso.
curl 'localhost:9080?user=<script>alert(1)</script>'
A resposta é um código de status HTTP 403. Se olharmos para o log, podemos ver as seguintes dicas:
Coraza: Warning. XSS Attack Detected via libinjection [file "@owasp_crs/REQUEST-941-APPLICATION-ATTACK-XSS.conf"]
Coraza: Warning. NoScript XSS InjectionChecker: HTML Injection
Coraza: Warning. Javascript method detected
Coraza: Access denied (phase 1). Inbound Anomaly Score Exceeded in phase 1
Coraza fez o trabalho!
Conclusão
A maioria das organizações não incentiva a segurança. Portanto, precisamos ser inteligentes e usar componentes existentes o máximo possível.
Podemos fortalecer o Apache APISIX contra as 10 principais vulnerabilidades do OWASP usando o Coraza e o Core Ruleset.
Para ir além
O código-fonte completo deste post está disponível no GitHub.
Source:
https://dzone.com/articles/hardening-apache-apisix-with-the-owasps-coraza-and