Tomcatにありがちなセキュリティリスクの改善
この連載の第1回に沿ってインストールしていない初期状態のままのTomcatではいくつかのセキュリティリスクが残っている場合があります。今回、連載第1回どおりにインストールしていない人は次の点を確認していきましょう(連載第1回どおりにインストールしている人は設定する必要は一切ありません)。
初期状態で気付きにくいセキュリティ・ホールとその対応
Tomcatがrootで実行されている
root権限で公開アプリケーションを実行していると、アプリケーションにバッファオーバーフローが存在した場合、その権限で任意のアプリケーションを実行されてしまう恐れがあります。しかし、通常のTomcatは$CATALINA_HOME/bin/startup.shで起動して利用するように設計されており、root権限で実行するようになっています。
このような場合、Linuxに実装されているsuやrunuserのコマンドを用いて別のユーザーから起動する方法があります。別のユーザーから実行するには、まずはtomcatユーザーを作成します。
useradd -d /opt/tomcat6 -s /bin/sh tomcat
このユーザーの環境変数に「JAVA_HOME」を追加する必要があるので、viエディタで/opt/tomcat6/.bash_profileを開いて編集します。
# .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs JAVA_HOME=/usr/java/jdk1.5.0_12 PATH=$PATH:$HOME/bin:$JAVA_HOME/bin export PATH JAVA_HOME
編集が完了したら、tomcatユーザーで読み書きできるように変更します。
chown -R tomcat. /opt/tomcat6
以上で、準備は完了です。それでは、以下のコマンドのどちらかを実行してTomcatを起動してみましょう。
su -l tomcat -c "/opt/tomcat6/bin/startup.sh"
runuser -l tomcat -c "/opt/tomcat6/bin/startup.sh"
無事に起動するようになると思いますが、この場合にはtomcatユーザーでログインできる環境を用意することになります。このことで、セキュリティリスクが高まる恐れがあるために、この対応は推奨されません。
tomcatユーザーで起動するのであれば、すでにデーモン化ツールがTomcatに同梱されているので、前述のように連載第1回を読みながらjvscを利用して起動スクリプトからtomcatユーザーで実行する方法を取りましょう。
Tomcatの8005番ポート(シャットダウンポート)が起動している
デフォルトのTomcatの設定では、Tomcatのシャットダウンに利用する8005番ポートが起動しています。このポートにデフォルトの場合はtelnetで接続して「SHUTDOWN」と文字列を打ち込むことでTomcatを停止できるようになっています。
アプリケーションにアクセスされることで遠隔シャットダウンをさせない対策として以下の2つの方法が簡単に思い付きます。
- シャットダウンポート番号を変える
- シャットダウン文字列を変える
これらは、server.xmlの以下の部分を変更することで対応可能です。
<Server port="8005" shutdown="SHUTDOWN">
しかし、これでは総当たりで検索/攻撃されたときにはいずれ見つかってしまう可能性があります。このため、別の方法を実施する必要が通常あります。このような場合にはこれら以外の方法として以下のような対策が思い付きます。
- シャットダウンポートへのアクセスを制限する
- シャットダウンポート自体を利用させなくする
ほかのユーザーがシャットダウンポートへ到達できないようにするのであれば8005番ポートへの接続を禁止すればよいだけなので、ファイアウォール機器を調整したりLinuxの標準的なパケットフィルタリングのiptablesを用いたりしてシャットダウンポートへのアクセスを制限できます(※ここでは、iptablesのインストールについては省略します)。
編集部注:パケットフィルタやiptablesについて詳しく知りたい読者は、連載「ゼロから始めるLinuxセキュリティ」や連載「習うより慣れろ! iptablesテンプレート集」をご参照ください。
iptablesを使う場合には、以下のようなシャットダウンポートへの新規接続を禁止するルールを追加することで対応できるでしょう。
iptables -A INPUT -p tcp -m state --state NEW --dport 8005 -j DROP
ただし、この場合でも完ぺきとはいい切れません。ファイアウォールの設定ミスやiptablesのバグによりこの壁が破られることが考えられます。結局は起動すらしないことが一番確実といえる対策なので、このような場合でもシャットダウンポートを起動しないようにしてくれるjvscを利用することをお勧めします。
このように、jvscを用いてデーモン化することはTomcatの管理を容易化するためだけではなく、セキュリティ面の強化に大いに役立ちますので、ぜひお試しください。
忘れがちな設定のセキュリティリスク
連載第2回で紹介した管理マネージャは非常に便利な機能ですが、ユーザーを作成するだけ作成して放置してしまいがちです。このままだと、インターネットを経由してほかのユーザーからも自由にアクセスできるようになってしまいます。これでは、いつ何が起きるか分からないので、アクセスできるユーザーを制限するようにしましょう。
アクセスの制限はコンテキスト別に行うようにします。まずは、コンテキスト別のContext.xmlを作成するために/opt/tomcat6/confのディレクトリに[Engine名]/[Host名]のディレクトリを作成します。
mkdir -p Catalina/localhost
ディレクトリを作成したらviエディタで管理マネージャのコンテキストファイル(/opt/tomcat6/conf/Catalina/localhost/manager.xml)を作成します。ここでは、192.168.1.0/24のアドレスからのアクセスのみを受け付けるように設定してみます。
<Context path="/manager" docBase="${catalina.home}/webapps/manager" debug="0" privileged="true"> <Valve className="org.apache.catalina.valves.RemoteHostValve" allow="192.168.1.*" /> </Context>
作成が完了したら、Tomcatを再起動します。
/etc/init.d/tomcat restart
管理マネージャを「http://tomcatのIPアドレス:8080/manager/html」で直接開いて確認してみると、以下のようにダイアログが正常に表示されました。
ユーザーID/パスワードを入力すれば、正常に管理マネージャにログインできることが確認できます。
もし、IPアドレスのアクセス制限に掛かったネットワークからアクセスすると、以下のような表示がされることが確認できます。
管理マネージャのセキュリティも無事に強化されてこれで少しは安全になるでしょう。
といいたいところですが、最後に1つだけ対応するべきところがあります。まだ完全に実装されておらず、Tomcatのトップページからは行けませんが、Tomcatのバーチャルホスト管理マネージャ「http://tomcatのIPアドレス:8080/host-manager/html」が実は存在しています。
この機能に対してもアクセス制限をしておくとよいでしょう。viエディタで/opt/tomcat6/conf/Catalina/localhost/host-manager.xmlを作成して、以下の内容を記述します。
<Context path="/host-manager" docBase="${catalina.home}/webapps/manager" debug="0" privileged="true"> <Valve className="org.apache.catalina.valves.RemoteHostValve" allow="192.168.1.*" /> </Context>
最後に、Tomcatを再起動して終了です。
/etc/init.d/tomcat restart
完了後にWebブラウザから「http://tomcatのIPアドレス:8080/host-manager/html」にアクセスして認証を抜けると、以下のような画面が確認できると思います。
もし、実際に運用する際に管理マネージャなどを利用しない場合には、/opt/tomcat6/webapps以下から削除しておくことをお勧めします。
次回はツールを使ってセキュリティ対策
以上で、セキュリティの更新と設定の改善までが完了しました。次回はセキュリティマネージャというツールについて解説します。
著者プロフィール
x-lab チーム
株式会社アメニクスのR&D部門として、企業の価値向上を目的に結成された研究開発チーム(x-lab=amenix laboratory)。
アメニクスの社員をはじめ、システム開発技術者のみに限らず、MBA教授や外資系出身エンジニアなど幅広いメンバーが所属している。IT技術からマーケティング、金融テクノロジーなどさまざまな分野で活動中。
主な著書
Copyright © ITmedia, Inc. All Rights Reserved.