ホストのセキュリティ 情報工学専攻 1年 赤木里騎 P151~172.

Slides:



Advertisements
Similar presentations
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
Advertisements

Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
2006/10/26 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
安全なログオン手順 2004/08/26 Port139 伊原 秀明.
セキュリティ機構のオフロードを考慮した仮想マシンへの動的メモリ割当
Android と iPhone (仮題) 情報社会とコンピュータ 第13回
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
IaaS 仮想マシン(VM)をネットワーク経由で提供 負荷に応じてVM数や性能を変更できる ハードウェアの導入・管理・維持コストの削減
データ構造とアルゴリズム 第10回 mallocとfree
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
App. A アセンブラ、リンカ、 SPIMシミュレータ
OSが乗っ取られた場合にも機能するファイルアクセス制御システム
侵入検知システム(IDS) 停止 IDS サーバへの不正アクセスが増加している
2007/1/18 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
第8回 プログラミングⅡ 第8回
2006/10/19 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井英二郎
担当:青木義満、篠埜 功 情報工学科 3年生対象 専門科目 システムプログラミング 第8回、第9回 シグナル処理 担当:青木義満、篠埜 功
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
第8章 Web技術とセキュリティ   岡本 好未.
型付きアセンブリ言語を用いた安全なカーネル拡張
プログラミング論 関数ポインタ と 応用(qsort)
RPC:Remote Procedure Call Protocol Specification
7. セキュリティネットワーク (ファイアウォール)
仮想計算機を用いて OSを介さずに行う安全な ファイルアクセス制御
セキュリティ(3) 05A2013 大川内 斉.
サイバーセキュリティ バッファオーバフロー
Cプログラミング演習 第7回 メモリ内でのデータの配置.
アルゴリズムとデータ構造 補足資料11-1 「mallocとfree」
実行時情報に基づく OSカーネルのコンフィグ最小化
メモリの準備 メモリには、その準備の方法で2種類ある。 静的変数: コンパイル時にすでにメモリのサイズがわかっているもの。 普通の変数宣言
RD セッション ホストにおける RDC クライアントの シングル サインオン (SSO) について
セキュリティ(2) 05A2013 大川内 斉.
第7回 プログラミングⅡ 第7回
Webセキュリティ 情報工学専攻 1年 赤木里騎 P226~241.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
クラウドにおけるIntel SGXを用いた VMの安全な監視機構
クラウドにおけるVMリダイレクト攻撃を防ぐためのリモート管理機構
プログラミング基礎B 文字列の扱い.
Intel SGXを用いた仮想マシンの 安全な監視機構
オブジェクト指向プログラミングと開発環境
配列変数とポインタ 静的確保と動的確保 ポインタ配列 2次元配列 時間計測 第1回レポートの課題
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
仮想環境を用いた 侵入検知システムの安全な構成法
C言語 はじめに 2016年 吉田研究室.
Cell/B.E.のSPE Isolationモードを用いた監視システム
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
アルゴリズムとプログラミング (Algorithms and Programming)
マイグレーションを支援する分散集合オブジェクト
実装について 前田俊行.
コンピュータアーキテクチャ 第 5 回.
VMリダイレクト攻撃を防ぐための 安全なリモート管理機構
アルゴリズムとデータ構造1 2009年6月15日
ネットワーク・プログラミング デバイスドライバと環境変数.
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
コンピュータアーキテクチャ 第 5 回.
SMP/マルチコアに対応した 型付きアセンブリ言語
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
コンパイラ 第12回 実行時環境 ― 変数と関数 ― 38号館4階N-411 内線5459
アルゴリズムとデータ構造 2010年6月17日
プログラミング演習I 2003年6月11日(第9回) 木村巌.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

ホストのセキュリティ 情報工学専攻 1年 赤木里騎 P151~172

過去何年にもわたって猛威を振るってきたが、現在でも最も重 大な脆弱性の一つとして存在している 6.1 バッファーオーバーフローの概要 バッファーオーバーフローとは… 遠隔もしくはローカルから対象とするコンピュータのメモリに 不正なデータや実行コードを書き込み、不正に権限を取得した りシステムへの侵入を引き起こしたりする脆弱性 過去何年にもわたって猛威を振るってきたが、現在でも最も重 大な脆弱性の一つとして存在している

