🔍

独自スキャナー開発によるWebセキュリティ診断の品質向上への取り組み

2025/02/27に公開

はじめに

ChillStackでは、WebやAIの安全を検査するセキュリティ診断サービスを提供しています。
ChillStack セキュリティ診断サービス

セキュリティ部では、セキュリティ診断サービスの品質向上や効率化を図るために、様々な取り組みを実施しています。
本稿では、その一環として、独自に「Web脆弱性スキャナー」を開発した取り組みについて紹介します。

セキュリティ診断の品質保証と工数問題

ChillStackのWebセキュリティ診断では、最高の品質を保ちつつ最短でお客様に結果を報告できるように、一般的なWeb診断ツールを診断員が活用した上で、精密な手動検査を実施しています。

ですが、診断を実施するお客様の環境は多種多様なため、検査する内容自体は複雑ではないものの、一般的なWeb診断ツールの検査機能では痒いところに手が届かないことが多々あります。
その場合は診断員の負担が増えるとともに、診断員ごとに診断品質にばらつきが出る可能性が高まってしまいます。

そこで、私たちは上記の課題を解消すべく、独自のWeb脆弱性スキャナー(以下「独自スキャナー」という)を開発し、Webセキュリティ診断に活用しています。
独自スキャナーによってどのようなことが実現できるのか、具体的な内容を紹介します。

課題解決例:脆弱性の自動検出精度向上

独自スキャナーを開発することで精度の向上が実現され、従来のツールでは正確に検出ができなかった脆弱性に対して、より正確に検出できるようなりました。

今回は、対応した脆弱性の一つとして、RPO (Relative Path Overwrite) という攻撃手法を利用した脆弱性を紹介します。

RPOの概要

RPOは、CSSでないファイルをCSSファイルとして読み込ませる攻撃手法となり、攻撃者が任意のCSSを実行可能となるCSSインジェクションと呼ばれる脆弱性につながります。

実際にどのような脆弱性なのかをデモサイトを通じて説明します。
このデモサイトは名前とメッセージ内容を入力することで、メッセージを投稿することができる掲示板サイトとなっています。

まず、メッセージの箇所に「{}*{background-color:blue;}」を入力して投稿を行います。
この「*{background-color:blue;}」は背景を青色にするCSSで、先頭に「{}」をつけることによりCSSであることをブラウザに示しています。
投稿されたメッセージは下図となり、入力した内容がそのまま書き込まれていることがわかります。

次にURLの末尾にスラッシュ「/」を追加して再度アクセスしてみます。
すると、先ほど入力したCSSが反映され、背景が青色になっていることが確認できます。
これにより攻撃者は任意のCSSを実行することができ、サイトの見た目を改ざんしフィッシングに悪用したりすることができます。

RPOの発生原因

この攻撃が成功するためには、以下の条件が満たされている必要があります。

  1. ドキュメントタイプ宣言が適切にされていない(先頭に「<!DOCTYPE html>」が記載されていない)
    ドキュメントタイプ宣言が適切にされていない場合、後方互換モードになりRPOが可能な状態になります。
    以下のような記述でも後方互換モードになります。

    <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
    
  2. スタイルシートが相対パスで読み込まれている
    以下のような形で、相対パスでCSSファイルを読み込んでいる必要があります。

    <link rel="stylesheet" href="main.css">
    
  3. URLの末尾に余計なパスを指定した場合でも同じページが読み込まれる
    以下の3つのパスは同じページ(「/cssi/rpo」)を読み込みます。

    • /cssi/rpo
    • /cssi/rpo/
    • /cssi/rpo/hoge(存在しないパス)

    「/cssi/rpo/」にアクセスした際、条件2により読み込まれるCSSファイルのパスは「/cssi/rpo/main.css」となります。しかし、「/cssi/rpo/main.css」は存在しないパスとなるので、結果「/cssi/rpo」をCSSファイルとして読み込みます。

  4. 任意の文字列を埋め込める。
    デモサイトのように、該当ページにユーザが任意の文字列(CSS)を埋め込める場合、条件2および条件3を用いて該当ページをCSSファイルとして読み込むことでRPOが成功します。

独自スキャナーの精度検証

既存で使用している一般的なWeb診断ツールである Burp Suite にて上記のデモサイトに対してスキャンを実行した結果が以下となります。

「Issue type」に「Path-relative style sheet import」と記載されているのが、RPOを利用した脆弱性につながる可能性がある指摘事項となっています。

しかしながら検出自体はしているものの、「Severity(重大度)」が「Information(情報)」となっており、また「Confidence(確信度)」が「Tentative」になっています。

「Tentative」には「あやふやな」などの意味があり、公式よると「存在する可能性があるが、誤検知の可能性が高い」と説明されているため、確認の手間がかかり、場合によっては見逃してしまう可能性も高くなってしまっています。

続いて、独自スキャナーにてスキャンを実施してみます。

スキャンの方法については、Burp Suite上で対象のリクエストを選択し、独自スキャナーに送信することでスキャンを実行できるように実装しました。

そしてスキャンの結果はWeb UI上で確認することができます。
既存の診断ツールと比べ、検出の根拠をしっかりと示した形で正確に脆弱性を検出していることがわかります。
このように根拠を明確に把握することができるため、確認の手間を減らすことができ、診断員によって差異が発生しずらい状態を実現することができました。

まとめ

本稿では、セキュリティ診断の効率化および品質の底上げを行なうために、独自スキャナーを開発した取り組みを紹介しました。

ChillStackでは、本稿で紹介した取り組み以外にも、お客様に満足いただけるようなサービスを提供できるように様々な取り組みを実施しています。

最後に、ChillStackでは現在エンジニアを積極採用中です!

「今は転職する気はないけど、ちょっと興味を持ったので話を聞いてみたい」という方も歓迎ですので、ご興味ある方お待ちしてます!

株式会社ChillStack Tech Blog

Discussion