STORES Product Blog

こだわりを持ったお商売を支える「STORES」のテクノロジー部門のメンバーによるブログです。

脆弱性診断の取り組み

こんにちは。セキュリティ本部の yokoyama です。

セキュリティ本部では、「STORES プラットフォームに内在するセキュリティリスクを適切にコントロールする」をミッションに、日々さまざまな活動に取り組んでいます。

その活動の一環として、全サービスを対象に脆弱性診断を内製で実施しています(一部は外部ベンダーの支援を受けています)。

今回は、私たちが実施している脆弱性診断の取り組みについて、その一部をご紹介します。

診断種類

以下の脆弱性診断を年1回、全サービスに対して実施しています。また、新しいプロダクトや機能のリリース前にも診断を行っています。

  • Web アプリケーション診断
  • API 診断
  • プラットフォーム診断

これとは別に、スマートフォンアプリ診断、ソースコード診断、PCI DSS 準拠対象のサービスに対しては ASV スキャンや外部ベンダーによる脆弱性診断を実施しています。

診断の流れ

今回は、Web アプリケーション診断の流れについて紹介します。

診断の全体的な流れは以下の通りです。

  • 診断計画の策定
  • 診断対象の精査
  • Web アプリケーション診断の実施
  • 診断結果の取りまとめ
  • 脆弱性の対応

診断計画の策定

現在、STORES では ネットショップ、POS レジ、予約、決済 など複数のサービスを提供しており、認証基盤などの共通システムも複数あります。

Web アプリケーション診断の対象数は 2,000 以上あるため、毎年年初に脆弱性診断の年間計画を策定して各サービスの診断時期を決めています。

診断対象の精査

Web アプリの全機能に対して、Burp Suite などのローカルプロキシーツールを使い、実際にブラウザから画面操作を行います。 そして、どのような HTTP リクエストが送信されるかをスプレッドシートに記録して診断対象を精査しています。

portswigger.net

診断対象の精査例

例えば、STORES ネットショップ のカテゴリを保存する際の HTTP リクエストを精査する場合は、以下のような手順で行います。

カテゴリ名に abass と入力して 保存 を押下します。

STORES ネットショップ の カテゴリ の作成画面

Burp Suite の画面で POST /dashboard/api/v1/categories の Body に "name":"abass" が付与されていることを確認できます。

Burp Suite の画面

遷移時の HTTP リクエストを確認できたので、診断対象をスプレッドシートに記録します。 Webアプリの全機能に対してこの作業を手動で行い、診断対象を精査していきます。

現在は手動で対応していますが、自動化の方法を模索中です。

診断対象を記入したスプレットシート例

Web アプリケーション診断の実施

診断対象に対して実際に Web アプリケーションに脆弱性が内在していないか確認します。

OWASP Top 10」、「OWASP Cheat Sheet Series」、IPA の「安全なウェブサイトの作り方」などを参考に、XSS や SQL インジェクションなどの代表的な脆弱性から、GraphQL、OAuth、JWT など仕様に関連したものまで、診断項目は 200 以上定義しています。

診断の実施例

例えば、STORES ネットショップ のカテゴリ保存に対して XSS の有無を確認する場合は以下のような手順で行います。

  • 注意点:以下は XSS 診断手法の一例です。実際には他のペイロードも指定して確認します。

カテゴリ名に abass と入力して 保存 を押下します。

STORES ネットショップ の カテゴリ の作成画面

POST /dashboard/api/v1/categories の Body に "name":"abass" が付与されてることがわかります。

Burp Suite の画面

XSS の脆弱性をチェックする場合、Body の "name":"abass""name":"<script>alert(1)</script>" などに変更して HTTP リクエストします。

Burp Suite の画面

出力画面で XSS が発生しないことを確認します。

この作業を XSS や SQL インジェクションなど、チェックする脆弱性に合わせてパラメータを変更して HTTP リクエストを送信し、脆弱性がないかを Burp Suite の Repeater 機能*1 や Intruder 機能*2 などを利用して手動で診断します。

STORES ネットショップ の カテゴリ 画面

XSS など、出力時に起因する脆弱性を確認する際に重要なのは、この カテゴリ名 がどの画面に出力されるかを把握しておくことです。

なぜなら、この カテゴリ名アイテム作成画面ストア画面 などの他の画面にも出力される場合、それらの画面の出力結果も確認しなければ XSS の脆弱性の有無を正確に確認できないからです。

アイテム作成画面

ストア画面

診断結果の取りまとめ

脆弱性を検出した場合は、以下の観点を GitHub Issue としてまとめています。

  • 脆弱性の概要
  • 脅威度
  • 脆弱性の再現手順
  • 脆弱性のリスク
  • 対策案

脆弱性の対応

検出した脆弱性を開発部門と共有し、リスクの状況に応じて対応します。

おわりに

今回は、セキュリティ本部で実施している脆弱性診断の取り組みの一部をご紹介しました。

STORES では、「Just for Fun」というミッションの実現のため、一緒に働く仲間を大募集しています。

セキュリティに高い関心をお持ちの方、 ぜひ採用サイトにも遊びに来てください!

jobs.st.inc

*1:Burp Suite の Repeater 機能:HTTP リクエストのパラメータやヘッダーを手動で編集し、繰り返し再送信できる機能です。

*2:Burp Suite の Intruder 機能:特定のパラメータに複数のペイロードを自動挿入し、HTTPリクエストを送信する機能です。