シノプシス、ソフトウェア・インテグリティ・グループの売却に関する最終契約を締結 詳細はこちら

close search bar

申し訳ありませんが、この言語ではまだご利用いただけません

close language selection

Tech Tale:アプリケーション・セキュリティ・テストによるPCIコンプライアンスの達成

Black Duck Editorial Staff

Sep 28, 2022 / 1 min read

Black Duckのお客様は、小規模な企業から大企業まで、金融サービス自動車公共部門医療/ヘルスケアなどのあらゆる業界にわたっています。当社のお客様の共通点は、信頼性の高いソフトウェアの構築を目指しているということです。Black Duckは、ソフトウェアの構築とデリバリーの方法を変革し、イノベーションを加速しながらビジネス・リスクに対処する統合ソリューションを提供しています。

このtech talesのストーリーでは、ある金融サービス業界のお客様がBlack Duckのアプリケーション・セキュリティ・テスト・ツールとサービスを利用してペイメント・カード業界(PCI)のコンプライアンスにどのように対応しているかを理解するために、Black Duckのコンサルティング・チームのメンバーに話を聞きました。

お客様のセキュリティ・プログラム/テストの履歴

この金融サービス業界のお客様は、コンプライアンス要件に従って、PCIデータを処理するアプリケーションやネットワークで毎年テストを実施しています。

お客様がBlack Duckに連絡を取った理由

お客様は、アプリケーション・セキュリティ・テスト・プログラムを拡張し、ペネトレーションテストを委託している現在のベンダーを経験豊富なベンダーに変更したいと考えていました。Black Duckは、いくつかの概念実証テストを行い、現在のベンダーより優れたテスト品質と結果を示しました。

現状の課題

Black Duckは、最初の評価を実施した後、いくつかの潜在的な問題を発見しました。

  • 認証されていないリモートコード実行(RCE):ハッカーはリモートでコードを実行することを可能にする新しい脆弱性を悪用します。このエクスプロイトは通常、ハッカーが事前認証を必要としない状況で発生します。
  • SQLインジェクション:アプリケーションは、ユーザーが入力したデータを静的SQLクエリ文字列に動的に連結することによって生成されたSQLクエリを実行します。この実装では、データベースには開発者が意図したSQL構文とユーザー入力から生成されたSQL構文を区別する方法がありません。そのため、静的クエリに挿入されたSQL構文を含むユーザー入力のデータが解釈および実行され、攻撃者がSQLクエリ構文を挿入してターゲット・クエリの構造を意図的に変更することが可能になり、アプリケーションはSQLインジェクションに対して脆弱になります。
  • ログイン・ページの列挙:アプリケーションのログイン機能は、入力されたユーザー名が有効かどうかによって異なる応答を返します。応答の違いは、「無効なパスワード」と「ユーザー[ユーザー名]が存在しません」の違いのように分かりやすい場合もありますが、応答の相違が微妙な場合があります。アプリケーションは、有効なユーザー名と無効なパスワードが指定されたか、無効なユーザー名が指定されたかによって、わずかに異なる一般的なログイン失敗メッセージを返すか、単一のエラーメッセージを表示することがありますが、応答内容のその他の要素が異なる場合があり、それらは可視化されない可能性があります。

問題発覚の経緯

TikiWikiインスタンスに埋め込まれたPHPベースのファイルマネージャー用ライブラリELFinderで、認証されていない任意のファイルアップロード攻撃が発見されたことにより、認証されていないRCEの問題が発覚しました。

SQLインジェクションの問題は、SQLエラーを検出する機能を備えたプロキシツールを使用して発見されました。

ログインユーザーの列挙の問題は、ブルートフォース攻撃による自動推測の試行によって有効なユーザーのリストをコンパイルする方法で悪用されました。有効なユーザー名のリストがコンパイルされると、パスワードの推測が自動化され、アプリケーションの有効な資格情報の膨大なリストが生成されました。

発見された問題の潜在的な影響

認証されていないRCEの問題が発見されたのは、お客様のWikiページです。古いOSを実行していたため、最初のエクスプロイトの後、特権の昇格やパスワードのダンプなどが容易になりました。Active Directory(AD)にも接続されていたため、AD内の他のシステムへの横方向のネットワーク接続が容易でした。

