Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

ApacheでのCGIのセキュリティ対策について【Ask_AI】

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!

【AIによる回答】

ApacheとPerlを使用したCGI環境は、古くから存在する技術であるため、セキュリティ設定が不十分だとコマンドインジェクションやパストラバーサル、情報漏洩などの攻撃を受けやすい特徴があります。特に、外部からの入力を適切に処理しないスクリプトは非常に脆弱です。

W3C +2
これに対する防衛策として、Perlコード自体の安全性向上と、Fail2banを用いた不正アクセスIPの自動ブロックを組み合わせることが効果的です。
1. Perl CGIのセキュリティ対策(根本治療)
まず、CGIスクリプト自体が安全である必要があります。
  • Taintモードの有効化 (-T スイッチ): Perlのトップ行(shebang)に #!/usr/bin/perl -T を追加し、 taint チェックを有効にします。これにより、外部からの汚染されたデータが直接コマンドやファイル操作に使われるのを防ぎます。
  • 安全なOpen関数: ファイルを開く際は、2引数ではなく3引数形式を使用し、特殊な記号を含むパスを直接開かないようにします。
  • 入力のバリデーション: 入力されたデータが想定した形式(数字のみ、英数字のみなど)であるか厳密にチェックします。
  • 外部コマンドの回避system() や exec() でシェルを呼び出すのではなく、可能な限りPerlのライブラリ関数を使用します。
  • ファイルパーミッション: CGIスクリプトは 755 (rwxr-xr-x) で設定し、誰でも書き込める(777)状態を避けます。
    www.xed.ch +5
2. Fail2banによる防御設定(自動検知・遮断)
Apacheのログを監視し、不審なCGIへのアクセスを繰り返すIPを自動でブロックします。
Fail2banの設定手順:
  1. /etc/fail2ban/filter.d/apache-cgi.conf の作成
    CGIを狙った攻撃(特にcgi-bin配下)を検出するフィルタを作成します。
    ini
    [Definition]
    failregex = ^<HOST> - - .*"(GET|POST|HEAD) /cgi-bin/.*
                ^<HOST> - - .*"(GET|POST|HEAD) /.*\.pl.*
    ignoreregex =
    

    ※攻撃パターンに合わせて、^<HOST> - - .*"(GET|POST|HEAD) /cgi-bin/.*\.cgi.* のように絞り込むことも可能です。

  2. /etc/fail2ban/jail.local の設定
    作成したフィルタを適用します。
    ini
    [apache-cgi]
    enabled = true
    port = http,https
    filter = apache-cgi
    logpath = /var/log/httpd/access_log  # または /var/log/apache2/access.log
    maxretry = 5
    findtime = 600
    bantime = 3600
    

    5分以内に5回不正なCGIアクセスがあれば、1時間ブロックする設定例。

  3. Fail2banの再起動
    systemctl restart fail2ban
3. Apacheのセキュリティ強化
  • cgi-bin の制限: 不要なスクリプトを実行させないよう、Apacheの設定ファイル(httpd.conf)で特定のディレクトリ(/cgi-bin/)以外でのCGI実行を禁止します。
  • OPTIONSの禁止: CGIディレクトリの Options ディレクティブから ExecCGI を除外する、または AllowOverride None で設定を上書きできないようにします。
これらの対策を組み合わせることで、Perl CGIへの攻撃を大幅に軽減できます。特にFail2banは、大量の脆弱性探索スキャンに対して即効性があります。
タイトルとURLをコピーしました