Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
teler-waf — teler-waf — это HTTP-промежуточное программное обеспечение на Go, которое защищает локальные веб-сервисы от угроз OWASP Top 10, известных уязвимостей, злоумышленников, ботнетов, нежелательных краулеров и брутфорс-атак. | Kitploit
Инструменты/GitHubGitHub/teler-sh/teler-waf
Оборонительные ИнструментыСканеры уязвимостейОбход IDS/IPSОбход WAFВеб-безопасностьОбнаружение ВторженийНеправильная КонфигурацияБезопасность API
GitHubteler-sh/teler-waf

teler-waf

teler-waf — это HTTP-промежуточное программное обеспечение на Go, которое защищает локальные веб-сервисы от угроз OWASP Top 10, известных уязвимостей, злоумышленников, ботнетов, нежелательных краулеров и брутфорс-атак.

Репозиторий
405331 год назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Сайт

teler-waf

GoDoc codecov tests OpenSSF Scorecard Mentioned in Awesome Go

teler-waf — это комплексное решение для безопасности веб-приложений на Go. Он действует как HTTP-промежуточное ПО, предоставляя простой интерфейс для интеграции функциональности IDS с teler IDS в существующие приложения на Go. Используя teler-waf, вы можете защититься от различных веб-атак, таких как межсайтовый скриптинг (XSS) и SQL-инъекции.

Пакет поставляется со стандартным net/http.Handler, что упрощает интеграцию в маршрутизацию вашего приложения. Когда клиент отправляет запрос к маршруту, защищённому teler-waf, запрос сначала проверяется с помощью teler IDS на наличие известных вредоносных шаблонов. Если вредоносных шаблонов не обнаружено, запрос передаётся для дальнейшей обработки.

Помимо защиты от веб-атак, teler-waf также может помочь повысить общую безопасность и целостность вашего приложения. Он легко настраивается, что позволяет адаптировать его под конкретные нужды вашего приложения.

См. также:

  • teler-sh/teler: Обнаружение HTTP-вторжений в реальном времени.
  • teler-sh/teler-proxy: Прокси teler для бесшовной интеграции с teler WAF.
  • teler-sh/teler-caddy: teler Caddy интегрирует мощные функции безопасности teler WAF в веб-сервер Caddy.

Возможности

teler-waf предлагает ряд мощных функций, предназначенных для повышения безопасности ваших веб-приложений на Go:

  • HTTP-промежуточное ПО для веб-приложений на Go.
  • Интеграция функциональности teler IDS.
  • Обнаружение известных вредоносных шаблонов с помощью teler IDS.
    • Распространённые веб-атаки, такие как межсайтовый скриптинг (XSS) и SQL-инъекции и т.д.
    • CVE, охватывает известные уязвимости и эксплойты.
    • Плохие IP-адреса, например, связанные с известными злоумышленниками или ботнетами.
    • Плохие HTTP-рефереры, например, те, которые не ожидаются исходя из структуры URL приложения или известны как связанные со злоумышленниками.
    • Плохие краулеры, охватывает запросы от известных вредоносных краулеров или скраперов, которые могут вызывать проблемы с производительностью или пытаться извлечь конфиденциальную информацию из приложения.
    • Атаки перебором каталогов, например, путём перебора распространённых имён каталогов или использования словарных атак.
  • Предоставление повышенной гибкости для создания собственных пользовательских правил.
  • Возможность настройки для включения в белый список определённых типов запросов на основе их URL или заголовков.
  • Лёгкая интеграция с большинством фреймворков.
  • Высокая настраиваемость для соответствия конкретным потребностям вашего приложения.

В целом, teler-waf предоставляет комплексное решение безопасности для веб-приложений на Go, помогая защититься от веб-атак и повышая общую безопасность и целостность вашего приложения.

Установка

Зависимости:

  • gcc (GNU Compiler Collection) должен быть установлен и настроен для компиляции teler-waf.

