apacheユーザ認証(HTTP認証)への総当たり攻撃(辞書攻撃/ブルートフォースアタック)への対処

ALL
スポンサーリンク

IDやパスワードを変えて何度も接続を試みる総当たり攻撃(辞書攻撃/ブルートフォースアタック)への対処として、これまで下記を紹介しました。

SSH総当たり攻撃(辞書攻撃/ブルートフォースアタック)の対策とその効果
メールサーバへの総当たり攻撃(辞書攻撃/ブルートフォースアタック)への対処

apacheのユーザ認証(HTTP認証)を設定している場合も、sshやメールサーバと同様に辞書攻撃を受ける恐れがあります。
そこで、SSHGuard を利用した対処方法を紹介します。
以下ではその設定を説明します。なお、対象は CentOS6 + apache です。

なお、apacheのユーザ認証(HTTP認証)の設定方法については、こちらを参照して下さい。

設定

先に、SSHGuard をインストール・設定しておく必要があります。インストール・設定については、 SSH総当たり攻撃(辞書攻撃/ブルートフォースアタック)の対策とその効果 を参照してください。

以下は root で作業します。

perlを使います。無い場合は、下記でインストールします。

yum install perl

次のファイルを作成します。
メールサーバへの総当たり攻撃(辞書攻撃/ブルートフォースアタック)への対処の記事で、既に下記ファイルを作成している場合は、下記のものに内容を置き換えてください。
下記内容でメールサーバへの対処も同時に行えます。
/usr/local/sbin/log2sshguardsig.pl

#! /usr/bin/perl
use IO::Handle;
STDOUT->autoflush(1);
while( 1 ){
    $line = <STDIN>;
    if( $line =~ /authentication failure; .+ruser=(.+?) rhost=([0-9\.]+)[\r\n\s]/ ){
        # dovecot2.0
        $user = $1;
        $ip = $2;
        print "Invalid user $user from $ip\n";
    }elsif( $line =~ /Aborted login: user=<(.+?)>, method=PLAIN, rip=(.+?),/ ){
        # dovecot1.0
        $user = $1;
        $ip = $2;
        print "Invalid user $user from $ip\n";
    }elsif( $line =~ /([0-9\.]+) \- (.+?) .+? "GET.+?HTTP.+?" 401/ ){
        # apache basic/digest認証
        $user = $2;
        $ip = $1;
        print "Invalid user $user from $ip\n";
    }else{
        print "$line";
    }
}

rc.localは以下のように変更します。
/etc/rc.local

    /usr/bin/tail -n0 -F /var/log/secure /var/log/httpd/access_log /var/log/httpd/ssl_access_log | /usr/bin/perl /usr/local/sbin/log2sshguardsig.pl | /usr/local/sbin/sshguard -l - >/dev/null 2>&1 &

apacheのユーザ認証時のエラーログを、SSHGuard が認識する形式に変換して、SSHGuardに渡します。
これで、sshへの攻撃と同様に、apacheのユーザ認証への攻撃に対しても SSHGuard が反応します。

なお、iptablesへの設定変更は必要ありません。
SSH総当たり攻撃(辞書攻撃/ブルートフォースアタック)の対策とその効果に従ったインストール・設定のままで対応できます。

参考

Apacheのbasic認証とdigest認証
SSH総当たり攻撃(辞書攻撃/ブルートフォースアタック)の対策とその効果
メールサーバへの総当たり攻撃(辞書攻撃/ブルートフォースアタック)への対処
iptablesサンプル

コメント