コンテンツにスキップ

FreeBSD/Address Space Layout Randomization

出典: フリー教科書『ウィキブックス(Wikibooks)』

ASLR(Address Space Layout Randomization)は、コンピュータのセキュリティ機能の一つで、メモリ空間のレイアウトをランダム化する技術です。FreeBSDでもこの機能をサポートしており、攻撃者が脆弱性を悪用する際に必要な情報(例えばスタックやヒープのアドレス)を特定しにくくすることで、バッファオーバーフローやリターン・オリエンテッド・プログラミング(ROP)といった攻撃の成功率を下げる役割を果たします。

FreeBSDにおけるASLRの特徴

[編集]
  1. ランダム化の仕組み
    • プロセスの実行中に割り当てられるメモリアドレス(スタック、ヒープ、共有ライブラリなど)の配置をランダムにする。
    • これにより、攻撃者が特定のアドレスを狙った攻撃を繰り返すことが難しくなります。
  1. 対象バイナリ
    • FreeBSDでは、32ビットバイナリ(elf32)および64ビットバイナリ(elf64)に対してASLRを適用できます。
  1. 柔軟な制御
    • システム全体でASLRを有効化・無効化することが可能。
    • 特定のバイナリやアプリケーションに対して個別にASLRの適用を禁止することもできます。

ASLRの有効化手順

[編集]

FreeBSDではASLRがデフォルトで無効になっているため、有効化するには以下の手順を実行します。

現在のASLRの状態を確認

[編集]
sysctl kern.elf64.aslr.enable
  • 結果が 0 の場合、ASLRは無効です。

一時的にASLRを有効化

[編集]
sysctl kern.elf64.aslr.enable=1
sysctl kern.elf32.aslr.enable=1
  • 64ビットおよび32ビットバイナリでASLRを有効化します。

再起動後も有効化を維持する

[編集]

/boot/loader.conf ファイルに以下を追加します:

/boot/loader.conf
kern.elf64.aslr.enable=1
kern.elf32.aslr.enable=1

特定のバイナリでASLRを無効化

[編集]

一部のプログラム(例えば、デバッグ用途のアプリケーションや互換性に問題があるもの)では、ASLRが正常に動作しない場合があります。その場合は以下のコマンドでASLRを無効化できます:

elfctl -e +noaslr /path/to/binary
  • このコマンドは指定したバイナリでASLRを無効化する設定を適用します。

特定のプロセスでASLRの設定を確認

[編集]

現在実行中のプロセスに対するASLRの有効化状態を確認するには、以下のコマンドを使用します:

proccontrol -m aslr -q -p <プロセスID>
  • <プロセスID> の部分を確認したいプロセスのIDに置き換えて実行してください。
  • このコマンドは指定したプロセスのASLR有効化状態(有効/無効)を照会します。

新規プロセスでASLRを無効化

[編集]

特定のバイナリをASLR無効の状態で実行する場合は、以下のコマンドを使用します:

proccontrol -m aslr -s disable /path/to/binary
  • このコマンドは新しいプロセスをASLR無効化状態で起動します。
  • /path/to/binary を実行したいプログラムのパスに置き換えてください。

注意点

[編集]
  1. 互換性の問題
    • 一部のプログラムはASLRの影響で動作に問題が生じる可能性があります。その際には個別に無効化する対応が必要です。
  2. セキュリティ強化の一環
    • ASLRはセキュリティ対策の一つに過ぎません。他の対策(例:スタックカナリア、PIE(Position Independent Executables)、データ実行防止(DEP))と併用することで、システム全体の安全性を向上させます。
  3. 設定の影響範囲
    • ASLRはカーネル全体の設定を変更するため、システム全体に影響を与える可能性があります。慎重に設定してください。

まとめ

[編集]

FreeBSDにおけるASLRは、メモリ空間のランダム化を通じて、攻撃者が脆弱性を利用して悪意のあるコードを実行するのを難しくする重要なセキュリティ機能です。適切に設定すればシステムのセキュリティを強化できますが、互換性に注意しながら運用することが重要です。

下位階層のページ

[編集]