PCI DSS

PCI DSS とは

ペイメントカード業界のデータセキュリティ基準

PCI DSS(Payment Card Industry Data Security Standard)は、クレジットカード、デビットカード、およびキャッシュカード等のトランザクションのセキュリティを強化し、カード所有者の個人情報や取引情報の悪用から保護するために策定されました。
カードのセキュリティインシデントとプライバシーの脅威に対する防止、検出、および適切な対応を含む、堅牢なペイメントカードのデータセキュリティプロセスの開発に必要な実用的なコーディングフレームワークです。
PCI DSSは、ペイメントカード情報を安全に使用するために不可欠な12の要件で構成されており、特に要件6は、ソフトウェア開発プロセスにおける一般的なコーディングの脆弱性へ対処することに重点を置いています。

なお、PCI DSSは2022年3月にPCI DSS v4.0へバージョンアップされました。
前バージョンのPCI DSS v3.2.1は2024年3月31日に廃止が予定されているため、それまでにPCI DSS v4.0の要件を把握し、実装する必要があります。

Jtestでセキュアなアプリケーション開発 失敗しない虚弱性対策とは?

PCI DSSコンプライアンスの達成に向けて

PCI DSS要件1~12

PCI DSS は、12の要件で構成されており、ペイメントカード情報の個人情報や取引情報のセキュリティを保護するように設計されています。
PCI DSS要件
安全なネットワークとシステムの構築と維持
  • 要件 1: ネットワークセキュリティコントロールの導入と維持
  • 要件 2: すべてのシステムコンポーネントにセキュアな設定を適用する
アカウントデータの保護
  • 要件 3: 保存されたアカウントデータの保護
  • 要件 4: オープンな公共ネットワークでの送信時に、強力な暗号化技術でカード会員データを保護する
脆弱性管理プログラムの維持
  • 要件 5: 悪意のあるソフトウェアからすべてのシステムおよびネットワークを保護する
  • 要件 6: 安全なシステムおよびソフトウェアの開発と維持
強固なアクセス制御の実施
  • 要件 7: システムコンポーネントおよびカード会員データへのアクセスを、業務上必要な適用範囲(Need to Know)によって制限する
  • 要件 8: ユーザの識別とシステムコンポーネントへのアクセスの認証
  • 要件 9: カード会員データへの物理アクセスを制限する
ネットワークの定期的な監視とテスト
  • 要件 10: システムコンポーネントおよびカード会員データへのすべてのアクセスをログに記録し、監視すること
  • 要件 11: システムおよびネットワークのセキュリティを定期的にテストする
情報セキュリティポリシーの維持
  • 要件 12: 組織の方針とプログラムによって情報セキュリティをサポートする

静的解析によるPCI DSSコンプライアンスの強化

「要件 6: 安全なシステムおよびソフトウェアの開発と維持」はカードに関するデータを取り扱うシステムおよびソフトウェアのセキュリティを確保するための要件です。
この要件では、セキュリティを確保するための最新の情報や技術を利用してシステムやソフトウェアに適切なパッチの適用を行うことや、要件定義からテストまでの各工程においてセキュリティ脆弱性を考慮したあらゆる攻撃に対する最新の保護策を取り入れることを求めています。
特に「6.2.4:ソフトウェア攻撃や関連する脆弱性を防止・軽減するための技術的な対策に関する要件」では開発のコーディング工程に関する技術的な要件が定義されています。
  • 最新の安全なコーディング技術について熟知する(一般的なコーディングの脆弱性を回避する方法を含む)
  • 安全なコーディングガイドラインを定義し、それに基づいてソフトウェアを開発する
一般的にコーディング工程において、システムやソフトウェアのセキュリティ脆弱性は「調査 → 定義 → 確認」の流れで対策することができます。
  • 例:
    1. 調査:SQLインジェクションやクロスサイトスクリプティング等の脆弱性を防止・回避するための技術的な方法を事前に調査する
    2. 定義:コーディングガイドラインを定義する
    3. 確認:定義したガイドラインに基づきコーディングを行い、その後にガイドライン(要件)が満たされていることを確認(テスト)する
