アスペクトによるセキュリティ関心事の分離と その確実な実行

アスペクトによるセキュリティ関心事の分離と
その確実な実行
伊藤 晃
[email protected]
東京工業大学 情報理工学研究科 計算工学専攻 渡部研究室
2005 年 8 月 5 日
て、Kerberos 認証を行うコードをアスペクトを用
概要
いて分離した。アスペクトを用いない場合と比較し
AOP をセキュリティに関するコードに利用する
て、RMI コード中に認証を行うコードが混在しな
ことは、モジュール性や保守性、再利用性の観点か
いため、RMI の関心事と認証の関心事を高い水準
ら有効であると考えられる。しかし、アスペクトの
で分離することができた。さらに、RMI クライア
コードが適切に実行されることが保証されなけれ
ント・サーバ間での相互認証を行うコードを認証ア
ば、セキュリティに関するコードに重大な欠陥が生
スペクトに追加した。相互認証を行うコードはアス
じる可能性がある。ここではその問題点と考えうる
ペクトに記述し、それを認証アスペクトに織り込む
解決策について述べる。
という形を取ったため、認証アスペクトのコードを
変更することなく相互認証のコードを追加すること
1 AOP とセキュリティ関心事の分離
ができた。
アスペクトの有効な利用法については現在も盛ん
3 AOP の利用に関する問題点
に議論されているが、その中でもセキュリティ関心
事をアスペクトにより分離することに着目した。セ
AOP による認証機構の実装を通じて感じた問題
キュリティ関心事とは、セキュリティに関する機能
点がいくつかある。まず、アスペクトのコードによ
全般 (認証、アクセス制御など) を指す。例えば認
りソフトウェアの主機能や他のアスペクトの動作を
証機構の場合、セキュリティ向上のためにコードの
阻害する可能性があることが挙げられる。これは、
改良が必要となる場合も多い。アスペクトにより認
アスペクトが織り込み先のコードをある程度改変で
証機構を分離することでモジュール性・再利用性が
きることによる。コーディングミスによるアスペク
高まり、コードの実装や改良に有益である。
トの不具合を防ぐために、アスペクトのコーディン
このように、セキュリティ関心事をアスペクトに
グについては慎重さを要求されるが、多数のアスペ
より分離することで実装や改良が容易となり、プロ
クトを利用する場合にはミスの発生も十分考えられ
グラム全体についても良い影響を及ぼすと考えら
る。セキュリティ関心事を実装する場合には僅かな
れる。
コーディングミスが重大な欠陥に結びつく可能性も
あるため、ミスの早期発見・防止のための方策が必
2 AOP による認証機構のモジュール化
要である。
以上のことを踏まえて、実際に AOP で認証機構
さらに、アスペクトが複数存在する際にそれらが
を実装した。Java で RMI を行う行うコードに対し
開発者の意図しない形で干渉してしまう場合が考
1
えられる。一つのプログラム中に複数のアスペク
ペクト側からポイントを指定して挿入されるため、
トが存在する場合、織り込まれるポイントが重複
個々のアスペクトを見ただけではアスペクトの相互
するとアスペクト間で衝突が起こる可能性がある。
関係について理解しにくい。そのため、アスペクト
AspectJ などの AOP の実装では、アスペクトの優
間の関係について記述していくことで開発者の予期
先度を設定し実行順序を設定できるが、アスペクト
しない形でのアスペクトの競合を防ぐとともに、記
が多数存在する場合などにはコーディングミスな
述によってプログラム中のアスペクトの関係につい
どにより適切に記述されない場合も想定される。ア
て理解する助けにもなると考えられる。
スペクトの実行順序が適切に設定されていなけれ
具体的には、
ば、開発者の意図しない順序で実行されてしまう。
• アスペクトの実行順序に関する契約の記述
また、コーディングミスによりアスペクトが開発者
とその強制。あるアスペクトに関してその直
の意図しないポイントに挿入されてしまう場合も考
前・直後に実行されてもよいアスペクトを記
えられる。これにより、アスペクトによるセキュリ
述しておくことにより、意図しない順序で実
ティ関連のコードが妨害されてしまったり、プログ
行されることを防ぐ。
ラムが本来果たすべき役割が妨げられてしまったり
• 同一ポイントへの複数のアスペクトの織り込
する可能性がある。
みの制限。
4 考えうる解決策
4.1
といったことを考えている。
コードの適切な実行の保証
参考文献
セキュリティのコードは、プログラム中でも特に
その正確な実行が求められる。そのためには、開発
[1] Jianjun Zhao, Martin Rinard ”Pipa: A Be-
時のコーディングの正確さの保証とバグの早期発見
havioral Interface Specification Language for
が必要となる。これを実現するための手法の一つと
AspectJ” FASE 2003, LNCS 2621, pp.150-165
して、Design by Contract (契約による設計) が挙
[2] Therapon Skotiniotis,
David H. Lorenz
げられる。これは、コードに対して契約を記述し、
”Conaj:Generating Contracts as Aspects”
それをコードに守らせることによってコーディング
2004
[3] 山田聖・渡部卓雄 ”契約による設計を支援する
時に正確性を増し、バグの早期発見に役立てるもの
である。
アスペクト指向的振舞インターフェース記述言
AOP においても Design by Contract は有効で
語 Moxa”, 情報処理学会論文誌(プログラミン
あると考えられ、関連して [1] [2] のような研究が挙
グ),2005(掲載予定)
[4] Gary T. Leavens, Yoonsik Cheon ”Design by
げられる。
4.2
Contract with JML” August 2004
アスペクトの相互干渉の防止
Design by Contract では、アスペクト間の相互
[5] Ramnivas Laddad ”AspectJ in Action” Man-
干渉についての問題は解決できない。Design by
ning Publications Co, July 2003
Contract は個々のルーチンに関して契約を記述す
[6] Joseph D.Gradecki, Nicholas Lesiecki: ”Mas-
るものであり、ルーチン (アスペクト) 間の関係に
tering AspectJ”, Wiley Publishing,Inc., 2003
関して記述するものではないからである。
そこで、アスペクト間の相互作用について適切に
記述し、それを遵守させる機構が必要であると考え
られる。アスペクトは従来のオブジェクト指向の
ルーチンと異なり、呼び出されるのではなくアス
2