SQLインジェクションは、攻撃者がアプリケーションで実行されるSQLクエリの構造を変更するのを可能にします。使用されているSQLサーバーの種類によっては、攻撃者が既存のクエリを変更したり、全く新しいクエリを既存のクエリに追加することができる可能性があります。変更されたクエリは、データベース接続に対して付与されているアクセス権限と同じ権限でデータベースの任意の部分にアクセスできるため、以下の問題をもたらす可能性があります。

  • 攻撃者が権限のない情報にアクセスした場合の機密性の喪失
  • 他のユーザーの情報やログファイルなどの機密情報の改ざんによるインテグリティの喪失
  • 攻撃者が他のユーザーのデータを削除する、データベースサーバーをダウンさせるコマンドを実行する、DoS攻撃を実行してデータベースの容量をいっぱいにし、データベースサーバーのストレージを使い果たすなどの行為を行った場合の可用性の低下
  • ユーザーの資格情報を検証するSQLクエリの変更による認証バイパス
  • アプリケーションのビジネスロジックで許可されていない方法でデータアクセスやデータの変更を行うことによる認可のバイパス

推測を自動化することにより、攻撃者はアプリケーションの有効なユーザー名の膨大なリストを入手することができます。有効なユーザー名のリストを入手した攻撃者は、資格情報を盗み、他のユーザーになりすますためにパスワードを推測することができます。パスワードを推測する試みは、アプリケーションに実装されているログインのアンチオートメーション機能(もしあれば)に応じて、手動または自動で行うことができます。有効なユーザー名は、フィッシング行為やアカウントをロックアウトさせる大規模なDoS攻撃でも使用される可能性があります。この例では、収集されたアカウントのパスワードの多くがログインパスワードと同じであることが判明したため、この問題は通常以上の危険をはらんでいます。

対策に関するアドバイス

サービスのバージョンが攻撃に対して脆弱であることが確認されたらすぐに、アップグレードまたはパッチがリリースされるまで、脆弱性を軽減するための予防措置を講じる必要があります。認証されていないRCEに対処するには、ソフトウェアサービスを、現在既知の脆弱性がないバージョンにアップグレードするか、パッチを適用することをお勧めします。

SQLインジェクションの問題に対しては、構築されたすべてのSQLクエリを動的連結によって変更し、クエリをパラメータ化したプリペアドステートメントなど、インジェクション対策を講じたクエリ方式を使用することをお勧めします。最近のほとんどのプログラミング言語は、ユーザーが指定したデータを動的SQLクエリの値として安全に挿入できる「パラメータ化クエリ」と呼ばれる機能を備えています。ユーザーが指定したデータを静的SQLクエリ文字列のフラグメントに連結して動的SQLクエリを作成するのではなく、データ値はパラメータマーカーまたは変数によってクエリ内で特定されます。動的データは、指定されたデータがクエリの意味を変更できないように、SQLで提供されるメカニズムを通じて渡されます。

ユーザー名の列挙の問題の場合、アプリケーションは、指定されたユーザー名が有効なアカウントに関連付けられているかどうかに関係なく、同じ応答を返す必要があります。無効な資格情報のすべての組み合わせに対する応答の例として、「入力されたユーザー名とパスワードが一致しません」が挙げられます。

対策の結果

お客様が金融サービス業界に属し、テスト対象のアプリケーションに顧客データが含まれているため、このアプリケーションはPCIコンプライアンスの対象になります。PCIコンプライアンスの要件では第三者による厳格なテストが義務付けられています。Black Duckはアプリケーションをテストすることで、コンプライアンスを確保し、監査人によって定められた厳しい要件を満たすことができました。

今後の取り組み

新しい企業の買収に際して、お客様が継承するアプリケーションをオンデマンドでテストし、短時間で結果を出します。現在、年間約200のアプリケーションをテストしています。これらのアプリケーションのペネトレーションテストに加えて、モバイルネットワーク、APIのテストも実行します。

オンデマンドのリソースと専門知識を活用してアプリケーションのセキュリティテストを加速し拡張する方法をご覧ください。

Continue Reading

トピックを探索する