Чтобы установить teler-waf в ваше приложение на Go, выполните следующую команду для загрузки и установки пакета teler-waf:```console go get github.com/teler-sh/teler-waf

root@kitploit:~
## Использование

> [!WARNING]
> **Уведомление о прекращении поддержки**: Исключения угроз (`Excludes`) будут удалены в предстоящем релизе (**v2**). См. [#73](https://github.com/teler-sh/teler-waf/discussions/73) и [#64](https://github.com/teler-sh/teler-waf/issues/64).

Вот пример использования teler-waf в приложении на Go:

1. Импортируйте пакет teler-waf в свой код на Go:```go
import "github.com/teler-sh/teler-waf"
  1. Используйте функцию New для создания нового экземпляра типа Teler. Эта функция принимает разнообразные необязательные параметры, которые могут быть использованы для настройки teler-waf в соответствии с конкретными потребностями вашего приложения.```go waf := teler.New()
root@kitploit:~
3. Используйте метод `Handler` экземпляра `Teler` для создания `net/http.Handler`. Этот обработчик затем может использоваться в HTTP-маршрутизации вашего приложения для применения мер безопасности teler-waf к определённым маршрутам.```go
handler := waf.Handler(http.HandlerFunc(yourHandlerFunc))
  1. Используйте handler в маршрутизации HTTP вашего приложения для применения мер безопасности teler-waf к определённым маршрутам.```go http.Handle("/path", handler)
root@kitploit:~
Вот и всё! Вы настроили teler-waf в вашем приложении Go.

**Параметры:**

Для списка параметров, доступных для настройки teler-waf, смотрите структуру [`teler.Options`](https://pkg.go.dev/github.com/teler-sh/teler-waf#Options).

### Примеры

Вот пример того, как настроить параметры и правила для teler-waf:```go
// main.go
package main

import (
	"net/http"

	"github.com/teler-sh/teler-waf"
	"github.com/teler-sh/teler-waf/request"
	"github.com/teler-sh/teler-waf/threat"
)

var myHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
	// This is the handler function for the route that we want to protect
	// with teler-waf's security measures.
	w.Write([]byte("hello world"))
})

var rejectHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
	// This is the handler function for the route that we want to be rejected
	// if the teler-waf's security measures are triggered.
	http.Error(w, "Sorry, your request has been denied for security reasons.", http.StatusForbidden)
})

func main() {
	// Create a new instance of the Teler type using the New function
	// and configure it using the Options struct.
	telerMiddleware := teler.New(teler.Options{
		// Exclude specific threats from being checked by the teler-waf.
		Excludes: []threat.Threat{
			threat.BadReferrer,
			threat.BadCrawler,
		},
		// Specify whitelisted URIs (path & query parameters), headers,
		// or IP addresses that will always be allowed by the teler-waf
		// with DSL expressions.
		Whitelists: []string{
			`request.Headers matches "(curl|Go-http-client|okhttp)/*" && threat == BadCrawler`,
			`request.URI startsWith "/wp-login.php"`,
			`request.IP in ["127.0.0.1", "::1", "0.0.0.0"]`,
			`request.Headers contains "authorization" && request.Method == "POST"`
		},
		// Specify file path or glob pattern of custom rule files.
		CustomsFromRule: "/path/to/custom/rules/**/*.yaml",
		// Specify custom rules for the teler-waf to follow.
		Customs: []teler.Rule{
			{
				// Give the rule a name for easy identification.
				Name:      "Log4j Attack",
				// Specify the logical operator to use when evaluating the rule's conditions.
				Condition: "or",
				// Specify the conditions that must be met for the rule to trigger.
				Rules: []teler.Condition{
					{
						// Specify the HTTP method that the rule applies to.
						Method: request.GET,
						// Specify the element of the request that the rule applies to
						// (e.g. URI, headers, body).
						Element: request.URI,
						// Specify the pattern to match against the element of the request.
						Pattern: `\$\{.*:\/\/.*\/?\w+?\}`,
					},
				},
			},
			{
				// Give the rule a name for easy identification.
				Name: `Headers Contains "curl" String`,
				// Specify the conditions that must be met for the rule to trigger.
				Rules: []teler.Condition{
					{
						// Specify the DSL expression that the rule applies to.
						DSL: `request.Headers contains "curl"`,
					},
				},
			},
		},
		// Specify the file path to use for logging.
		LogFile: "/tmp/teler.log",
	})

	// Set the rejectHandler as the handler for the telerMiddleware.
	telerMiddleware.SetHandler(rejectHandler)

	// Create a new handler using the handler method of the Teler instance
	// and pass in the myHandler function for the route we want to protect.
	app := telerMiddleware.Handler(myHandler)

	// Use the app handler as the handler for the route.
	http.ListenAndServe("127.0.0.1:3000", app)
}

Для большего количества примеров использования teler-waf или интеграции с любым фреймворком, загляните в каталог examples/.

Пользовательские правила

