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

機能評価 (3) セキュリティテストカバレッジの計測

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

4.4 機能評価 (3) セキュリティテストカバレッジの計測

トテストが1295、機能テストが1207、統合テストが128であった。この段階で 未定義なコマンドは552個である。

Foremanはアクセス制御リストをデータベースで管理する。テストの際に使用

するアクセス制御リストはRails の fixtures 18 の形で用意される。したがって、

このfixtures 定義からアクセス制御リストを抽出できるようにした。抽出したア

クセス制御リストとテストとの関係を表4.12に示す。テストケースは次の4つに 分類して表に示す。

T 成功テスト(Positive test) F 失敗テスト(Negative test) B TとFの両方

x 未分類

これらはテストコードのAssert文から判定する。この段階での、アセット(制御フ ローのController state、ACLのObjectに相当)のテストカバレッジは39.29%、 ロール(ACLのSubjectに相当)のテストカバレッジは90.91%であった。

Foremanで用いられているセキュリティに関係するコマンド(SINK)の一覧と、

そのテストカバレッジを表4.13に示す。列はそれぞれ、コマンド名、コマンドの タイプ、コマンド抽象化ライブラリ、コード中の利用箇所の数、カバレッジとの 対応、SCとRCでの集計、対応するテストケース、を示す。RCは9つ検出され た。SympleCovのカバレッジ集計はViewのテンプレートはサポートしないため、

View内のSINKはカバレッジが不明である。この段階でのSINKカバレッジはユ ニットテストのSCカバレッジが66.67%、機能テストのSCカバレッジ88.89%、 高リスクのRCカバレッジが 該当なし、中リスクのRCカバレッジが57.32%、低 リスクのRCカバレッジが5.85%となった。

4.4.3 カバレッジの確認とツールと実装の修正 (Phase 2)

未定義なコマンドをアプリケーションのコマンド抽象化ライブラリに登録する。

その際に、セキュリティコマンドについては定義(SC,RCの分類、セキュリティ 機能の分類)を行う。その結果、168のテストケースがセキュリティコマンドに関 するものとして検知された。

アセットのテストについて、実装コード、テストケース、ポリシー定義を再確認 した。その結果、4つのアセットが、ポリシー上の名前と、実装の名前に一致し ない(Aliasされている)事がわかった。このような、Alias機能に対応するよう にツールの機能を拡張することで、アセットのテストカバレッジは75.00%に向 上した。

18テスト実行時に用いるデータベースの初期値のセット

SINKについては、13のForemanが提供するセキュリティコマンド(SC)をコ マンド抽象化ライブラリに追加することで、SCのカバレッジが向上した。この段 階でSINKカバレッジは、ユニットテストのSCカバレッジが81.82%、機能テス トのSCカバレッジ95.45%と向上し、高リスクのRCカバレッジが 該当なし、中 リスクのRCカバレッジが 57.32%、低リスクのRCカバレッジが 5.85%と変化 した。RCについては、Viewのコードに存在する物が多く、これらについてはテ ストカバレッジが計測できない。CSRF対策については、テストコードは存在す るが、テストでCSRF特有のコマンドを使用しないため、検知できない。そこで、

テストケースの記述から対応を推測できるように、キーワードでの検査機能を追 加した。テストケース名にCSRFのCWEエントリである“CWE-352”を記載す ることで、そのテストケースがCSRFのテストであることを認識する。

4.4.4 テストケース追加によるカバレッジの向上 (Phase 3)

アクセス制御に関して、8つのテストケースを追加した。また、コード上では削 除されたが、テストケースのアクセス制御定義に残っていた不要なアセットを削 除した。その結果、アクセス制御に関するテストカバレッジは100%となった。

SINKに関しては、フレームワークのSCについて3つのユニットテストを追加 したが、カバレッジの変更はない。

表 4.12: Foremanのアクセス制御リストとテストカバレッジ (→:phase2,

⇒:phase3)

Asset Manager Default Anonymous Viewer View Create Edit Destroy CRUD View Edit

(class) cov user user host host host host host comp. res. part. table

architectures [x] [T] CRUD R [F] [B] R

authenticators [x] CRUD R [F] [B] R

environments [x] CRUD R [x] [x] R

external_variables [x] CRUD R [x] [x] R

domains [x] CRUD R [F] [B] R

globals [x] CRUD R [F] [B] R

hostgroups [x] [B] CRUD [T] R [T] R

hosts [x] [B] CRUD [T] R [T] R [T] R [B] C [B] U [B] D [B] CRUD

media [x] CRUD R [F] [B] R

models [x] CRUD R [F] [B] R

operatingsystems [x] CRUD R [F] [B] R

ptables [x] CRUD R [F] [B] R [x] CRUD

puppetclasses [x] CRUD R [F] [B] R

usergroups [x] CRUD [F] [B] R

users [x] [B] CRUD [F] [B] R

settings [x] [x] A A A

dashboard [x] [T] A A A

statistics [x] R R [T] R

reports [x] RD R [T] R

facts [x] R R [T] R

audit_logs [x] R [T] R

locations [x] [T] CRUD R

organizations [x] [T] CRUD R

classes [x] [T] U

realms [x] CRUD R [F] [B] R

tasks [x] [B] R

compute_resources [x] [x] CRUD

templates [x] [x] CRUD

Coverage (phase 1)[%] 39.29 16.00 10.50 50.00 40.00 100.0 0.00 100.0 100.0 100.0 100.0 100.0 Coverage (phase 2)[%] 75.00 16.00 10.50 50.00 80.00 100.0 0.00 100.0 100.0 100.0 100.0 100.0 Coverage (phase 3)[%] 100.0 36.00 10.50 100.0 80.00 100.0 100.0 100.0 100.0 100.0 100.0 100.0

