Skip to main content

コンテキストのリスクスコア

Contrastではコンテキストに基づいてリスクをスコアで表しますが、これは、ユーザが実際のリスクポイントがどこにあり、何を優先すべきかを理解できるようにすることを目的としています。関数のコンテキストスコアは、各関数の全体的な評価を把握するのにに役立ちます。

ServerlessGradeEN.png

関数には、関数の総合評価を表すAからFまでのレターグレードと、35から100までの数値スコアがあります。

  • A: 90 - 100

  • B: 80 - 89

  • C: 70 - 79

  • D: 60 - 69

  • F: 35 - 59

総合のコンテキストのリスクスコアの計算:平均 = (脆弱性スコア + 影響度スコア + 可能性スコア) / 3

脆弱性スコア

関数のスキャン(静的および動的)中に特定された脆弱性。

  • 脆弱性の種類:

    • カスタムコードの脆弱性(静的および動的)

    • 依存関係(CVE)

    • 最小権限違反

  • カスタムコードの脆弱性スコアの算出は100点から始まり、関数で検出された脆弱性の数に、深刻度に応じたペナルティの重み付けを掛けたペナルティ点数が差し引かれます。

    • 重大: 脆弱性の数 x 20

    • 高: 脆弱性の数 x 10

    • 中: 脆弱性の数 x 5

    • 低: 脆弱性の数 x 1

      • 例えば、関数の脆弱性が、「重大」0件、「高」1件、「中」0件、「低」2件だった場合、スコアは次のようになります:100 - (20 X 0) - (10 X 1) - (5 X 0) - (1 X 2) = 88

影響度(アクセスレベル)スコア

関数に与えられた権限(IAMロール)。関数の権限が多いほど、リスクは高くなります。

影響度スコアを計算するために、各サービスに対して5つのアクセスレベル分類(List、Read、Write、Tagging、Permissions Management)を検査してスコアを付けます。そして、100点から開始して、各サービスのアクセスレベルに応じてペナルティ点数を減算していきます。

例えば、以下のようなIAMポリシーがあるとします。

{
    "Effect": "Allow" ,
    "Action": [
        "s3:GetObject",
        "sqs:*"
    ],
    "Resource": "*"
}

各サービスのアクセスレベルのスコアが、以下のように算出されたとします。

{ 
  "s3": {
    "Read": 6,
    "Write": 3,
    "List": 3,
    "Tagging": 1,
    "Permissions management": 12
  },
  "sqs": {
    "Read": 3,
    "Write": 3,
    "List": 1,
    "Tagging": 1,
    "Permissions management": 6
  }
}

総合スコアは、次のように算出されることになります。

  • s3: [6], sqs: [3,3,1,1,6] --> 100 - (6+3+3+1+1+6) = 80

可能性(到達可能性)スコア

攻撃者が関数に到達する可能性は、関数のトリガーの設定に基づきます。

各サービスには、攻撃者がその関数にアクセスできるかどうかだけでなく、トリガーの設定(例えば、認証あり/認証なし)に基づいた、異なるスコアがあります。

例:

例えば、関数にEventBusがトリガーとして設定されている場合、潜在的な攻撃者がこのLambda関数にアクセスできる可能性は、 API Gatewayがトリガーとして設定されているLambdaにアクセスするよりも低くなります。さらに、API Gatewayが認証なし(つまりOpen)で設定されている場合には、その関数には誰でもどこからでもアクセスできることになります。

そのため、関数の可能性スコアは以下のようになります。

  • EventBusをトリガーとして設定している場合:90

  • API Gateway(認証あり)をトリガーとして設定している場合:75

  • API Gateway(認証なし)をトリガーとして設定している場合:5 (最低スコア)

  • トリガーがない場合:100 (最高スコア)