[!TIP] Если вы хотите изучить конфигурации, углубиться в создание пользовательских правил и составление DSL-выражений, вы можете попрактиковаться и получить практический опыт, используя эту песочницу teler WAF. Здесь вы также можете симулировать запросы, настроенные для удовлетворения конкретных потребностей вашего приложения.

Чтобы интегрировать пользовательские правила в промежуточное ПО teler-waf, у вас есть два варианта: Customs и CustomsFromFile. Эти опции обеспечивают гибкость для создания собственных проверок безопасности или переопределения стандартных проверок, предоставляемых teler-waf.

  • Опция Customs

Вы можете определить пользовательские правила напрямую с помощью опции Customs, как показано в примере выше.

В опции Customs вы предоставляете массив структур teler.Rule. Каждая структура teler.Rule представляет пользовательское правило с уникальным именем и условием, которое определяет, как вычисляются отдельные условия внутри правила (or или and). Правило состоит из одной или нескольких структур teler.Condition, каждая из которых определяет конкретное условие для проверки. Условия могут основываться на HTTP-методе, элементе (заголовки, тело, URI или любой), а также на regex-шаблоне или DSL-выражении для сопоставления.

  • Опция CustomsFromFile

В качестве альтернативы, опция CustomsFromFile позволяет загружать пользовательские правила из внешних файлов, обеспечивая еще большую гибкость и удобство управления. Эти правила могут быть определены в формате YAML, причем каждый файл может содержать одно или несколько правил. Вот пример структуры YAML, представляющей пользовательское правило:```yaml

  • name: condition: # Valid values are: "or" or "and", in lowercase or uppercase. rules:
    • method: # Valid methods are: "ALL", "CONNECT", "DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT", and "TRACE". Please refer to https://pkg.go.dev/github.com/teler-sh/teler-waf/request for further details. element: # Valid elements are: "headers", "body", "uri", and "any", in lowercase, uppercase, or title case (except for "uri"). pattern: "" # Regular expression pattern
    • dsl: "" # DSL expression
root@kitploit:~
> [!IMPORTANT]
> Обратите внимание, что параметры `condition`, `method` и `element` являются необязательными. Значения по умолчанию, присвоенные им, следующие: `condition` установлен в **or**, `method` установлен в **ALL**, а `element` установлен в **ANY**. Поэтому, при желании, вы можете оставить эти параметры пустыми. Параметр `pattern` является обязательным, если только вы не укажете выражение `dsl`. В таких случаях, когда указано выражение `dsl`, teler-waf игнорирует любые значения, присвоенные `method` и `element`, даже если они определены. Чтобы увидеть некоторые примеры, вы можете обратиться к каталогу [`tests/rules/`](https://github.com/teler-sh/teler-waf/tree/master/tests/rules/valid).

Вы можете указать параметр `CustomsFromFile` с фактическим путем к файлу или шаблоном glob, указывающим на расположение ваших пользовательских файлов правил. Например:```go
// Create a new instance of the Teler middleware and
// specify custom rules with the CustomsFromFile option.
telerMiddleware := teler.New(teler.Options{
    CustomsFromFile: "/path/to/custom/rules/**/*.yaml",
})

С помощью CustomsFromFile вы указываете путь к файлу или шаблон glob, где находятся ваши файлы пользовательских правил. Шаблон может включать подстановочные знаки для сопоставления с несколькими файлами или с каталогом и его подкаталогами. Каждый файл должен содержать одно или несколько пользовательских правил, определенных в правильном формате YAML.

Используя опцию Customs, CustomsFromFile или обе, вы можете легко интегрировать свои пользовательские правила в промежуточное ПО teler-waf, расширяя его возможности безопасности в соответствии с вашими конкретными требованиями.

DSL Expression

DSL (предметно-ориентированный язык) выражения предоставляют мощный способ определения условий, используемых для оценки входящих запросов в контексте пользовательских правил или белых списков. С помощью DSL выражений вы можете создавать сложные и целенаправленные условия на основе различных атрибутов входящих запросов. Вот несколько иллюстративных примеров кода DSL выражений:

Примеры кода DSL выражений:

Проверьте, содержит ли заголовок входящего запроса "curl":```sql request.Headers contains "curl"

root@kitploit:~
Проверьте, является ли входящий метод запроса "GET":```sql
request.Method == "GET"

Проверьте, является ли метод входящего запроса "GET" или "POST", используя регулярное выражение, оператор matches:```sql request.Method matches "^(POS|GE)T$"

root@kitploit:~
Проверьте, является ли IP-адрес входящего запроса адресом localhost:```sql
request.IP in ["127.0.0.1", "::1", "0.0.0.0"]

