シンボリックリンク ハッキング事例

シンボリックリンクを用いた「ハッキング手法」を、ロリポップの大規模サイト改ざん事例から学ぶ

「2013/08/29」に発覚した『第三者による、ロリポップへの大規模なサイト改ざん事例』

被害件数は、8000件以上にのぼり、改ざんされたサイトは、サイトタイトルに「Hacked by Krad Xin」が含まれ、サイトのキャッチコピーが「BD GREY HAT HACKERS」になっていたそうです。

非常に大規模なハッキング事例なのですが、被害が拡大した原因は「シンボリックリンクが用いられたハッキング」が行われたからであると、ロリポップ側でアナウンスしています(下記)

・改ざんが拡大した原因

サーバー側のディレクトリパーミッションが不適切だったことと、FollowSymLinks の設定を有効にできる状態であったため、同一サーバー上のユーザー領域を辿り、他のユーザー様の wp-config.php の内容を参照し、データベースの更新を実行することで改ざんの被害が拡大しました。

参照元は、こちら→【第三者によるユーザーサイトの改ざん被害に関するご報告】

※上記の「FollowSymLinks」とは、シンボリックリンクの利用可否を設定できるサーバーのオプションで、利用可であった事が記載されています。

要は、シンボリックリンクが利用可であったために、「同一サーバー上の、他のユーザー領域」を辿る事ができてしまった。という事です。

その結果、データベースの接続情報が記載されている「wp-config.php」の内容を第三者に見られ、データベースの内容が書き換えられる被害に繋がった。と記載されています。

今回の記事では、そもそも「シンボリックリンク」とは何なのか?
そして、シンボリックリンクを用いたハッキング手法のカラクリを解説していきます。

以下、目次になります。

  • シンボリックリンクとは?
  • シンボリックリンクを用いたハッキング手法について

シンボリックリンクとは?

シンボリックリンクとは

シンボリックリンクとは、サーバーに使われる事が多いOSの「Linux」で使用されます。
仕組みとしては、あるファイルやディレクトリ(フォルダ)に別の名前を設定します。するとユーザは、その名前をファイル(ディレクトリ)本体と同様に扱える事ができるようになります。

言い換えれば、設定した別名で、もとのファイルにアクセスできるようにする仕組みです。

わかりやすく言えば、Windowsの「ショートカット」に近い仕組みと言えるでしょう。

では、どのような目的で「シンボリックリンク」は使用されるのか?
次で説明します。

シンボリックリンクの使い道

例えば、下記のようなディレクトリがあったとします。

「./www/bsd/home/user/blog/wordpress」

上記はだいぶ階層が深いですよね。これを「./wordpress」と別名設定します。

すると、ルートディレクトリの場合「cd wordpress」と実行するだけで、「./www/bsd/home/user/blog/wordpress」にアクセスすることができます。

このように、階層の深いディレクトリに手間なくアクセスしたい場合などに「シンボリックリンク」は使用されます。

以上が、「シンボリックリンク」についての説明でした。

シンボリックリンクを用いたハッキング手法について

最初に述べたように、シンボリックリンクが利用可であれば、「同一サーバー上の別のユーザーの領域」に、不正アクセスすることができます。
これにより、不正アクセスされたユーザーの重要な情報(DBの接続情報等)が盗み見られてしまう恐れがあります。

では、このカラクリについて、詳しく解説していきます。

まず、ロリポップ等のレンタルサーバーでは、一つのサーバーを複数のユーザーが利用しています。
要するに、一つのサーバー上に、複数ユーザーのディレクトリが存在することになります(下図参考)

レンタルサーバ ディレクトリ階層

上図では、「./tanaka/」以下が田中さんの利用できる領域になります。

そして、例えば、田中さんが佐藤さんの領域「./satou/」以下にアクセスしようと思っても、アクセスできません(当たり前ですよね)

アクセスしようとすると、「権限がありません」等のエラーが、サーバー側から発せられます。

ですが、実は「シンボリックリンク」は、田中さんが佐藤さんの領域「./satou/」以下に対して、設定することができます。

例えば、佐藤さんの領域に「./satou/site/blog/wordpress/index.html」というファイルがあったとして、このファイルに対して、田中さんが「satou.html」というシンボリックリンクを設定することができるのです。

これは、同一サーバー上にあるディレクトリとして、「./tanaka/」も「./satou/」も『グループ』は同じになるからです。
同じグループに存在する場合、「シンボリックリンク」は設定できるのです。

※ここでいう「グループ」とは、サーバー上で(アクセス等の)権限が付与される対象の一つです。権限が付与されるのは「管理者」「グループ」「その他」とあり、それぞれに権限が付与されます。
下図は、それぞれの権限設定画面です。

