DOS攻撃ってなんだろう
Dos(Denial of Service)攻撃はサービス使用不能攻撃。
つまり過負荷をかけてサーバーをフリーズさせたりダウンさせる性質の攻撃です。
ソフトウェアの脆弱性を利用したものから、規約違反のプログラムによるメモリへの負荷書き換え
奇形パケットを送り想定外の動きをさせるなど様々です。
更に踏み台となる無数のPCやサーバーを使ったDDoS(Distributed Dos)攻撃があります。
サイバー攻撃マップはサイバー攻撃を可視化したものです。
常にサーバーやその中のサーバーソフトウェアが世界中から
攻撃を受けている事がとてもよくわかります。
SYN Flood対策及び各サービスへの対応
通信はマシンとマシンで掛け合いを行って通信しています。
Aサーバー『通信したいです、同期お願いします!(SYN)』
Bサーバー『いいよ、通信する為に同期準備ができたよ(SYN/ACK)』
Aサーバー『こっちも通信する為に同期準備ができました(ACK)』
この通信の為のやり取りを
まるで3本の手で握手しているように見えるので『3ハンドシェイク』といいます。
2人の暗黙の了解を悪用してみます。
A『通信したいです、同期お願いします!(SYN)』
B『いいよ、通信する同期準備ができたよ(SYN/ACK)』
A『通信したいです、同期お願いします!(SYN)』
B『?(早くACK送って欲しいな)』
A『通信したいです、同期お願いします!(SYN)』
A『通信したいです、同期お願いします!(SYN)』
A『通信したいです、同期おn(略) (SYN)』
B『????』
A『通信したいです、同k(略) (SYN)』
B『・・・』
このようにBさんはメモリに負荷がかかり
どうしていいかわからずフリーズしています。
これがSYN Flood攻撃です。Floodとは洪水を意味します。
CentOSではsysctlにSYN Floodへの対策が用意されているので利用します。
1 2 3 4 |
# vi /etc/sysctl.conf # Controls the use of TCP syncookies net.ipv4.tcp_syncookies = 1 |
1とあれば有効になっています。
SYNクッキーを試用してACKに含まれる確認応答番号を確認してから処理を行うことで
無駄な処理でコネクションなどのリソースを使う事防ぎます。
またiptablesも編集してみます。
1 |
# vi /etc/sysconfig/iptables |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#-------------------SYN flood/DDoS関連防御--------------------------# #TCPのうちsynフラッグが立ってないパケットを廃棄 -A INPUT -p tcp ! --syn -m state --state NEW -j DROP #TCP成りすまし攻撃になる事への防御 -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset #確立された接続のパケット、既存の接続に関するパケットの受信許可 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #確立された接続のパケットの送信、接続要求の送信を許可 -A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT #全ホスト(ブロードキャスト、マルチキャスト)宛パケットは破棄 -A INPUT -d 255.255.255.255 -j DROP -A INPUT -d 224.0.0.1 -j DROP #----------------------------------------------------------# #--------DNS関連防御-------# -A INPUT -p udp --dport 53 -i eth0 -j DROP -A INPUT -p udp -m state --state NEW --dport 53 -i eth0 -m hashlimit --hashlimit-burst 5 --hashlimit 1/m --hashlimit-mode srcip --hashlimit-htable-expire 120000 --hashlimit-name named-limit -j ACCEPT #--------------------------# #--------FTP防御-------# -A INPUT -p udp --dport 20 -i eth0 -j DROP -A INPUT -p udp -m state --state NEW --dport 20 -i eth0 -m hashlimit --hashlimit-burst 5 --hashlimit 1/m --hashlimit-mode srcip --hashlimit-htable-expire 120000 --hashlimit-name named-limit -j ACCEPT -A INPUT -p udp --dport 21 -i eth0 -j DROP -A INPUT -p udp -m state --state NEW --dport 21 -i eth0 -m hashlimit --hashlimit-burst 5 --hashlimit 1/m --hashlimit-mode srcip --hashlimit-htable-expire 120000 --hashlimit-name named-limit -j ACCEPT #--------------------------# # Ping of Death攻撃対策 1秒間に4回送られてくるpingパケットは破棄 -A INPUT -m limit --limit 1/s --limit-burst 4 -j DROP |
1 |
# service iptables restart |
【オプション内容】
- -m hashlimit :hashlimitモジュールの利用
- –hashlimit-name t_sshd :ハッシュテーブル名の指定
- –hashlimit 1/m :1分間に1回
- –hashlimit-burst 1 :最大1回
- –hashlimit-mode srcip :送信元アドレスでリクエスト数を管理する
- –hashlimit-htable-expire 120000 :管理テーブル中のレコードの有効期間(単位:ms)
smurf攻撃対策
たくさんの問い合わせによって過負荷を与える攻撃です。
対策にはたくさんの問い合わせを受け付けないようにします。
255(ブロードキャスト)からのping応答を受け付けないようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# vi /etc/sysctl.conf # smurf攻撃防御 ブロードキャストping無視 net.ipv4.icmp_echo_ignore_broadcasts=1 # ICMPリダイレクトパケットを拒否 net.ipv4.conf.$dev.accept_redirects=0 #ソースルーティングパケット無効化、転送不可、マルチキャストパケット転送不可 net.ipv4.conf.all.accept_source_route=0 net.ipv4.conf.all.forwarding=0 net.ipv4.conf.all.mc_forwarding=0 |
プルートフォースアタック対策
パソコンの力を利用して1秒間に無数のログインを繰り返します。
よく設定されやすいパスワード辞書を使ったものから、ランダムな力づくのものまで。
パスワードを『1234』に固定にして
ユーザー名を高速で回転させてログインを繰り返す
リバースプルートフォースまであり、航空会社のサイトに不正ログインを行い
マイルをギフト券に変えられてしまう事件などが多発しています。
- SSHには公開鍵認証
- パスワードは長く、記号などを含める
- fail2banやSWATCHなどのフィルターやiptablesファイアウォールで動的にブロック
- logwatchやNagiosによるログ監視、グラフによる各サービスの監視
- 一定数間違ったIPに対してアカウントロック
バッファオーバーフロー対策
バッファオーバーフロー
http://www.geocities.jp/sugachan1973/doc/funto44.html
メモリに負荷をかけて溢れさせて、溢れでたデータを実行させてしまいます。
パスワードが知られなくても攻撃を成功させてしまうと管理権を掌握されてしまいます。恐ろしい。
Exec-Shield
特定のメモリー領域から命令を実行できないようにするLinuxの機能。
不正侵入を行う手段の1つであるバッファ・オーバーフロ-攻撃に
対して有効な防御機能です。
sysctlに対して設定を行います。
1 2 3 4 |
# vi /etc/sysctl.conf # バッファオーバフロー攻撃防御 2=基本有効(実行ファイルごとに有効にする) kernel.exec-shield = 2 |
1:基本無効(有効ではあるが弱い)
0:無効
2:基本有効(実行ファイルごとに有効にする。スタック領域上命令コードの実行も不可)
3:基本的に有効(実行ファイルごとに無効にする)
sysctlを反映させる為に再起動が必要です。
1 |
# reboot |
私たちができること
CloudFlareを利用する
@see https://www.cloudflare.com/
CloudFlareをフロントに置くことで簡単に分散が出来ます。導入も簡単です٩(๑❛ᴗ❛๑)۶
クラウドフレアを通してアクセスするだけで、
SQLインジェクションやDos攻撃、脆弱性を突いた不正アクセスを遮断。
コンテンツの自動キャッシュも行うため、サイトの安定感がアップいたします。
@see https://www.tsukaeru.net/support/support-pack/201312/4464/
いくつか紹介させて頂きました。
優れたセキュリティを誇るIDSアプライアンスもありますが
それも万全ではなくセキュリティに関しての対策はいたちごっこです。
未だにDDoS攻撃に対して万能の対策はなく毎日世界中で絶えず無数のサーバや
大手企業の大規模ネットワークでさえサービス提供不能にされる事もあります。
また『ゼロデイ』と言われるクラッカーが見つけたばかりのほやほやの脆弱性を狙った攻撃もあります。
そんな状況下でも安定したサービス提供の為に考えうる対策を施し
最善を希求し続けていかなければなりません。