O Open Worldwide Application Security Project é uma comunidade online que produz artigos, metodologias, documentação, ferramentas e tecnologias disponíveis gratuitamente nas áreas de IoT, software de sistema e segurança de aplicações web. O OWASP fornece recursos gratuitos e abertos. É liderado por uma organização sem fins lucrativos chamada The OWASP Foundation. O OWASP Top 10 - 2021 é o resultado publicado de pesquisas recentes baseadas em dados abrangentes compilados de mais de 40 organizações parceiras.
O OWASP publica regularmente um relatório das 10 principais vulnerabilidades. O relatório visa vulnerabilidades em aplicativos da web.
Neste post, gostaria de descrever como corrigir alguns deles por meio do Apache APISIX API Gateway .
Em 2021, o relatório menciona:
Para mais detalhes, consulte o relatório completo.
A correção de uma vulnerabilidade depende de sua natureza exata. Por exemplo, a correção de componentes vulneráveis e desatualizados é orientada por processos, exigindo disciplina no gerenciamento de versões e na desativação de versões mais antigas. Alguns, no entanto, são técnicos e requerem apenas configuração adequada no proxy reverso ou API Gateway, por exemplo , Server Side Request Forgery .
A segurança é um assunto delicado porque o fortalecimento da segurança não traz nenhum valor para o negócio. Os gestores orientados para a carreira não se importarão com a segurança, pois não serão capazes de demonstrar que aumentaram o lucro da empresa em X% na 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 segurança baseada em caixas de seleção, também conhecida como negação plausível. Se você estiver interessado em implementar a segurança adequadamente, escrevi algumas reflexões em uma postagem anterior do blog: Trate a segurança como um risco .
Resumindo, proteger aplicativos não exigirá muito orçamento, se houver. Portanto, devemos ser espertos e procurar um componente existente. Felizmente, o OWASP oferece uma configuração pronta para uso para lidar com o Top 10, que pode ser corrigida por meio de uma configuração chamada Core Rule Set . Infelizmente, ele tem como alvo o ModSecurity:
ModSecurity, às vezes chamado de Modsec, é um firewall de aplicativo da web (WAF) de código aberto. Originalmente projetado como um módulo para o Apache HTTP Server, ele evoluiu para fornecer uma variedade de recursos de filtragem de solicitações e respostas do Hypertext Transfer Protocol, juntamente com outros recursos de segurança em diversas plataformas diferentes, incluindo Apache HTTP Server, Microsoft IIS e Nginx. É um software gratuito lançado sob a licença Apache 2.0.
Embora seja teoricamente possível configurar o Nnginx por meio da configuração Apache APISIX, há outra maneira mais direta.
A descrição do Core Ruleset é bastante relevante para as nossas necessidades:
O OWASP® ModSecurity Core Rule Set (CRS) é um conjunto de regras genéricas de detecção de ataques para uso com ModSecurity ou firewalls de aplicativos da web compatíveis. O CRS visa proteger aplicações web de uma ampla gama de ataques, incluindo o OWASP Top Ten, com um mínimo de alertas falsos. O CRS oferece proteção contra muitas categorias de ataques comuns, incluindo:
- Injeção SQL (SQLi)
- Scripting entre sites (XSS)
- Inclusão de arquivo local (LFI)
- Inclusão remota de arquivos (RFI)
- Injeção de código PHP
- Injeção de código Java
- HTTPoxy
- Trauma pós guerra
- Injeção de Shell Unix/Windows
- Fixação de Sessão
- Scripting/Scanner/Detecção de Bot
- Vazamentos de metadados/erros
- Site do conjunto de regras principais do OWASP® ModSecurity
OWASP também fornece Coraza , uma versão do ModSecurity disponível como uma biblioteca Go. O Coraza Proxy Wasm é construído sobre o Coraza e implementa o proxy-wasm ABI , que especifica um conjunto de interfaces Wasm para proxies. Finalmente, o Apache APISIX oferece integração proxy-wasm.
Vamos resumir:
Podemos configurar o Apache APISIX com padrões sensatos e seguros desta forma. Vamos fazê-lo.
Comecemos pelo princípio: Coraza não faz parte da distribuição Apache APISIX. No entanto, é simples adicioná-lo aqui com o 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
apisix
para aumentar a segurança. Como precisamos instalar pacotes, devemos mudar para root
.unzip
porque não está instalado, descompacte o arquivo baixado, remova o arquivo, desinstale unzip
e altere o proprietário da pasta extraídaapisix
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
Dockerfile
acima
Finalmente, podemos atribuir o plugin às rotas ou defini-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
coraza-filter
agora que está disponíveldefault
, mas poderíamos definir vários e usar diferentes em rotas diferentesdefault
definida acima
Prosseguimos definindo rotas para https://httpbin.org/ para testar nossa configuração. Vamos chamar a rota para /get
:
curl localhost:9080?user=foobar
A resposta é a esperada:
{ "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 essa solicitação ser esperada no lado do servidor, portanto nossa infraestrutura deve nos proteger dela.
curl 'localhost:9080?user=<script>alert(1)</script>'
A resposta é um código de status HTTP 403. Se olharmos 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!
A maioria das organizações não incentiva a segurança. Portanto, precisamos ser inteligentes e usar os componentes existentes tanto quanto possível.
Podemos fortalecer o Apache APISIX contra o OWASP Top 10 usando Coraza e o Core Ruleset.
Ir adiante:
O código-fonte completo desta postagem pode ser encontrado no GitHub .
Publicado originalmente em A Java Geek em 4 de fevereiro de 2024