パーミッション設定

例えば、「管理者には、読み込みと書き込み権限を付与する」「グループには、読み込みの権限のみ付与する」といった具合に設定されます。詳しくはこちらで解説しています→【パーミッション(Permission)とは?表記(数値と記号)の意味と、変更手順のまとめ】

ただ「シンボリックリンク」を設定しても、田中さんが、実データ「./satou/site/blog/wordpress/index.html」を参照することはできません(設定はできるが、参照はできないんですね)

ですが、ブラウザを利用すれば、「./satou/site/blog/wordpress/index.html」を参照することができるのです。

例えば、田中さんのドメインが「tanaka.com」だったとして、公開ディレクトリが「./tanaka/」だった場合、先ほどシンボリックリンクで「satou.html」と設定しているので、

「tanaka.com/satou.html」にブラウザでアクセスすれば、「./satou/site/blog/wordpress/index.html」の内容が表示されます。

シンボリックリンク ブラウザ表示

表示される原因は、Webサーバーの「apache」にあります。
「apache」は、『その他』の権限として、サーバー上のファイルにアクセスします。

なので、「その他」の権限に対して、「./satou/site/blog/wordpress/index.html」のファイルが「読み込み可」に設定してあれば、ファイルを表示することができます。

※ここでいう「その他」とは、上述で解説している「サーバー上で(アクセス等の)権限が付与される対象の一つ」です。

このようにして、「シンボリックリンク」を用いて、「同一サーバー上の別ユーザーのファイル」を表示する事ができるのです。

ですが、ここで一番の問題は、「phpファイル」のソースが参照できてしまうことです。

通常、「apache」は「phpファイル」を実行ファイルとして認識するので、ブラウザ上からソースを閲覧することはできません。

ですが、例えば「./satou/site/blog/wordpress/index.php」というPHPファイルに対して、シンボリックリンク「satou.txt」を設定したとします。

そして、「tanaka.com/satou.txt」にブラウザでアクセスします。
すると、Apacheは、「satou.txt」なので、テキストファイルとして読み込みし、「./satou/site/blog/wordpress/index.php」のソースが表示されてしまうのです。

シンボリックリンク ブラウザ表示2

ここで、冒頭の話に戻しましょう(下記)

・改ざんが拡大した原因
サーバー側のディレクトリパーミッションが不適切だったことと、FollowSymLinks の設定を有効にできる状態であったため、同一サーバー上のユーザー領域を辿り、他のユーザー様の wp-config.php の内容を参照し、データベースの更新を実行することで改ざんの被害が拡大しました。

参照元は、こちら→【第三者によるユーザーサイトの改ざん被害に関するご報告】

上記では、「wp-config.php」の内容が参照されたと記載があります。
「wp-config.php」は、Wordpressで使うファイルですが、非常に重要なデータ(データベースへの接続情報等)を扱っているファイルです。

要は、先ほど解説した通りの方法で、この「wp-config.php」の内容が参照された。と推測できるのです。

この「シンボリックリンク」を用いたハッキング手法を防ぐには、サーバー側の設定で、シンボリックリンクを利用不可にすることです。

今回のロリポップの事件では、この「シンボリックリンクの利用可否設定」が、ロリポップ側で「利用可」になってしまっていたのです。

ロリポップの事後対策として、下記記述があります。

・同サーバー内のユーザー領域のディレクトリを辿れなくするための対策
サーバー側の設定変更により FollowSymLinks の機能を停止しました。

参照元は、こちら→【第三者によるユーザーサイトの改ざん被害に関するご報告】

上記から、やはり対策として「シンボリックリンク」の利用不可設定をしている事がわかります。

以上が、シンボリックリンクを用いたハッキング手法のカラクリになります。

まとめ

今回は、「シンボリックリンク」の概要説明と、シンボリックリンクを用いたハッキング手法のカラクリについて解説してきました。

「シンボリックリンクを用いたハッキング手法のカラクリ」をまとめるにあたり、こちらを参考にさせていただいてます→【ロリポップのサイト改ざん事件に学ぶシンボリックリンク攻撃の脅威と対策】

また、「ロリポップの大規模サイト改ざん事例」に関しては、別の側面(ロリポップ!側の緊急時対応について)で、記事を書いてます。
こちらも、良かったら読んでみてください→【ロリポップ(Wordpress利用者)への「大規模なサイト改ざん事例」から、lolipopの緊急時対応を評価してみる】

コメントを残す

メールアドレスが公開されることはありません。