6.1.1 バッファーオーバーフローの仕組み バッファー… プログラムの実行中にデータ保持のためのメモリ領域 6.1 バッファーオーバーフローの概要 6.1.1 バッファーオーバーフローの仕組み バッファー… プログラムの実行中にデータ保持のためのメモリ領域 CやC++などではスタック領域とヒープ領域とよばれる バッファーオーバーフロー… プログラム実行時に領域を超えてデータを入れようとすると境 界を超えた部分から後ろが上書きされる プログラムの誤作動 一見何の変化もないようにして実行を続ける

ある関数が呼び出された後に参照されるメモリ上の番地がバッファー直後のメモリ空間に記されているとする 6.1 バッファーオーバーフローの概要 6.1.1 バッファーオーバーフローの仕組み バッファーオーバーフローを利用した悪用例 正常な状態 ある関数が呼び出された後に参照されるメモリ上の番地がバッファー直後のメモリ空間に記されているとする バッファー スタック リターンアドレス

6.1.1 バッファーオーバーフローの仕組み バッファーオーバーフローを利用した悪用例 6.1 バッファーオーバーフローの概要 入力 正常な状態 バッファーのサイズを超えるデータ 入力 バッファー スタック 不正な命令コード 不正な命令コードのアドレス リターンアドレス

6.1.1 バッファーオーバーフローの仕組み バッファーオーバーフローを利用した悪用例 6.1 バッファーオーバーフローの概要 入力 正常な状態 バッファーのサイズを超えるデータ 入力 バッファー スタック 不正な命令コード 不正な命令コードのアドレス リターンアドレス バッファーからあふれる 呼び出された アドレスに戻る

何らかの方法で攻撃者がプログラム実行時にバッファーオーバーフローを引き起こし、リターンアドレスの値を上書きできるとする 6.1 バッファーオーバーフローの概要 6.1.1 バッファーオーバーフローの仕組み バッファーオーバーフローを利用した悪用例 正常な状態 不正なデータが送られた後の状態 バッファーのサイズを超えるデータ 入力 バッファー スタック 不正な命令コード 不正な命令コード バッファーからあふれる部分 不正な命令コードのアドレス リターンアドレス 不正な命令コードのアドレス バッファーからあふれる 何らかの方法で攻撃者がプログラム実行時にバッファーオーバーフローを引き起こし、リターンアドレスの値を上書きできるとする

6.1.1 バッファーオーバーフローの仕組み バッファーオーバーフローを利用した悪用例 6.1 バッファーオーバーフローの概要 入力 正常な状態 不正なデータが送られた後の状態 バッファーのサイズを超えるデータ 入力 バッファー スタック 不正な命令コード 不正な命令コード バッファーからあふれる部分 本来であればリターンアドレスに戻るところが不正なアドレスに戻ってしまう。攻撃者がそこに不正なプログラムを用意していたらそれが実行されてしまう。 不正な命令コードのアドレス リターンアドレス 不正な命令コードのアドレス バッファーからあふれる 攻撃者が上書きされた値が示す場所に悪意あるプログラムを用意し、関数呼び出し後に戻ろうとすると悪意あるプログラムを実行することになる 不正な アドレスに戻る

攻撃者はバッファーオーバーフローを利用してshellコードな どを実行すること 6.2 バッファーオーバーフローを用いた攻撃例 [目的] 攻撃者はバッファーオーバーフローを利用してshellコードな どを実行すること [種類] ローカルでの攻撃 リモートからの攻撃 乗っ取りやプログラムのインストール、設定の変更などが利用可能になる

6.2.1 ローカルでの攻撃 [目的] 高い権限の取得(管理者 or root) [何ができるか] 6.2 バッファーオーバーフローを用いた攻撃例 6.2.1 ローカルでの攻撃 [目的] 高い権限の取得(管理者 or root) [何ができるか] 攻撃対象のプログラムの実行時の高い権限レベルでshellを動 させれば攻撃対象のコンピュータを自由自在に操作できる [対象] ネットワークサーバープログラム等

6.2.2 リモートからの攻撃 [目的] 高い権限の取得 6.2 バッファーオーバーフローを用いた攻撃例 6.2.2 リモートからの攻撃 [目的] 高い権限の取得 ターゲットのサーバプログラムを操作したり、マルウェアをダ ウンロードさせて実行すること [例1] 攻撃者 ターゲット マルウェアが置かれたサイト

