Kの開発メモ #0001
- (by K, 2013.03.12)
- ここは川合の開発の進捗などをレポートするところです。
- 当初はその予定だったが、今ではむしろ主たる目的はKの備忘録になってしまっている(苦笑)。
2013.03.12 Tue
- 諸事情により、このプロジェクトを早期に立ち上げる必要が出てきた。ということで本気出す。
- 以下のページは内容が難しすぎるので、読まないでください or 内容がOSECPUと関係ないので読まないでください or 内容が既に古くて、正しくありません。
- ええとそれで、freeしたメモリを再利用できてしまう問題はどうなったんだっけ?
- 基本的な考え方として、たとえばGCみたいに、「メモリなんてどんどんアロケートして使えばいいんだよー、free()はシステムが自動でやってくれるんだよー」みたいなのは嫌だ。それはプログラマが楽できるけど、同時にバカになっていくような気がする。
- 僕としては、「プログラマのやることを減らす」方向ではなくて、「プログラマのバグ発見のお手伝いをする」方向でやりたい。
- 関数呼び出しについても考え始めました。 → page0007
2013.03.16 Sat
- やっぱり最初からJITしようかなと思案中・・・。
- インタプリタだと作りやすいけど、すごく遅くなってそれで可能性を見限られたら残念かなーと。
2013.03.19 Tue
- クラックするプログラムの多くは、まずみんなシェルを取ってルートになることを目指すパターンが多い。そんなにルートになりたいんだったら、ルートにしてやればいいじゃないかと急に思いつく。え・・・と思うかもしれないけど、何が言いたいのかというと、ルートにさせない方法を講じるのも大事だけど、ルートになっても大したことが出来なければいいんじゃないかなーと。
- いやもちろん、これは出発点だ。本当にルートになってやりたい放題されたら終わってしまう。・・・僕の言いたいことは、結局はパスワードさえわかれば何でもできますみたいなOSだとパスワードが狙われるだけなので、パスワードが分かっても悪いことはできません、みたいなことを目指すべきなんじゃないかなと。というか最初のログイン時以外にはパスワードは要求されない、というのはどうか?それ以降はどれほどたくさんパスワードを持っていても何もできない、と。
- もう少し考えた!
- 唐突だけど、ブラウザのプラグインみたいなものを考えてみる。もし自作のブラウザにプラグインを付けられるようにしようと思ったらどうするだろうか?なんらかの独自の言語処理系を付けるだろうか。まあその路線で考えてみよう。
- そうすると問題が出てくる。プラグインが悪さをしたらどうしよう、ということだ。ということで悪さできないように念入りに設計する。何をやってもOSや他のアプリやブラウザそのものや他のプラグインの迷惑にはならないようになっている、と。それが無事にできるのであればそれは素晴らしい。
- しかしきっとどこかでミスる。・・・そしてそこがセキュリティホールになる。まあこのセキュリティホールをつついたところで、せいぜい破壊できるのはブラウザや他のプラグインくらいにはとどまると思うが、しかしそれでも十分に残念だ。
- これを防ぐにはどうしたらいいだろう。そう、独自の言語処理系を作らせなければいい。既存の枯れた言語処理系を使わせればいい。・・・そもそもどうしてプラグインのために独自の言語処理系を作ることになったんだ?それは、ブラウザの子プロセスではどうしていけないのか?そう、子プロセスだとなんでも好き放題できてしまうから駄目なんだ。セキュアなプログラムが阻止すべき最初のことは「任意のプログラムが実行できてしまうこと」なくらいだから。
- しかし僕は逆で行く。子プロセスでいいんだ。子プロセスがいいんだ。それでも十分にセキュアなんだ。どんなに悪さをしようと思っても、必ず失敗するんだ。僕はそういう仕組みを作りたい。
- 僕は独自言語を作ることそのものは否定しない。プログラム言語はどんどん提案されるべきだし、プラグインに向いたプログラミング言語というのものだってきっとあるだろう。そのことを否定したいんじゃない。むしろその言語は独自ブラウザのプラグイン用の独自言語ではなくて、他の場面でも自由に使えるべきなんだ。テキストエディタや表計算のマクロを書いたり、普通にゲームを作ったり・・・。そうなればセキュリティはすぐに枯れる。
- つまり何が言いたいのかと言えば、プラグイン機構は「子プロセスで十分」なOSが現れれば、セキュアな世界はずっと広がる、ということなんだ!子プロセスというか、ただ関数をロードして実行するくらいのものしか考えていないので、DLLというべきかもしれない。
- 親プロセスは以下のことを制御できれば、プラグイン機構を子プロセスで代用できる。
- 関数ポインタを渡せる(親プロセスの機能を呼び出すため)。
- 渡していないオブジェクトには絶対にアクセスできない。
- システムコールが使えないか、もしくは使えるんだけど制限がかかっている。どんな制限にするかは親プロセスが自由に設定できる。
- 使ってもよいシステムコール、呼び出し回数、アクセス権など
- タイムアウト的なものがあり、いつまでも帰ってこないようなら打ち切らせる。
こめんと欄