2ch騒動の教訓

おはようございます。プロダクト開発部のhirotoshi(@wi_hiro)です。
さて、技術ネタ第1投目は、javaネタ第一弾:「IzPackを使ってみた」をお送りする予定だったのですが、先週起きたとある事件に関して書きます。
果たして、このネタが番長ブログの最初の技術ネタになってよいのかどうか非常に悩むところではあったものの、反面教師という点で肝に銘じておきたいと思い、書かせていただきます。

2011/01/06の2ch騒動

2ch騒動の詳細は「2ch 騒動 キャップ漏れ」等で検索していただくとして、本来一般のユーザーにはできないはずのスレッドの管理、さらには、板の移転までができるようになってしまいました。
これにより、以下のような事が行われ「2ch壊滅?」とまで言われるような事態に。

  • スレッドの削除
  • スレッドの乱立
  • スクリプトコードを含むスレッドタイトル
  • 勝手な板移転
  • etc

事の発端

なぜ、このような事態になったのか。ここからが、技術的な話し。
確実そうな部分だけ、記載すると

  • 削除スクリプトと思われるファイルが存在し、拡張子が「.cgi」ではなかったために、スクリプト自体がダウンロード可能となっていた。※

というのが一番の発端ようす。
※そのファイル名称(URI)が判明した理由は定かではないですが、以下の説が有力
・アルファベット総当たりで探した
・Apacheの設定で、ディレクトリ内容の表示を許可されて居た

ここから先は推測:

  • このスクリプトが解析され、スクリプト内の脆弱性が判明
  • 脆弱性を利用し、サーバー内のファイル一覧、ファイルそのものを取得
  • 本来のスクリプト自体もセキュリティ的な防御がなされておらず、簡単に実行可能であったこのため、サーバーを自由に操作されてしまったと。

教訓

  • サーバー上で開発が行われていた様子。ローカルで開発・テスト→本番サーバーへが基本。本番サーバー上で開発を行ってはいけない。
  • 公開ディレクトリに不必要なファイルを置いてはいけない。Apacheの設定上、ファイルの拡張子によって、スクリプトか?静的なファイルか?を判断する。このため、設定されている拡張子以外のファイルはすべてダウンロード可能なファイルとなってしまう。

→スクリプトのバックアップコピー
→エディターが自動的に作成するバックアップコピー
→リポジトリの作成する管理ファイル(.cvsや.svn等)

  • 「クライアントからの入力をそのまま引数に利用してはいけない」というのは、サービス提供者としては当たり前の事。これを怠ると、なにを行われても不思議ではない。
  • 一部のスクリプトでは、OSのコマンドを発行しその結果を表示していた。適切なセキュリティを施せないなら、この手の仕組みは極力さけるべき。
  • スクリプトの実行には、適切な権限、セキュリティを施さなければならない。管理系スクリプトでユーザー認証が存在しないなんてありえない。

締め

事の発端にもあるように、スクリプトのバックアップや一時ファイルをWEBの公開ディレクトリ以下に置いた瞬間から、驚異にさらされる可能性がある。また、「とりあえず」的な行動によって作られたスクリプト等を放置したり、権限設定をしなかったりすることによって、そのスクリプトを経由してサーバーが丸裸にされてしまう。ほんのちょっとの油断でとんでも無いことになるのを改めて感じました。

WEBのサービスを提供する会社として当たり前の事ですが、今回の件を対岸の火事と思わないよう精進したいと思います。

今後ともよろしくお願いいたします。