
Biblioteca de firewall de aplicaciones web basada en Go compatible con reglas ModSecurity SecLang y OWASP Core Rule Set v4, que proporciona inspección de tráfico HTTP en tiempo real y bloqueo de ataques para aplicaciones web y APIs.
Coraza es un cortafuegos de aplicaciones web (WAF) de código abierto, de grado empresarial y alto rendimiento, listo para proteger tus queridas aplicaciones. Está escrito en Go, es compatible con los conjuntos de reglas SecLang de ModSecurity y es 100% compatible con el OWASP Core Rule Set v4.
Características clave:
⇲ Integración directa - Coraza es un motor alternativo que tiene compatibilidad parcial con TrustwaveOWASP ModSecurity Engine y admite conjuntos de reglas SecLang estándar de la industria.
🔥 Seguridad - Coraza ejecuta el OWASP CRS v4 (anteriormente conocido como Core Rule Set) para proteger tus aplicaciones web de una amplia gama de ataques, incluyendo el OWASP Top Ten, con un mínimo de falsas alertas. CRS protege de muchas categorías de ataques comunes incluyendo: Inyección SQL (SQLi), Cross Site Scripting (XSS), Inyección de código PHP y Java, HTTPoxy, Shellshock, Detección de scripts/scanners/bots y Fugas de metadatos y errores. Ten en cuenta que las versiones anteriores del CRS no son compatibles.
🔌 Extensible - Coraza es una biblioteca en su núcleo, con muchas integraciones para implementar instancias de cortafuegos de aplicaciones web on-premise. Registradores de auditoría, motores de persistencia, operadores, acciones: crea tus propias funcionalidades para extender Coraza tanto como quieras.
🚀 Rendimiento - Desde sitios web enormes hasta blogs pequeños, Coraza puede manejar la carga con un impacto mínimo en el rendimiento. Consulta nuestros Benchmarks.
﹡ Simplicidad - Cualquier persona puede entender y modificar el código fuente de Coraza. Es fácil extender Coraza con nuevas funcionalidades.
💬 Comunidad - Coraza es un proyecto comunitario, las contribuciones son aceptadas y todas las ideas serán consideradas. Encuentra orientación para contribuir en el documento CONTRIBUTION.
El Proyecto Coraza mantiene implementaciones y plugins para los siguientes servidores:
Coraza se puede utilizar como una biblioteca para tu programa Go para implementar un middleware de seguridad o integrarlo con aplicaciones y servidores web existentes.
package main
import (
"fmt"
"github.com/corazawaf/coraza/v3"
)
func main() {
// First we initialize our waf and our seclang parser
waf, err := coraza.NewWAF(coraza.NewWAFConfig().
WithDirectives(`SecRule REMOTE_ADDR "@rx .*" "id:1,phase:1,deny,status:403"`))
// Now we parse our rules
if err != nil {
fmt.Println(err)
}
// Then we create a transaction and assign some variables
tx := waf.NewTransaction()
defer func() {
tx.ProcessLogging()
tx.Close()
}()
tx.ProcessConnection("127.0.0.1", 8080, "127.0.0.1", 12345)
// Finally we process the request headers phase, which may return an interruption
if it := tx.ProcessRequestHeaders(); it != nil {
fmt.Printf("Transaction was interrupted with status %d\n", it.Status)
}
}
Examples/http-server proporciona un ejemplo para practicar con Coraza.
Las etiquetas de compilación de Go pueden ajustar cierta funcionalidad en tiempo de compilación. Son solo para casos de uso avanzados y no tienen garantías de compatibilidad entre versiones menores: úsalas con cuidado.
coraza.disabled_operators.* - excluye el operador especificado de la compilación. Particularmente útil si se sobreescribe el operador con plugins.RegisterOperator para reducir el tamaño del binario / la sobrecarga de inicio.coraza.rule.multiphase_evaluation - habilita la evaluación de las variables de regla en las fases en que están listas, no solo en la fase para la que está definida la regla.coraza.no_memoize - deshabilita la memoización predeterminada de los constructores de regex y aho-corasick. La memoización está habilitada por defecto y utiliza un caché global para reutilizar patrones compilados entre instancias del WAF, reduciendo el consumo de memoria y la sobrecarga de inicio. En procesos de larga duración que realizan recargas en caliente, usa WAF.Close() (a través de experimental.WAFCloser) para liberar entradas en caché cuando se destruye un WAF, o usa esta etiqueta para optar por no usar memoización por completo.no_fs_access - indica que el entorno de destino no tiene acceso al sistema de archivos (FS) para no aprovechar la funcionalidad relacionada con el sistema de archivos del SO, por ejemplo, búferes de cuerpo de archivo.coraza.rule.case_sensitive_args_keys - habilita la coincidencia sensible a mayúsculas para las claves ARGS, alineando el comportamiento de Coraza con la especificación RFC 3986. Estará habilitada por defecto en la próxima versión mayor.coraza.rule.no_regex_multiline - deshabilita la activación por defecto de los modificadores multilínea de regex en el operador @rx. Se alinea con el comportamiento esperado del CRS, reduce falsos positivos y podría mejorar el rendimiento. Sin regex multilínea por defecto estará habilitado en la próxima versión mayor. Para más contexto, consulta este PR.coraza.rule.mandatory_rule_id_check - habilita la verificación estricta del id de regla donde la acción id es requerida para todas las SecRule/SecAction.coraza.rule.rx_prefilter - establece el valor predeterminado de la directiva SecRxPreFilter en On. Optimiza el operador @rx, omitiendo la regex completa cuando una entrada no puede coincidir. Esta etiqueta de compilación es solo para fines de prueba; confía en la directiva SecRxPreFilter para la configuración en tiempo de ejecución y documentación más amplia sobre esta característica.http/e2e/ proporciona una utilidad para ejecutar pruebas e2e. Se puede usar de forma independiente contra tu propio despliegue del WAF:
go run github.com/corazawaf/coraza/v3/http/e2e/cmd/httpe2e@main --proxy-hostport localhost:8080 --httpbin-hostport localhost:8081
o como biblioteca importando:
"github.com/corazawaf/coraza/v3/http/e2e"
Como referencia para el uso de la biblioteca, consulta testing/e2e/e2e_test.go. Las directivas esperadas que deben cargarse y las banderas disponibles se pueden encontrar en http/e2e/cmd/httpe2e/main.go.
Coraza solo requiere Go para el desarrollo. Puedes ejecutar mage.go para emitir comandos de desarrollo.
Ver la lista de comandos
$ go run mage.go -l
Targets:
check runs lint and tests.
coverage runs tests with coverage and race detector enabled.
doc runs godoc, access at http://localhost:6060.
format formats code in this repository.
fuzz runs fuzz tests.
lint verifies code quality.
precommit installs a git hook to run check when committing.
test runs all tests.
Por ejemplo, para formatear tu código antes de enviarlo, ejecuta
go run mage.go format
¡Las contribuciones son bienvenidas! Consulta CONTRIBUTING.md para obtener orientación.
Para reportar un problema de seguridad, sigue este enlace y agrega una descripción del problema, los pasos que seguiste para crearlo, las versiones afectadas y, si se conoce, las mitigaciones para el problema.
Nuestro equipo de gestión de vulnerabilidades responderá dentro de los 3 días hábiles posteriores a tu informe. Si el problema se confirma como una vulnerabilidad, abriremos un Aviso de Seguridad. Este proyecto sigue un cronograma de divulgación de 90 días.
Para donaciones, consulta el sitio de donaciones.
En primer lugar, un enorme agradecimiento a Juan Pablo Tosso por iniciar este proyecto y construir una comunidad increíble alrededor de Coraza.
Hoy tenemos muchos contribuyentes increíbles, ¡no podríamos haberlo hecho sin ustedes!
Hecho con contrib.rocks.