実装について 前田俊行.

Slides:



Advertisements
Similar presentations
2006/10/26 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
Advertisements

プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
Chapter11-4(前半) 加藤健.
セキュリティ機構のオフロードを考慮した仮想マシンへの動的メモリ割当
オペレーティングシステム i386アーキテクチャ(3)
榮樂 英樹 LilyVM と仮想化技術 榮樂 英樹
Webサービスに関する基本用語 Masatoshi Ohishi / NAOJ & Sokendai
ISD実習E 2009年6月29日 LISPシステム入門 (第5回) 関数ポインタ eval システム関数.
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
データ構造とアルゴリズム 第10回 mallocとfree
坂井 修一 東京大学 大学院 情報理工学系研究科 電子情報学専攻 東京大学 工学部 電気工学科
中村孝介(九州工業大学) 光来健一(九州工業大学/JST CREST)
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
App. A アセンブラ、リンカ、 SPIMシミュレータ
侵入検知システム(IDS) 停止 IDS サーバへの不正アクセスが増加している
2006/10/19 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井英二郎
担当:青木義満、篠埜 功 情報工学科 3年生対象 専門科目 システムプログラミング 第8回、第9回 シグナル処理 担当:青木義満、篠埜 功
第3回 CPUの管理と例外処理 OSによるハードウェアの管理 CPUの構成、動作 CPUの管理 例外処理、割り込み処理 コンテキストスイッチ
オペレーティングシステム (割り込み処理)
Linuxカーネルについて 2014/01.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
問2.9 割り込みB 割り込みA 割り込みC (msec) 開始 停止 終了 走行レベル4 走行レベル3
オペレーティングシステム i386アーキテクチャ(2)
割り込み.
割り込み.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
シグナル通信 普通の割込みとソフトウェア割込み ソフトウェア割込みとシグナル キーボードからのシグナル 例外 (exception)
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
アスペクト指向プログラミングを用いたIDSオフロード
タイムスタンプ付ストリームI/Oによる音の実時間処理
TAL : Typed Assembly Language について
型付きアセンブリ言語を用いた安全なカーネル拡張
Windows 2000 拡張カーネルの技術紹介 2018年6月10日 黒翼猫.
Linux Device Driver 輪講 2. モジュールの作成と実行
全体ミーティング 金田憲二.
仮想計算機を用いて OSを介さずに行う安全な ファイルアクセス制御
インターネットにおける真に プライベートなネットワークの構築
実行時情報に基づく OSカーネルのコンフィグ最小化
オペレーティングシステム イントロダクション
仮想機械 温故知新 前田俊行 東京大学米澤研究室.
A Provably Sound TAL for Back-end Optimization について
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
クラウドにおけるIntel SGXを用いた VMの安全な監視機構
全体ミーティング 6月6日 島本 大輔(M2) 2006年6月6日(火).
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第6回 システムプログラミング概要 プロセスの生成 担当:青木義満
オペレーティングシステムJ/K 2004年11月15日2時限目
オペレーティングシステム i386アーキテクチャ(1)
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
仮想環境を用いた 侵入検知システムの安全な構成法
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
プログラミング 3 2 次元配列.
マイグレーションを支援する分散集合オブジェクト
コンピュータアーキテクチャ 第 2 回.
プログラムが実行されるまで 2002年4月14日 海谷 治彦.
システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功.
コンピュータアーキテクチャ 第 2 回.
Mondriaan Memory Protection の調査
計算機アーキテクチャ1 (計算機構成論(再)) 第二回 命令の種類と形式
ネットワーク・プログラミング デバイスドライバと環境変数.
SpectreとMeltdown ITソリューション塾・第27期 2018年3月20日 株式会社アプライド・マーケティング 大越 章司
第5回 プログラミングⅡ 第5回
SMP/マルチコアに対応した 型付きアセンブリ言語
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
X64 函数呼び出し規約 長谷川啓
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
情報処理Ⅱ 2005年11月25日(金).
L4-Linux のメモリ管理における問題点とその解決策
TList リスト構造とは? 複数のデータを扱うために、 データの内容と、次のデータへのポインタを持つ構造体を使う。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

