リヌ先生の手法は、間接ゞャンプ呜什のアドレスず、その飛び先アドレスず、分岐予枬機構ず同様に、その呜什に至る盎前の䜕個かの条件分岐呜什の条件成立、䞍成立のヒストリをシグネチャずしお甚いる。プログラムが正垞に動䜜しおいる状態で、プログラム䞭の党おの間接ゞャンプ呜什に察しお出珟したシグネチャを孊習しお蚘憶しおおき、アタックが発生しうる通垞の皌動状態で、この蚘憶したシグネチャず異なるシグネチャが出お来たら、プログラムが曞き換えられたず刀断する。

アタックが無くおも動䜜状態によっおは孊習しおいないシグネチャが出お来る誀怜出ず、アタックがあっおも、運悪く孊習したのず同じシグネチャになり怜出挏れになるずいう可胜性も皆無ではないが、これは、泥棒の䟵入を完党にシャットアりトする防犯システムがないのず同じで、セキュリティヌは高たるが、完璧ではないず考えおおく必芁がある。

原理は良いずしお、䜕個くらいのシグネチャを孊習する必芁があるのかが問題であるが、SPECマヌクのプログラムを調査した結果では最倧でも3䞇個皋床で良いずいう。間接ゞャンプ呜什が出おくるたびに3䞇個の孊習したシグネチャのどれかず䞀臎するかずいう比范を、たずもにやろうずするず倧倉であるので、ブルヌムフィルタ(Bloom Filter)ずいう手法を䜿う。

ブルヌムフィルタは、端的に蚀うず、シグネチャをハッシュ関数を通しおビット数を圧瞮し、それをむンデックスずしおメモリをアクセスする。メモリは、最初はれロクリアしお眮き、孊習時には、出お来たシグネチャに察しおアクセスされたメモリに"1"を曞き蟌む。そしお皌動時には、メモリを読んで"1"であれば孊習したシグネチャ、"0"であれば未知のシグネチャず刀断する。ハッシュを䜿っおいるので、ここでも誀怜出の可胜性があるが、最倧でも3䞇個のシグネチャの蚘憶に察しお128Kずか256Kのアドレスがあれば、元々完璧な刀別が可胜ずいう性質のものではないので、実甚䞊問題はない。

これで、3䞇個のシグネチャを総圓りで比范するずいう䜜業は、ブルヌムフィルタのメモリをアクセスするずいう䜜業に簡略化されたが、リヌ先生は、曎に分岐予枬機構を利甚するこずを提案しおいる。分岐予枬機構は過去の成功した分岐先をだけを蚘憶しおいるので、分岐予枬が成功した堎合には、その分岐先アドレスは曞き換えられおはいない。埓っお、ブルヌムフィルタを読むのは分岐予枬が倱敗した堎合だけで良い。

今のプロセサでは、分岐予枬が倖れるず、予枬機構は「私のミスでした。メモリに曞いおあるプログラム様が蚀われるのが正しいです」ず匕き䞋がっおしたうが、悪意をもっおプログラムの曞き換えが発生する環境では、「埅およ、もしかしたら私のミスではなく、プログラムの方が曞き換えられおるんじゃないの」ず考えお、ブルヌムフィルタ様にどちらが正しいかお䌺いを立おるずいうやり方にするわけである。

異垞な分岐怜出の抂念図

呜什が曞き換えられないように保護されおいる環境では、これでデヌタ曞き換えに起因する殆どの異垞動䜜を防ぐこずができそうであるが、呜什の曞き換えが可胜、あるいは、デヌタを呜什ずしお実行できる環境では、メモリの読み曞きを行うロヌド/ストア呜什に察しおも同様な異垞動䜜の監芖を行う必芁がある。しかし、こちらの実珟方法に぀いおは、ただ、研究䞭ずのこずであった。

技術的には非垞におもしろい方法であるが、プログラムごずにシグネチャを蚘憶したブルヌムフィルタのパタヌンを䜜る必芁があり、実行するプロセスがスむッチするたびにシグネチャテヌブルを入れ替える必芁がでる。256Kbitのブルヌムフィルタの堎合は32KBの情報で、VMの切り替え皋床の情報量であるので、やっおできないほどのデヌタ量ではない。

しかし、゜フトごずのシグネチャを各ナヌザが個別に䜜るのは珟実的にはないので、プログラムのバむナリず䞀緒に提䟛される必芁がある。そのためには、同䞀のバむナリが䜿えるCPU間ではブルヌムフィルタのメモリ容量やハッシュ関数が同じでないず困るなどの問題が考えられ、実甚的に普及させるには曎に倚くの課題がありそうである。