Go to main content
Oracle® Solaris 11 セキュリティー開発者ガイド

印刷ビューの終了

更新: 2016 年 11 月
 
 

システムセキュリティー

システムのセキュリティーに関して、Oracle Solaris OS はプロセス特権を提供します。「プロセス特権」は、特権付きアプリケーションへのアクセス許可を行う際に、スーパーユーザーベースの UNIX 標準モデルに対する代替技術として使用できます。システム管理者は、特権付きアプリケーションへのアクセスを許可する一連のプロセス特権をユーザーに付与します。そうしたユーザーは、スーパーユーザーにならなくても、特権付きアプリケーションを使用できます。

特権を使用すれば、システム管理者は、システムセキュリティーをオーバーライドする権限をユーザーに与える際に、完全なスーパーユーザー権限ではなく制限された権限を与えることができます。したがって、新しい特権付きアプリケーションを作成する開発者は、UID が 0 かどうかを検査するのではなく、特定の特権の有無を検査する必要があります。特権付きアプリケーションの開発を参照してください。

きわめて強固なシステムセキュリティーを実現するために、Oracle Solaris OS には Trusted Extensions 機能が提供されていますが、この機能についてはこのドキュメントでは扱いません。Trusted Extensions 機能を使用すれば、システム管理者は、特定のユーザーだけがアクセスできるアプリケーションやファイルを指定できます。詳細は、Trusted Extensions Developer’s GuideおよびTrusted Extensions ユーザーズガイドを参照してください。

    Oracle Solaris が提供する公開セキュリティーインタフェースは、次のとおりです。

  • 暗号化フレームワーク – 暗号化フレームワークは、Oracle Solaris OS の暗号化サービスの土台です。このフレームワークは、暗号化サービスのコンシューマとプロバイダに対し、標準の Extended PKCS#11, v2.20 Amendment 3 Library (以降、PKCS #11 と呼ぶ) インタフェースを提供します。このフレームワークは 2 つの部分から構成されています。 1 つはユーザーレベルアプリケーション用のユーザー暗号化フレームワーク、もう 1 つはカーネルレベルモジュール用のカーネル暗号化フレームワークです。フレームワークに接続するコンシューマは、インストールされている暗号化メカニズムに関する特別な知識を要求されません。フレームワークにプラグインするプロバイダは、さまざまな種類のコンシューマが要求する特別なコードを用意する必要がありません。

    暗号化フレームワークのコンシューマとしては、セキュリティープロトコル、特定のメカニズム、暗号化を必要とするアプリケーションなどが挙げられます。このフレームワークのプロバイダとなるのは、ハードウェアプラグインやソフトウェアプラグイン内の暗号化メカニズムやその他のメカニズムです。暗号化フレームワークの概要については、Oracle Solaris 暗号化フレームワークの紹介を参照してください。このフレームワークのサービスを使用するユーザーレベルアプリケーションの記述方法を学ぶには、ユーザーレベルの暗号化アプリケーションの記述を参照してください。

    暗号化フレームワークのライブラリは、RSA PKCS #11 仕様を実装したものです。コンシューマとプロバイダはどちらも、標準 PKCS #11 呼び出しを使ってユーザーレベル暗号化フレームワークと通信します。

  • Java API – Java セキュリティーテクノロジには多数の API やツールのほか、一般的に使用されるセキュリティーアルゴリズム、メカニズム、およびプロトコルの実装が含まれています。Java セキュリティー API は、暗号化や公開鍵インフラストラクチャー、セキュアな通信、認証、アクセス制御など、広範な領域をカバーします。Java セキュリティーテクノロジは、アプリケーションを記述するための包括的なセキュリティーフレームワークを開発者に提供するとともに、アプリケーションを安全に管理するためのツール群をユーザーや管理者に提供します。http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136007.html を参照してください。

アドレス空間配置のランダム化 (ASLR)

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]

modeenable または 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 を一時的に無効にすることができます。

  • システム全体で ASLR を一時的に無効にする

    % sxadm disable aslr
  • ld または elfedit コマンドを使用して、指定のバイナリで ASLR を無効にするようにタグ付けする

  • ASLR が無効になったシェルを確立し、そこでデバッグを実行する

    % sxadm exec -s aslr=disable /bin/bash 

    注 -  この ASLR の変更は、SUID または特権付きバイナリには適用できません。

詳細は、sxadm(1M) のマニュアルページおよびOracle Solaris 11 セキュリティーと強化ガイドライン の 第 2 章, Oracle Solaris セキュリティーの構成を参照してください。