• 検索結果がありません。

静的セキュリティテスト ( 機能 3)

第 4 章 提案手法のツール化と実験

4.1 RailroadMap の開発と機能

4.1.4 静的セキュリティテスト ( 機能 3)

の持つセキュリティ要求と実装が明確に定義されることになる。例えば、こうし た作業が発生の例として、認証認可が不要なControllerの確定が挙げられる。認 証認可が不要な場合は、Controllerには該当するコマンドは記述されないが、そ れが意図したものか、記述ミスなのかはコードからは読み取れない。そこで、セ キュリティ要求の形で明示することで、実装コードの背景となる暗黙の仕様を文 書化する事ができる。

Algorithm 1 PEP check.

Require: ACL, S Nav. model

Require: Q Requirements

Require: W 0 Warning

1: procedureCheckPEP 2: for eachsSCdo

3: res1hasAuthenticationCheck(s) 4: res2hasAuthorizationCheck(s) 5: res3hasP olicyDef inition(s) 6: if ¬res1&¬res2&¬∃sQthen 7: W WN ewW arning(M T1) 8: else if ¬res1&∃sQthen 9: W WN ewW arning(M T2) 10: else if ¬res1&res3&¬∃sQthen 11: W W N ewW arning(M T3) 12: end if

13: if res3&¬res2then

14: W W N ewW arning(M Z1) 15: end if

16: end for 17: end procedure

次にNavigation errorの検出方法について述べる。これは遷移の前後でセキュ リティ要求が異なる場合に発生する。具体的には、複数のロールによって共有さ れているView でそのユーザーのロールによって異なる遷移先を指定する必要が ある場合に、その確認とロールに対応したページの生成を忘れている場合である。

RailsにはMVCコードの自動生成機能 (Scaffold) があり、広く利用されている が、セキュリティ要求への配慮がないコードが自動生成されるためにNavigation

errorは発生しやすい。アプリケーション的には脆弱性はないが、通常の使用で権

限エラーが出てしまうのはアプリケーションのバグである。セキュリティ検証モ デルは すべてのViewとController間の遷移と遷移条件、そのセキュリティ要求 を記録しており、前後のセキュリティ要求が異なる場合は、ロールの確認等の適 切な遷移条件が与えられているかチェックを行い、問題がある場合は警告を出す。

最後に、セキュリティ要求の定義が、セキュリティ検証モデル上で矛盾が無い かを検証する。これにはデータフローモデルl を用いる。

一般的には、MVCの構成する各状態は、共通のセキュリティ要求のもとにグルー プを構成している。ただし、異なるセキュリティ要求との間でデータの流れが存 在する場合、それが意図したものなのか、バグなのかを判別したい。ロール定義 だけでは確認が難しい。

図4.3に一例を示す。この場合、C1,V1,M1,S1はセキュリティ要求の高い管理者

Algorithm 2 Navigation check.

Require: R, ACL, S, T Nav. model

Require: ssSV Start state

Require: rR Role

Require: W Warning

1: procedureCheckNAV(ss, r)

2: for eachtinGetT ransF rom(TV C, ss)do 3: sdGetDstState(t)

4: ifisV isited(sd, r)then detect infinite loop

5: @ escape

6: else

7: setV isited(sd, r) set flag

8: end if

9: gGetGuard(t) 10: oGetOperation(sd) 11: aGetAsset(sd)

12: res1EvaluateGuard(g, r, o, a) Trans

13: res2EvaluateP EP(sd, r) State

14: if res1 =denythen guard: AC1

15: if res2 =denythen end of transition

16: @

17: else inconsistent V and C

18: W W N ewW arning(IN)

19: end if

20: else if res1 =allowthen guard: AC1

21: if res2̸=allowthen

22: W W N ewW arning(M Z2)

23: end if

24: else if res1 =truethen guard: AC2

25: if res2̸=allowthen improper guard

26: W W N ewW arning(IN)

27: end if

28: else if res1 =f alsethen guard: AC2

29: if res2̸=denythen improper guard

30: W W N ewW arning(IN)

31: end if

32: else no guard

33: if res2 =allowthen

34: W W N ewW arning(IN) FP?

35: else if res2 =denythen

36: W W N ewW arning(M Z2)

37: end if

38: end if

39: @CheckNAV(sd, r) recursive call

40: end for 41: end procedure

図4.3: Dataflow modelを使ったポリシー整合性のチェック

が管理しているデータに関する状態である。一方、C2,V2,M2,S2は一般ユーザー のデータに関する状態である。実際のデータフローはModelのAtttibuteレベル で起こる。ロール定義だけではデータのセキュリティレベルはわからないため、セ キュリティ要求で指定したレベルを用いて、データフローを解析する。この例で は、S1(level=5)からV2(level=1)へのデータフローは、 高いレベルから低いレ ベルへのデータフローのため警告となる。意図するものであるなら、Atttibute S1 のレベルを1に、セキュリティ要求のなかで定義することで意図した実装である ことを明示できる。意図しない場合は、該当するコードを削除する。

Outline

関連したドキュメント