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

印刷ビューの終了

更新: 2014 年 7 月
 
 

アドレス空間配置のランダム化 (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 exec -s aslr=disable /bin/bash
  • ld または elfedit コマンドを使用して、指定のバイナリで ASLR を無効にするようにタグ付けする

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

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

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

詳細は、sxadm(1M) のマニュアルページおよび Chapter 2, Configuring Oracle Solaris Security, in Oracle Solaris 11 Security Guidelines を参照してください。