memo0000
の編集
http://osecpu.osask.jp/wiki/?memo0000
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
BracketName
FormattingRules
FrontPage
Fulyn
Fulyn-v2
Fulyn_Samples
Help
InterWiki
InterWikiName
InterWikiSandBox
K
KOR_PIT8254
KWVM.NET
Liva
MANA
MenuBar
OSECPU_FPGA
PG_MANA
PHP
PukiWiki
PukiWiki/1.4
PukiWiki/1.4/Manual
PukiWiki/1.4/Manual/Plugin
PukiWiki/1.4/Manual/Plugin/A-D
PukiWiki/1.4/Manual/Plugin/E-G
PukiWiki/1.4/Manual/Plugin/H-K
PukiWiki/1.4/Manual/Plugin/L-N
PukiWiki/1.4/Manual/Plugin/O-R
PukiWiki/1.4/Manual/Plugin/S-U
PukiWiki/1.4/Manual/Plugin/V-Z
RecentDeleted
SandBox
WikiEngines
WikiName
WikiWikiWeb
YukiWiki
hikalium
hikarupsp
hikarupsp_ELCHNOS
hikarupsp_ELCHNOS_IDE
hikarupsp_FrontEndCode
hikarupsp_WebCPU-VM
hikarupsp_WebCPU-VM_internal
hikarupsp_study_hh4
impressions
impressions0000
jpag0000
jpag0001
jpag0002
jpag0003
jpag0004
jpag0005
lambdalice
mandel59
members
memo0000
memo0001
memo0002
memo0003
memo0004
memo0005
memo0006
memo0007
memo0008
memo0009
memo0010
osask
osecpu4android
page0000
page0001
page0002
page0003
page0004
page0005
page0006
page0007
page0008
page0009
page0010
page0011
page0012
page0013
page0014
page0015
page0016
page0017
page0018
page0019
page0020
page0021
page0022
page0023
page0024
page0025
page0026
page0027
page0028
page0029
page0030
page0031
page0032
page0033
page0034
page0035
page0036
page0037
page0038
page0039
page0040
page0041
page0042
page0043
page0044
page0045
page0046
page0047
page0048
page0049
page0050
page0051
page0052
page0053
page0054
page0055
page0056
page0057
page0058
page0059
page0060
page0061
page0062
page0063
page0064
page0065
page0066
page0067
page0068
page0069
page0070
page0071
page0072
page0073
page0074
page0075
page0076
page0077
page0078
page0079
page0080
page0081
page0082
page0083
page0084
page0085
page0086
page0087
page0088
page0089
page0090
page0091
page0092
page0093
page0094
page0095
page0096
page0097
page0098
page0099
page0100
page0101
page0102
page0103
page0104
page0105
page0106
page0107
page0108
page0109
pagenames
populars
seccamp2013
seccamp2014
seccamp2017
ttwilb
ttwilb-asmi
yao
* Kの開発メモ #0000 -(by [[K]], 2012.09.09) -ここは川合の開発の進捗などをレポートするところです。 --当初はその予定だったが、今ではむしろ主たる目的は[[K]]の備忘録になってしまっている(苦笑)。 ** 2012.09.07 Fri -OSC2012東京秋の1日目の帰り道で、KOZOSの坂井さんといろいろ話をして、OSECPUを作ろうと思い立つ。基本設計を完了する。 --KOZOSの坂井さん: http://kozos.jp/ ** 2012.09.09 Sun -wikiページを立ち上げた。[[FrontPage]]と[[memo0000]]と[[page0000]]を書いた。 -この「おせくぷ」という名前は、もちろんOS+SEC+CPUに由来する。 -OSECPUは、寄生型OSとして出発する。これは第二世代OSASKのefg01方式と同じである。 --なぜそうするのかというと、この方法ではじめれば、OSのブートとかデバイスドライバとかシェルとかマルチタスクなどについて悩む必要がなく、APIの開発に集中できるからだ。僕はセキュアなAPIとはこういうものだと示したい。 --OSそのものの開発については、もう「はりぼてOS」で十分に例を示せていると僕は思う。そんなことをもう一度やり直しても面白くはない。 --なんとなれば、いつでも「はりぼてOS」のAPIだけをOSECPUに置き換えることができるだろうし、そうすれば普通のOSにもなるだろう。 ** 2012.09.10 Mon -このwikiのページ名だけど、僕が書くものについては、memo系はログっぽいもの、page系はまとめっぽいものを書き溜める。他の人はこの名前を使わないでください。 -[[page0001]]と[[page0002]]を書いた。 ** 2012.09.11 Tue -&color(#FF0000,#FFFFFF){[注意]この内容はややこしいだけで価値がないので読み飛ばしてください!}; -[[page0003]]と[[page0004]]を書いた。 -想定しているクラック手法も書くべきだよなあ。OSECPUはセキュリティ対策みたいなものなので、対策だけ書いても分かりにくいと思う。 -以下、自分用の備忘録。 --ポインタをOSASKでいうところのスロット番号化すれば、一箇所に集めやすい。その代わり、間接参照が増えるのでアクセスは遅くなる。 --オンメモリ化を保証するシステムコールがあれば、ページングもどきもできる。 ---malloc時に、同時にオンメモリ化するかのフラグがある。 ---オフメモリ化も必要。しかしオフメモリ化APIを呼んでもそれで直ちにオフメモリ化されるわけではない。 --その意味では、そもそもメモリ上に載っている活きたポインタはそう多くないのか。 --じゃあスロット番号化はやめて、ポインタのありかの一覧を作らせようか。 --いやこれは没。 --ゾーン式のリンクカウント方式を思いつく。レジスタもしくはメモリにポインタを代入するたびにこのリンクカウントを更新させる。これだとGCができそうだ。でもオーバーヘッドが大きすぎると思ったので没とする。 --freeするときに、該当メモリにアクセスできるすべてのポインタを見つけ出して、それをNULLにする。性能優先モードのときはこの走査をしないでいい。なぜなら残ったポインタを使わないから。 --この方法だとセキュア優先モードが結構遅い。そこでオブジェクトグループという概念を考えた。オブジェクトグループは階層になっていて、所属しているオブジェクトグループよりも上のオブジェクト内のポインタからは参照されない。参照もしない。つまり閉じている感じ。これなら探しに行く範囲を限定できる。オブジェクトはn個のオブジェクトグループに所属できる。nは1に固定すべきだろうか。ここは要検討。 ---malloc時にオブジェクトグループハンドルを渡す。 ---オブジェクトグループハンドルから、サブオブジェクトグループハンドルも作れる(子階層)。 --関数のスタックフレームもオブジェクトグループに属する。そのときのレジスタ値も同じオブジェクトグループとする。 ---あれでも関数のリターンアドレスはどうする? --オブジェクトグループのルールが守られないと意味がないから、ポインタ更新時にはチェックを受ける。このとき、オブジェクトグループの変更を伴うようなMOVとそれ以外のMOVは別の命令になっているべき。そうすれば性能優先モードのときにチェックを省略できる。 ** 2012.09.12 Wed -&color(#FF0000,#FFFFFF){[注意]この内容はややこしいだけで価値がないので読み飛ばしてください!}; -なんかオブジェクトグループはいまいちな気がする。とりあえず名前をオブジェクトドメインとでもしようか。 --いまいちなのはもちろん名前ではなくて、仕組みのほう。 -こうすればいいかな: --オブジェクトは何らかのドメインハンドルに属させる。 --それぞれのオブジェクトには参照先ドメインというのがある。各メンバーはいずれもこのドメインの外はさせない。 --なんかここがいまいちなんだよなあ。 -こうすればいいかな: --ドメインとか全部やめる。その代わりセキュア優先モードではfreeされても同型でしか再利用しない。また値は全てinvalidにして、リードされたら強制終了にする。 --というかmalloc域やスタック域にはヘッダをつけておけばいいだけなのでは?ヘッダに状況が書いてある。セキュア優先モードではヘッダを見て動作する。「freeされても同型でしか再利用しない」は同じ。 --シグネチャを乱数で書いておいて、一致しなかったら終了。シグネチャはfreeしない限り変わらない。 ** 2012.09.13 Thu -[[page0002]]を修正した。SYSCALL命令の廃止。Pxxレジスタへのラベル定数MOVの追加。 ** 2012.09.18 Tue ~ -09.18火: とりあえず、ver.0.0仕様でアセンブラを書いてしまいたいのだけど、時間がない。困った・・・ -09.19水: このOSECPUはよくできていると自分でも思うけど、この設計にいたったのは実はセキュリティをよく考えたからではなくて、ページングもセグメンテーションもない組み込みCPU向けに、どうやったら仮想記憶を実現できるかを何年も考えていたからだと思う。それが実はセキュリティのためにも役立っていたというだけのこと。 -09.21金: さてこの週末に少しでもコードが書けるだろうか・・・書きたい。 -09.24月: 少しだけ書けた。でもまだまだだ。世間では「use-after-free脆弱性」というものが話題になっているらしいけど、09.12のアルゴリズムがあれば、この攻撃もOSECPUは検出&阻止できる。 -09.22火: [[page0005]]を書いた。 -10.02火: Javaにはポインタがないし、freeもない。おかげで「use-after-free脆弱性」みたいなものはないんじゃないかな?それともバイトコードレベルではあるんだろうか?・・・ただ、Javaはガーベージコレクトがあるのが気に入らない。自分の好きなタイミングでメモリ開放ができないなんて!・・・しかしとにかく、JavaはJavaでよく考えられているなとは思う。 ** こめんと欄 #comment
タイムスタンプを変更しない
* Kの開発メモ #0000 -(by [[K]], 2012.09.09) -ここは川合の開発の進捗などをレポートするところです。 --当初はその予定だったが、今ではむしろ主たる目的は[[K]]の備忘録になってしまっている(苦笑)。 ** 2012.09.07 Fri -OSC2012東京秋の1日目の帰り道で、KOZOSの坂井さんといろいろ話をして、OSECPUを作ろうと思い立つ。基本設計を完了する。 --KOZOSの坂井さん: http://kozos.jp/ ** 2012.09.09 Sun -wikiページを立ち上げた。[[FrontPage]]と[[memo0000]]と[[page0000]]を書いた。 -この「おせくぷ」という名前は、もちろんOS+SEC+CPUに由来する。 -OSECPUは、寄生型OSとして出発する。これは第二世代OSASKのefg01方式と同じである。 --なぜそうするのかというと、この方法ではじめれば、OSのブートとかデバイスドライバとかシェルとかマルチタスクなどについて悩む必要がなく、APIの開発に集中できるからだ。僕はセキュアなAPIとはこういうものだと示したい。 --OSそのものの開発については、もう「はりぼてOS」で十分に例を示せていると僕は思う。そんなことをもう一度やり直しても面白くはない。 --なんとなれば、いつでも「はりぼてOS」のAPIだけをOSECPUに置き換えることができるだろうし、そうすれば普通のOSにもなるだろう。 ** 2012.09.10 Mon -このwikiのページ名だけど、僕が書くものについては、memo系はログっぽいもの、page系はまとめっぽいものを書き溜める。他の人はこの名前を使わないでください。 -[[page0001]]と[[page0002]]を書いた。 ** 2012.09.11 Tue -&color(#FF0000,#FFFFFF){[注意]この内容はややこしいだけで価値がないので読み飛ばしてください!}; -[[page0003]]と[[page0004]]を書いた。 -想定しているクラック手法も書くべきだよなあ。OSECPUはセキュリティ対策みたいなものなので、対策だけ書いても分かりにくいと思う。 -以下、自分用の備忘録。 --ポインタをOSASKでいうところのスロット番号化すれば、一箇所に集めやすい。その代わり、間接参照が増えるのでアクセスは遅くなる。 --オンメモリ化を保証するシステムコールがあれば、ページングもどきもできる。 ---malloc時に、同時にオンメモリ化するかのフラグがある。 ---オフメモリ化も必要。しかしオフメモリ化APIを呼んでもそれで直ちにオフメモリ化されるわけではない。 --その意味では、そもそもメモリ上に載っている活きたポインタはそう多くないのか。 --じゃあスロット番号化はやめて、ポインタのありかの一覧を作らせようか。 --いやこれは没。 --ゾーン式のリンクカウント方式を思いつく。レジスタもしくはメモリにポインタを代入するたびにこのリンクカウントを更新させる。これだとGCができそうだ。でもオーバーヘッドが大きすぎると思ったので没とする。 --freeするときに、該当メモリにアクセスできるすべてのポインタを見つけ出して、それをNULLにする。性能優先モードのときはこの走査をしないでいい。なぜなら残ったポインタを使わないから。 --この方法だとセキュア優先モードが結構遅い。そこでオブジェクトグループという概念を考えた。オブジェクトグループは階層になっていて、所属しているオブジェクトグループよりも上のオブジェクト内のポインタからは参照されない。参照もしない。つまり閉じている感じ。これなら探しに行く範囲を限定できる。オブジェクトはn個のオブジェクトグループに所属できる。nは1に固定すべきだろうか。ここは要検討。 ---malloc時にオブジェクトグループハンドルを渡す。 ---オブジェクトグループハンドルから、サブオブジェクトグループハンドルも作れる(子階層)。 --関数のスタックフレームもオブジェクトグループに属する。そのときのレジスタ値も同じオブジェクトグループとする。 ---あれでも関数のリターンアドレスはどうする? --オブジェクトグループのルールが守られないと意味がないから、ポインタ更新時にはチェックを受ける。このとき、オブジェクトグループの変更を伴うようなMOVとそれ以外のMOVは別の命令になっているべき。そうすれば性能優先モードのときにチェックを省略できる。 ** 2012.09.12 Wed -&color(#FF0000,#FFFFFF){[注意]この内容はややこしいだけで価値がないので読み飛ばしてください!}; -なんかオブジェクトグループはいまいちな気がする。とりあえず名前をオブジェクトドメインとでもしようか。 --いまいちなのはもちろん名前ではなくて、仕組みのほう。 -こうすればいいかな: --オブジェクトは何らかのドメインハンドルに属させる。 --それぞれのオブジェクトには参照先ドメインというのがある。各メンバーはいずれもこのドメインの外はさせない。 --なんかここがいまいちなんだよなあ。 -こうすればいいかな: --ドメインとか全部やめる。その代わりセキュア優先モードではfreeされても同型でしか再利用しない。また値は全てinvalidにして、リードされたら強制終了にする。 --というかmalloc域やスタック域にはヘッダをつけておけばいいだけなのでは?ヘッダに状況が書いてある。セキュア優先モードではヘッダを見て動作する。「freeされても同型でしか再利用しない」は同じ。 --シグネチャを乱数で書いておいて、一致しなかったら終了。シグネチャはfreeしない限り変わらない。 ** 2012.09.13 Thu -[[page0002]]を修正した。SYSCALL命令の廃止。Pxxレジスタへのラベル定数MOVの追加。 ** 2012.09.18 Tue ~ -09.18火: とりあえず、ver.0.0仕様でアセンブラを書いてしまいたいのだけど、時間がない。困った・・・ -09.19水: このOSECPUはよくできていると自分でも思うけど、この設計にいたったのは実はセキュリティをよく考えたからではなくて、ページングもセグメンテーションもない組み込みCPU向けに、どうやったら仮想記憶を実現できるかを何年も考えていたからだと思う。それが実はセキュリティのためにも役立っていたというだけのこと。 -09.21金: さてこの週末に少しでもコードが書けるだろうか・・・書きたい。 -09.24月: 少しだけ書けた。でもまだまだだ。世間では「use-after-free脆弱性」というものが話題になっているらしいけど、09.12のアルゴリズムがあれば、この攻撃もOSECPUは検出&阻止できる。 -09.22火: [[page0005]]を書いた。 -10.02火: Javaにはポインタがないし、freeもない。おかげで「use-after-free脆弱性」みたいなものはないんじゃないかな?それともバイトコードレベルではあるんだろうか?・・・ただ、Javaはガーベージコレクトがあるのが気に入らない。自分の好きなタイミングでメモリ開放ができないなんて!・・・しかしとにかく、JavaはJavaでよく考えられているなとは思う。 ** こめんと欄 #comment
テキスト整形のルールを表示する