このような要件や手順を満たすために、ソフトウェアエンジニアリング手法(アジャイルやDevSecOps等)やソースコード解析ツール(Jtestや他OSS等)を開発工程に組み込むことはソフトウェアの脆弱性を開発プロセスの早い段階で検出・防止することにつながります。

JtestによるPCI DSS準拠

Jtestがサポートする問題の内容

Jtestの静的解析ソリューションは、PCS DSS 6.2.4 への準拠を目的としたソースコードレベルでセキュリティの弱点を見つけることに役立つ包括的なセキュリティルールを搭載しています。
このセキュリティルールを開発工程に適用することで、開発の初期段階からPCI DSS 標準に準拠したセキュリティレベルを期待できます。
さらに「セキュリティ問題の対策の前倒し」「継続的なセキュリティ対策」が期待できるDevSecOpsの運用にも活用できます。

Jtest は要件 6.2.4 をさらに 5 つのカテゴリに分けて問題を管理、それぞれのカテゴリに対して複数のルールを提供しています。

  • 6.2.4.1 インジェクション攻撃
    • SQL、LDAP、XPath、コマンド、パラメータ等の欠陥への攻撃
  • 6.2.4.2 データおよびデータ構造に対する攻撃
    • バッファー、ポインタ、入力データ、共有データ等への攻撃
  • 6.2.4.3 暗号の使用に関する攻撃
    • 暗号実装、アルゴリズム、暗号スイート等への攻撃
  • 6.2.4.4 ビジネスロジックに対する攻撃
    • API、通信プロトコル、チャンネル、他システム等への攻撃、XSS、CSRF等
  • 6.2.4.5 アクセス制御の仕組みに対する攻撃
    • 識別、認証、認可等の仕組みへの攻撃

PCI DSS 静的解析機能

Jtestは、IDE やコマンドライン(ビルドツールプラグインや独自のコマンドラインインターフェース)を介してJavaコードに対して静的解析を実行することができます。
要件6.2.4を満たす「PCI DSS v4.0用のルールセット」が実装されているため、PCI DSSに準拠したソフトウェア脆弱性の早期検出と改修に活用できます。

Jtest(Eclipse上で使用)でPCI DSS用の静的解析の違反検出時のイメージ
Step1

Eclipse上でParasoft Jtestを実行し、静的解析違反を検出すると、以下のようにEclipseの専用のビュー上に検出された違反の一覧が表示されます。
ここでは、赤枠(要件6.2.4のSQLインジェクションに関する違反)を選択し、詳細を確認します。
アプリケーションにこの脆弱性が存在する場合、攻撃者はアプリケーションが想定していない SQL 文や OS コマンドを実行させ、不正操作によるデータの取得、改ざん、削除やDB の破壊、不正なシステム操作を行うことができます。


Step2

検出された違反を選択すると、以下のように違反の詳細を確認することが可能です。
静的解析のフロー解析用のルールで違反が検出されると以下のように、ソースのフローが分析され、違反の起点と違反箇所が表示されます。

Step3

Step2の違反の詳細(Step2画像の赤枠)をダブルクリックすることで、実コード上から違反内容の確認と修正が可能です。
違反コード解説:
このコードでは、18 行目でWeb アプリケーションの画面でユーザーが入力したデータ(パスワード)を取得し、19 行目で SQL 文に直接内容を埋め込みます。
攻撃者がパスワードとして ' or ''=' を利用した場合、 21 行目で生成されるのは次のようなパスワードの認証を行わずにユーザー情報を取得することができる SQL 文です。
SELECT * FROM users WHERE name='XXX' AND password='' or ''=''
24 行目でこの SQL 文が実行された場合、正しい認証情報を入力していないのにも関わらず、攻撃者は任意のユーザーでアプリケーションの利用が可能になります。

Step4

