
Go-библиотека для межсетевого экрана веб-приложений (WAF), совместимая с правилами ModSecurity SecLang и OWASP Core Rule Set v4, обеспечивающая проверку HTTP-трафика в реальном времени и блокировку атак для веб-приложений и API.
Coraza — это брандмауэр веб-приложений (WAF) с открытым исходным кодом, корпоративного уровня и высокой производительностью, готовый защитить ваши любимые приложения. Он написан на Go, поддерживает наборы правил ModSecurity SecLang и на 100% совместим с OWASP Core Rule Set v4.
Ключевые особенности:
⇲ Бесшовная замена — Coraza — это альтернативный движок, который частично совместим с TrustwaveOWASP ModSecurity Engine и поддерживает отраслевые наборы правил SecLang.
🔥 Безопасность — Coraza запускает OWASP CRS v4 (ранее известный как Core Rule Set) для защиты ваших веб-приложений от широкого спектра атак, включая OWASP Top Ten, с минимальным количеством ложных срабатываний. CRS защищает от многих распространённых категорий атак, включая: SQL-инъекции (SQLi), межсайтовый скриптинг (XSS), инъекции кода PHP и Java, 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, снижая потребление памяти и время запуска. В долгоживущих процессах, выполняющих горячую перезагрузку, используйте WAF.Close() (через experimental.WAFCloser) для освобождения кэшированных записей при уничтожении WAF, или используйте этот тег, чтобы полностью отказаться от мемоизации.no_fs_access — указывает, что целевая среда не имеет доступа к файловой системе, чтобы не использовать функциональность, связанную с файловой системой ОС, например, буферы тела файла.coraza.rule.case_sensitive_args_keys — включает чувствительное к регистру сопоставление для ключей ARGS, приводя поведение Coraza в соответствие со спецификацией RFC 3986. Будет включено по умолчанию в следующей основной версии.coraza.rule.no_regex_multiline — отключает включение по умолчанию многострочных модификаторов регулярных выражений в операторе @rx. Это соответствует ожидаемому поведению CRS, уменьшает количество ложных срабатываний и может улучшить производительность. По умолчанию многострочные регулярные выражения будут отключены в следующей основной версии. Для получения дополнительной информации см. этот PR.coraza.rule.mandatory_rule_id_check — включает строгую проверку идентификаторов правил, где действие id требуется для всех SecRule/SecAction.coraza.rule.rx_prefilter — устанавливает значение по умолчанию директивы SecRxPreFilter в On. Оптимизирует оператор @rx, пропуская полное регулярное выражение, когда ввод не может совпасть. Этот тег сборки предназначен только для целей тестирования; полагайтесь на директиву SecRxPreFilter для конфигурации времени выполнения и более подробной документации по этой функции.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-дневного срока раскрытия информации.
Для пожертвований посетите сайт пожертвований.
Прежде всего, огромное спасибо Juan Pablo Tosso за запуск этого проекта и создание замечательного сообщества вокруг Coraza!
Сегодня у нас много замечательных участников, мы не смогли бы этого сделать без вас!
Сделано с помощью contrib.rocks.