Bibliothèque de pare-feu d'applications Web basée sur Go, compatible avec les règles ModSecurity SecLang et l'ensemble de règles de base OWASP v4, offrant une inspection du trafic HTTP en temps réel et un blocage des attaques pour les applications Web et les API.
Coraza est un pare-feu applicatif Web (WAF) open source, de qualité professionnelle et haute performance, prêt à protéger vos applications bien-aimées. Il est écrit en Go, prend en charge les ensembles de règles SecLang de ModSecurity et est compatible à 100 % avec l'OWASP Core Rule Set v4.
Fonctionnalités clés :
⇲ Remplacement direct - Coraza est un moteur alternatif partiellement compatible avec TrustwaveOWASP ModSecurity Engine et prend en charge les ensembles de règles SecLang standard du secteur.
🔥 Sécurité - Coraza exécute l'OWASP CRS v4 (anciennement Core Rule Set) pour protéger vos applications Web contre un large éventail d'attaques, y compris l'OWASP Top Ten, avec un minimum de faux avertissements. CRS protège contre de nombreuses catégories d'attaques courantes, notamment : Injection SQL (SQLi), Cross Site Scripting (XSS), Injection de code PHP et Java, HTTPoxy, Shellshock, Détection de scripts/scanners/bots, Fuites de métadonnées et d'erreurs. Notez que les versions plus anciennes du CRS ne sont pas compatibles.
🔌 Extensible - Coraza est une bibliothèque à la base, avec de nombreuses intégrations pour déployer des instances de pare-feu applicatif Web sur site. Journaux d'audit, moteurs de persistance, opérateurs, actions, créez vos propres fonctionnalités pour étendre Coraza à volonté.
🚀 Performance - Des sites Web imposants aux petits blogs, Coraza peut gérer la charge avec un impact minimal sur les performances. Consultez nos Benchmarks
﹡ Simplicité - Tout le monde peut comprendre et modifier le code source de Coraza. Il est facile d'étendre Coraza avec de nouvelles fonctionnalités.
💬 Communauté - Coraza est un projet communautaire, les contributions sont acceptées et toutes les idées seront considérées. Trouvez des conseils pour les contributeurs dans le document CONTRIBUTION.
Le projet Coraza maintient des implémentations et des plugins pour les serveurs suivants :
Coraza peut être utilisé comme une bibliothèque pour votre programme Go afin d'implémenter un middleware de sécurité ou de l'intégrer à des applications et serveurs Web existants.
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 fournit un exemple pour pratiquer avec Coraza.
Les étiquettes de compilation Go peuvent ajuster certaines fonctionnalités au moment de la compilation. Elles sont destinées uniquement aux cas d'utilisation avancés et n'offrent pas de garanties de compatibilité entre versions mineures - utilisez-les avec précaution.
coraza.disabled_operators.* - exclut l'opérateur spécifié de la compilation. Particulièrement utile si vous remplacez l'opérateur avec plugins.RegisterOperator pour réduire la taille du binaire / les frais de démarrage.coraza.rule.multiphase_evaluation - active l'évaluation des variables de règle dans les phases où elles sont prêtes, pas seulement la phase pour laquelle la règle est définie.coraza.no_memoize - désactive la mémorisation par défaut des constructeurs regex et aho-corasick. La mémorisation est activée par défaut et utilise un cache global pour réutiliser les motifs compilés entre les instances WAF, réduisant la consommation mémoire et les frais de démarrage. Dans les processus longs qui effectuent des rechargements à chaud, utilisez WAF.Close() (via experimental.WAFCloser) pour libérer les entrées mises en cache lorsqu'un WAF est détruit, ou utilisez cette étiquette pour refuser complètement la mémorisation.no_fs_access - indique que l'environnement cible n'a pas accès au système de fichiers afin de ne pas exploiter les fonctionnalités liées au système de fichiers du SE, par exemple les tampons de corps de fichier.coraza.rule.case_sensitive_args_keys - active la correspondance sensible à la casse pour les clés ARGS, alignant le comportement de Coraza avec la spécification RFC 3986. Sera activé par défaut dans la prochaine version majeure.coraza.rule.no_regex_multiline - désactive l'activation par défaut des modificateurs multilignes des regex dans l'opérateur @rx. Aligne avec le comportement attendu du CRS, réduit les faux positifs et peut améliorer les performances. Aucune regex multiligne par défaut ne sera activée dans la prochaine version majeure. Pour plus de contexte, consultez cette PR.coraza.rule.mandatory_rule_id_check - active la vérification stricte de l'ID de règle où l'action id est requise pour toutes les SecRule/SecAction.coraza.rule.rx_prefilter - définit la valeur par défaut de la directive SecRxPreFilter à On. Optimise l'opérateur @rx, en sautant la regex complète lorsqu'une entrée ne peut pas correspondre. Cette étiquette de compilation est uniquement destinée à des fins de test ; utilisez la directive SecRxPreFilter pour la configuration à l'exécution et une documentation plus large sur cette fonctionnalité.http/e2e/ fournit un utilitaire pour exécuter des tests e2e.
Il peut être utilisé de manière autonome contre votre propre déploiement WAF :
go run github.com/corazawaf/coraza/v3/http/e2e/cmd/httpe2e@main --proxy-hostport localhost:8080 --httpbin-hostport localhost:8081
ou comme bibliothèque en important :
"github.com/corazawaf/coraza/v3/http/e2e"
Comme référence pour l'utilisation en tant que bibliothèque, consultez testing/e2e/e2e_test.go.
Les directives attendues qui doivent être chargées et les indicateurs disponibles se trouvent dans http/e2e/cmd/httpe2e/main.go.
Coraza ne nécessite que Go pour le développement. Vous pouvez exécuter mage.go pour lancer des commandes de développement.
Consultez la liste des commandes
$ 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.
Par exemple, pour formater votre code avant soumission, exécutez
go run mage.go format
Les contributions sont les bienvenues ! Veuillez vous référer à CONTRIBUTING.md pour des conseils.
Pour signaler un problème de sécurité, veuillez suivre ce lien et ajouter une description du problème, les étapes que vous avez suivies pour le créer, les versions affectées et, si connues, les mesures d'atténuation.
Notre équipe de gestion des vulnérabilités répondra dans les 3 jours ouvrables suivant votre rapport. Si le problème est confirmé comme une vulnérabilité, nous ouvrirons un Avis de sécurité. Ce projet suit un calendrier de divulgation de 90 jours.
Pour les dons, consultez le site de dons.
Tout d'abord, un immense merci à Juan Pablo Tosso pour avoir lancé ce projet et bâti une communauté incroyable autour de Coraza !
Aujourd'hui, nous avons de nombreux contributeurs formidables, nous n'aurions pas pu faire cela sans vous !
Réalisé avec contrib.rocks.