セキュリティ診断サービスの現場でいろいろな企業のシステムを調べていると,基本的なミスが放置されていて,そこから攻略可能なサーバーが意外に多いことが分かる。漏れては困る重要な情報が記載されたファイルが放置されていたり,重要ファイルへのアクセス権の設定が不適切だったりする。
こういう状況では,特定のセキュリティ・ホールを突くのではなくサービスで提供されている機能を使うだけで,管理者の権限や重要情報を奪い取られる可能性がある。一般のユーザーでもある程度の知識や技術があれば実行は可能だ。
そこで今回は,現場での経験を基に,ファイルへのアクセス権管理について考えてみたい。
ある企業のセキュリティ診断で,筆者たちは一般ユーザー権限のみを付与された状態でサーバーの調査を実施した。システム内に存在するアプリケーションのディレクトリなどについてはアクセス権が適切に設定されていたが,調査していくと,システム内には以下のようなファイルが読み取り可能な状態で存在していた。
・SQL文が記載されたファイル(所有者root)
・MySQLデータ・ファイルのバックアップ(所有者root)
・passwd,shadowファイルのバックアップ(所有者root)
SQL文が記載されたファイルを開くと,図1にあるように,GRANT文にデータベース管理者権限を持つユーザー名とパスワードが記述されていた。
% cat /path/to/file ~中略~ GRANT ALL PRIVILEGES ON *.* TO 'XXXX' IDENTIFIED BY 'xxxxxxx' ~後略~ |
なお、MySQL 4.1でパスワード・ハッシュ・メカニズムが更新されセキュリティが向上しているが,それ以前のバージョンに対するパスワード・クラック用スクリプトがインターネット上で公開されている。データ・ファイルにアクセスされると,容易にパスワードを盗み取られると考えたほうがよい(図2)。また,バージョンが4.1以降であっても,下位互換をとっている場合は同様である。
[root@host]# head -1 hash.txt | awk '{print $1}; ./mysqlfast `head -1 hash.txt | awk '{print $2}'` root Hash: xxxxxxxxxxxxx Trying length 3 Trying length 4 Trying length 5 Trying length 6 Trying length 7 Found pass: XXXXXXX [root@host]# |
3番目のpasswdファイルを読み取られると,全ユーザー名が明らかになり,パスワード総当り攻撃の対象になり得る。万が一,joeパスワード(ユーザー名=パスワード)のような安易なパスワード設定をしている場合は簡単に不正アクセスを許してしまう。また,shadowファイルに関しては,直接的にパスワードクラックの対象となる。実際このセキュリティ診断では,上記のファイルの取得により管理者権限の奪取,複数ユーザーのアカウント情報(ユーザー名/パスワード)の取得,データベースへの全権アクセスが可能になった。
もう一つ,別の例を紹介しよう。Webアプリケーションのセキュリティ診断をしていたときのこと。テキスト・エディタのEmacsによる自動バックアップ・ファイル(拡張子の後に「~(チルダ)」付与)が存在し,データベース・サーバーのIPアドレスや,デバッグ・モードの存在が明らかになった。データベース・サーバーの存在やIPアドレスが攻撃者に漏れると,そのサーバーは攻撃の対象になる。Webアプリケーションのデバッグ・モードなどは通常はユーザーに提供されない機能が含まれており,攻撃者は興味をそそられるだろう。
また,別のユーザーに対してペネトレーション・テストを実施した際,外部からグローバルIPアドレスを持ったサーバーに侵入し,アプリケーションのソースコードを大量に発見したことがある。侵入者にしてみれば,価値あるお土産を用意してもらった,というところだろうか。
では,どういった対策が考えられるのか。言葉にすると単純で,
・ファイルやディレクトリのアクセス権をできる限り排他的にすること
・公開サーバーや(不特定)多数のユーザーに利用させるサーバーには,公開する必要のないファイルを残さないこと
の2点である。重要なのは,これらの点を「厳守」すること。そうすれば,先に挙げた事例の問題点は解消される。ちなみに,公開サーバーに置くべきでないファイルとしては以下のようなものが挙げられる。
・全ユーザーに読み取りもしくは読み書き可能なファイル
・.tmp, .bakや.tar.gz,.xxx~など,バックアップによく用いられる拡張子のファイル(ツールが自動生成するものを含む)
・同一ディレクトリに置かれた似たようなファイルの中で,パーミッション設定がひとつだけ異なるもの
・プログラムのソースコード
公開サーバーにおいて,万が一悪意ある第三者に侵入を許したとき,攻撃者が取得している権限が一般ユーザー権限なら被害を食い止められるかもしれない。少なくとも攻撃者が全権(root)を取得するまでの時間を稼げる可能性は残る。社内のファイル・サーバーなどのアクセス権も同様である。
最近よく話題に上るWebアプリケーションのぜい弱性を考える場合も,アクセス権の適切な設定は基本的な対策になる。例えばWebアプリケーションにOSコマンド・インジェクションのぜい弱性が存在する場合,Webサーバーの実行権限が正しく設定されていれば,そのぜい弱性を利用して実行できる行為は制限される。
奥村 亮
インターネットセキュリティシステムズ
プロフェッショナルサービス本部コンサルティング部
第一コンサルティング課 セキュリティコンサルタント
ITpro Securityが提供する「今週のSecurity Check」は,セキュリティに関する技術コラムです。セキュリティ・ベンダーである「インターネット セキュリティ システムズ株式会社」のスタッフの方々を執筆陣に迎え,同社のセキュリティ・オペレーション・センター(SOC)で観測した攻撃の傾向や,セキュリティ・コンサルタントが現場で得たエッセンスなどを織り交ぜながら,セキュリティに関する技術や最新動向などを分かりやすく解説していただきます。(編集部より) |