Проверьте, содержит ли какой-либо элемент в запросе строку "foo":```console one(request.ALL, # contains "foo")

root@kitploit:~
Проверьте, содержит ли тело входящего запроса "foo":```sql
request.Body contains "foo"

Проверьте, является ли текущая анализируемая категория угрозы bad crawler или directory bruteforce:```sql threat in [BadCrawler, DirectoryBruteforce]

root@kitploit:~
Эти примеры дают представление о выразительных возможностях DSL-выражений, позволяя вам задавать сложные условия на основе различных атрибутов запроса. Используя эти выражения, вы можете эффективно определять критерии для оценки входящих запросов и соответствующим образом настраивать свои пользовательские правила или белые списки, обеспечивая детальный контроль над поведением вашего приложения.

#### Доступные переменные

При работе с DSL-выражениями у вас есть доступ к различным переменным, которые предоставляют ценную информацию о входящих запросах и анализируемой категории угроз. Вот подробное описание доступных переменных:

- **Категория угрозы**

    Все константные идентификаторы типа `threat.Threat` могут использоваться в качестве допустимых переменных. Эти идентификаторы представляют различные категории угроз, актуальные для вашего анализа.

- **`request`**

    Переменная `request` представляет входящий запрос и предоставляет доступ к его полям и соответствующим значениям. Внутри переменной `request` доступны следующие подпеременные:

  - `request.URI`: Представляет URI входящего запроса, включая путь, запросы, параметры и фрагменты.
  - `request.Headers`: Представляет заголовки входящего запроса, представленные в несколько строк.
  - `request.Body`: Представляет тело входящего запроса.
  - `request.Method`: Представляет метод входящего запроса.
  - `request.IP`: Представляет IP-адрес клиента, связанный с входящим запросом.
  - `request.ALL`: Представляет все строковые значения из указанных выше полей запроса в виде среза.

- **`threat`**

    Переменная `threat` представляет анализируемую категорию угрозы. Она имеет тип `threat.Threat` и позволяет оценивать и принимать решения на основе конкретной категории угрозы, связанной с запросом.

Используя эти переменные в своих DSL-выражениях, вы можете эффективно получать доступ к атрибутам входящих запросов и управлять ими, а также оценивать соответствующие категории угроз. Это позволяет вам создавать пользовательские условия правил<!--и белые списки-->, настроенные под ваш конкретный случай использования.

#### Доступные функции

Кроме того, у вас есть доступ к различным функциям. Эти функции включают как [встроенные функции](https://expr.medv.io/docs/Language-Definition#built-in-functions), предоставляемые пакетом expr, так и функции, специально определённые в пакете DSL. Функции используют возможности, предоставляемые встроенным пакетом `strings` языка Go. Вот подробный список доступных функций:

- `cidr`: Получить все IP-адреса в диапазоне по заданному CIDR.
- `clone`: Создать копию строки.
- `containsAny`: Проверить, содержит ли строка какие-либо из указанных подстрок.
- `equalFold`: Сравнить две строки без учёта регистра.
- `hasPrefix`: Проверить, имеет ли строка указанный префикс.
- `hasSuffix`: Проверить, имеет ли строка указанный суффикс.
- `join`: Объединить несколько строк с помощью указанного разделителя.
- `repeat`: Повторить строку указанное количество раз.
- `replace`: Заменить вхождения подстроки внутри строки.
- `replaceAll`: Заменить все вхождения подстроки внутри строки.
- `request`: Получить доступ к информации, специфичной для запроса, в рамках DSL-выражения.
- `threat`: Получить доступ к информации, связанной с анализируемой категорией угрозы.
- `title`: Преобразовать строку в заголовочный регистр (первая буква каждого слова заглавная).
- `toLower`: Преобразовать строку в нижний регистр.
- `toTitle`: Преобразовать строку в заголовочный регистр.
- `toUpper`: Преобразовать строку в верхний регистр.
- `toValidUTF8`: Преобразовать строку в строку, закодированную в допустимом UTF-8.
- `trim`: Удалить начальные и конечные пробелы из строки.
- `trimLeft`: Удалить начальные пробелы из строки.
- `trimPrefix`: Удалить указанный префикс из строки.
- `trimRight`: Удалить конечные пробелы из строки.
- `trimSpace`: Удалить начальные и конечные пробелы и сжать последовательные пробелы внутри строки.
- `trimSuffix`: Удалить указанный суффикс из строки.

Более подробную информацию об операторах и встроенных функциях см. в [документации Expr](https://expr.medv.io/docs/Getting-Started). Она представляет собой всестороннее руководство по использованию операторов и изучению доступных встроенных функций в ваших DSL-выражениях.

### Упрощённое управление конфигурацией

Для эффективной настройки необходимо определить ряд параметров, включая белые списки, определения пользовательских правил, настройки журналирования и другие параметры. Пакет [`option`](https://pkg.go.dev/github.com/teler-sh/teler-waf/option) упрощает этот процесс конфигурирования, позволяя эффективно десериализовать или загружать данные конфигурации из форматов JSON и YAML в формат, который teler-waf может легко понять и применить.```go
// Load configuration from a YAML file.
opt, err := option.LoadFromYAMLFile("/path/to/teler-waf.conf.yaml")
if err != nil {
    panic(err)
}