4.4.5 まとめ

以上、ForemanでのRailroadMapの使用環境を整える作業を4つのフェーズ に分割し、その作業の中で変化するメトリックスを記録した。このメトリックス の変化を図4.11に示す。セキュリティ機能に関するアクセス制御とSCのSINK については、Foremanのテストケースは高いテストカバレッジを持つことがわか る。また、表4.12や表4.13 のような形式でのカバレッジ情報の一覧表示は、セ キュリティの現状の把握と改善に有効である。一方、RCについては十分と言えな いが、これはRCがViewのテンプレートコードに多く存在する事が理由の一つで ある。

0 10 20 30 40 50 60

0 1 2 3

count

CALib unknown.

temp.

defined

0 100 200 300 400 500 600

0 1 2 3

Model (transitions) unknown.

temp.

defined

0 20 40 60 80 100

0 1 2 3

coverege [%]

Asset AAFunc.

0 20 40 60 80 100

0 1 2 3

Role ARFunc.

0 20 40 60 80 100

0 1 2 3

coverege [%]

Phase Sink/SC

SCUnit SCFunc

0 20 40 60 80 100

0 1 2 3

Phase Sink/RC

RCFuncmid RCFunclow

図 4.11: メトリックス駆動によるセキュリティ保証

表 4.13: Foreman の SINK コマンドとテストカバレッジ (→:phase2,

⇒:phase3)

Command type CALib num. of sink SimpleCov SC cov. RC cov. (score) Test case

SC RC CF DF all M C V S skip all U F I U F I (4-3) (2-1) all U F I

protect_from_forgery X - - - rails 2 0 2 0 0 0 6 2 2 2 1/1 1/1 1/1 02 0 02 0

escapeHTML X - - - ruby 4 0 4 0 0 0 234 0 221 13 1/1 1/1 1/1 01 01 0 0

html_escape X - - X rails 1 0 1 0 0 0 12 0 12 0 0/1 1/1 0/1 01 01 0 0

h X - - X rails 39 0 0 39 0 0 NA NA NA NA 0/1 0/1 0/1 01 01 0 0

before_filter X - - - rails 197 0 197 0 0 0 1886 232 1146 508 1/1 1/1 1/1 0 0 0 0

skip_before_filter X - - - rails 11 0 11 0 0 0 36 12 12 12 1/1 1/1 1/1 0 0 0 0

validates X - - - rails 165 165 0 0 0 0 22687 12249 9618 820 1/1 1/1 1/1 2 2 0 0

before_save X - - - rails 18 18 0 0 0 0 1887 1316 547 24 1/1 1/1 1/1 0 0 0 0

attr_accessible X - - - rails 21 21 0 0 0 0 63 21 21 21 1/1 1/1 1/1 0 0 0 0

find - X - - rails 66 4 62 0 0 0 1039 478 548 13 33/63 0/0 (115) 22 32 61

where - X - - rails 17 9 8 0 0 0 22046 10170 11667 209 23/26 0/0 (39) 24 5 0

send_file - X - - rails 1 0 1 0 0 0 EX EX EX EX 0/1 0/0 0 0 0 0

constantize - X - - rails 2 0 2 0 0 0 360 0 154 206 1/1 0/0 0 0 0 0

redirect_to - X X - rails 34 0 34 0 0 0 379 0 313 66 0/1 11/31 1 1 0 0

raw - X - X rails 21 0 0 21 0 0 NA NA NA NA 0/0 0/21 0 0 0 0

html_safe - X - X rails 8 0 0 8 0 0 NA NA NA NA 0/0 0/6 0 0 0 0

link_to - X X - rails 94 0 0 94 0 0 NA NA NA NA 0/0 0/94 0 0 0 0

content_tag - X - - rails 36 0 0 36 0 0 NA NA NA NA 0/0 0/36 0 0 0 0

authenticate X - - - app 12 9 2 0 1 0 1201 18 1134 49 0/1 1/1 1/1 7 7 0 0

require_login X - - - app 7 0 4 0 1 2 32 4 24 4 1/1 1/1 1/1 4 0 4 0

authenticated? X - - - app 2 0 2 0 0 0 98 0 14 84 1/1 1/1 1/1 4 0 4 0

is_admin? X - - - app 2 0 1 0 1 0 18 1 16 1 0/1 1/1 1/1 0 0 0 0

require_admin X - - - app 8 0 8 0 0 0 24 8 8 8 1/1 1/1 1/1 0 0 0 0

authorize X - - - app 12 0 8 0 0 4 27 9 9 9 1/1 1/1 1/1 2 2 0 0

authorized X - - - app 15 1 13 0 1 0 1547 37 1327 183 1/1 1/1 1/1 6 4 2 0

require_ssl X - - - app 2 0 2 0 0 0 6 2 2 2 1/1 1/1 1/1 0 0 0 0

encrypts X - - - app 2 2 0 0 0 0 6 2 2 2 1/1 1/1 1/1 0 0 0 0

encrypt_setters X - - - app 2 2 0 0 0 0 6 2 2 2 1/1 1/1 1/1 0 0 0 0

encrypt_field X - - - app 1 1 0 0 0 0 3 1 1 1 1/1 1/1 1/1 3 3 0 0

encrypts? X - - - app 1 1 0 0 0 0 3 1 1 1 1/1 1/1 1/1 1 1 0 0

parse X - - - app 4 3 1 0 0 0 27 12 15 0 1/1 1/1 0/1 7 7 0 0

SC:security command, RC:Risky, CF:Control flow, DF: Data flow M:Model, C:Controller, V:View, S: support/helper/library, skip(disabled) U:Unit, F:Functional, I:Integration

Outline

関連したドキュメント