ソフトウェアにおける脆弱性の届出件数はWebアプリが最多!頻出する11種の対策

最終更新日時:2023.01.17 (公開日:2023.01.17)
ソフトウェアにおける脆弱性の届出件数はWebアプリが最多!頻出する11種の対策

インターネットが普及し、DXの推進が進められる中、サイバー攻撃による被害も増えてきました。大企業だけではなく、大企業と関連している中小企業もサイバー攻撃の被害に遭っています。

こういったサイバー攻撃を防ぐには、攻撃の種類と脆弱性の対策方法を知るのが重要です。
何も対策せずに脆弱性を放置すると不正アクセスや情報漏えいの危険性も高まってしまいます。

2022年10月、IPAが発表した「ソフトウェア等の脆弱性関連情報に関する 届出状況」によると、脆弱性の届出件数はWebアプリが最も多い結果となりました。

この記事では、Webアプリケーションで多く見られる11種類の脆弱性の概要と、被害内容対策方法について解説します。

もくじ
  1. 脆弱性の届出件数はWebアプリが最も多い
  2. Webアプリでよく見られる脆弱性11種の特徴と対策
  3. まとめ

1.脆弱性の届出件数はWebアプリが最も多い

脆弱性とは、ソフトウェアにおいてプログラムの不具合や設計ミスが原因で発生した情報セキュリティ上の欠陥のことを言います。

2022年10月にIPAが発表した「ソフトウェア等の脆弱性関連情報に関する届出状況2022年第3四半期(7月~9月)」によると、ソフトウェア製品の脆弱性届出件数はWebアプリが最も多いということが分かりました。

下図は2022年10月にIPAが発表した、2022年7月~9月に届け出られたソフトウェア製品の種類別の届け出情報です。

2022年脆弱性届け出状況と件数.png

出典:情報処理推進機構(IPA)「ソフトウェア等の脆弱性関連情報に関する届出状況2022年第3四半期(7月~9月)」

図2-3で分かるように、この四半期で最も届け出件数が多かったのが「ウェブアプリケーション(23件)」でした
続いて「ルータ(11件)」、「スマートフォン向けアプリ(11件)」となります。

そして、過去2年間の脆弱性届出件数のうち、最も届出が多かったのも同じく「ウェブアプリケーションソフト(43%)」です。
続いて「ルータ(9%)」、「スマートフォン向けアプリ(8%)」という結果になりました。

Webアプリは、常にネットワークに接続されていることから外部から攻撃を受けやすい面があります。そのため、危険にさらされている状況にあると言えるでしょう。

ソフトウェア製品の脆弱性がもたらす影響別の状況

ウェブアプリケーションをはじめ、ソフトウェア製品の脆弱性はどのような影響をもたらすのでしょうか。

下図は、脆弱性がもたらす影響別の内訳を示しています。左図は累計の影響別割合、右図は過去2年間の影響別件数の推移です。

脆弱性がもたらす影響割合と件数.png

出典:情報処理推進機構(IPA)「ソフトウェア等の脆弱性関連情報に関する届出状況2022年第3四半期(7月~9月)」

2022年7月~9月は、「情報の漏洩(48件)」が最も多く、前の期間と比較しても届出件数が倍以上に増加しています。
続いて「任意のスクリプトの実行(18件)」となっており、累計では「任意のスクリプトの実行」が最多という結果になりました。(全体の34%)

脆弱性の対策をしないと、情報漏洩や任意のスクリプトの実行、任意のコマンドの実行、なりすましなどのリスクが高まります。

ソフトウェア製品開発者は、脆弱性が悪用された場合の影響を認識し、迅速に対応・対策をすることが重要です。

では、このような影響に対してどのように対策すればよいのでしょうか。次の章で代表的な脆弱性11種類の概要と対策について解説します。

2.Webアプリでよく見られる脆弱性11種の特徴と対策

この章では、Webアプリを対象とした代表的な脆弱性11種の脆弱性の懸念点、注意が必要なWebサイトの特徴、解決策、攻撃の影響を低める対策について解説します。

① SQLインジェクション

「SQLインジェクション攻撃」とは、SQL文に問題があった場合、データベースの不正利用を招く攻撃のことです。