実装について 前田俊行

実装の特徴 最小限の労力で実装した 既存のLinuxカーネルの機能をフル活用する Linuxカーネル本体を改造せずにすんだ

実装した2つの仕組み カーネル内でプログラムを実行する仕組み カーネル内からシステムコールを実行する仕組み

カーネル内でプログラムを実行する仕組み Linuxのカーネルモジュールの機構を利用 安全性はTALの型チェックにより保証される メモリ安全性と制御フロー安全性を保証

Linuxカーネルモジュール機構の仕組み 任意のプログラムをカーネル空間にロードする機能 シンボル管理機能

任意のプログラムをカーネル空間にロードする機能 Linuxでは任意のメモリイメージを カーネル空間にロードすることができる 参考 : create_module(2) init_module(2)

シンボル管理機能 カーネル空間 プログラム プログラム 参考 : procfs(5) load load jmp jmp tableA 0xe000 jmp jmp routineB 0xc000 1 :プログラム中のメモリアドレスを 「穴」としておき さらに名前をつけておく 3 : プログラムのロード時に 「穴」が埋められる tableA 0xe000 routineB 0xc000 2 : カーネルは 名前とアドレスの対応表 を用意しておく 参考 : procfs(5)

カーネル内でプログラムを実行する仕組みの全体像 3 : 安全ならばLinuxの カーネルモジュール機能を 用いてロード 1 : TALでプログラムを作成 型チェッカ 2 : TALの型チェッカで安全性チェック

カーネル内からシステムコールを実行する仕組み Linuxシステムコールのシステム関数を直接呼び出すことで実現

Linuxシステムコールの仕組み その1 : 割り込み発生 ユーザプログラムはシステムコールを実行するために割り込みを発生させる … // 引数の準備 … // システムコール番号の … // 指定など int 0x80 プログラム ユーザモード 割り込み発生! カーネルモード システムコール実行のために 特権モードへ遷移

Linuxシステムコールの仕組み その2 : システム関数の実行 カーネルはユーザプログラムから指定された番号をもとにシステム関数をシステム関数表から探し出し、実行する システム関数 sys_read システム関数表 システム関数 sys_write 1 2 システム関数 sys_open システムコール番号 3 4 システム関数 sys_execve 5 6

Linuxシステムコールの仕組み その3 : 割り込み終了 システム関数の実行が終了したら割り込み処理を終了し、ユーザプログラムへ帰る … // 返り値やエラー値の … // 指定 iret カーネル カーネルモード 割り込み処理終了 ユーザモード 一般モードへ遷移

カーネル内からシステムコールを呼び出す仕組みの全体像 直接システム関数を呼び出す カーネル空間 プログラム システム関数 sys_open … // 引数の準備 … jmp sys_open 直接呼び出し 安全性はTALの型チェックで保証

細かい話 :システム関数の 直接呼出について 現在の実装では、Linuxのそのままのシステム関数を利用しているので、直接呼び出す前(後)に前(後)処理を行っている 引数のマーシャリング、アンマーシャリング CとTALの配列のデータ表現間の相互変換 PopcornとCの呼び出し規約の違いの吸収 ただし、これは最新のPopcornでは解決されている

現在の実装の問題 実行できるユーザプログラムのサイズ、数に制限がある スタックオーバーフローを考慮していない ユーザプログラムがカーネルに常駐するため スタックオーバーフローを考慮していない スタックがオーバーフローしたら、さようなら

新しい実装方式の模索 プログラムを通常のユーザプロセスで実行する ただし、プロセスの特権レベルをカーネルと同じレベルにする Linuxなどではカーネル空間がユーザ空間の一部としてマップされていることを利用

新しい実装方式の問題 スタックの扱いが複雑 細かい話は長くなるので省略 特に割り込みスタック IA32の仕様がまずい

まとめ 既存のLinuxの機能を利用してカーネルを改造することなく実装した カーネルモジュールのロード機能を利用 システムコール関数を利用