Apache Tomcat でのバナー・グラビングを廃絶する

Tomcat インストール済み環境がサイバー密告者にならないようにしてください

Comments

Apache Tomcat は、大規模な本番環境でも小規模な新規実装や実験的実装でも使用されている、世界で最もよく使われているオープンソースの Web サーバーの 1 つです。しかし残念なことに、Tomcat は人気があるがために、セキュリティー上の脆弱性を見つけて悪用しようとするハッカーたちのターゲットにもなっています。これは特に古いバージョンの Web サーバーで顕著なことです。

この記事では、3 つのステップから成る手順で Tomcat Web サーバーをバナー・グラビングから保護する方法を紹介します。バナー・グラビングとは、ハッカーが、サイバー攻撃で利用できるかもしれないアプリケーションやエンタープライズ・アーキテクチャーに関する重要な情報を見つけるために用いる手法です。

記事ではまず、バナー・グラビングの概要を簡単に説明し、その上で Tomcat Web サーバーをこの攻撃から守る方法を紹介します。ここで紹介する方法は、Linux または Windows 環境で稼働するあらゆるバージョンの Tomcat に適用することができます。

バナー・グラビングとは何か?

皆さんは、以下に示す画像を見慣れていることでしょう。これは、SSH ターミナルや単純な Telnet コマンドからアクセスしたホスト・アプリケーション (この例では、Tomcat Web サーバー) の画面です。

図 1. サーバーのホスト・リクエスト
サーバーのホスト・リクエストを示す画面のスクリーン・ショット
サーバーのホスト・リクエストを示す画面のスクリーン・ショット

システムの脆弱性を見つけ出そうとするアタッカーにとって、バナー・グラビングはその目的を達成する簡単な手段となります。図 1 に示されているように、バナー (つまり、ホスト・サーバーによって表示されるテキスト) によって、システムが実行しているソフトウェアとそのバージョン番号が明らかになります。この情報を入手したアタッカーは、そのバージョンで既知となっている脆弱性を調べて、それを悪用できるというわけです。デフォルトでは、アプリケーション・サーバーはリクエストに応じてこの情報を表示します。

アタッカーは、Web サーバーのエラー・ページで脆弱性に関するシステム・レベルの情報を調べることもできます。図 2 に、サーバー・エラー・ページにリダイレクトされた Web ブラウザーのビューを示します。ここには、サーバーのバージョン番号が表示されています。

図 2. Tomcat のエラー・ページ
Tomcat のエラー・ページのスクリーン・ショット
Tomcat のエラー・ページのスクリーン・ショット

バナー・グラビングは極めて簡単に行えるため、多くの場合、ハッカーにとってアプリケーションの脆弱性を見つけて悪用するための最初のステップとなります。

バナー・グラビングを廃絶する方法

注: Tomcat サーバー実装に変更を加える前に、必ずファイルをバックアップしておいてください。

このセクションでは、Tomcat Web サーバー実装においてバナー・グラビングを廃絶するための全 3 ステップから成る手順をデモンストレーションします。このデモンストレーションは基本的に、Telnet やその他のコマンドに対する Tomcat サーバーの応答をブロックするもので、その手順は極めて簡単です。

ステップ 1. server.xml ファイルを編集する

server.xml ファイルは通常、Tomcat インストール・ディレクトリーのルート・パスに置かれています。バイナリー・インストールの場合、このファイルは /etc/tomcat"X" に置かれることになります。ここで、X はサーバーのバージョンです。従って、Tomcat バイナリー・パッケージをインストールした Debian Linux 環境での server.xml ファイルの場所は、/etc/tomcat6/server.xml となります。Apache ホーム・ページから TAR ファイルをダウンロードして、server.xml ファイルを /opt に解凍したとしたら、ファイルの場所は /opt/apache-tomcat-"X"/conf/server.xml となります。場合によっては、このパスに $CATALINA_HOME という名前が付けられることがありますが、その場合には、ファイルの場所は $CATALINA_HOME/server.xml となります。

以下のコマンドを実行すれば、server.xml ファイルのパスを簡単に調べることができます。

#> find / -name server.xml

次に、server.xml ファイルでコネクター・ポート (Connector port) 行を見つけます。図 3 に示されている行は、Tomcat に対して、このサービスがリッスンするポートを指示します。

図 3. コネクター・ポート
コンソールに表示されたコネクター・ポート行を示す画面のスクリーン・ショット
コンソールに表示されたコネクター・ポート行を示す画面のスクリーン・ショット

この行に server パラメーターを追加して、ユーザーからシステムのバージョンを要求された場合の Tomcat の応答方法を指定します。以下は、その一例です。

    <Connector port="8080" .....
		server="APPSRV"

server パラメーターの値には、Apache、APPSRV、server、MyTeam など、任意の値を指定することができます。唯一の規則は、この値を空にしないこと、そしてハッカーが探している情報を、この値によって公開しないことです。

図 4. 新しく追加された server パラメーター
新しく追加された server パラメーターを示す画面のスクリーン・ショット
新しく追加された server パラメーターを示す画面のスクリーン・ショット

server.xml ファイルに変更を加えたら、そのファイルを保存して、ファイル・エディターを終了します。この最初のステップを完了すると、誰がサーバー・バージョンを問い合わせても、Tomcat はその情報を公開しなくなります。

ステップ 2. ServerInfo.properties ファイルを編集する