データベースと連携したWebアプリは、ユーザーの入力情報からSQL文(データベースへの命令文)を構築します。

個人情報などをデータベースに格納しているWebサイトは、攻撃を受けやすく特に注意が必要になります。

項目 内容
攻撃を受けた場合の被害 ・個人情報の漏えい
・Webサイトの改ざん、パスワード変更、システム停止
・システムの乗っ取り、他への攻撃の踏み台としての悪用
攻撃への対策方法 ・SQL文の組み立てをプレースホルダで実装
・SQL文のリテラルを正しく構成 (例)「'」→「''」、「¥」→「¥¥」など
・パラメータにSQL文の直接指定を回避
・エラーメッセージの非表示
・データベースアカウントの適切な権限
注意が必要なWebサイト ・データベースを利用するWebサイト(特に、個人情報を含む情報を格納しているサイト)

② OSコマンド・インジェクション

「OSコマンド・インジェクションの脆弱性」とは、外部からの攻撃で、WebサーバのOSコマンドを不正に実行されてしまうことです。

外部プログラムで、呼び出し可能な関数などを使用しているWebアプリが被害を受けやすい傾向があります。

項目 内容
攻撃を受けた場合の被害 ・重要情報の漏えいや設定ファイルの改ざん
・意図しないOSのシャットダウンやユーザアカウントの変更・追加
・ウイルス、ワーム、ボットなどへの感染、バックドアの設置
・サービス不能攻撃、システム攻略のための調査、迷惑メールの送信
攻撃への対策方法 ・シェルの利用禁止
・シェルを起動できる言語を利用する時は許可した処理のみ実行
注意が必要なWebサイト ・外部プログラムを呼び出し可能な関数等を利用しているサイト

③ パス名パラメータの未チェック/ディレクトリ・トラバーサル

「ディレクトリ・トラバーサルの脆弱性」とは、ファイル名指定の実装に問題がある場合、悪意のある第三者に任意のファイル指定をされ、アプリに意図しない処理をされてしまうことです。

外部からのパラメータにWebサーバ内のファイル名を直接指定していると、攻撃対象になります。

項目 内容
攻撃を受けた場合の被害 ・重要情報の漏えい
・設定ファイル、データファイル、プログラムなどの改ざん・削除
攻撃への対策方法 ・Webサーバ内のファイル名を直接指定する実装の回避
・絶対パス名による指定を回避
・アクセス権限の設定を正しく管理
・ファイル名のチェック
注意が必要なWebサイト ・外部からのパラメータにウェブサーバ内のファイル名を直接指定しているウェブアプリ

④ セッション管理の不備

セッション管理の不備とは、セッションID(利用者を識別するための情報)の発行や管理に不備がある場合、不正アクセスされることです。
「セッション・ハイジャック」とも呼ばれます。

また、悪意のある第三者が用意したセッションIDを、利用者に送り込む「セッションIDの固定化(Session Fixation)」もあります。

悪意のある第三者は、セッションIDを利用し、利用者になりすましてWebサイトにアクセスすることが可能です。

項目 内容
攻撃を受けた場合の被害 ・不正な送金、利用者が意図しない商品購入、利用者が意図しない退会処理
・各種設定の不正な変更(管理者画面、パスワード等)、掲示板への不適切な書き込み
・非公開の個人情報を不正閲覧、メールを不正閲覧、コミュニティ会員専用の掲示板を不正閲覧
攻撃への対策方法 ・セッションIDをURLパラメータに格納しない
・HTTPS通信で利用するCookieにはsecure属性を加える
・ログイン成功後に、新しくセッションを開始する
・ログイン成功後に、既存のセッションIDとは異なる秘密情報を発行し、ページ遷移ごとに値を確認する
注意が必要なWebサイト 【ログイン機能を持つウェブサイト全般】
・ネットバンキング、ネット証券、ショッピング、オークションなど
・転職サイト、コミュニティサイト、ウェブメールなど
・管理者画面、会員専用サイト、日記サイトなど

⑤ クロスサイト・スクリプティング

