デベロッパー

デベロッパー

LAMPセキュリティを強化する4つの方法

Carla Schroder
2008年4月25日 / 10:00
 
 

はじめに

 Apache HTTPサーバーのセキュリティは、少なくともLinuxやその他の適切なUnix系オペレーティングシステムで実行している限りにおいては、信頼できます。しかし、今や平凡な静的な読み取り専用Webサイトは絶滅危惧種となりました。最近では、LAMPと呼ばれる一連の技術(つまりLinux、Apache/Lighttpd、MySQL/PostgreSQL/SQLite、Python/PHP/Perl/Ruby)を使って動的Webサイトを提供するのが一般的になっています。これは進歩であるとも、ないとも言えます。

 私個人は、平凡な静的HTMLの日々が好きでした。今と比べてブラウザのHTMLサポートやサイトの質に疑問が多かったとはいえ、少なくとも、エラーを吐き散らす役立たずの巨大なスクリプトを実行して私のコンピュータを過労に追い込んだり、ときには完全に固まらせてしまうことはありませんでした。もしCPUサイクルとメモリを食いつぶすような事態になっても、システムのアップグレード費用がかかるぐらいの被害で済みました。しかも、たとえば仮に私がWindowsとIEを使ってネットサーフィンするほど間抜けだったとしても、Webサイトを開いただけでシステムが感染するようなことはありませんでした。しかし、悪人は次々に新しい悪知恵を生み出すものなので、Linuxを使っているからといって安心してはいられません。

 おっと、脱線しました。この記事のテーマは、LAMPの適切なセキュリティ対策でした。週末を利用してLAMPスタックをインストールし、動的Webサイトを立ち上げるのはとても簡単です。それもこれも、XAMMPやUbuntuのようなLinuxディストリビューションのおかげであり、PHP(PHP: Hypertext Preprocessor)スクリプト言語の桁外れの人気のおかげです。ですが、この簡単さは必ずしも良いことではありません。他人に指図するのは嫌いなのですが、ネット長者を目指す人には自社サーバーのLAMPスタックを隅々まで学ぶために真面目に時間と労力を投じていただきたいものです。インターネットに接続されたサーバーは、特別にセキュリティに気を配る必要があります。動的Webサーバーは複雑なのでなおさらです。副次的なダメージを受けるリスクも大いにあります。昨今では不正アクセスの裏に大規模な組織犯罪が潜んでおり、マルウェアが詐欺、恐喝、窃盗の入り口になっています。彼らはシステムを破壊するために侵入するのではなく、密かにデータを盗み出し、世界規模のボットネットに取り込むのです。

 実行できる最も重要な対策は、PHPを使わないことです。腐った果物を導入する前に、以下に目を通してください。

1. PHP = トラブル

 PHP(PHP: Hypertext Preprocessor)は、LAMPセキュリティ問題の主犯です。比較的若く、生まれは1997年で、今も成長を続けています。PHPの問題点は3つあり、生まれつきの弱点、コーダーの経験不足、そしてPHPのパッチやアップグレードが適用されない未保守サイトの存在です。

 PHPの舞台裏を覗いてみると、決して美しくはない、つぎはぎだらけの混沌状態であることがわかります。まず、命名規則、構文、大文字と小文字の区別に一貫性がありません。組み込み関数の多くは機能に重複があり、似たようなことをするものの完全に同じわけではなく、ドキュメントが満足に書かれていないため、どれが何をするのか定かでありません。かなり詳しいところまで自分で調べない限り(詳細情報については「関連資料」リンクから参照)、プログラミングエラーを起こすのは必至です。

 PHPは、習得が簡単に見えます。ある意味、それは事実です。動的Webサイトを立ち上げる方法を数時間で習得できます。しかし、セキュリティに不備がある場所がどこで、どうすればそれを迂回できるのか習得するには、数年を要するのです。よく知られたセキュリティホールの1つは、入力が検証されないことです。ユーザーからの入力は常に疑ってかかるべきですが、PHPには入力のチェックに役立つツールがこれといってないため、独自の検証ルーチンを書く必要があります。

 Apacheのmod_phpを使ってPHPをApacheモジュールとして実行すると、Apacheプロセスのすべての資格情報がPHPに引き継がれます。つまり、Apacheが読み書きできるものは、PHPでも読み書きできます。これが意味するのは、PHPの乗っ取りに成功すれば、Apacheに直接乗り込んでいって、Apacheが接触するものならどこへでも入り込める、ということです。mod_phpを1人のユーザーしかいない単純なサイトで使うなら許せますが、多数のユーザーが共有するシステムの場合、すべてのスクリプトは同じApacheユーザーの下で実行されるため、これは大惨事を招きます。代わりに、PHPをsuEXECまたはCGIWrapの下で実行すべきです。これらのしくみは、Perl、Python、Rubyのような穏健なスクリプト言語でも利用できます。

 人知れずPHP3やPHP4を使い続けているサイトはたくさんあり、バグフィックスやセキュリティパッチをまったく適用していないサイトもそれ以上にたくさんあります。PHP5がリリースされたのは2004年で、PHP3のリリースともなると1998年までさかのぼります。つまり、これは実に困った物騒な代物なのですが、たいていの場合、新しいPHPリリースにアップデートするには相当な量のコードを書き直す必要があります。さらに厄介なことに、Apache、PHP、MySQLの相性はあまり良くありません。互換性のある正しいバージョンを完全に揃えないと、まともに動いてくれないのです。新規インストールの作業を楽にするXAMMPやUbuntuのLAMPパッケージのようなオプションはたくさんあります。しかし、本当の試練が訪れるのは、システムをアップデートしようとして、どこかでバージョンの同期がとれなくなったときです。

 私見を述べさせてもらうと、Perl、Python、Rubyのどれかを使う方が良いでしょう。最初の手間は少し増えますが、長い目で見ると手間や心配事は激減します。たいていのホスティングサービスは危なっかしい骨董品のLAMPスタックを後生大事に使っているので、まともなWebホスティングサービスを探したい場合はWebHosting Talkをチェックするとよいでしょう。

