0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

slowlorisでSlow HTTP DoS攻撃を試す

Posted at

注意

必ずローカル環境で実行してください。

環境

攻撃者マシン

  • Kali Linux

ターゲットマシン

  • metasploitable2

slowlorisとは

Slow HTTP Headers Attackを用いたDos攻撃ツール。
Slow HTTP Headers Attackは、待機時間を挟みながら、長大なHTTPリクエストヘッダを送信し続けることにより、TCPセッションの占有を図る攻撃手法。

slowlorisのインストール

git clone https://github.com/gkbrk/slowloris.git

インストール後のファイル構成。
slowlorisインストール完了スクショ.png

攻撃前Webページ

metasploitable2でApache/2.2.8を動かしている。
実行前ウェブサイト.png

オプション

-p
ターゲットWebサーバーのポート。通常では80。
-s
使用するソケット数。
-v
ロギング (端末上の出力) を増加します。
-ua
リクエストごとにユーザーエージェントをランダム化します。
-x
接続には SOCKS5 プロキシを使用します。
--https
リクエストにはHTTPSを使用してください。
--sleeptime
各ヘッダーが送信されるまでのスリープ時間。

攻撃の実行

sudo python3 slowloris <target ip address> -s 500

ターミナル出力
実行中ターミナル.png

攻撃後Webページ

タイムアウト発生。
実行中ブラウザ.png

ターゲットサーバーのリソース状況

下記コマンドで接続数確認。

netstat -tan | grep ':80 ' | awk '{print $6}' | sort | uniq -c

実行前
実行前サーバーコネクション数.png
実行後
実行後サーバーコネクション数.png
コネクション数が増加していることが確認できる。

オプションを付与する

-vの場合
vオプション追加.png

-uaの場合
useragent1.png
useragent2.png
useragent3.png
User-Agentが下記リストの中からランダムに変化していることが確認できる。

slowloris.py
user_agents = [
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Safari/602.1.50",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:49.0) Gecko/20100101 Firefox/49.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Safari/602.1.50",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0",
    "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko",
    "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0",
    "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
    "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0",
]

下記の処理で-uaオプションがある時にUser-Agentをランダムにセットしている。

slowloris.py
ua = user_agents[0]
if args.randuseragent:
    ua = random.choice(user_agents)

s.send_header("User-Agent", ua)
s.send_header("Accept-language", "en-US,en,q=0.5")
return s

対策

「mod_reqtimeout」モジュールでの対策
Apache 2.2.15以降に追加された「mod_reqtimeout」モジュールを設定ファイルに追記。
リクエストのヘッダーとボディの受信時間を設定。
クライアントが時間内に送信できない場合は、408 Request Timeoutエラーが送信されるため、サービス拒否攻撃が防止できる。

今回はAlmaLinux上でApache/2.4.37を起動。
下記を追記。

/etc/httpd/conf/httpd.conf
<ifModule reqtimeout_module>
   RequestReadTimeout header=10 body=30
</ifModule>

対策はあくまで一例です。
他サイトで「mod_noloris」や「mod_antiloris」モジュールでの対策が記載されていたが、Apache/2.4では該当モジュールは実装されていない。

参考サイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?