次は、一般公開されるエラー・レポートの中で、Tomcat サーバーのバージョンが明らかにされることがないように Tomcat サーバーを構成します。このステップは少し複雑ですが、難し過ぎることはありません。

まず、Tomcat インストール済み環境で catalina.jar ファイルを見つけて、そこから ServerInfo.properties ファイルを抽出します。catalina.jar ファイルは、バイナリー・インストールでは一般に /usr/share/tomcat"X"/lib に置かれています。TAR ファイルでインストールした場合は、Tomcat のルート・インストール・パスの lib ディレクトリー内にあります。

従って、Tomcat がバイナリー・インストールされた Debian Linux 環境では、catalina.jar ファイルの場所は /usr/share/tomcat6/lib/catalina.jar となります。Apache ホーム・ページから TAR ファイルをダウンロードして、/opt に catalina.jar を解凍してある場合には、ファイルの場所は $CATALINA_HOME/lib/catalina.jar となります。

以下のコマンドを実行することで、ファイルのパスを簡単に検索することができます。

#> find / -name catalina.jar

作業を続ける前に、必ず catalina.jar ファイルをバックアップしてください。

次に、catalina.jar から ServerInfo.properties ファイルを抽出するために、以下のコマンドを実行します。

#>  jar xf catalina.jar org/apache/catalina/util/ServerInfo.properties

上記のコマンドは、jar に対し、catalina.jar 内の /org/apache/catalina/util に置かれている ServerInfo.properties ファイルを抽出するよう命令します。

図 5 に、抽出されたファイルの server.info および server.number パラメーターを示します。

図 5. server.info および server.number パラメーター
コンソールに表示された server.info および server.number パラメーターのスクリーン・ショット
コンソールに表示された server.info および server.number パラメーターのスクリーン・ショット

これらのパラメーターの値は、任意の値に変更することも、削除することもできます。例えば、パラメーターに以下の値が設定されているとします。

server.info=Apache Tomcat 6.0.x.x/x
server.number=6.0.3.1

これらのパラメーターを以下のように変更することができます。

server.info=
server.number=0.0.0.0

変更内容に満足したら、ファイルを保存して終了します。残りの必要な作業として、変更後のファイルを圧縮して catalina.jar に格納しなければなりません。それには、以下のコマンドを使用します。

 #>  jar uf catalina.jar  org/apache/catalina/util/ServerInfo.properties

catalina.jar 内のファイルを変更後のファイルで置き換えた後は、org ディレクトリーを削除しても構いません。

これで、Apache Tomcat インストール済み環境は、一般的なエラー・メッセージからのバナー・グラビングができないように構成されました。

ステップ 3. Apache Tomcat を再起動する

最後のステップは、Apache Tomcat を再起動することです。バイナリー・インストールの場合は、以下のコマンドを実行します。

#> /etc/init.d/tomcat6 restart

あるいは以下のコマンドを実行しても構いません。

#> service tomcat6 restart

TAR ファイルを抽出した場合は、以下のコマンドを実行します。

#> . /$CATALINA_HOME/bin/shutdown.sh
#> . /$CATALINA_HOME/bin/startup.sh

以下の手順に従って、Tomcat インストール済み環境に対して行った変更を確認します。

  1. 変更後の Tomcat サーバーがリッスンするポートで、Tomcat サーバーとの Telnet セッションを開始します。
    #> telnet 192.168.237.119 8080
  2. サーバーが応答したら、サーバーでサポートしているオプションを求めるリクエストを送信します。
    #> OPTIONS / HTTP/1.1
    #> HOST: 192.168.237.119
    #> [ENTER]
  3. サーバーのレスポンスには、図 6 に示すように、server.xml ファイルに含まれる、更新されたサーバー・パラメーター値が表示されます。
    図 6. 新しいホスト・サーバーからのレスポンスの確認
    新しいサーバーからのレスポンスのスクリーン・ショット
    新しいサーバーからのレスポンスのスクリーン・ショット
  4. 今度はブラウザーを開いて、Tomcat インストール済み環境のメイン・ページへアクセスする際に、エラーが発生することになるページ・リクエストを追加します (例えば、http://192.168.237.119:8080/index)。
  5. Tomcat はこの URL を認識しないため、エラー・メッセージを送信します。ただし、エラー・メッセージには、サーバー・バージョンに関する情報は一切示されません。
    図 7. 新しいエラー・メッセージ・レスポンスの確認
    新しいエラー・メッセージのスクリーン・ショット
    新しいエラー・メッセージのスクリーン・ショット

図 7 のバナー・メッセージを見て、アタッカーは Apache サーバーがインストールされていることはわかっても、実行されている具体的なサーバーやバージョンについてはわかりません。これで、バナー・グラビングを廃絶できました!

まとめ

使用している Tomcat サーバー・インストール済み環境を最新の状態に保つことは、そのサーバーの既知の脆弱性を突いた攻撃からアプリケーションを保護する最善の方法です。また、Tomcat のデフォルトのバナー動作を無効にしてバージョン情報が表示されないようにすることも、有効な対策となります。これにより、ハッカーはサイバー攻撃を計画するのが容易ではなくなるため、皆さんは安心して眠れるようになります。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=セキュリティ, Java technology
ArticleID=964952
ArticleTitle=Apache Tomcat でのバナー・グラビングを廃絶する
publish-date=03132014