3
回編集
差分
編集の要約なし
11 6424 DROP udp -- any any xxx.xxx.xxx.xx anywhere udp dpt:5060
のようなDROPのエントリが追加されているはずです。
==INVITEによるBrute force攻撃への対策==
REGISTERメッセージによる攻撃以外に、INVITEによるBrute force攻撃も確認されています。
この攻撃時に出力されるログメッセージは以下のようなものになります。
Failed to authenticate user "Anonymous" <sip:anonymous@192.168.1.2>;tag=as105e401c
このログメッセージの攻撃元IPアドレスが、FROMヘッダに記載されているIPアドレスになっています。
このままでは、NAT配下のサーバーからの攻撃や、FROMヘッダが偽装された場合にfail2banで対応することができません。
そこで、Asteriskへパッチを当てて、実際の攻撃元IPアドレスを表示するように修正します。
===Asteriskへパッチを当てる===
次のようなパッチをAsteriskに適用します。
このパッチはAsterisk-1.4.40を対象にしていますが、1.6系、1.8系にも同様の修正で対応できます。
--- asterisk-1.4.40.orig/channels/chan_sip.c 2011-01-05 02:11:48.000000000 +0900
+++ asterisk-1.4.40/channels/chan_sip.c 2011-03-10 17:59:26.000000000 +0900
@@ -15456,7 +15456,7 @@
ast_log(LOG_NOTICE, "Sending fake auth rejection for user %s\n", get_header(req, "From"));
transmit_fake_auth_response(p, SIP_INVITE, req, XMIT_RELIABLE);
} else {
- ast_log(LOG_NOTICE, "Failed to authenticate user %s\n", get_header(req, "From"));
+ ast_log(LOG_NOTICE, "Failed to authenticate user %s (%s:%d)\n", get_header(req, "From"), ast_inet_ntoa(sin->sin_addr), ntohs(sin->sin_port));
transmit_response_reliable(p, "403 Forbidden", req);
}
p->invitestate = INV_COMPLETED;
パッチを当てて、Asteriskをコンパイルし直し、再起動します。
すると、先ほどの攻撃時のログは以下のように出力されるようになります。
Failed to authenticate user "Anonymous" <sip:anonymous@192.168.1.2>;tag=as105e401c (123.45.67.89:5060)
ログの( )内に攻撃元の実IPアドレスが表示されるようになり、これを元にfail2banで攻撃を検知することができます。
===fail2banへ設定を追加===
修正したログに合わせたフィルタ設定をfail2banに追加します。
/etc/fail2ban/filter.d/asterisk.conf の failregex の項目に以下を追加します。
NOTICE.* .*: Failed to authenticate user .* \(<HOST>:.*\)
フィルタ追加後、fail2banを再起動し設定完了です。
[[Category:セキュリティ]]