アスペクトによるセキュリティ関心事の分離と その確実な実行 伊藤 晃 [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
© Copyright 2024 ExpyDoc