NTTデータのTOMOYO Linuxのチームから (熊猫さくらさんの個人プロジェクトだったみたい。失礼しました)AKARIというセキュリティーモジュールがリリースされたようです。

http://permalink.gmane.org/gmane.linux.tomoyo.user.japanese/257

RHEL6でも動くと謳っていたので、軽く解析してみました。

モジュールロード時にsecurity_opsを使っている関数のアドレスを/proc/kallsyms
から取得し、その関数に対しバイナリ解析を行うことでsecurity_opsのアドレスを
算出し、上書きしているようです。

興味がある人は、ccs_find_security_ops() 近辺を読んでみるといいと思います。
バイナリ手法が面白いというか奇抜というか、いい感じなのですが、
Linuxカーネル本体に


int security_file_alloc(struct file *file)
{
return security_ops->file_alloc_security(file);
}

という関数があるので、


static int lsm_addr_calculator(struct file *file)
{
return ccs_security_ops->file_alloc_security(file);
}


というほぼ同じ関数を作ったら security_ops のアドレス以外は一致する
命令が出力される「はず」だから、関数の命令列を比較していって、不一致箇所を
security_opsだと仮定するという。そんなん。

# security_file_alloc()は公開関数なので/proc/kallsymsでアドレス取得できるしね

たぶん、コンパイラのバージョン合わせないとだめよね。これ。