コードが以下の上位要件を満たすことを確認します。
- アプリケーションの他の部分に影響が及ばないよう、悪性活動がセキュアな方法で適切に処理される
- time bomb や他の time based 攻撃に繋がる問題を作り込んでいない
- 悪性サイトや許可されていないサイトとの秘密の通信 (“phone home”)を行わない
- 攻撃者が制御可能なバックドア、イースターエッグ、サラミ攻撃、ルートキット、不正コードが作り込まれていない
悪性コードを完全に見つけることは不可能です。コードの中に悪性コードや不要な機能が含まれていないことを確認するために、最善の努力を払う必要があります。
悪性コードに対する最良の防御策は、「信頼はするが、検証もする」ことです。 不正なコードや悪性コードを取り込むことは、多くの管轄で犯罪行為となっています。そして 悪性コードを無くすためにガイドラインを設ける必要があります。
リード開発者による定期的なコードチェック(特に時間、I/O、またはネットワーク機能にアクセスする可能性があるコード)を行う必要があります。
# | 説明 | L1 | L2 | L3 | CWE |
---|---|---|---|---|---|
10.1.1 | 時間関数、危険なファイル操作、ネットワーク接続など、悪性コードを検出できるコード分析ツールが使用されている。 | ✓ | 749 |
悪性コードが作り込まれることは極めてまれです。また検出は困難です。コードを 1 行 1 行レビューするのはロジックボムを見つける助けにはなるでしょうが、最も経験を積んだコードレビュー担当者をもってしても、存在すると分かっていても悪性コードを見つけることは容易ではありません。
このセクションに準拠するには、サードパーティのライブラリを含むソースコードに完全にアクセスする必要があります。
# | 説明 | L1 | L2 | L3 | CWE |
---|---|---|---|---|---|
10.2.1 | アプリケーションのソースコードおよびサードパーティライブラリに、不正な通信 (“phone home”) またはデータ収集機能が含まれていないようにする。このような機能がある場合は、データを収集する前にユーザの許可を受ける。 | ✓ | ✓ | 359 | |
10.2.2 | アプリケーションが連絡先、カメラ、マイク、ロケーションなど、プライバシー関連の機能に対して不要な権限または過剰な権限を要求しない。 | ✓ | ✓ | 272 | |
10.2.3 | アプリケーションのソースコードおよびサードパーティのライブラリにバックドアが含まれていない。(ハードコードされたアカウントや鍵、文書化されていないアカウントや鍵、コードの難読化、文書化されていないバイナリ BLOB、ルートキット、アンチデバッグ、危険なデバッグ機能、古い機能、隠された機能) | ✓ | 507 | ||
10.2.4 | 日付と時刻関連の機能を検索して、アプリケーションのソースコードとサードパーティのライブラリに時限爆弾(time bomb)が含まれていない。 | ✓ | 511 | ||
10.2.5 | アプリケーションのソースコードとサードパーティのライブラリに、サラミ攻撃、ロジックバイパス (logic bypasses)、ロジックボム (logic bombs) などの悪意のあるコードが含まれていない。 | ✓ | 511 | ||
10.2.6 | アプリケーションのソースコードとサードパーティのライブラリにイースターエッグやその他の望ましくない機能が含まれていない。 | ✓ | 507 |
アプリケーションがデプロイされた後も、悪性コードが挿入される可能性があります。 アプリケーションは、信頼されていないソースからの未署名のコードの実行やサブドメインテイクオーバ(subdomain takeover)などの一般的な攻撃から自身を保護する必要があります。
このセクションに準拠するには運用上、持続的に進める必要があります。
# | 説明 | L1 | L2 | L3 | CWE |
---|---|---|---|---|---|
10.3.1 | アプリケーションにクライアントまたはサーバの自動更新機能がある場合は、安全なチャネルを経由して、デジタル署名がされていることを確認する。インストールまたは実行する前に、アップデートするコードのデジタル署名を検証する必要がある。 | ✓ | ✓ | ✓ | 16 |
10.3.2 | アプリケーションで、コード署名やサブリソースの完全性などの保護が使用されている。加えて、信頼できない場所やインターネットから取得したモジュール、プラグイン、コード、ライブラリなどをロードまたは実行しない。 | ✓ | ✓ | ✓ | 353 |
10.3.3 | 期限切れドメイン名、期限切れ DNS ポインタまたは CNAME、パブリックソースコードリポジトリでの期限切れプロジェクト、一時的なクラウド API、サーバレス機能、ストレージバケット(autogen-bucketid.cloud.example.com)など、DNS エントリまたは DNS サブエントリに依存している場合、アプリケーションがサブドメイン奪取(subdomain takeover)から保護されている。アプリケーションの保護は使用する DNS 名の有効期限または変更を定期的にチェックすることを含めます。 | ✓ | ✓ | ✓ | 350 |