①バッファーオーバーフローを引き起こすデータ 6.2 バッファーオーバーフローを用いた攻撃例 6.2.2 リモートからの攻撃 [目的] 高い権限の取得 ターゲットのサーバプログラムを操作したり、マルウェアをダ ウンロードさせて実行すること [例1] ①バッファーオーバーフローを引き起こすデータ 攻撃者 ターゲット マルウェアが置かれたサイト

①バッファーオーバーフローを引き起こすデータ 6.2 バッファーオーバーフローを用いた攻撃例 6.2.2 リモートからの攻撃 [目的] 高い権限の取得 ターゲットのサーバプログラムを操作したり、マルウェアをダ ウンロードさせて実行すること [例1] ①バッファーオーバーフローを引き起こすデータ 攻撃者 ②shellコードを実行させる ターゲット マルウェアが置かれたサイト

①バッファーオーバーフローを引き起こすデータ 6.2 バッファーオーバーフローを用いた攻撃例 6.2.2 リモートからの攻撃 [目的] 高い権限の取得 ターゲットのサーバプログラムを操作したり、マルウェアをダ ウンロードさせて実行すること [例1] ①バッファーオーバーフローを引き起こすデータ 攻撃者 ②shellコードを実行させる ③shellコードがマルウェア本体をダウンロード ターゲット マルウェアが置かれたサイト

①バッファーオーバーフローを引き起こすデータ 6.2 バッファーオーバーフローを用いた攻撃例 6.2.2 リモートからの攻撃 [目的] 高い権限の取得 ターゲットのサーバプログラムを操作したり、マルウェアをダ ウンロードさせて実行すること [例1] ①バッファーオーバーフローを引き起こすデータ 攻撃者 ②shellコードを実行させる ④shellコードがマルウェアを実行 ③shellコードがマルウェア本体をダウンロード ターゲット マルウェアが置かれたサイト

①バッファーオーバーフローを引き起こすデータ 6.2 バッファーオーバーフローを用いた攻撃例 6.2.2 リモートからの攻撃 [目的] 高い権限の取得 ターゲットのサーバプログラムを操作したり、マルウェアをダ ウンロードさせて実行すること [例2] ①バッファーオーバーフローを引き起こすデータ 攻撃者 ターゲット

①バッファーオーバーフローを引き起こすデータ 6.2 バッファーオーバーフローを用いた攻撃例 6.2.2 リモートからの攻撃 [目的] 高い権限の取得 ターゲットのサーバプログラムを操作したり、マルウェアをダ ウンロードさせて実行すること [例2] ①バッファーオーバーフローを引き起こすデータ ②shellコードを実行させる 攻撃者 ターゲット

①バッファーオーバーフローを引き起こすデータ 6.2 バッファーオーバーフローを用いた攻撃例 6.2.2 リモートからの攻撃 [目的] 高い権限の取得 ターゲットのサーバプログラムを操作したり、マルウェアをダ ウンロードさせて実行すること [例2] ①バッファーオーバーフローを引き起こすデータ ②shellコードを実行させる 攻撃者 ③shellコードによるconnect-back ターゲット

①バッファーオーバーフローを引き起こすデータ 6.2 バッファーオーバーフローを用いた攻撃例 6.2.2 リモートからの攻撃 [目的] 高い権限の取得 ターゲットのサーバプログラムを操作したり、マルウェアをダ ウンロードさせて実行すること [例2] ①バッファーオーバーフローを引き起こすデータ ②shellコードを実行させる 攻撃者 ③shellコードによるconnect-back ④遠隔端末ツールによる操作 ターゲット

6.3.1 プロセスのメモリ配置とスタック プログラム内の変数はコンピュータの内部でプロセス単位で管理 される 6.3 バッファーオーバーフローの詳細と対策 6.3.1 プロセスのメモリ配置とスタック プログラム内の変数はコンピュータの内部でプロセス単位で管理 される それぞれ独立したアドレス(0x00000000~0xFFFFFFFF)を持つ 0xFFFFFFFF プロセスC プロセスB 0x00000000 プロセスA

6.3.1 プロセスのメモリ配置とスタック プログラム内の変数はコンピュータの内部でプロセス単位で管理 される 6.3 バッファーオーバーフローの詳細と対策 6.3.1 プロセスのメモリ配置とスタック プログラム内の変数はコンピュータの内部でプロセス単位で管理 される それぞれ独立したアドレス(0x00000000~0xFFFFFFFF)を持つ 0xFFFFFFFF 0x00000000

