El Open Worldwide Application Security Project es una comunidad en línea que produce artículos, metodologías, documentación, herramientas y tecnologías disponibles gratuitamente en los campos de IoT, software de sistemas y seguridad de aplicaciones web. El OWASP proporciona recursos gratuitos y abiertos. Está dirigido por una organización sin fines de lucro llamada The OWASP Foundation. El OWASP Top 10 - 2021 es el resultado publicado de una investigación reciente basada en datos completos recopilados de más de 40 organizaciones asociadas.
La OWASP publica periódicamente un informe de las 10 principales vulnerabilidades. El informe se centra en las vulnerabilidades de las aplicaciones web.
En esta publicación, me gustaría describir cómo solucionar algunos de ellos a través de Apache APISIX API Gateway .
En 2021, el informe menciona:
Para obtener más detalles, consulte el informe completo.
La reparación de una vulnerabilidad depende de su naturaleza exacta. Por ejemplo, la reparación de componentes vulnerables y obsoletos se basa en procesos, lo que requiere disciplina a la hora de gestionar las versiones y retirar las más antiguas. Algunos, sin embargo, son técnicos y solo requieren una configuración adecuada en el proxy inverso o API Gateway, por ejemplo , Server Side Request Forgery .
La seguridad es un tema delicado porque reforzarla no aporta ningún valor al negocio. A los gerentes impulsados por su carrera no les importará la seguridad, ya que no podrán demostrar que aumentaron las ganancias de la empresa en un X% en su próxima evaluación anual. A menos que la junta considere seriamente la seguridad, es probable que a nadie le importe. Por esta razón, la mayoría de las organizaciones implementan seguridad basada en casillas de verificación, también conocida como negación plausible. Si está interesado en implementar la seguridad correctamente, escribí algunas ideas en una publicación de blog anterior: Trate la seguridad como un riesgo .
En definitiva, proteger las aplicaciones no requerirá mucho presupuesto, si es que lo hay. Por lo tanto, debemos ser inteligentes y buscar un componente existente. Afortunadamente, OWASP ofrece una configuración lista para usar para manejar el Top 10, que se puede solucionar mediante una configuración llamada Core Rule Set . Desafortunadamente, apunta a ModSecurity:
ModSecurity, a veces llamado Modsec, es un firewall de aplicaciones web (WAF) de código abierto. Diseñado originalmente como un módulo para el servidor HTTP Apache, ha evolucionado para proporcionar una variedad de capacidades de filtrado de respuestas y solicitudes del protocolo de transferencia de hipertexto junto con otras características de seguridad en varias plataformas diferentes, incluidas el servidor HTTP Apache, Microsoft IIS y Nginx. Es un software gratuito publicado bajo la licencia Apache 2.0.
Si bien es teóricamente posible configurar Nnginx a través de la configuración de Apache APISIX, existe otra forma más sencilla.
La descripción del conjunto de reglas básicas es bastante relevante para nuestras necesidades:
El conjunto de reglas básicas (CRS) de ModSecurity de OWASP® es un conjunto de reglas genéricas de detección de ataques para usar con ModSecurity o firewalls de aplicaciones web compatibles. El CRS tiene como objetivo proteger las aplicaciones web de una amplia gama de ataques, incluido el OWASP Top Ten, con un mínimo de alertas falsas. El CRS brinda protección contra muchas categorías de ataques comunes, que incluyen:
- Inyección SQL (SQLi)
- Secuencias de comandos entre sitios (XSS)
- Inclusión de archivos locales (LFI)
- Inclusión remota de archivos (RFI)
- Inyección de código PHP
- Inyección de código Java
- HTTPoxi
- Neurosis de guerra
- Inyección de shell Unix/Windows
- Fijación de sesión
- Secuencias de comandos/escáner/detección de bots
- Metadatos/fugas de errores
-- Sitio web del conjunto de reglas básicas ModSecurity de OWASP®
OWASP también proporciona Coraza , un puerto de ModSecurity disponible como biblioteca Go. Coraza Proxy Wasm está construido sobre Coraza e implementa la ABI proxy-wasm , que especifica un conjunto de interfaces Wasm para proxies. Finalmente, Apache APISIX ofrece integración proxy-wasm.
Resumamos:
Podemos configurar Apache APISIX con valores predeterminados sensatos y seguros de esta manera. Vamos a hacerlo.
Lo primero es lo primero: Coraza no forma parte de la distribución Apache APISIX. Sin embargo, es sencillo agregarlo aquí con 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 reforzar la seguridad. Como necesitamos instalar paquetes, debemos cambiar a root
.unzip
ya que no está instalado, descomprima el archivo descargado, elimine el archivo, desinstale unzip
y cambie el propietario de la carpeta extraídaapisix
El siguiente paso es configurar APISIX para usar el complemento Coraza Wasm.
wasm: plugins: - name: coraza-filter #1 priority: 7999 #2 file: /usr/local/apisix/proxywasm/coraza-proxy-wasm.wasm #3
Dockerfile
arriba
Finalmente, podemos asignar el complemento a rutas o configurarlo como una regla global para aplicar a cada ruta. Estoy usando una configuración 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
ahora que está disponibledefault
, pero podríamos definir varios y usar diferentes en diferentes rutas.default
definida anteriormente
Procedemos a definir rutas a https://httpbin.org/ para probar nuestra configuración. Llamemos a la ruta a /get
:
curl localhost:9080?user=foobar
La respuesta es la 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" }
Ahora, intentemos enviar JavaScript en la cadena de consulta. No hay forma de que se espere esta solicitud del lado del servidor, por lo que nuestra infraestructura debería protegernos de ella.
curl 'localhost:9080?user=<script>alert(1)</script>'
La respuesta es un código de estado HTTP 403. Si miramos el registro, podemos ver las siguientes sugerencias:
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 hizo el trabajo!
La mayoría de las organizaciones no incentivan la seguridad. Por lo tanto, debemos ser inteligentes al respecto y utilizar los componentes existentes tanto como sea posible.
Podemos reforzar Apache APISIX frente al OWASP Top 10 utilizando Coraza y Core Ruleset.
Para llegar más lejos:
El código fuente completo de esta publicación se puede encontrar en GitHub .
Publicado originalmente en A Java Geek el 4 de febrero de 2024