解析結果は、HTMLファイルとしても出力が可能です。

PCI DSS ルールドキュメント

Jtestは静的解析機能で脆弱性を検出するだけでなく、PCI DSS 準拠をサポートする機能が充実しています。
解析に使用するルールは全てルールドキュメントが搭載されており、検出した脆弱性に関する情報や対策について知識を習得することができます。
PCI DSS 要件6.2.4のルール(SQLインジェクションから防御する)の説明内容:


違反や修正のサンプルコード:

PCI DSSコンプライアンス管理機能

Jtestは、PCI DSSのリスク評価フレームワークを備えたインタラクティブなコンプライアンスダッシュボード、ウィジェット、およびレポートを提供し、ユーザーにPCI DSSコンプライアンス状況の継続的な管理機能を提供します。
この機能を利用することで、PCI DSS コンプライアンスの管理、監査、およびチーム全体への継続的なフィードバックに活用できます。

PCI DSS v4.0専用ダッシュボード:
専用のウィジェットを配置してプロジェクトのPCI DSS6.2.4の準拠状況を監視することができます。


PCI DSS v4.0専用ウィジェット(一部):
PCI DSS v4.0専用ダッシュボードに配置して違反を検出したルールカテゴリや特に検出数が多いルールの情報を確認することができます。


違反の詳細:
各ウィジェットからドリルダウンして違反の詳細を確認することができます。


Compliance Report:
PCI DSSのCompliance Report(PDF)をダウンロードして、静的解析(PCI DSS)の検証結果として第3者へ提供いただけます。


Compliance Reportのイメージ:TOPページ


Compliance Reportのイメージ:検証結果の概要


Compliance Reportのイメージ:検証に使用した静的解析ルールの一覧


DevSecOpsの実現に向けて

DevSecOpsは、DevOps(開発と運用がチームとして連携し効率よく開発を進められるようにする活動)にセキュリティの観点を取り入れ、セキュリティ品質も同時に担保することです。

Jtest(PCI DSSの解析)をCI環境に組み込むことで、開発者がソースコードをコミットしたタイミングや夜間など定期的に静的解析を実施できるようになります。そうすることで、開発者は解析の実行結果を意識せずに受け取れるようになり、また、ソースコードが変更された場合は自動で解析が実行されるため、チェック漏れがない、セキュアコーディング標準を徹底することが可能です。
Jtestを活用すれば、これまで開発の後工程で実施されることが多かったセキュリティテストを開発の初期段階から取り入れ、PCI DSS標準に準拠したDevSecOpsの運用(セキュリティ問題の早期発見)に活用できます。

PCI DSS v4.0へのバージョンアップに伴い、PCI DSSの新しい要件を準拠するためには、最初はある程度、工数を割く必要があります。
PCI DSSの内容の理解や教育に掛ける工数も増えることでしょう。しかし、Jtestで今回ご紹介した機能を使い、PCI DSSの中でも特に重要な要件「6.2.4:ソフトウェア攻撃や関連する脆弱性を防止・軽減するための技術的な対策に関する要件」を準拠することで、PCI DSSのコンプライアンス達成へのコストを削減し、時間と労力の節約に役立てられます。

他にも、Jtestをお使いになればPCI DSSに準拠した「セキュリティ問題の対策の前倒し」「継続的なセキュリティ対策」が期待できるDevSecOpsへの導入のハードルを下げ、より効果的に実施することができます。
※ セキュリティルールおよびセキュリティコンプライアンス規約セットによる静的解析には「セキュリティコンプライアンスパック」のライセンス(有償)が必要です。

Java対応静的解析・単体テストツール Jtestに
関するお問い合わせ

  • テクマトリックス株式会社
    東京本社

    ソフトウェアエンジニアリング事業部

    03-4405-7853

メールでのお問い合わせ
parasoft-info@techmatrix.co.jp

お問い合わせ

製品についてやテクマトリックスについてなど、
こちらよりお気軽にお問い合わせいただけます。