Access を制御するものはどこに置くべき? の続き
インドリ氏の書き込みより
セキュリティ階層についてですが、ボクは多層防御の必要性を感じています。
その辺がちゃぴさんと相容れないのかもしれませんが、より一層の多段防御をするほうが良いのではないでしょうか?
これについては説明すると長くなるので、とりあえず第一弾ということで。
「わんくま同盟 東京勉強会 #13」で説明したことですが、Windows では扱う resource (file, registry, process, thread, etc) のほとんどを ACL で管理しています。
この ACL を利用した access 制御ですが、logon 時に生成される access token が process もしくは thread に関連付けられ、その access token と ACL を照合することによって行われます。
この照合作業の多くは kernel level で行われていて、かつ対象となる resource は process 内部の memory 領域には存在せず、kernel を通じてのみ扱えることがミソです。
この場合、access 制御を回避する方法は OS を停止させるような方法を除外すると kernel を攻略しないとお話しになりません。
次にインドリ氏が主張している interface, method level での access 制御ですが、これ扱うのは対象は process 内の memory 空間に保持されているものですね。
既存の概念を壊さないで access 制御を実現させる場合、process memory 空間はいじらず、ただ単に interface や method を呼び出す前に access control させる手法があります。
ただ、これには弱点があります。その application に buffer overflow のような脆弱性が存在した場合、この方法で防御することはできません。
同じ access 制御を実現する 2 つの方法ですが、強度はかなり違ってきます。