// Create a new instance of the Teler type with
// the loaded options.
telerMiddleware := teler.New(opt)

Разработка

По умолчанию teler-waf кэширует все входящие запросы на 15 минут и очищает их каждые 20 минут для повышения производительности. Однако, если вы всё ещё настраиваете параметры в соответствии с требованиями вашего приложения, вы можете отключить кэширование во время разработки, установив для опции режима разработки значение true. Это предотвратит кэширование входящих запросов и может быть полезно для целей отладки.```go // Create a new instance of the Teler type using // the New function & enable development mode option. telerMiddleware := teler.New(teler.Options{ Development: true, })

root@kitploit:~
### Журналы

Вот пример того, как будут выглядеть строки журнала, если teler-waf обнаружит угрозу в запросе:```json
{"level":"warn","ts":1672261174.5995026,"msg":"bad crawler","id":"654b85325e1b2911258a","category":"BadCrawler","caller":"teler-waf","listen_addr":"127.0.0.1:36267","request":{"method":"GET","path":"/","ip_addr":"127.0.0.1:37702","headers":{"Accept":["*/*"],"User-Agent":["curl/7.81.0"]},"body":""}}
{"level":"warn","ts":1672261175.9567692,"msg":"directory bruteforce","id":"b29546945276ed6b1fba","category":"DirectoryBruteforce","caller":"teler-waf","listen_addr":"127.0.0.1:36267","request":{"method":"GET","path":"/.git","ip_addr":"127.0.0.1:37716","headers":{"Accept":["*/*"],"User-Agent":["X"]},"body":""}}
{"level":"warn","ts":1672261177.1487508,"msg":"Detects common comment types","id":"75412f2cc0ec1cf79efd","category":"CommonWebAttack","caller":"teler-waf","listen_addr":"127.0.0.1:36267","request":{"method":"GET","path":"/?id=1%27%20or%201%3D1%23","ip_addr":"127.0.0.1:37728","headers":{"Accept":["*/*"],"User-Agent":["X"]},"body":""}}

id — это уникальный идентификатор, который генерируется, когда запрос отклоняется teler-waf. Он включается в заголовки HTTP-ответа запроса (X-Teler-Req-Id) и может использоваться для устранения неполадок с запросами, выполняемыми к веб-сайту.

Например, если запрос к веб-сайту возвращает код ошибки HTTP, такой как 403 Forbidden, идентификатор запроса teler может быть использован для определения конкретного запроса, вызвавшего ошибку, и помочь в устранении неисправности.

Идентификаторы запросов teler используются teler-waf для отслеживания запросов к его веб-приложению и могут быть полезны для отладки и анализа шаблонов трафика на веб-сайте.

Пользовательский ответ

По умолчанию teler-waf использует DefaultHTMLResponse в качестве стандартного ответа, когда запрос отклоняется или блокируется. Однако teler-waf предлагает высокую степень настройки, позволяя вам адаптировать ответ под ваши конкретные требования. Настройка может быть выполнена с помощью опций Status, HTML или HTMLFile, все из которых являются частью интерфейса Response.

