ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris 11 セキュリティーサービス開発ガイド Oracle Solaris 11.1 Information Library (日本語) |
1. Oracle Solaris の開発者向けセキュリティー機能 (概要)
Oracle Solaris の開発者向けセキュリティー機能の概要
3. PAM アプリケーションおよび PAM サービスの記述
8. Oracle Solaris 暗号化フレームワークの紹介
システムのセキュリティーに関して、Oracle Solaris OS はプロセス特権を提供します。「プロセス特権」は、特権付きアプリケーションへのアクセス許可を行う際に、スーパーユーザーベースの UNIX 標準モデルに対する代替技術として使用できます。システム管理者は、特権付きアプリケーションへのアクセスを許可する一連のプロセス特権をユーザーに付与します。そうしたユーザーは、スーパーユーザーにならなくても、特権付きアプリケーションを使用できます。
特権を使用すれば、システム管理者は、システムセキュリティーをオーバーライドする権限をユーザーに与える際に、完全なスーパーユーザー権限ではなく制限された権限を与えることができます。したがって、新しい特権付きアプリケーションを作成する開発者は、UID が 0 かどうかを検査するのではなく、特定の特権の有無を検査する必要があります。第 2 章特権付きアプリケーションの開発を参照してください。
きわめて強固なシステムセキュリティーを実現するために、Oracle Solaris OS には Trusted Extensions 機能が提供されていますが、この機能についてはこのドキュメントでは扱いません。Trusted Extensions 機能を使用すれば、システム管理者は、特定のユーザーだけがアクセスできるアプリケーションやファイルを指定できます。詳細は、『Trusted Extensions Developer’s Guide 』および『Trusted Extensions ユーザーズガイド』を参照してください。
Oracle Solaris が提供する公開 Solaris セキュリティーインタフェースは、次のとおりです。
暗号化フレームワーク – 暗号化フレームワークは、Oracle Solaris OS の暗号化サービスの土台です。このフレームワークは、暗号化サービスのコンシューマとプロバイダに対し、標準の Extended PKCS#11, v2.20 Amendment 3 Library (以下、PKCS #11 と呼ぶ) インタフェースを提供します。このフレームワークは 2 つの部分から構成されています。 1 つはユーザーレベルアプリケーション用のユーザー暗号化フレームワーク、もう 1 つはカーネルレベルモジュール用のカーネル暗号化フレームワークです。フレームワークに接続するコンシューマは、インストールされている暗号化機構に関する特別な知識を要求されません。フレームワークにプラグインするプロバイダは、さまざまな種類のコンシューマが要求する特別なコードを用意する必要がありません。
暗号化フレームワークのコンシューマとしては、セキュリティープロトコル、特定の機構、暗号化を必要とするアプリケーションなどが挙げられます。このフレームワークのプロバイダとなるのは、ハードウェアプラグインやソフトウェアプラグイン内の暗号化機構やその他の機構です。暗号化フレームワークの概要については、第 8 章Oracle Solaris 暗号化フレームワークの紹介を参照してください。このフレームワークのサービスを使用するユーザーレベルアプリケーションの記述方法を学ぶには、第 9 章ユーザーレベルの暗号化アプリケーションの記述を参照してください。
暗号化フレームワークのライブラリは、RSA PKCS #11 仕様を実装したものです。コンシューマとプロバイダはどちらも、標準 PKCS #11 呼び出しを使ってユーザーレベル暗号化フレームワークと通信します。
Java API – Java セキュリティーテクノロジには多数の API やツールのほか、一般的に使用されるセキュリティーアルゴリズム、機構、およびプロトコルの実装が含まれています。Java セキュリティー API は、暗号化や公開鍵インフラストラクチャー、セキュアな通信、認証、アクセス制御など、広範な領域をカバーします。Java セキュリティーテクノロジは、アプリケーションを記述するための包括的なセキュリティーフレームワークを開発者に提供するとともに、アプリケーションを安全に管理するためのツール群をユーザーや管理者に提供します。http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136007.htm を参照してください。
ASLR は、スタック、ライブラリ、brk ベースのヒープといったプロセスのアドレス空間の主要部分の開始アドレスをランダム化する、Oracle Solaris システムの機能です。デフォルトでは、ASLR は ASLR を要求するように明示的にタグ付けされているバイナリに対して有効になります。次のコマンドは、ASLR のステータスに関する情報を提供します。
% sxadm info
EXTENSION STATUS CONFIGURATION aslr enable (tagged-files) enable (tagged-files)
新しく作成されるオブジェクトに ASLR 要求のタグを付けるには、ld(1) コマンドの -z オプションを使用します。使用法は次のとおりです。
ld -z aslr[=mode]
mode は enable または disable に設定できます。mode が指定されていない場合は、enable と見なされます。
次の例は、ASLR を有効にして実行可能ファイルを作成するための -z オプションの使用法を示しています。
% cat hello.c #include <stdio.h> int main(int argc, char **argv) { (void) printf("Hello World!\n"); return (0); } % cc hello.c -z aslr
ASLR タグ付けは、オブジェクトの動的セクションのエントリによって実現され、elfdump(1) で調べることができます。
% elfdump -d a.out | grep ASLR [28] SUNW_ASLR 0x2 ENABLE
elfedit(1) コマンドを使用して、既存のオブジェクトの ASLR 動的エントリを追加または変更することができます。
% cc hello.c % elfedit -e 'dyn:sunw_aslr enable' a.out % elfdump -d a.out | grep ASLR [29] SUNW_ASLR 0x2 ENABLE
% elfedit -e 'dyn:sunw_aslr disable' a.out % elfdump -d a.out | grep ASLR [29] SUNW_ASLR 0x1 DISABLE
あるプロセスに対する ASLR 要求は、そのプロセスの起動時に確立され、プロセスが起動したあとは変更できません。このため、ASLR タグ付けは、プロセスのプライマリ実行可能オブジェクトに対してのみ意味を持ちます。
pmap(1) ユーティリティーを使用して、プロセスのアドレスマッピングを調べることができます。ASLR が有効になっている実行可能ファイルのマッピングを調べる場合、スタック、ライブラリマッピング、および brk ベースのヒープに使用される具体的なアドレスは、呼び出しのたびに異なります。
システムのデフォルト ASLR のデフォルト動作を制御するには、sxadm(1) コマンドを使用します。ASLR を無効にするように明示的にタグ付けされたバイナリは、sxadm によって確立されたシステムのデフォルト動作よりも優先されます。
アドレス空間のランダム化はデバッグ時に問題になることがあります。一部のデバッグ状況では、プログラムを繰り返し呼び出す場合に同じアドレスマッピングを使用する必要があります。次のいずれかの方法で、ASLR を一時的に無効にすることができます。
システム全体で ASLR を一時的に無効にする
% sxadm exec -s aslr=disable /bin/bash
ld または elfedit コマンドを使用して、指定のバイナリで ASLR を無効にするようにタグ付けする
ASLR が無効になったシェルを確立し、そこでデバッグを実行する
% sxadm exec -s aslr=disable /bin/bash
注 - この ASLR の変更は、SUID または特権付きバイナリには適用できません。
詳細は、sxadm(1M) のマニュアルページおよび 『Oracle Solaris 11 セキュリティーガイドライン』の第 2 章「Oracle Solaris セキュリティーの構成」を参照してください。