セキュリティとは単なる技術的問題ではありません; セキュリティに関してもっとも重要なことは、良く練習すること、危険を理解すること、です。この節では、幾つかのより一般的な危険および最良の実践例を見直します。ここで挙げた事例を実践することで、セキュリティを向上させたり、攻撃が成功してもその影響を小さなものにする事が可能です。
14.5.1. ウェブアプリケーションに備わっている潜在的危険性
ウェブアプリケーションは、その普遍的特徴のお陰で、数多く開発されました。幾つかのアプリケーションは同時に実行されます: ウェブメール、wiki、グループウェアシステム、フォーラム、写真ギャラリー、ブログ、など。これらのアプリケーションは「LAMP」(Linux、Apache、MySQL、PHP) スタックに頼っています。残念なことに、多くのアプリケーションがセキュリティ問題を深く考えずに書かれています。外部から提供されるデータは、その妥当性を少しだけ検査するか、全く検査せずに使わる事が多いです。特別に細工した値をアプリケーションに渡すことで、あるコマンドの代わりに他のコマンドを実行させる事が可能です。多くの最も自明な問題は時間が経てば修正されますが、定期的に新しいセキュリティ問題が生じます。
このため、定期的なウェブアプリケーションの更新は不可欠です。これは、クラッカー (プロフェッショナルな攻撃者であるかスクリプトキディであるかに関わらず) からの既知の脆弱性を利用した攻撃を防ぐ意味合いがあります。実際のリスクは場合によりますが、データの破壊、任意のコード実行、ウェブサイトの書き換えなどの範囲におよびます。
ウェブアプリケーションの持つ脆弱性はクラッキング行為の足掛かりとして使われる事が多いです。以下は、そこから考えられる結果の短い概観を示します。
不正侵入に成功した後にどのような事が行われるかは攻撃者のやる気に依存します。スクリプトキディはウェブサイトで探し出したレシピを適用するだけです; ほとんどんの場合、スクリプトキディはウェブページを書き換えデータを削除します。より狡猾なスクリプトキディはウェブページに不可視の内容を追加して、サーチエンジンからみた自分のサイトの推薦順位を向上させます。
更に上級の攻撃者はこれ以上の事を行います。最悪の筋書きは以下の手順で進みます: 攻撃者は www-data
ユーザ権限でコマンドを実行する能力を取得しますが、コマンドを実行するには数多くの操作が必要です。実行を簡単にするために、攻撃者はリモートから様々なコマンドを実行する専用に設計された他のウェブアプリケーションをインストールします。このアプリケーションを使うことで、ファイルシステムを閲覧したり、パーミッションを検査したり、ファイルをアップロードおよびダウンロードしたり、ネットワークシェルを提供したりする事が可能になります。しばしば、脆弱性を使って、wget
コマンドを使ってマルウェアを /tmp/
にダウンロードし、マルウェアを実行する事が可能になります。このマルウェアは既に不正侵入されている別のウェブサイトからダウンロードされます。こうすることで、攻撃者の痕跡が無くなり、実際の攻撃元に関するヒントを辿る事が難しくなります。
この時点で、攻撃者は IRC ボット (IRC サーバに接続してチャンネルから操作されるロボット) をインストールできる程度の権限を取得しています。このボットは非合法ファイル (映画やソフトウェアなどの無断コピー) を共有するために使われます。意欲的な攻撃者は更に先へ行きます。www-data
アカウントはマシンに対する完全なアクセスを許しませんので、攻撃者は管理者権限を取得しようとするでしょう。今現在、これは不可能であるべきです。しかし、ウェブアプリケーションが最新の状態でなければ、おそらくカーネルやその他のプログラムが古いでしょう; これはしばしばローカルユーザがいないため脆弱性に関して知っているにも関わらずシステムのアップグレードを無視している管理者の判断です。攻撃者はこの 2 番目の脆弱性に乗じて root アクセスを取得します。
これで、攻撃者はマシンを我が物にできます; 攻撃者は通常この特権アクセスを可能な限り長く維持しようとします。そのために攻撃者は rootkit をインストールします。rootkit とは、後から攻撃者が管理者権限を取得する事を可能にするために、幾つかのシステムの要素を置き替えるプログラムです; rootkit は自分の存在および侵入の形跡を隠そうとします。改ざんされた ps
プログラムは幾つかのプロセスを無視するでしょうし、netstat
は幾つかの活動中の接続をリストしません。root パーミッションを使って、攻撃者はシステム全体を観察する事が可能です。しかし、重要なデータを見つけ出しません; 同じネットワーク内の他のマシンにアクセスしようとします。管理者アカウントと履歴ファイルを解析することで、攻撃者は日常的にアクセスしているマシンを見つけ出します。sudo
や ssh
を改ざんされたプログラムで置き換えることにより、攻撃者は管理者パスワードを横取りする事が可能です。攻撃者はここで横取りした管理者パスワード検出されたサーバで使い… 更に侵入を進めます。
最悪の筋書きは幾つかの取り組みによって避ける事が可能です。以降の節では、その取組について説明します。
潜在的なセキュリティ問題が知られると、管理者はサービスを配備するプロセスの各段階、特にインストールするソフトウェアを選ぶ際、に気を配らなければいけません。SecurityFocus.com
などの多くのウェブサイトが最近発見された脆弱性をリストしています。このお陰で、あるソフトウェアを配備する前にそのソフトウェアのセキュリティ実績の情報を得る事が可能です。もちろん、この情報はそのソフトウェアの人気に比例しています: 広く使われているプログラムほど標的にされ、結果として注意深く検査されます。逆に、セキュリティ監査の興味を惹かないために、特定分野のプログラムはまだ公表されていないセキュリティホールを沢山持っているかもしれません。
通常フリーソフトウェア世界には多くの選択肢があります。そして、ソフトウェアは現場で適用する基準と同じ選択基準に従い決定するべきです。多くの機能を備えるということは、コードに隠された脆弱性の危険性を増加させる事を意味します; 実際、あるタスクに関する最も先進的なプログラムを選ぶことは逆効果かもしれません。要求を満足する最も単純なプログラムを選ぶほうがより良いといえるでしょう。
多くの Linux ディストリビューションはデフォルトで多数の Unix サービスと多くのツールをインストールします。多くの場合、デフォルトでインストールされるサービスとツールは管理者がマシンをセットアップする本来の目的に必要なものではありません。セキュリティに関する一般的な指針として、不要はソフトウェアをアンインストールする事が最良の方針です。実際、もし FTP サーバ以外の未使用のサービスに含まれる脆弱性を使ってマシン全体の管理者権限が取得される可能性があるのなら、FTP サーバを守ることに意味はありません。
同様の理由で、通常ファイヤーウォールは公開アクセス可能になる予定のサービスへのアクセスだけを許可するように設定されます。
現在のコンピュータは復数のサービスを 1 台の物理マシン上でホストできる程度に十分強力です。財政的な観点からすると、この可能性は興味深いものです: 管理するコンピュータの台数が 1 台ですむ、エネルギー消費量が少ないなど。しかしながら、セキュリティの観点からすると、この可能性は問題です。1 つのサービスが不正侵入を受けるだけでマシン全体にアクセス可能になり、さらに同じコンピュータ上でホストされている他のサービスも不正侵入を受けます。サービスを隔離することでこのリスクを緩和する事が可能です。サービスの隔離は仮想化 (各サービスを専用の仮想マシンでホストさせる) や SELinux (それぞれのサービスデーモンに適切に設計された一連のパーミッションを設定する) を使って達成されます。
セキュリティに関する議論と言えばすぐに、インターネットの無法地帯に隠れた匿名のクラッカーによる攻撃に対する保護を思い浮かべることでしょう; しかし、忘れられがちですが、内部にもリスクが有るという事実があります: 退職を控えている雇用者は重要なプロジェクトの機密ファイルをダウンロードしてこれを競争相手に売る事が可能です。不注意なセールスマンは新しい顧客とのミーティング中にセッションをロックせずに離席します。不器用なユーザは誤って間違ったディレクトリを削除します。
これらのリスクは技術的に解決可能です: 最低限必要な権限よりも高位の権限をユーザに与えるべきではありませんし、定期的なバックアップは必ず必要です。しかし多くの場合、リスクを避けるためにユーザを教育する事がより適切なやり方といえるでしょう。
コンピュータ本体が保護されていなければ、サービスとネットワークの保護は無意味です。重要なデータは RAID アレイ内のホットスワップ対応のハードディスクに保存するだけの価値があります。なぜなら、ハードディスクはいつかは壊れ、データの可用性は不可欠だからです。しかし、ピザ配達人が建物に入って、サーバ部屋に忍び込んで、幾つかの選ばれたハードディスクを盗んで逃げる事が可能な場合、セキュリティの重要な部分が満足されていません。誰がサーバ部屋に入れるのでしょうか? 入室と退室は監視されていますか? これらの質問は、物理セキュリティがを評価する際に、考慮 (そして回答に) に値します。
物理セキュリティには、例えば火事などの災害のリスクを考慮する事が含まれます。この特別なリスクが有るために、バックアップメディアを別の建物か少なくとも防火金庫に保存する事が正当化されます。
管理者は、程度の差はあるものの暗黙のうちに、自分の管理するユーザと一般のネットワークユーザから信頼されています。そのためユーザは悪意ある人が不法利用することで生じる過失の影響から守られています。
あるマシンの制御を奪った攻撃者は、このマシンを前進基地 (「踏み台」として知られています) として使います。管理しているマシンから他の不正な活動を実行されることにより、あなたは法的な問題を被る事になります。なぜなら、攻撃された当事者にしてみれば、あなたのシステムが攻撃元に見えるため、あなたを攻撃者本人 (または共犯者) とみなすでしょう。多くの場合、攻撃者はスパムを送信するための中継サーバとしてあなたのサーバを使います。これは大きな影響はありません (ブラックリストに登録されて、正規の電子メールを送信することに制限を受けるという潜在的な問題点を除けば)。とは言っても気持ちのよいものではありません。また別の場合、あなたのマシンはサービス拒否攻撃などのより重大な問題の要因になります。これはしばしば損失をもたらす場合があります。なぜなら、正規のサービスが利用不可能に陥り、データが破壊されるからです; さらに実質的な費用を失うという意味を持つ場合もあります。なぜなら、攻撃された当事者はあなたに対して法的手続きを開始するからです; 著作権で守られた作品の認可されていない複製があなたのサーバから共有された場合、権利者は訴訟を起こす事が可能です。さらに、サービス水準合意を交わした他の企業があなたのマシンから攻撃を受けた場合に罰金を支払う契約になっている場合、彼らも訴訟を起こす事が可能です。
これらの状況に陥ると、無罪を主張だけでは通常十分ではありません; 少なくとも、ある IP アドレスを経由してあなたのシステム上で行われた疑わしい活動に関する説得力のある証拠を提出する必要があります。この章の推奨を無視し、攻撃者に特権アカウント (特に root) へのアクセスを取得を許し、攻撃者が痕跡を消すために特権アカウントを使う事を許していれば、これは不可能です。