Вот как вы можете использовать эти опции в своем коде:```go // Create a new instance of the Teler middleware telerMiddleware := teler.New(teler.Options{ // Customize the response for rejected requests Response: teler.Response{ Status: 403, HTML: "Your request has been denied for security reasons. Ref ID: {{ID}}.", // Alternatively, you can use HTMLFile to point to a custom HTML file HTMLFile: "/path/to/custom-403.html", }, })

root@kitploit:~
С таким уровнем настройки вы можете создавать персонализированные и информативные ответы, которые будут отображаться при блокировке или отклонении запроса teler-waf. Опция `HTML` позволяет напрямую указать нужный HTML-контент в виде строки, а опция `HTMLFile` даёт возможность ссылаться на внешний файл, содержащий пользовательский HTML-ответ.

Кроме того, для улучшения пользовательского опыта вы можете использовать плейсхолдеры в вашем HTML-контенте для создания динамических элементов. Во время выполнения эти плейсхолдеры будут заменены реальными значениями, что позволит получать более контекстуально релевантные ответы. Доступные и поддерживаемые плейсхолдеры включают:

* `{{ID}}`: Идентификаторы запросов, позволяющие уникально идентифицировать каждый отклонённый запрос.
* `{{message}}`: Сообщения об отклонении, передающие причину блокировки запроса.
* `{{threat}}`: Категории угроз, предоставляющие информацию об обнаруженной угрозе безопасности.

Включая эти плейсхолдеры, вы можете создавать подробные и всесторонние ответы, которые эффективно сообщают обоснование отклонения или блокировки запросов.

### Falco Sidekick

[Falco Sidekick](https://github.com/falcosecurity/falcosidekick) — это инструмент, который получает события от Falco, проекта с открытым исходным кодом в области безопасности времени выполнения для облачных сред, и отправляет их в различные выходные каналы. Он позволяет пересылать оповещения безопасности в различные сторонние системы, такие как Slack, Elasticsearch, Loki, Grafana, Datadog и [другие](https://github.com/falcosecurity/falcosidekick#outputs). Это позволяет командам безопасности эффективно отслеживать и реагировать на угрозы и события безопасности в реальном времени.

Интеграция Falco Sidekick с teler-waf также возможна. Используя опцию `FalcoSidekickURL`, вы можете настроить teler-waf на отправку событий в Falco Sidekick, который будет получать и обрабатывать их за вас. Для этого просто создайте новый экземпляр типа `Teler` с помощью функции `New` и укажите в опции `FalcoSidekickURL` URL вашего экземпляра Falco Sidekick. Например:```go
// Create a new instance of the Teler type using
// the New function & integrate Falco Sidekick.
telerMiddleware := teler.New(teler.Options{
	FalcoSidekickURL: "http://localhost:2801",
})

После настройки этой интеграции любые угрозы, обнаруженные teler-waf, будут отправляться в Falco Sidekick, который затем сможет предпринять соответствующие действия в зависимости от вашей конфигурации. Например, вы можете настроить Falco Sidekick на автоматическую отправку предупреждений вашей команде реагирования на инциденты.

Событие Falco Sidekick от teler-waf

Событие

Событие, пересылаемое экземпляру Falco Sidekick, включает следующую информацию:

  • output: Представляет собой сообщение предупреждения.
  • priority: Приоритет всегда обозначается как warning, что указывает на срочность, связанную с событиями безопасности.
  • rule: Указывает конкретное правило (сообщение), которое совпало с соответствующим запросом.
  • time: Временная метка создания события.
  • Поля вывода:
    • teler.caller: Определяет источник приложения, вызвавшего teler-waf.
    • teler.id: Представляет уникальный идентификатор отклоненного запроса.
    • teler.threat: Указывает категорию угрозы.
    • teler.listen_addr: Обозначает сетевой адрес, на котором teler-waf прослушивает входящие запросы.
      • request.body: Содержит тело соответствующего запроса.
      • request.headers: Перечисляет заголовки соответствующего запроса.

В целом, Falco Sidekick — это универсальный инструмент, который может помочь автоматизировать процесс реагирования на инциденты безопасности и улучшить общую защиту. Используя его возможности, вы можете гарантировать, что ваши облачные приложения защищены от потенциальных угроз.

Wazuh

Вы можете улучшить мониторинг безопасности, интегрировав журналы teler WAF в Wazuh. Для этого используйте пользовательские правила, доступные в каталоге extras/.

