
Go 기반의 ModSecurity SecLang 규칙 및 OWASP Core Rule Set v4와 호환되는 웹 애플리케이션 방화벽 라이브러리로, 웹 애플리케이션 및 API를 위한 실시간 HTTP 트래픽 검사 및 공격 차단 기능을 제공합니다.
Coraza - 웹 애플리케이션 방화벽
Coraza는 오픈 소스, 엔터프라이즈급, 고성능 웹 애플리케이션 방화벽(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을 포함한 다양한 공격으로부터 웹 애플리케이션을 보호하며, 최소한의 거짓 경보를 유발합니다. CRS는 SQL Injection (SQLi), Cross Site Scripting (XSS), PHP & Java Code Injection, HTTPoxy, Shellshock, 스크립팅/스캐너/봇 탐지 및 메타데이터 및 오류 누출 등 많은 일반적인 공격 범주로부터 보호합니다. 이전 버전의 CRS는 호환되지 않습니다.
🔌 확장 가능 - Coraza는 핵심적으로 라이브러리이며, 온프레미스 웹 애플리케이션 방화벽 인스턴스를 배포하기 위한 많은 통합 기능을 제공합니다. 감사 로거, 지속성 엔진, 연산자, 작업 등을 통해 원하는 대로 Coraza를 확장할 수 있습니다.
🚀 성능 - 대규모 웹사이트부터 작은 블로그까지, 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 - 대상 환경에 FS 액세스가 없음을 나타내어 파일 본문 버퍼 등 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영업일 이내에 응답할 것입니다. 문제가 취약점으로 확인되면 보안 권고( Security Advisory )를 공개합니다. 이 프로젝트는 90일 공개 일정을 따릅니다.
기부는 기부 사이트를 참조하세요.
가장 먼저, 이 프로젝트를 시작하고 Coraza 주변에 놀라운 커뮤니티를 구축해주신 Juan Pablo Tosso님께 큰 감사를 드립니다!
오늘날 우리에게는 수많은 훌륭한 기여자가 있습니다. 여러분이 없었다면 이 모든 것이 불가능했을 것입니다!
Made with contrib.rocks
coraza.rule.mandatory_rule_id_checkidcoraza.rule.rx_prefilter - SecRxPreFilter 지시문의 기본값을 On으로 설정합니다. @rx 연산자를 최적화하여 입력이 일치할 수 없을 때 전체 정규식을 건너뜁니다. 이 빌드 태그는 테스트 목적으로만 사용되며, 런타임 구성 및 이 기능에 대한 포괄적인 문서는 SecRxPreFilter 지시문을 참조하세요.