「クロスサイト・スクリプティングの脆弱性」とは、利用者が入力した内容について出力処理に問題がある場合、Webページにスクリプトなどを埋め込まれることをいいます。

項目 内容
攻撃を受けた場合の被害 ・偽情報の流布
・フィッシング詐欺による重要情報の漏えい
・CookieにセッションIDが格納されている場合、利用者へのなりすまし
・Cookieに個人情報等が格納されている場合、情報漏えい
攻撃への対策方法

【HTMLテキストの入力を許可しない場合】
・出力する全ての要素に対して、エスケープ処理を施す
・「http://」や「https://」で始まるURLのみを許可する
・script要素の内容を動的に生成しない
・スタイルシートを任意のサイトから取り込めるようにしない
・入力値の内容チェックをする
【HTMLテキストの入力を許可する場合】
・HTMLテキストから、スクリプトに該当する文字列を排除する
【Webアプリに共通の対策】
・HTTPレスポンスヘッダのContent-Typeフィールドに文字コード(charset)を指定する
・発行するCookieにHttpOnly属性を加え、TRACEメソッドを無効化する
・有効なブラウザの機能を有効にするレスポンスヘッダを返す

注意が必要なWebサイト 【あらゆる形態のサイトにおいて注意が必要】
・会員登録・アンケートなど
・誤入力時の再入力を要求する画面で、前の入力内容を表示
・検索結果の表示
・エラー表示
・ブログ・掲示板などのコメントの反映

⑥ CSRF(クロスサイト・リクエスト・フォージェリ)

「CSRF(Cross-Site Request Forgeries/クロスサイト・リクエスト・フォージェリ)の脆弱性」とは、Webサイトにログインした利用者が、悪意のある第三者により、利用者が予期しない処理を実行させられることです。

ログインした利用者のリクエストが、意図したものかを識別する仕組みのないWebサイトが攻撃対象となってしまいます。

項目 内容
攻撃を受けた場合の被害 ・不正な送金、利用者が意図しない商品購入、利用者が意図しない退会処理
・管理者画面・パスワードの不正な変更、掲示板への不適切な書き込みなど
攻撃への対策方法 ・ページをPOSTメソッドで開き、前のページを自動生成、実行ページでは値が正しい場合のみ処理を実行する
・実行直前のページで再度パスワード入力を求め、再度入力されたパスワードが正しい場合のみ処理を実行する
・Refererが正しいリンク元かを確認、正しい場合のみ処理を実行する
・重要な操作の場合、登録済みのメールアドレスに自動送信する
注意が必要なWebサイト 【次の技術を利用してセッション管理を実装しているウェブサイト】
・Cookieを用いたセッション管理
・Basic認証
・SSLクライアント認証
(例)ネットバンキング・ネット証券・ショッピング・オークション・管理画面・会員専用サイト・ブログなど

⑦ HTTPヘッダ・インジェクション

「HTTPヘッダ・インジェクション攻撃」とは、HTTPレスポンスヘッダの出力処理に問題がある場合、レスポンス内容に任意のヘッダフィールドを追加したり、任意のボディを作成したりすることです。

複数のレスポンスを作り出す攻撃は、「HTTPレスポンス分割(HTTP Response Splitting)攻撃」と呼びます。

攻撃されやすいのは、利用者が誤操作し、意図しない機能を実行キャッシュサーバを構築しているサイトです。

項目 内容
攻撃を受けた場合の被害 ・利用者のブラウザ上で偽の情報を表示する
・任意のスクリプトを埋め込まれる
・任意のCookieが発行される
・キャッシュ汚染(Webページの差し替え)を引き起こし、Webページの改ざんと同じ脅威が生じる
攻撃への対策方法 ・Webアプリの実行環境や言語に用意されているヘッダ出力用APIを使用する
・APIを利用できない場合は、改行を許可しない処理を実装
・外部からの入力の全てについて改行コードを削除する
注意が必要なWebサイト ・Cookieを利用してログインのセッション管理を行っているサイト
・サイト内にリバースプロキシとしてキャッシュサーバを構築しているサイト

⑧ メールヘッダ・インジェクション

