Exec Shield: Linuxシステムのセキュリティ強化プロジェクト
Exec Shieldは、2002年後半に
レッドハットによって開始されたプロジェクトで、
Linuxシステムに対するワームなどの自動化された攻撃のリスクを軽減するための取り組みです。このプロジェクトの初期の成果として、
Linuxカーネル用のセキュリティ
パッチが用意され、特に
NXビットがハードウェアで実装されていないx86系
マイクロプロセッサ向けにエミュレートされました。Exec Shieldには、その他にも数多くの機能が付随していますが、初期の
パッチを指す場合もあります。
概要
Exec Shieldの最初の
パッチでは、メモリの利用方法を厳格に管理しています。具体的には、データ用メモリページを実行不可能にし、コード用メモリページを読み書きできない状態とします。この措置によって、攻撃者がバッファオーバーランなどの手法を用いてデータ内に悪意のあるコードを挿入することが困難になります。また、この仕組みではmmap()の利用やヒープのベースアドレスのASLR(Address Space Layout Randomization)を実施し、
シェルコードの挿入や実行も難しくします。
再コンパイルなしでExec Shieldを導入できますが、一部のアプリケーション(例:Mono、
Wine、XEmacs)は動作にわずかな変更が生じる場合があります。Exec Shieldプロジェクトは、Position Independent Executables(PIE)などの
Linuxカーネル用ASLR
パッチ、glibc内部のセキュリティチェックの強化、GCC Fortify Source機能、GCC
スタックプロテクタの移植と統合といったさまざまな機能を生み出しています。
実装 Details
Exec Shieldは、x86
CPUのコードセグメント境界を活用する形で実装されています。その結果、非常に軽量であり、メモリの利用効率を高めることができますが、仮想メモリの配置を完全に保護するわけではありません。たとえば、mprotect()によって実行可能な範囲を広げると、その範囲内における保護が無効になります。この点については、Ingo Molnarが電子メールを通じて指摘しています。しかし、多くのアプリケーションにとっては大きな問題とはなりません。特に、重要な
スタックは、アプリケーションが実行可能に指定しない限り、実行できない状態に保たれます。
2004年8月時点では、Exec Shieldプロジェクトの成果物がmprotect()の制限を設けていないため、古い実行不可能なメモリでも必要に応じて実行可能に変更できる可能性があります。カーネルは、アプリケーションに対して同時にメモリページを実行可能かつ書き込み可能にすることがあり得ますが、Fedora Coreディストリビューションの標準ポリシーでは、SE
Linuxとの併用を通じて、互換性の理由から一部の例外を除いて、ほとんどの実行ファイルのそのような動作は禁止されています。
歴史
Exec Shieldの開発には、
レッドハットのさまざまなエンジニアが関与しました。最初の
パッチをリリースしたのはIngo Molnarで、2003年5月に行われました。この
パッチはFedora Core 1から6、そしてRed Hat Enterprise
Linux 3(update 3)から4で採用されました。他にも、Jakub JelínekやUlrich Drepper、Richard Henderson、Arjan van de Venなど、多数の人々がこのプロジェクトに貢献しています。
関連項目
外部リンク
- - [Ingo Molnar's Exec Shield patch web page]
- - [Newsforge Feature Article]
- - [Red Hat Magazine Feature/Project Article]
- - [Exec Shieldの問題点]