Добавьте блок элемента localfile ниже внутрь элемента ossec_config в файл локальной конфигурации:```xml <ossec_config>

syslog /path/to/your/teler.log ``` > [!NOTE] > Значение `location` должно быть путем к файлу журнала teler WAF, указанному вами в [`Options.LogFile`](https://pkg.go.dev/github.com/teler-sh/teler-waf#Options.LogFile).

Сделав это, Wazuh сможет читать и анализировать журналы teler WAF, улучшая защиту вашей сети и предоставляя более полную аналитику.

Наборы данных

Пакет teler-waf использует набор данных об угрозах для идентификации и анализа каждого входящего запроса на предмет потенциальных угроз безопасности. Этот набор данных обновляется ежедневно, что означает, что у вас всегда будет актуальный ресурс. Набор данных изначально сохраняется в кэш-каталоге на уровне пользователя (в Unix-системах возвращается $XDG_CACHE_HOME/teler-waf в соответствии с XDG Base Directory Specification, если он не пуст, иначе $HOME/.cache/teler-waf. На Darwin возвращается $HOME/Library/Caches/teler-waf. На Windows возвращается %LocalAppData%/teler-waf. На Plan 9 возвращается $home/lib/cache/teler-waf) при первом запуске. При последующих запусках будет использоваться кэшированный набор данных, а не загружаться заново.

[!NOTE] Наборы данных об угрозах получены из репозитория teler-sh/teler-resources.

Однако могут возникнуть ситуации, когда вы захотите отключить автоматическое обновление набора данных об угрозах. Например, у вас может быть медленное или ограниченное интернет-соединение, или вы можете использовать машину с ограниченным доступом к файлам. В таких случаях вы можете установить параметр NoUpdateCheck в значение true, что предотвратит автоматическое обновление набора данных teler-waf.

[!CAUTION] Включение InMemory имеет приоритет и гарантирует, что автоматические обновления остаются включенными.```go // Create a new instance of the Teler type using the New // function & disable automatic updates to the threat dataset. telerMiddleware := teler.New(teler.Options{ NoUpdateCheck: true, })

root@kitploit:~
Наконец, могут возникнуть случаи, когда необходимо загрузить набор данных об угрозах в память, а не сохранять его в кэш-директорию на уровне пользователя. Это может быть особенно полезно, если вы запускаете приложение или сервис в образе distroless или runtime, где доступ к файлам может быть ограничен или медленным. В таком сценарии вы можете установить опцию **InMemory** в `true`, что загрузит набор данных об угрозах в память для более быстрого доступа.```go
// Create a new instance of the Teler type using the
// New function & enable in-memory threat datasets store.
telerMiddleware := teler.New(teler.Options{
	InMemory: true,
})

[!CAUTION] Это также может потреблять больше системных ресурсов, поэтому стоит учесть компромиссы перед принятием такого решения.

Ресурсы

  • teler WAF tester! — Вы можете свободно использовать следующий сайт для тестирования: https://test.teler.sh.
  • teler WAF playground — Симулируйте свои запросы, адаптированные под конкретные нужды вашего приложения: https://play.teler.sh.

Безопасность

Если вы обнаружите проблему безопасности, пожалуйста, сообщите о ней немедленно — мы серьезно относимся к безопасности!

Сообщение об уязвимости

Если у вас есть информация о проблеме безопасности или уязвимости в этом пакете teler-waf, и/или вы можете успешно выполнить, например, межсайтовый скриптинг (XSS) и вызвать всплывающее предупреждение на нашем демо-сайте (см. ресурсы), пожалуйста, НЕ создавайте публичный issue — вместо этого любезно отправьте свой отчет приватно через форму сообщения об уязвимости.

Ограничения

Вот некоторые ограничения использования teler-waf:

  • Накладные расходы на производительность: teler-waf может вносить некоторые накладные расходы на производительность, так как он будет обрабатывать каждый входящий запрос. Если у вас большой объем трафика, это может значительно замедлить общую производительность вашего приложения. См. бенчмарк ниже:```console $ go test -bench "^BenchmarkAnalyze" -cpu=4 goos: linux goarch: amd64 pkg: github.com/teler-sh/teler-waf cpu: 11th Gen Intel(R) Core(TM) i9-11900H @ 2.50GHz BenchmarkAnalyzeDefault-4 266018 4018 ns/op 2682 B/op 74 allocs/op BenchmarkAnalyzeCommonWebAttack-4 374410 3126 ns/op 2090 B/op 68 allocs/op BenchmarkAnalyzeCVE-4 351668 3296 ns/op 2402 B/op 68 allocs/op BenchmarkAnalyzeBadIPAddress-4 416152 2967 ns/op 1954 B/op 63 allocs/op BenchmarkAnalyzeBadReferrer-4 410858 3033 ns/op 2098 B/op 64 allocs/op BenchmarkAnalyzeBadCrawler-4 346707 2964 ns/op 1953 B/op 63 allocs/op BenchmarkAnalyzeDirectoryBruteforce-4 377634 3062 ns/op 1953 B/op 63 allocs/op BenchmarkAnalyzeCustomRule-4 432568 2594 ns/op 1954 B/op 63 allocs/op BenchmarkAnalyzeWithoutCommonWebAttack-4 354930 3460 ns/op 2546 B/op 69 allocs/op BenchmarkAnalyzeWithoutCVE-4 304500 3491 ns/op 2234 B/op 69 allocs/op BenchmarkAnalyzeWithoutBadIPAddress-4 288517 3924 ns/op 2682 B/op 74 allocs/op BenchmarkAnalyzeWithoutBadReferrer-4 298168 3667 ns/op 2538 B/op 73 allocs/op BenchmarkAnalyzeWithoutBadCrawler-4 276108 4023 ns/op 2682 B/op 74 allocs/op BenchmarkAnalyzeWithoutDirectoryBruteforce-4 276699 3627 ns/op 2682 B/op 74 allocs/op PASS ok github.com/teler-sh/teler-waf 32.093s
root@kitploit:~
> [!NOTE]
> Результаты бенчмаркинга могут варьироваться и могут быть непостоянными. Набор данных [teler-resources](https://github.com/teler-sh/teler-resources) мог увеличиться с тех пор, что может повлиять на результаты.

- **Сложность настройки**: Настройка teler-waf для удовлетворения специфических потребностей вашего приложения может быть сложной и может требовать определенного уровня экспертизы в веб-безопасности. Это может затруднить правильную настройку и использование teler-waf для тех, кто не знаком с брандмауэрами приложений и системами IDS.
- **Ограниченная защита**: teler-waf не является идеальным решением безопасности и может не защитить от всех возможных типов атак. Как и в случае с любой системой безопасности, важно регулярно отслеживать и обслуживать teler-waf, чтобы убедиться, что он обеспечивает желаемый уровень защиты.

#### Known Issues

Чтобы просмотреть список известных проблем с teler-waf, отфильтруйте проблемы по метке ["known-issue"](https://github.com/teler-sh/teler-waf/issues?q=is%3Aopen+is%3Aissue+label%3Aknown-issue).

## Community

Мы используем Google Groups в качестве нашей выделенной почтовой рассылки. Подпишитесь на [teler-announce](https://groups.google.com/g/teler-announce) через [[email protected]](mailto:[email protected]), чтобы получать важные объявления, такие как доступность новых версий. Эта подписка будет держать вас в курсе значительных разработок, связанных с [teler IDS](https://github.com/teler-sh/teler), [teler WAF](https://github.com/teler-sh/teler-waf), [teler Proxy](https://github.com/teler-sh/teler-proxy), [teler Caddy](https://github.com/teler-sh/teler-caddy) и [teler Resources](https://github.com/teler-sh/teler-resources).

Любые [запросы](https://github.com/teler-sh/teler-waf/discussions/categories/q-a), [обсуждения](https://github.com/teler-sh/teler-waf/discussions) или [проблемы](https://github.com/teler-sh/teler-waf/issues) отслеживаются здесь, на GitHub. Именно здесь мы активно управляем и решаем эти аспекты взаимодействия с сообществом.

## License

Этот пакет предоставляется под двойной лицензией: [Apache License 2.0](https://github.com/teler-sh/teler-waf/blob/HEAD/LICENSE-APACHE) и [Elastic License 2.0 (ELv2)](https://github.com/teler-sh/teler-waf/blob/HEAD/LICENSE-ELASTIC) (для основного пакета **teler**).

Вы можете свободно использовать его внутри своей организации для защиты своих приложений. Однако вы не можете использовать основной пакет для создания облачного, хостингового или управляемого сервиса, а также в коммерческих целях, поскольку для этого потребуется коммерческая лицензия – хотя этот вариант в настоящее время недоступен. Если вы заинтересованы в получении этой коммерческой лицензии для использования, не разрешенного [ELv2](https://github.com/teler-sh/teler-waf/blob/HEAD/LICENSE-ELASTIC), свяжитесь с **@dwisiswant0**.

teler-waf и любые вклады охраняются авторским правом © Dwi Siswanto, 2022-2024.
Скачать инструмент
  • request.ip_addr: Раскрывает IP-адрес соответствующего запроса.
  • request.method: Указывает HTTP-метод, использованный в соответствующем запросе.
  • request.path: Относится к пути соответствующего запроса.