連載
» 2013年04月01日 18時00分 UPDATE

試してみなけりゃ分からない? 古いWebアプリの脆弱性(1):古い「ZenPhoto」でXSS脆弱性のリスクを確認 (1/2)

この記事では、過去に脆弱性が見つかったWebアプリをインストールして実際に攻撃することで、攻撃者や被害者を疑似体験してみる。その危険性を実感した上で、バージョンアップなどの対策につなげてほしい。

[山本洋介山,@IT]

皆さんこんにちは。オープンソースのWebアプリケーションの脆弱性をいくつか報告したことがある山本です。ひょんなことから古いWebアプリケーションをインストールして、脆弱性を試してみるという原稿を書かせていただくことになりました。よろしくお願いします。


はじめに

 いきなり「Webアプリケーションの脆弱性」といわれても、いまひとつピンとこない、何が危険で自分にどう関係があるのか分からない、という人もたくさんいるのではなかろうか。Webアプリケーションに脆弱性があると何が危険なのだろう。

 答えは大きく分けて2つある。1つ目は、そのWebアプリを動かしているサーバのデータを盗まれたり、改ざんされてしまうという、サーバ自体が被害を受ける危険性だ。

 そしてもう1つ、Webアプリにアクセスしたユーザーが、トロイの木馬などのマルウェアをインストールされたり、なりすましの被害に遭うという点だ。

 どちらの場合も、よかれと思って設置したサービスが攻撃されたり悪用されたりと、脆弱性があると好ましくないことが起きる危険があるのだ。

 ……と文字で書いても、実際に被害に遭った人でない限り「そんなこともあるんだねー、怖いねー、でもまあ、うちは大丈夫でしょう」と、他人事のように思っている人がほとんどではなかろうか。

 そこで、もう少し攻撃されることにリアリティを持ってもらうべく、過去に脆弱性が見つかったWebアプリをインストールして、実際に攻撃を行うことで、攻撃者や被害者の疑似体験をしようというのが本稿の趣旨である。

 机上での知識や典型的なデモサイトを操作するよりも、現実味のある攻撃を疑似体験できるとともに、実際に脆弱性が見つかった際の脅威を誰かに提示する際の役に立つかもしれないとの考えからだ。

なお本稿で実験に使用する環境は、当たり前だが非常に脆弱なので、絶対に本番環境に使用してはいけない。また本稿で知った攻撃手法を他者の管理するサーバで実行することは、高い確率で不正アクセス禁止法に抵触するため、絶対に行ってはいけない。


LAMP環境の構築

 ではここからは早速、脆弱なWebアプリを動作させることとする。初回なので環境構築が必要になり少し面倒だが、我慢してほしい。

今回必要となるもの

  • Ubuntu Desktopが動く環境
  • (できれば)別のやられマシン&2種類のブラウザ

 まずはWebアプリを動作させるための環境を構築していくことにする。本稿ではマシンにUbuntu Desktopを動作させ、そこにWebサーバ(Apache)、PHP、MySQLをインストールしてWebアプリを動作させることにする。

 Ubuntu Desktopのインストール方法についてはここでは触れないが、http://www.ubuntulinux.jp/downloadから入手して適宜インストールを行っていただきたい。本稿ではUbuntu 12.10日本語パッケージを使用している。

 なお、本稿ではUbuntuを使用しているが、わざわざUbuntuをインストールするのが面倒だという方は、余っているWindows OSでもMac OS Xでも、似たようなPHPとMySQLが動作する環境はすぐに整えることができる。慣れているならばWindowsを使ってもらっても一向にかまわない(なお、解説とはドキュメントルートやディレクトリ構造が異なってくるが、適宜読み替えてほしい)。

 しかし、今回取り上げる「ZenPhoto」は、残念ながら公式にはWindowsでは動作しない(ZenPhoto for Windowsがリリースされているが、同じ脆弱性があるかは未確認)。

webvuln01_scr01.jpg 画面1 Ubuntu 12.10日本語パッケージをインストールしたところ

 OSが起動したならターミナルからアップデートを行っておく。

$ sudo apt-get update

 その前に、デフォルトではDHCPサーバからIPアドレスを取得するようになっているが、実験時に毎回アクセス先のURLが変わるのも面倒なので、固定IPアドレスにしておこう。

 GUIからだと「システム設定」ボタンをクリック→ネットワーク→「有線」を選択すると、ここに現在設定されているアドレス情報が表示される。ホストのIPアドレスをどうすればいいか分からない人は記録しておく。

 「オプション」ボタンをクリック→「IPv4設定」タブを選ぶ→「方式」を自動から手動にし、「追加」ボタンをクリック→アドレス、ネットマスク、ゲートウェイをそれぞれ設定する。DNSサーバも設定する(分からない人は先ほど記録した情報をそのまま入力するとよい)。他のホストが使用しているIPアドレスを設定しないよう注意しよう。

