V10 悪意のあるコードの検証要件
Last-modified: 2020-08-10 (月) 14:24:31
Top/V10 悪意のあるコードの検証要件
管理目標 †
検査対象のコードが次の高次の要件を満たすことを確認します。
- アプリケーションの他の部分に影響が及ばないよう、悪性活動がセキュアな方法で適切に処理される
- time bomb や他のtime based 攻撃に繋がる問題を作り込んでいない
- 悪性サイトや許可されていないサイトとの秘密の通信 (“phone home”)を行わない
- 攻撃者が制御可能なバックドア、イースターエッグ、サラミ攻撃、ルートキット、不正コードが作り込まれていない 悪性コードを完全に見つけることは不可能です。コードの中に悪性コードや不要な機能が含まれていないことを確認するために、最善の努力を払う必要があります。
V10.1 コード整合性コントロール †
悪性コードに対する最良の防御策は、「信頼はするが、検証もする」ことです。 不正なコードや悪性コードを取り込むことは、多くの管轄で犯罪行為となっています。そして 悪性コードを無くすためにガイドラインを設ける必要があります。 リード開発者による定期的なコードチェック(特に時間、I/O、またはネットワーク機能にアクセスする可能性があるコード)を行う必要があります。
項番 | 説明 | L1 | L2 | L3 | CWE No | タイトル | 概要 |
10.1.1 | 時間関数、危険なファイル操作、ネットワーク接続など、悪性コードを検出できるコード分析ツールが使用されている。 | ✓ | 749 | 露呈した危険なメソッドまたは機能 | ソフトウェアは、外部アクターとの相互作用のためのアプリケーション・プログラミング・インターフェース(API)または類似のインターフェースを提供していますが、そのインターフェースには、適切に制限されていない危険なメソッドまたは機能が含まれています。 |
V10.2 悪意コード検索 †
悪性コードが作り込まれることは極めてまれです。また検出は困難です。コードを1行1行レビューするのはロジックボムを見つける助けにはなるでしょうが、最も経験を積んだコードレビュアをもってしても、存在すると分かっていても悪性コードを見つけることは容易ではありません。
項番 | 説明 | L1 | L2 | L3 | CWE No | タイトル | 概要 |
10.2.1 | アプリケーションのソースコードおよびサードパーティライブラリに、不正な通信 (“phone home”) またはデータ収集機能が含まれていないようにする。このような機能がある場合は、データを収集する前にユーザの許可を受ける。 | ✓ | ✓ | 359 | 個人情報の不正使用者への暴露 | 本製品は、(1) 情報へのアクセスを明示的に許可されていないか、(2) 情報が収集された人物の暗黙の同意を得ていない行為者による個人の個人情報へのアクセスを適切に防止するものではありません。 | |
10.2.2 | アプリケーションが連絡先、カメラ、マイク、ロケーションなど、プライバシー関連の機能に対して不要な権限または過剰な権限を要求しない。 | ✓ | ✓ | 272 | 最小特権違反 | chroot() のような操作を実行するために必要な特権レベルの上昇は、操作を実行した直後に削除する必要があります。 | |
10.2.3 | アプリケーションのソースコードおよびサードパーティのライブラリにバックドアが含まれていない。(ハードコードされたアカウントや鍵、文書化されていないアカウントや鍵、コードの難読化、文書化されていないバイナリBLOB、ルートキット、アンチデバッグ、危険なデバッグ機能、古い機能、隠された機能) | ✓ | 507 | トロイの木馬 | ソフトウェアには、一見良性の機能や有用な機能が含まれているように見えますが、ユーザやシステム管理者の意図したセキュリ ティポリシーに違反するような、通常の操作からは隠されたコードも含まれています。 | ||
10.2.4 | 日付と時刻関連の機能を検索して、アプリケーションのソースコードとサードパーティのライブラリに時限爆弾(time bomb)が含まれていない。 | ✓ | 511 | 論理/時限爆弾 | ソフトウェアには、一定の時間が経過したとき、または一定の論理的条件が満たされたときに、ソフトウェア(またはその環境)の正当な動作を妨害するように設計されたコードが含まれています。 | ||
10.2.5 | アプリケーションのソースコードとサードパーティのライブラリに、サラミ攻撃、ロジックバイパス(logic bypasses)、ロジックボム(logic bombs)などの悪意のあるコードが含まれていない。 | ✓ | 511 | 論理/時限爆弾 | ソフトウェアには、一定の時間が経過したとき、または一定の論理的条件が満たされたときに、ソフトウェア(またはその環境)の正当な動作を妨害するように設計されたコードが含まれています。 | ||
10.2.6 | アプリケーションのソースコードとサードパーティのライブラリにイースターエッグやその他の望ましくない機能が含まれていない。 | ✓ | 507 | トロイの木馬 | ソフトウェアには、一見良性の機能や有用な機能が含まれているように見えますが、ユーザやシステム管理者の意図したセキュリ ティポリシーに違反するような、通常の操作からは隠されたコードも含まれています。 |
V10.3 デプロイ済アプリケーションの整合性コントロール †
アプリケーションがデプロイされた後も、悪性コードが挿入される可能性があります。 アプリケーションは、信頼されていないソースからの未署名のコードの実行やサブドメインテイクオーバ(subdomain takeover)などの一般的な攻撃から自身を保護する必要があります。 このセクションに準拠するには運用上、持続的に進める必要があります。
項番 | 説明 | L1 | L2 | L3 | CWE No | タイトル | 概要 |
10.3.1 | アプリケーションにクライアントまたはサーバの自動更新機能がある場合は、安全なチャネルを経由して、デジタル署名がされていることを確認する。インストールまたは実行する前に、アップデートするコードのデジタル署名を検証する必要がある。 | ✓ | ✓ | ✓ | 16 | カテゴリ:構成 | このカテゴリの弱点は、通常、ソフトウェアの構成時に発生します。 |
10.3.2 | アプリケーションで、コード署名やサブリソースの完全性などの保護が使用されている。加えて、信頼できない場所やインターネットから取得したモジュール、プラグイン、コード、ライブラリなどをロードまたは実行しない。 | ✓ | ✓ | ✓ | 353 | 完全性チェックのサポートがない | ソフトウェアは、チェックサムのような送信中のデータの完全性を検証するメカニズムを含まない送信プロトコルを使用しています。 |
10.3.3 | 期限切れドメイン名、期限切れ DNS ポインタまたは CNAME、パブリックソースコードリポジトリでの期限切れプロジェクト、一時的なクラウド API、サーバレス機能、ストレージバケット(autogen-bucket-id.cloud.example.com)など、DNSエントリまたはDNS サブエントリに依存している場合、アプリケーションがサブドメイン奪取(subdomain takeover)から保護されている。アプリケーションの保護は使用する DNS 名の有効期限または変更を定期的にチェックすることを含めます。 | ✓ | ✓ | ✓ | 350 | セキュリティ上重要なアクションのための逆引き DNS 解決への依存 | このソフトウェアは、ホスト名を取得してセキュリティ上の決定を行うために IP アドレスに対して逆引き DNS 解決を実行しますが、IP アドレスが本当にホスト名に関連付けられているかどうかを適切に確認していません。 |
参考情報 †
- Hostile Sub-Domain Takeover, Detectify Labs : https://labs.detectify.com/2014/10/21/hostile-subdomain-takeover-using-herokugithubdesk-more/
- Hijacking of abandoned subdomains part 2, Detectify Labs : https://labs.detectify.com/2014/12/08/hijacking-of-abandoned-subdomains-part-2/