2. MySQL

 MySQLを堅牢にするには、若干の基本的な対策が欠かせません。つまり、ネットワークにアクセスさせない、chrootを使用して特定のグループとユーザーのみが実行する、破られにくい管理者用パスワードを作成する、匿名アクセスを禁止する、必要のないもの(サンプルのデータベースとテーブル、テスト用のデータベースとテーブルなど)をすべて取り除く、といったことです。Security Focusに掲載されているハウツーが参考になります。これはシリーズの一部で、他にApacheとPHPのセキュリティ強化に関する記事もリンクされています。『MySQL Reference Manual』のセキュリティに関する章も役に立ちます。また、chrootはセキュリティデバイスではありませんが、Security Focusは使用を推奨しています。

3. Apacheを保護する



 Apacheを保護する方法については、今でもこのページが最良の解説と言えるでしょう。

 ユーザーログインやユーザー入力など、すべての機密性の高いセッションは、OpenSSLで保護する必要があります。

4. SELinuxまたはAppArmorを使ってすべてを保護する



 Fedora Linuxには、Apacheポリシーを含む良質のSELinuxポリシーと、グラフィカルな管理ユーティリティsystem-config-selinuxが標準で用意されています。簡単とは言いませんが、ゼロから始めるよりは簡単です。AppArmorも調べてみる価値があります。SELinuxより簡単に扱えるとされており、どちらが優れているかを巡る議論は楽しく、有益な情報が得られます。

まとめ



 簡単に言ってしまうと、Linuxサーバー、あるいはLinuxやUnix系オペレーティングシステムはセキュリティがしっかりしているから安心と思ったら大間違い、ということです。セキュリティの基本を守るのは当たり前で、それに加えてスキルと経験も必要です。攻撃を企む輩は次々に登場しますし、今日では犯罪組織がインターネットの威力に目を付けています。ちょっとしたテスト用の設備を用意するのは簡単で費用もかかりませんし、自由に使えるドキュメントやヘルプは数多くあります。Linuxセキュリティの未来は、SELinuxやAppArmorのようなツールにかかっています。「馬が盗まれた後で馬小屋に鍵をかける」ような古典的な対処法ではなく、このようなセキュリティツールを利用して未知の攻撃から身を守る方法を探っていきましょう。

関連資料

  1. "Little Bobby Tables, we call him"(3コマ目)
  2. Data Validation
  3. Problems with PHP
  4. (Other) Problems with PHP
  5. Top 7 PHP Security Blunders
  6. PHP4は公式に廃版となり、2007年12月31日を最後にサポートが打ち切られました。ただし、"2008年8月8日までは深刻なセキュリティフィックスのみケースバイケースで対応"します。
  7. Fedora SELinux Apache
  8. Novell AppArmor Documentation
  9. Tips for Taming SE Linux


著者紹介

Carla Schroder(Carla Schroder)
【関連記事】
Web サイトの顧客満足をコントロールする方法2 〜そのためにコストはいくらまでかけられるのか?〜
NTTデータ・セキュリティとクォリス、PCI 関連サービスで提携
NEC ビッグローブとソフトバンク BB が DesktopVPN を採用
NTT データ、ANSWER-WEB に EV SSL 証明書とフィッシングサイト閉鎖サービスを導入
エフ・セキュアのモバイルセキュリティがソフトバンクで採用

New Topics

Special Ad

ゆりかごからロケットまで、すべての乗り物をエンジョイ
ゆりかごからロケットまで、すべての乗り物をエンジョイ えん乗り」は、ゆりかごからロケットまで、すべての乗り物をエンジョイする、ニュース、コラム、動画などをお届けします! てんこ盛りをエンジョイするのは こちらから

Hot Topics

IT Job

Interviews / Specials

Popular

Access Ranking

Partner Sites