webvuln01_scr02.jpg 画面2 ネットワーク設定

XAMMPを使用したLAMP環境の構築

 Apacheなどを個々にインストールしてLAMP環境を構築することも可能だが、初期状態ではライブラリなどインストールされていないものが多く、他のWebアプリをインストールする際にいちいち「動かない」とエラーが表示されて、そのたびに追加でインストールする必要があるので面倒だ。そこで、開発環境としてよく使われている「XAMMP for Linux」をインストールすることにする。

 XAMPPは簡単にApacheとPHP、Perl、MySQLなどを動作させることができるツールだ。開発環境としての利便性を重視しているため、無駄なライブラリがたくさん動くうえに、デフォルト設定はセキュリティ的には大甘だ。このままで絶対に実運用には使用しないでいただきたい。

XAMMPのインストール手順

 http://www.apachefriends.org/jp/xampp-linux.htmlから「XAMPP for Linux 1.8.1」をダウンロードする。そして、ターミナルからダウンロードしたファイルが置かれたフォルダに移動し、

$ sudo tar xvfz xampp-linux-1.8.1.tar.gz -C /opt

で/opt/以下にxammpディレクトリが作成され、実行ファイルなどが置かれる。

 次に、このままではphpMyAdminにアクセスできないというエラーが出るので、

/opt/lampp/etc/extra/httpd-xampp.conf

を開き、15行目以降にある行を、

<Directory "/opt/lampp/phpmyadmin">
    AllowOverride AuthConfig Limit
    Require all granted
    Order allow,deny
    Allow from all
</Directory>

に修正する。

 これでxammpを実行する準備は整った。早速起動しよう。ターミナルからコマンドを実行する。

$ sudo /opt/lampp/lampp start
Starting XAMPP for Linux 1.8.1...
XAMPP: Starting Apache with SSL (and PHP5)...
XAMPP: Starting MySQL...
XAMPP: Starting ProFTPD...
XAMPP for Linux started.

 次に、このままでは動作に支障が出るのでセキュリティの設定を修正する。

$ sudo /opt/lampp/lampp security

とコンソールから実行すると、以下のように対話式の問いかけがある。

  • 1つ目の質問はXAMMP自体のアクセスパスワード。特に設定の必要はない。
XAMPP: Quick security check...
XAMPP: Your XAMPP pages are NOT secured by a password.
XAMPP: Do you want to set a password? [yes] no
  • 2つ目の質問はphpMyAdminのpmaユーザーのパスワードを設定するかどうかだ。設定していないとアクセスできないことがあるので、設定しておく。
XAMPP: The MySQL/phpMyAdmin user pma has no password set!!!
XAMPP: Do you want to set a password? [yes] yes
XAMPP: Password: 
XAMPP: Password (again): 
XAMPP: Setting new MySQL pma password.
XAMPP: Setting phpMyAdmin's pma password to the new one.
  • 3つ目の質問はMySQLのrootユーザーのパスワードを設定するかどうか。設定していないとアクセスできなかったりすることがあるので、設定しておく。
XAMPP: MySQL has no root passwort set!!!
XAMPP: Do you want to set a password? [yes] yes
XAMPP: Write the password somewhere down to make sure you won't forget it!!!
XAMPP: Password: 
XAMPP: Password (again): 
XAMPP: Setting new MySQL root password.
XAMPP: Change phpMyAdmin's authentication method.
  • 4つ目の質問は、FTPサーバのnobodyユーザーのパスワードを設定するか。基本的には使用しないので設定する必要はない。
XAMPP: The FTP password for user 'nobody' is still set to 'lampp'.
XAMPP: Do you want to change the password? [yes] no
XAMPP: Done.

 これでXAMMPの設定は終了した。

$ sudo /opt/lampp/lampp start

でXAMMPが起動し、Webサーバ、SQLサーバなどが動作するようになるだろう。

http://localhost/


にアクセスするとXAMMPのスプラッシュが表示されるので、日本語を選ぶと日本語メニューが表示される。

webvuln01_scr03.jpg <fig-03 XAMMPのメイン画面>

 phpMyAdminのリンクをクリックするとログイン画面が開く。ユーザーにroot、パスワードに先ほど設定したパスワードを入力し、ログインボタンをクリックするとMySQLの操作が可能となる。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。