6.3.1 プロセスのメモリ配置とスタック プログラム内の変数はコンピュータの内部でプロセス単位で管理 される 6.3 バッファーオーバーフローの詳細と対策 6.3.1 プロセスのメモリ配置とスタック プログラム内の変数はコンピュータの内部でプロセス単位で管理 される それぞれ独立したアドレス(0x00000000~0xFFFFFFFF)を持つ 最高位アドレス側から若いアドレスに向けて割り当てられる スタックセグメント 0xFFFFFFFF 複数プロセスが実行時に共有して利用するライブラリ 共有ライブラリ Cのmalloc関数により動的に確保された領域 ヒープ領域 初期値を持たない静的変数と大域変数は初期値0としてBSSへ BSS 初期値を持つ静的変数と大域変数 データセグメント 実行コード テキストセグメント 0x00000000

6.3.2 プログラム実行時のスタックの様子 6.3 バッファーオーバーフローの詳細と対策 0xFFFFFFFF int a 1: 2: 3: 4: 5: 6: 7: ・ 101: 102: 103: 104: 105: int main() { int a; foo(a); } int foo(int a){ int b; char c[1024]; return 0; スタック の先頭 int a

6.3.2 プログラム実行時のスタックの様子 6.3 バッファーオーバーフローの詳細と対策 0xFFFFFFFF int a 引数 a 1: 2: 3: 4: 5: 6: 7: ・ 101: 102: 103: 104: 105: int main() { int a; foo(a); } int foo(int a){ int b; char c[1024]; return 0; int a 引数 a リターンアドレス スタック の先頭

6.3.2 プログラム実行時のスタックの様子 6.3 バッファーオーバーフローの詳細と対策 0xFFFFFFFF int a 引数 a 1: 2: 3: 4: 5: 6: 7: ・ 101: 102: 103: 104: 105: int main() { int a; foo(a); } int foo(int a){ int b; char c[1024]; return 0; int a 引数 a リターンアドレス ebpレジスタ保存値/ int b char c[1024] スタック の先頭

6.3.2 プログラム実行時のスタックの様子 6.3 バッファーオーバーフローの詳細と対策 0xFFFFFFFF int a 1: 2: 3: 4: 5: 6: 7: ・ 101: 102: 103: 104: 105: int main() { int a; foo(a); } int foo(int a){ int b; char c[1024]; return 0; int a スタック の先頭

6.3.3 スタックオーバーフローの仕組み 6.3 バッファーオーバーフローの詳細と対策 0xFFFFFFFF char data 1: 2: 3: 4: 5: 6: 7: ・ 101: 102: 103: 104: 105: int main() { foo(a); } int foo(char *data){ char c[24]; strcpy(c, data); return 0; スタック の先頭 char data

6.3.3 スタックオーバーフローの仕組み 6.3 バッファーオーバーフローの詳細と対策 0xFFFFFFFF char data 1: 2: 3: 4: 5: 6: 7: ・ 101: 102: 103: 104: 105: int main() { foo(a); } int foo(char *data){ char c[24]; strcpy(c, data); return 0; char data 引数 data リターンアドレス(5行目) スタック の先頭

6.3.3 スタックオーバーフローの仕組み 6.3 バッファーオーバーフローの詳細と対策 0xFFFFFFFF char data 1: 2: 3: 4: 5: 6: 7: ・ 101: 102: 103: 104: 105: int main() { foo(a); } int foo(char *data){ char c[24]; strcpy(c, data); return 0; char data 引数 data リターンアドレス(5行目) ebpレジスタ保存値 char c[24] スタック の先頭

6.3.3 スタックオーバーフローの仕組み 6.3 バッファーオーバーフローの詳細と対策 0xFFFFFFFF char data 1: 2: 3: 4: 5: 6: 7: ・ 101: 102: 103: 104: 105: int main() { foo(a); } int foo(char *data){ char c[24]; strcpy(c, data); return 0; char data 引数 data リターンアドレス(x) ebpレジスタ保存値 char c[24] スタック の先頭 c :24byte data:32byte cよりもdataが大きいためにリターンアドレスが上書きされる

6.3.3 スタックオーバーフローの仕組み 6.3 バッファーオーバーフローの詳細と対策 0xFFFFFFFF char data 1: 2: 3: 4: 5: 6: 7: ・ 101: 102: 103: 104: 105: int main() { foo(a); } int foo(char *data){ char c[24]; strcpy(c, data); return 0; char data 引数 data リターンアドレス(x) ebpレジスタ保存値 char c[24] スタック の先頭 不正な命令コード

6.3.4 ヒープオーバーフローの仕組み スタックオーバーフローに比べ悪用しにくい [理由] 6.3 バッファーオーバーフローの詳細と対策 6.3.4 ヒープオーバーフローの仕組み スタックオーバーフローに比べ悪用しにくい [理由] どのバッファーが攻撃対象となり得るかを調べらければならない 攻撃できるバッファー領域を見つけても、攻撃者が書き込むバッ ファー領域が攻撃対象となるバッファー領域よりも下位のアドレ スでなければならない

攻撃対象となるプログラムの実行時に重要なバッファー領域の下位 のアドレス領域に任意にデータを埋め込めること 6.3 バッファーオーバーフローの詳細と対策 6.3.4 ヒープオーバーフローの仕組み [ヒープオーバーフロー成功のカギ] どのバッファーが攻撃対象となり得るかを調べらければならない 攻撃対象となるプログラムの閲覧が可能 攻撃者が書き込むバッファー領域が攻撃対象となるバッファー領 域よりも下位のアドレスでなければならない 攻撃対象となるプログラムの実行時に重要なバッファー領域の下位 のアドレス領域に任意にデータを埋め込めること

6.3.5 ヒープオーバーフロー攻撃の例 6.3 バッファーオーバーフローの詳細と対策 1: 2: 3: 4: 5: 6: 7: 8: 9 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: #include<stdio.h> #include<malloc.h> #include<string.h> void main() { char *a = (char *)malloc(sizeof(char)*4); char *b = (char *)malloc(sizeof(char)*4); char *tmp; printf(“Address of a is: %p\n”, a); printf(“Address of b is: %p\n”, b); strcpy(a, “abc”); strcpy(b, “efg”); tmp = a; while(tmp < b + 4){ printf(“%p: %c (0x%x) \n”, tmp, isprint(*tmp)? *tmp: ‘?’, (unsigned int)(*tmp)); tmp += 1; } 6,7行目でポインタ変数a,bが示すバッファー領域を確保 9,10行目でバッファーが存在するアドレスを表示させる 12,13行目で文字列を代入 16~20行目で変数aが示すバッファー領域から変数bが示すバッファー領域までを表示させる →データが表示不可能な場合は“?”が表示させる

6.3.5 ヒープオーバーフロー攻撃の例 6.3 バッファーオーバーフローの詳細と対策 … 1: 2: 3: 4: 5: 6: 7: 8: 9 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: #include<stdio.h> #include<malloc.h> #include<string.h> void main() { char *a = (char *)malloc(sizeof(char)*4); char *b = (char *)malloc(sizeof(char)*4); char *tmp; printf(“Address of a is: %p\n”, a); printf(“Address of b is: %p\n”, b); strcpy(a, “abc”); strcpy(b, “efg”); tmp = a; while(tmp < b + 4){ printf(“%p: %c (0x%x) \n”, tmp, isprint(*tmp)? *tmp: ‘?’, (unsigned int)(*tmp)); tmp += 1; } $ ./a.out Address of a is: 0x1d2f010 Address of b is: 0x1d2f030 0x1d2f010: a (0x61) 0x1d2f011: b (0x62) 0x1d2f012: c (0x63) 0x1d2f013: ? (0x0) 0x1d2f02e: ? (0x0) 0x1d2f02f: ? (0x0) 0x1d2f030: e (0x65) 0x1d2f031: f (0x66) 0x1d2f032: g (0x67) … 変数aと変数bが示すバッファー領域は隣接していないが、何度も実行するとa,b間の領域は常に等間隔である。そのため、変数aのバッファー領域を溢れさせれば変数bのバッファー領域を書き換えることができる(ヒープオーバーフロー)

6.3.6 バッファーオーバーフローを招く関数 バッファーオーバーフローを引き起こす危険がある関数 6.3 バッファーオーバーフローの詳細と対策 6.3.6 バッファーオーバーフローを招く関数 バッファーオーバーフローを引き起こす危険がある関数 gets sprintf vfscanf vsscanf strtrns strcpy scanf streadd strcat fscanf vscanf strecpy 例:getsは格納先バッファーの境界チェックを行わない 対策1:fgets(バッファーの書き込みサイズを指定できる)を利用する 対策2:プログラマ自身が境界領域をチェックする

6.3.7 その他のバッファーオーバーフロー対策 OSやアプリ利用者・運用者という観点では提供されるセキュ リティパッチを当てること 6.3 バッファーオーバーフローの詳細と対策 6.3.7 その他のバッファーオーバーフロー対策 OSやアプリ利用者・運用者という観点では提供されるセキュ リティパッチを当てること 開発者の観点ではC/C++やアセンブリ以外の言語を使用する こと(根本的な解決ではないが…) Cのアプリに対してバッファーオーバーフロー対策をしてくれ るコンパイラを用いる 最近のOSではセキュリティ対策としてアドレス空間配置のラ ンダム化の技術が採用されている場合もある

6.4.1 セキュアOS Secure OS 強制アクセス制御機能および最小特権機能を実装したOS 強制アクセス制御 操作する主体と操作される対象をそれぞれ段階分けして、その 段階に応じてシステムが強制的にアクセス権限を決定する方式

6.4.1 セキュアOS Secure OS 強制アクセス制御機能および最小特権機能を実装したOS 操作する主体と操作される対象をそれぞれ段階分けして、その 段階に応じてシステムが強制的にアクセス権限を決定する方式 任意サクセス制御は操作される対象の所有者が操作される対象の権限を設定することができる ユーザー(利用者) アプリケーション ファイルやディレクトリ等のコンピュータリソース

6.4 セキュアOSとセキュアブート 6.4.2 LinuxにおけるセキュアOS SELinux(Secrity-Enhanced Linux) …プロセスごとにラベル を付けることで対象にタイプ付けをする AppArmor…アプリごとのアクセス制御可能、パス名ベースの アクセス制御(対象のフルパス名を要素の識別に利用) TOMOYO Linux …パス名ベースのアクセス制御、ポリシーの 自動学習機能 LSM(Linux Security Modules) …様々なセキュアOSをサポー トするためにLinuxカーネルに追加されたフレームワーク Secrity-Enhanced Linux -> セキュリティを強化したLinux カーネル→OSの中心機能群

6.4 セキュアOSとセキュアブート 6.4.3 セキュアブート カーネル自体や共有ライブラリを 書き換える技術をツール化したもの 何らかの手段で攻撃者がホストへのルートキットのインストール に成功してしまうと、カーネルから提供される情報すべてが全て 攻撃者の都合の良いように改ざんされてしまう セキュアブートと呼ばれる、許可されていないOSやドライバー が起動時に実行されないようにする仕組みが提案された

6.4.3 セキュアブート 6.4 セキュアOSとセキュアブート 通常のブートシーケンス例 セキュアブートシーケンス Windowsログオン マルウェア対策ソフト ドライバー ドライバー マルウェア対策ソフト OSローダー OSローダー UEFI->Unified Extensible Firmware Interface(統一された拡張ファームウェアインタフェース) BIOS UEFIモジュール ハードウェア ハードウェア

6.4.3 セキュアブート 6.4 セキュアOSとセキュアブート 通常のブートシーケンス例 セキュアブートシーケンス Windowsログオン マルウェア対策ソフト ドライバー ドライバー マルウェア対策ソフト OSローダー OSローダー UEFI->Unified Extensible Firmware Interface(統一された拡張ファームウェアインタフェース) BIOS UEFIモジュール ハードウェア ハードウェア OSローダーが攻撃者によって改ざんされていると、その後に呼び出されるマルウェア対策ソフトが有効に機能しない

6.4.3 セキュアブート 6.4 セキュアOSとセキュアブート マルウェア対策ソフト起動までに検証を行うため、安全な起動を行うことができる 通常のブートシーケンス例 セキュアブートシーケンス Windowsログオン Windowsログオン マルウェア対策ソフト ドライバー ドライバー 検証 -ディジタル署名等を用いる マルウェア対策ソフト OSローダー OSローダー UEFI->Unified Extensible Firmware Interface(統一された拡張ファームウェアインタフェース) BIOS UEFIモジュール ハードウェア ハードウェア 起動を許可するソフトウェアのハッシュ値やディジタル署名をする主体を登録 OSローダーが攻撃者によって改ざんされていると、その後に呼び出されるマルウェア対策ソフトが有効に機能しない

サイバーセキュリティーニュース 多数メールクライアントに送信者偽装できる「Mailsploit」が判明 - 送信ドメイン認証では防げず http://www.security-next.com/088220