
GoベースのWebアプリケーションファイアウォールライブラリ。ModSecurity SecLangルールとOWASP Core Rule Set v4に対応し、WebアプリケーションやAPI向けにリアルタイムのHTTPトラフィック検査と攻撃ブロックを提供します。
Coraza - Webアプリケーションファイアウォール
Corazaは、オープンソースでエンタープライズグレードの高性能Webアプリケーションファイアウォール(WAF)であり、大切なアプリケーションを保護する準備が整っています。Goで書かれており、ModSecurity SecLangルールセットをサポートし、OWASP Core Rule Set v4と100%互換性があります。
主な機能:
⇲ ドロップイン - Corazaは、TrustwaveOWASP ModSecurity Engineと部分的な互換性を持つ代替エンジンであり、業界標準のSecLangルールセットをサポートします。
🔥 セキュリティ - CorazaはOWASP CRS v4(旧Core Rule Set)を実行し、OWASP Top Tenを含む幅広い攻撃からWebアプリケーションを保護し、誤警報を最小限に抑えます。CRSは、SQLインジェクション(SQLi)、クロスサイトスクリプティング(XSS)、PHP・Javaコードインジェクション、HTTPoxy、Shellshock、スクリプティング/スキャナー/ボット検出、メタデータ・エラー漏洩など、多くの一般的な攻撃カテゴリから保護します。古いバージョンのCRSは互換性がないことに注意してください。
🔌 拡張可能 - Corazaはコア部分がライブラリであり、オンプレミスのWAFインスタンスをデプロイするための多くの統合機能を備えています。監査ロガー、永続化エンジン、オペレーター、アクションなど、独自の機能を作成してCorazaを自由に拡張できます。
🚀 パフォーマンス - 大規模なウェブサイトから小さなブログまで、Corazaは最小限のパフォーマンス影響で負荷を処理できます。ベンチマークをご確認ください。
﹡ シンプルさ - 誰でもCorazaのソースコードを理解・修正できます。新しい機能の追加も簡単です。
💬 コミュニティ - Corazaはコミュニティプロジェクトであり、コントリビューションを歓迎し、すべてのアイデアは検討されます。コントリビューター向けのガイダンスはCONTRIBUTION文書にあります。
Corazaプロジェクトは、以下のサーバー向けの実装とプラグインを維持しています:
CorazaはGoプログラムのライブラリとして使用でき、セキュリティミドルウェアを実装したり、既存のアプリケーションやウェブサーバーと統合できます。
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は、Corazaを実際に体験するための例を提供しています。
Goのビルドタグを使用すると、コンパイル時に特定の機能を調整できます。これらは高度なユースケース専用であり、マイナーバージョン間での互換性は保証されません。注意して使用してください。
coraza.disabled_operators.* - 指定されたオペレーターをコンパイルから除外します。plugins.RegisterOperatorでオペレーターをオーバーライドする場合に特に有用で、バイナリサイズや起動時のオーバーヘッドを削減できます。coraza.rule.multiphase_evaluation - ルールで定義されたフェーズだけでなく、変数が準備できたフェーズでもルール変数の評価を有効にします。coraza.no_memoize - 正規表現やaho-corasickビルダーのデフォルトのメモ化を無効にします。メモ化はデフォルトで有効になっており、グローバルキャッシュを使用してコンパイル済みパターンをWAFインスタンス間で再利用し、メモリ消費と起動時のオーバーヘッドを削減します。ライブリロードを実行する長時間実行プロセスでは、experimental.WAFCloserを介してWAF.Close()を使用して、WAFが破棄されたときにキャッシュエントリを解放するか、このタグを使用してメモ化を完全に無効にしてください。no_fs_access - ターゲット環境にファイルシステムへのアクセスがないことを示し、ファイル本体バッファなどのOSファイルシステム関連機能を利用しないようにします。coraza.rule.case_sensitive_args_keys - ARGSキーの大文字小文字を区別するマッチングを有効にし、Corazaの動作をRFC 3986仕様に合わせます。次のメジャーバージョンではデフォルトで有効になる予定です。coraza.rule.no_regex_multiline - @rxオペレーターでデフォルトで正規表現のマルチラインモディファイアを有効にしないようにします。CRSの期待される動作に沿い、誤検知を減らし、パフォーマンスが向上する可能性があります。次のメジャーバージョンではデフォルトでマルチラインフラグが無効になります。詳細はこのPRをご確認ください。http/e2e/は、e2eテストを実行するユーティリティを提供します。独自のWAFデプロイに対してスタンドアロンで使用できます:
go run github.com/corazawaf/coraza/v3/http/e2e/cmd/httpe2e@main --proxy-hostport localhost:8080 --httpbin-hostport localhost:8081
または、ライブラリとしてインポートして使用することもできます:
"github.com/corazawaf/coraza/v3/http/e2e"
ライブラリ使用のリファレンスについては、testing/e2e/e2e_test.goを参照してください。ロードする必要があるディレクティブと利用可能なフラグは、http/e2e/cmd/httpe2e/main.goにあります。
Corazaの開発にはGoのみが必要です。mage.goを実行して開発コマンドを発行できます。
コマンド一覧:
$ 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.
例えば、コードを提出する前にフォーマットするには、以下を実行します:
go run mage.go format
コントリビューションを歓迎します!ガイダンスについてはCONTRIBUTING.mdを参照してください。
セキュリティ問題を報告するには、このリンクに従い、問題の説明、問題を再現する手順、影響を受けるバージョン、および既知の緩和策を記載してください。
脆弱性管理チームは、報告から3営業日以内に対応します。問題が脆弱性として確認された場合、セキュリティアドバイザリを公開します。このプロジェクトは90日間の開示期限に従います。
寄付については、Donations siteを参照してください。
まず第一に、このプロジェクトを始め、Corazaの素晴らしいコミュニティを築いてくれたJuan Pablo Tossoに心から感謝します!
現在、多くの素晴らしいコントリビューターがいます。皆さんなしではこれは実現できませんでした!
Made with contrib.rocks
coraza.rule.mandatory_rule_id_check - すべてのSecRule/SecActionでidアクションが必要となる厳格なルールIDチェックを有効にします。coraza.rule.rx_prefilter - SecRxPreFilterディレクティブのデフォルト値をOnに設定します。@rxオペレーターを最適化し、入力が一致しない場合に完全な正規表現をスキップします。このビルドタグはテスト目的のみを意図しており、ランタイム設定やこの機能の詳細についてはSecRxPreFilterディレクティブに依存してください。