脆弱性診断で検出される問題について(非エンジニア向け)
脆弱性診断とは何かについて詳しく知りたい⽅は脆弱性診断とは(エンジニア向け)と脆弱性診断とは(⾮エンジニア向け)もぜひご参照ください。
しばしば脆弱性診断を⾏う際に脆弱性の種類や検査対象となる項⽬について議論になることがあります。診断項⽬(いわゆるテストケース)の多さをもって優位性をアピールする診断ベンダーも少なくない中、OWASP(Open Web Application Security Project)が⽬安を提⽰しつつも共通の定義がない状況であるため、知識がない状態で説明を聞いていると混乱を招くことも多いと感じます。
ここでは脆弱性診断で検出される問題の発⽣原因について⼤まかに分類した上で、それぞれの問題の概要について解説していきたいと思います。もしも脆弱性診断の結果で対策に迷われている⽅がおられましたら、本書の内容が少しでもお役に⽴てば幸いです。
目次
脆弱性の発⽣原因の分類
明確な定義はありませんが、Webサイトを構築・運⽤する上で発⽣する脆弱性は以下の6つのパターンに⼤別することができます。
- Webアプリケーションの設計にまつわる問題
- Webアプリケーションの実装にまつわる問題
- サーバー設定に関する不備
- 古いソフトウェアを利⽤することで⽣じる問題
- Webシステム全体を構成する際に⽣じる問題
- その他(サプライチェーン攻撃やテストデータの残存などにまつわる問題)
以降では、それぞれの問題の概要について触れていきます。
1.Webアプリケーションの設計にまつわる問題
⼀般的に安全性と利便性はトレードオフの関係(⼀⽅を重視すると他⽅が疎かになる関係)と⾔われますが、これはWebアプリケーションを設計する際でも同じで す。ここで述べている問題は、上記のように利⽤者の利便性を重視したために⽣じてしまう脆弱性であったり、単純にセキュリティに対する知識や考慮不⾜で脆弱なロジックを採⽤して構築されてしまうことで⽣じる脆弱性のことです。
【脆弱性の例】
- 認可制御の不備
- ビジネスロジックの迂回
- クロスサイト・リクエスト・フォージェリ
- 弱いパスワード設定の採⽤
- アカウントロック機能の⽋落
- パスワードリマインダの⽋陥
- 弱い暗号形式の採⽤
ケースバイケースですが、設計ミスによって⽣じる脆弱性は、構築後に対策する場合、Webサイトの仕様変更を伴う影響で、⼿戻りが⼤きく修正が期間的にもコスト的にも厳しくなることが多いです。そのため、可能であれば設計段階でセキュリティに対する有識者を参画させるなどして、できるだけ開発初期に防⽌策を検討しておくことが望ましい問題とも⾔えます。
【本問題を検出できるサービス】
- Webアプリケーション・マニュアルによる脆弱性診断
- バグバウンティ
2.Webアプリケーションの実装にまつわる問題
SQLインジェクションやクロスサイト・スクリプティングなどの脆弱性に代表されるように、Webアプリケーションを開発する際にプログラミングレベルで混⼊してしまう問題です。いくつもの固有名称が各脆弱性に割り当てられているように、世界共通である意味、専⾨性の⾼いエンジニアであっても、よくやってしまいがちな実装時のミスとも⾔えます。
【脆弱性の例】
- SQLインジェクション
- クロスサイト・スクリプティング
- パス・トラバーサル
- OSコマンド・インジェクション
- オープンリダイレクト
- CRLFインジェクション
開発メンバーに対して問題を作り込まないようにガイドラインを策定して共有して未然に防⽌するといった対策が理想的ですが、この問題は存在を確認できれば、⽐較的速やかに対処できることが特徴として挙げられます。そのため、開発完了後などのテスト期間に脆弱性診断を⾏うことで問題を洗い出した上で対処するといったアプローチも有効です。
【本問題を検出できるサービス】
- Webアプリケーション・マニュアルによる脆弱性診断
- Webアプリケーション・ツールによる脆弱性診断
- バグバウンティ
3.サーバー設定に関する不備
Webアプリケーションを動作させるためのサーバーを構築する際に誤った設定(フレームワークやミドルウェア、OSなどを含む)のまま公開してしまうことで⽣じる問題です。近年のソフトウェアではサーバー設定の不備による影響を⼩さく抑えるように、デフォルト設定であっても堅牢化されていますが、しっかりと設定状況を確認しないまま公開してしまうと思わぬ落とし⽳となることがあります。
【脆弱性の例】
- ディレクトリ・リスティング
- バナーグランビング
- デフォルトページの公開
- 管理画⾯の公開
- 公開ディレクトリへのログデータの配置
- その他、不要なファイルの開⽰
前述した通り近年では、この問題単体で⽣じるリスクは抑えられている傾向にありますが、脆弱性が存在した場合に攻撃者にとって攻撃のヒントを与えてしまう、あるいはセキュリティ意識の低いサイトと誤認されることで不要な攻撃を招くなどの副次的な影響を伴うことがあります。そのため、この問題もWebサイトの公開前に脆弱性診断で設定がしっかりと施されているかをチェックすることが望ましいと⾔えます。
【本問題を検出できるサービス】
- Webアプリケーション・マニュアルによる脆弱性診断
- Webアプリケーション・ツールによる脆弱性診断
- バグバウンティ
4.古いソフトウェアを利⽤することで⽣じる問題
ほとんどのソフトウェアはバージョンアップを繰り返して品質を挙げていきます。つまり、⾔い換えるとソフトウェアは時間経過とともにその内容を変えていくため、それに伴って脆弱性が発⾒されたり混⼊していきます。
Webアプリケーションはエンジニアがプログラミングして構築するアプリケーション部分意外にもフレームワークやミドルウェア、OSなど様々なソフトウェアによって成り⽴っているため、これらのソフトウェア全体のバージョン管理をしっかりと
⾏なっていないと、いつの間にか脆弱性の存在するソフトウェアを利⽤しているといった状況を招いてしまいます。
【脆弱性の例】
- Log4j
- Spring4Shell
- ImageTragick
- Heartbleed
- 上記以外にもCVEなどが割り当てられた各種の既知の脆弱性を含むソフトウェア
古いソフトウェアに伴う脆弱性についてはセキュリティパッチの適⽤や最新バージョンへのアップグレードで対処することができます。しかし単純にアップデートなどをしてしまうとWebサイトが正常に動作しなくなるなどの影響を伴うことがあったり、アップデート後にすぐに別の脆弱性が⾒つかってしまうなど、運⽤上、頭を悩ませることが多い問題でもあります。そのため、バージョン管理⽅法の確⽴とともに、ソフトウェアサイクルを考慮したWebサイトのメンテナンス計画やリプレイス計画などの⽴案が必要になる問題です。
【本問題を検出できるサービス】
- プラットフォーム・ネットワーク診断
- Webアプリケーション・マニュアルによる脆弱性診断
- Webアプリケーション・ツールによる脆弱性診断
- バグバウンティ
5.Webシステム全体を構成する際に⽣じる問題
⼀般的にWebサービスをインターネット上に公開する場合、DNS(ドメインネームシステム)に公開するドメイン名とIPアドレスの紐付けを登録したり、お問合せ⽤のメールシステムと連携するなど各サービスと連携します。また、場合によっては負荷分散のためにWebサーバーを複数台に分けてリバースプロキシやロードバランサなどの機器を⽤いて⼤量アクセスに備えるなどの対応をすることがあります。
しかし、上記のようにWebサービスを提供する上で⽤意したシステム全体の構成によっては脆弱性が混⼊することがあります。前述してきた内容よりも少し広い視点でシステム全体を⾒渡した時に⽣じる問題のことを、ここでは「Webシステム全体を構成する際に⽣じる問題」としています。
【脆弱性の例】
- HTTPリクエスト・スマグリング
- メールヘッダ・インジェクション
- ホストヘッダ・インジェクション
- 動画データの不正ダウンロード
- シングルサインオンの連携不備
負荷分散などを⾏う⼤規模システムに対するHTTPリクエストスマグリング攻撃、シングルサインオンなどの認証機能を別のサイトに委ねている場合に秘匿情報をクライアント側に渡してしまう問題など、Webシステム全体の構成が複雑化したが故に混⼊してしまう脆弱性が存在します。
また近年ではスマートフォンアプリケーションなどと連携して動画データをストリーミング配信するようなサイトも増えていますが、ファイルサーバーとの連携ミスにより有料動画が不正にダウンロードできてしまうといった問題も散⾒されます。
このように複雑化したシステム構成によって⽣じる脆弱性は単体のWebアプリケーションの脆弱性よりも検出難易度が⾼くなるため、しっかりと品質の⾼い脆弱性診断サービスを実施して洗いだすことが望ましい問題と⾔えます。
【本問題を検出できるサービス】
- Webアプリケーション・マニュアルによる脆弱性診断
- Webアプリケーション・ツールによる脆弱性診断
- バグバウンティ
6.その他
GitHubなどに代表されるように近年ではソースコードや環境設定をクラウド上のリポジトリで管理することが多くなってきています。またオープンソースコードやフレームワークなどのコンポーネントを利⽤して開発効率を上げることが⼀般的になってきています。このこと⾃体は悪いことではありませんが、このような開発スタイルの変化に併せてサイバー攻撃も進化していることを忘れてはなりません。
【脆弱性の例】
- サブドメインテイクオーバー
- クラウドリポジトリからの秘匿情報の漏洩
- テストデータを悪⽤したロジックのバイパス
- サードパーティースクリプトの読み込み
- サプライチェーン攻撃
上記の内容は⼀例ですが、ソフトウェアサイクル全体を通して攻撃を仕掛けてくるサプライチェーン攻撃や、テストデータや環境を標的にするバイパス攻撃、DNSレコードの乗っ取りや消し忘れを狙ったサブドメインテイクオーバー攻撃など⾒落としがちな落とし⽳から⽣じる脆弱性があることを頭の⽚隅に⼊れていただければと思います。
【本問題を検出できるサービス】
- Webアプリケーション・マニュアルによる脆弱性診断
- バグバウンティ
検出できるサービスと脆弱性分類の関係
ここまで6種類に⼤別して脆弱性について解説してきましたが、以下はこれらに対して有効な脆弱性診断サービスを対⽐させた表となります。提供するサービスやシステム構成に応じて必要なサービスの選定にお役⽴ていただければ幸いです。
【対⽐表】
1. Webアプリケーションの設計にまつわる問題 | Webアプリケーション・マニュアルによる脆弱性診断 バグバウンティ |
2. Webアプリケーションの実装にまつわる問題 | Webアプリケーション・マニュアルによる脆弱性診断 Webアプリケーション・ツールによる脆弱性診断 バグバウンティ |
3. サーバー設定に関する不備 | Webアプリケーション・マニュアルによる脆弱性診断 Webアプリケーション・ツールによる脆弱性診断 バグバウンティ |
4. 古いソフトウェアを利⽤することで⽣じる問題 | プラットフォーム・ネットワーク診断 Webアプリケーション・マニュアルによる脆弱性診断 Webアプリケーション・ツールによる脆弱性診断 バグバウンティ |
5. Webシステム全体を構成する際に生じる問題 | Webアプリケーション・マニュアルによる脆弱性診断 Webアプリケーション・ツールによる脆弱性診断 バグバウンティ |
6.その他 | Webアプリケーション・マニュアルによる脆弱性診断 バグバウンティ |
まずは手軽にツールで脆弱性診断
本記事では、脆弱性診断で検出される問題やその重要性について紹介してきました。
セキュリティベンダーに依頼する脆弱性診断もある⼀⽅で低コストで実現できる⼿法としてツールでの脆弱性診断という選択肢もあります。
ツールでの脆弱性診断を通じてセキュリティレベルを強化したい企業様はぜひ弊社の脆弱性診断サービス「Securify Scan」を活⽤ください。
無償でのトライアル実施も行っておりますので、お気軽にお問い合わせください。