「メールヘッダ・インジェクション攻撃」とは、外部の利用者がメールアドレスを自由に指定して悪用する攻撃のことです。

「問い合わせページ」や「アンケート」などのページが攻撃対象になりやすい傾向があります。

項目 内容
攻撃を受けた場合の被害 ・迷惑メールの送信に悪用される
攻撃への対策方法 ・メールヘッダを固定値にし、外部からの入力はメール本文に出力する
・固定値にできない場合、実行環境や言語に用意されているメール送信用APIを使用する
・HTMLで宛先を指定しない
・外部からの入力で改行コードを削除する
注意が必要なWebサイト ・「問い合わせページ」や「アンケート」等を実装しているサイト

⑨ クリックジャッキング

「クリックジャッキング攻撃」とは、ログイン中の利用者がマウス操作で機能を利用した場合、細工された外部サイトの閲覧・操作で、利用者が誤操作し、意図しない機能を実行させることです。

マウス操作により、サービスや設定など、ログイン前提で利用できるWebページが攻撃対象になりやすい傾向があります。

項目 内容
攻撃を受けた場合の被害 ・利用者が意図しない情報発信
・利用者が意図しない退会処理
・利用者情報の公開範囲の意図しない変更
攻撃への対策方法 ・レスポンスヘッダに、X-Frame-Optionsヘッダフィールドを出力し、他ドメインのサイトからのframe・iframeによる読み込みを制限する
・実行直前ページで再度パスワードの入力を求め、入力されたパスワードが正しい場合のみ処理を実行する
・一連の操作をマウスのみで実行できないようにする
注意が必要なWebサイト ・ログイン後の利用者のみが利用可能な機能をマウス操作のみで実行可能なウェブサイト

⑩ バッファオーバーフロー

「バッファオーバーフロー攻撃」とは、プログラムがメモリの領域を超えて上書きし、意図しないコードを実行してしまうことです。

C・C++・アセンブラなど、直接メモリを操作できる言語で記述されているWebサイトが攻撃対象になりやすい傾向があります。

項目 内容
攻撃を受けた場合の被害 ・意図しないサービス停止
・ウイルス、ワーム、ボットなどへの感染、バックドアの設置
・他のシステムへの攻撃
・重要情報の漏えい
攻撃への対策方法 ・PHP、Perl、Javaなど直接メモリを操作できない言語で記述する
・C、C++、アセンブラなどで記述する部分を最小限にする
・脆弱性が修正されたバージョンのライブラリを使用する
注意が必要なWebサイト ・直接メモリを操作できる言語で記述されている場合

⑪ アクセス制御や認可制御の欠落

セキュリティについての知識不足から、アクセス制御や認可制御の欠落など、不適切な設計で作成されたWebサイトがあります。

攻撃を受けやすいのは、下記のようなWebサイトです。

  • 非公開情報や、利用者本人に限定しデータの変更や編集をできるWebサイト
  • 利用者IDや注文番号をURLやPOSTのパラメータに埋め込んでいるWebサイト
  • 外部の利用者IDをキーにしてデータベース操作する実装になっているWebサイト
  • メールアドレスのみでログイン可能なWebサイト
項目 内容
攻撃を受けた場合の被害 ・サイバー攻撃を受けやすくなる
・なりすましの被害に遭いやすい
攻撃への対策方法 ・データベースを検索する利用者IDが、ログイン中の利用者IDと一致しているかを常に確認するよう実装
・利用者IDを、セッション変数から取得するように実装
・データベースの検索用注文番号が、閲覧を許可された番号であるかを常に確認するように実装
注意が必要なWebサイト ・運営者のセキュリティに対する認識不足から不適切に設計されたサイト全般

まとめ

SaaSやPaaS等のサービスがどんどん発達していく中で生活はより便利になっていますが、一方で企業の脆弱性を突いたセキュリティ攻撃は後を絶ちません。

脆弱性を放置すると不正アクセスや情報漏えいにつながります。

自社のWebサイトに致命的な脆弱性がないかチェックし、必要な対策を講じましょう。

執筆者:Qbook編集部

ライター

バルテス株式会社 Qbook編集部。 ソフトウェアテストや品質向上に関する記事を執筆しています。