情報処理安全確保支援士試験 2012年 春期 午後102


Webアプリケーションのセキュリティ対策に関する次の記述を読んで、設問1~3に答えよ。

 O社は従業員数20名のインターネット通販会社であり、通販サイト(以下、Xサイトという)で会員向けに化粧品を販売している。XサイトはO社が開発し、運用している。  ある日、会員からの問合せがあり、メサイトで管理している会員の個人情報が流出していることが判明した。O社は、被害拡大防止のためにXサイトを一旦停止した上で、流出件数、原因などを明らかにするために、情報システム担当者であるVさんかう、セキュリティ専門会社D社のS氏に調査を依頼した。  S氏は、VさんからXサイトのシステム構成を聞いた後、関係するログを調査した。Xサイトでは、会員ID及びパスワードを、データベースのm_userテーブルのcust_id及びpwdという列にそれぞれ格納しており、ログイン機能(login.cgiプログラム)ではcid,pwという引数とデータベースに格納されている値を照合している。表1は、WebサーバのHTTPアクセスログのうち不正アクセスに関連する部分の抜粋であり、左から順に、便宜上付けた番号、クライアントのIPアドレス、HTTPのアクセスメソッド、cgiプログラム名、クエリ文字列である。  
〔調査結果〕  S氏が表1のHTTPアクセスログを調査した結果、次の攻撃が判明した。
・攻撃1:IPアドレスが[ a ]の攻撃者が、[ b ].cgiに対しSQLインジェクションによって全会員分に当たる約8,000件の会員ID及びパスワードを窃取していた。 ・攻撃2:SQLインジェクションによってXサイトのデータが改ざんされ、その後アクセスした会員のPCにマルウェアを強制的にダウンロードさせられていた。(表1中の20番) ・攻撃3:SQLインジェクションによってデータが改ざんされ、会員ID及びパスワードを詐取されていた。(表1中の22番) ・攻撃4:不正ログインを試行されていた。  
 S氏は、調査結果をVさんに説明した。次は、そのときの会話の一部である。   Vさん:攻撃2ですが、IPアドレスがipJの攻撃者(以下、攻撃者ipJという)によって、画面の一部であるバナーとして表示されるデータ(ban_url)が改ざんされていたということですね。Xサイトにアクセスした一部の会員から“ウイルス対策ソフトが警告を表示する”という問合せがあったのは、それが原因ですね。 S氏 :はい。会員が、改ざんされたデータを含む画面に表示された“重要なお知らせ”をクリックすると、攻撃者ipJが用意した外部サイトに誘導されて、ブラウザが誘導先ページのコンテンツと一緒に、不正な動作を引き起こすファイルをダウンロードします。それから、そのファイルが、ブラウザの[ c ]で処理される過程で、ブラウザの[ c ]の脆弱性を突くコードを実行することで、PCが感染し、その後、別のファイルがダウンロードされます。もし途中でPCのウイルス対策ソフトが検知、駆除しなければ、最終的にはキーロガーとして存在していました。 情報処理安全確保支援士試験(平成2012 年度 午後I 問02 表01)
Vさん:なるほど。では、攻撃3についても説明をお願いします。 S氏 :攻撃3も同じくデータ改ざんによるものですが、攻撃2の後しばらくしてから攻撃を受けており、①攻撃1とは異なる手口で会員IDとパスワードの詐取が試みられていました。  
 続いてS氏はVさんに、攻撃3の具体的な手口や攻撃4のログの特徴についても説明した。  
〔パスワード格納方法の検討〕  S氏はVさんに、HTTPアクセスログの調査結果から判明した不正アクセスについて説明した後、SQLインジェクションに関係していたm_userテーブルを調査して気付いたことを指摘した。次は、そのときの会話である。
  S氏 :m_userテーブルを見ていて気付いたのですが、パスワードは暗号化されていますよね。どのような暗号アルゴリズムで暗号化しているのですか。 Vさん:暗号アルゴリズムは自作しました。例えば、元の文字列がpasswordの場合、まず、[ d ]式暗号でdrowssapに変換し、次に、[ e ]式暗号でespxttbqに変換します。 S氏 :そのアルゴリズムは変更すべきです。CRYPTREC(暗号技術評価プロジェクト)が電子政府推奨暗号リストに公開している暗号アルゴリズムと異なり、自作アルゴリズムは、[ f ]について公的な機関の評価を受けていないので推奨できません。 Vさん:なるほど。それでは、修正を検討します。 S氏 :それから、攻撃者が何度も会員登録した上で、攻撃者の指定したパスワードとそれに対する暗号文から解読する[ g ]攻撃によって会員のパスワードを解読された可能性が高いので、サイトの再開前に全会員のパスワードを初期化し、初期化する前のパスワードへの変更を禁止すべきです。 Vさん:承知しました。会員にはパスワードを初期化したことを通知します。 S氏 :それだけではなく、②初期化する前のパスワードが解読されている可能性が高いことも通知してください
 その他、S氏はVさんに、改ざんされたデータの復旧方法や攻撃に対するプログラムの修正方法などを説明した。  O社は、S氏の指摘に従って、被害の状況や再発防止策などの情報を自社のWebサイトで公表した。その後、ブログラム修正、パスワードの格納方法の改善などの対策を完了させ、全会員のパスワードを初期化して会員に連絡した上で、Xサイトを再開させた。

Webアプリケーションのセキュリティ対策に関する次の記述を読んで、設問1~3に答えよ。

設問1〔調査結果〕について、(1)~(3)に答えよ。

(1)本文中の[ a ]に入れるIPアドレスを一つ答えよ。

模範解答

a:ipH

解説

解答の論理構成

  1. 攻撃1の条件を整理
    • 【問題文】には「攻撃1:IPアドレスが[ a ]の攻撃者が、[ b ].cgiに対しSQLインジェクションによって全会員分に当たる約8,000件の会員ID及びパスワードを窃取していた。」とあります。
    • したがって、(i) SQLインジェクションで (ii) “会員ID及びパスワード” の両方を取り出すクエリを (iii) 同じ IP から実行している行を探します。
  2. HTTP アクセスログから該当行を抽出
    • 番号「21」には
      「ipH GET search.cgi item=gf12' union select cust_id, pwd, null, null from m_user where '1' = '1'&kind=09」
      が記録されています。
    • このクエリは union select cust_id, pwd ... によって m_user テーブルから “cust_id” と “pwd” の両列を取得しており、条件(i)(ii)を満たします。
  3. 他の候補行との比較
    • 番号「7」は「ipC」が and select cust_id, pwd, null, null ... を実行していますが、同 IP「ipC」は番号「18」で <script> を埋め込む XSS も行っており、攻撃3(「異なる手口」)の流れと符合します。
    • 番号「12」「17」は “pwd” のみ、または “cust_id” のみを取得しているため、会員IDとパスワードを同時に窃取した条件(ii)を満たしません。
    • よって、条件を同時に満たすのは IP「ipH」のみです。
  4. 以上から、[ a ] に入る IP アドレスは「ipH」と結論付けられます。

誤りやすいポイント

  • 「cust_id と pwd の両方」を取得しているかどうかを見落とす
  • union selectand select の違いを軽視し、テスト的なクエリ(番号7)を攻撃本番と誤認する
  • XSS や改ざんのログ(番号18, 22)と SQL インジェクションによる情報窃取を混同する

FAQ

Q: 「and select」でもデータは取得できるのでは?
A: 条件式として使われる and select は構文エラーになる可能性が高く、一般にテーブル結合の union select の方が大量取得に適しています。ログ全体の流れから、本番の窃取は union 句のある「ipH」と判断できます。
Q: 8000 件という大量データを 1 リクエストで抜けるのか?
A: union select で全行を返す結果セットを生成し、Web アプリがそのまま画面や CSV に出力すると 1 要求でも窃取可能です。
Q: なぜ ipC を攻撃1としないのか?
A: ipC は XSS(番号18)の痕跡があり、問題文では「攻撃1とは異なる手口」として後続攻撃を説明しています。異なる攻撃種別を同一 IP が実行したとは読み取りにくいことから ipC は除外します。

関連キーワード: SQLインジェクション, union select, HTTPアクセスログ, 情報漏えい分析, クエリパラメータ

設問1〔調査結果〕について、(1)~(3)に答えよ。

(2)本文中の[ b ]に入れるcgiプログラム名を7字以内で答えよ。

模範解答

b:search

解説

解答の論理構成

  1. 【問題文】には「攻撃1:IPアドレスが[ a ]の攻撃者が、[ b ].cgiに対しSQLインジェクションによって全会員分に当たる約8,000件の会員ID及びパスワードを窃取していた。」とあります。
  2. どの CGI が大量の会員 ID とパスワードを引き出せるほどの SQL を実行されたかを、表1 の HTTP アクセスログから特定します。
  3. 会員情報を取得する SQL インジェクションが実行されている行を抜粋すると、
    • 「7 ipC GET search.cgi item=gf34' and select cust_id, pwd, null, null from m_user where '1' = '1'&kind=09」
    • 「21 ipH GET search.cgi item=gf12' union select cust_id, pwd, null, null from m_user where '1' = '1'&kind=09」
      と記録されています。どちらも search.cgi に対して cust_id, pwd を取得する攻撃 SQL が送られています。
  4. 表1 には、他の CGI(login.cgi, confirm.cgi など)もありますが、cust_id, pwd を直接抽出するクエリは search.cgi にのみ出現します。
  5. よって、攻撃1 で標的となった CGI プログラム名 [ b ] は「search」であると導けます。

誤りやすいポイント

  • login.cgi は不正ログイン(攻撃4)の痕跡が目立つため、誤って選択しやすいです。しかし SQL インジェクションで cust_id, pwd を抜き出す記録はありません。
  • confirm.cgi の「../ls」や <script> を含むリクエストに目を奪われてしまい、SQL インジェクション対象を取り違えるケースがあります。
  • program 名には拡張子 .cgi を含めず 7 文字以内で解答する指定を見落とし、「search.cgi」と書いて失点することがあります。

FAQ

Q: SQL インジェクションは検索機能だけが狙われるのですか?
A: いいえ、入力値を直接 SQL に連結する実装であれば、ログイン・登録などあらゆる機能が標的になり得ます。本問では検索機能 search.cgi が脆弱でした。
Q: 「cust_id, pwd」を抜くクエリなのに攻撃者はなぜ search.cgi を選んだのですか?
A: 検索機能は自由入力の文字列をそのまま WHERE 句に結合しやすく、インジェクションポイントが多いため狙われやすいです。
Q: .cgi を含めると不正解になりますか?
A: 設問が「[ b ]に入れるcgiプログラム名を7字以内で答えよ」と明示しているため、拡張子を除いた「search」と記述する必要があります。

関連キーワード: SQLインジェクション, HTTPアクセスログ, CGI, データ漏えい, 入力値検証

設問1〔調査結果〕について、(1)~(3)に答えよ。

(3)表1に示されているIPアドレスipBによる攻撃は,ログを調査した結果,ある特徴から不正ログインの試行と判明した。その特徴について35字以内で述べよ。また,その不正ログイン試行対策を35字以内で述べよ。

模範解答

特徴:同一IPアドレスから:一つの会員IDに対して様々なパスワードでログインを試みている。 対策:連続してログインに失敗した時は、その会員IDをロックする。

解説

解答の論理構成

  • 【問題文】の表1には、同一クライアント “ipB” から login.cgi へ繰り返しアクセスしている行が複数存在します。
    例:
    ・「番号“2” IP“ipB” cid=cust51 pw=password」
    ・「番号“4” IP“ipB” cid=cust51 pw=pass」
    ・「番号“5” IP“ipB” cid=cust51 pw=cust51」
    ・「番号“6” IP“ipB” cid=cust51 pw=」
    ・「番号“8” IP“ipB” cid=cust51 pw=15tsuc」
    ・「番号“9” IP“ipB” cid=cust51 pw=a」
    ・「番号“10” IP“ipB” cid=cust51 pw=b」
    ・「番号“11” IP“ipB” cid=cust51 pw=c」
    ・「番号“13” IP“ipB” cid=cust51 pw=d」
  • いずれも cid が「cust51」で固定されている一方、pw の値だけが次々と変化しています。
  • このように「同一 IP から、特定の会員 ID に対して異なるパスワードを大量に試す」行為は、パスワード総当たりを狙った不正ログイン試行(ブルートフォース攻撃)の代表的特徴です。
  • 対策としては、連続して認証に失敗した ID に対し、一定時間ログインを禁止(アカウントロック)する設定を導入すれば、無制限な試行を封じられます。

誤りやすいポイント

  • 「IP が同じなら全部攻撃」と短絡し、cid の変化を見落としてしまう。実際には cid が固定で pw だけが変わるところが本質です。
  • 「パスワード入力欄が空(番号“6”)」を見て SQL インジェクションと勘違いするケース。ここではインジェクションではなく総当たりの一手段です。
  • 対策を“CAPTCHA を表示する” などと書いてしまい、直接的にパスワード試行回数を抑止できない点を指摘され減点となりがちです。

FAQ

Q: IP が変わった場合でも同じ ID への試行が続けば不正と判断できますか?
A: できます。ただし今回の設問は「同一 IP」を鍵にしているので、解答ではその点を強調します。複数 IP からの攻撃も想定し、ID 基準のロックを併用するとより安全です。
Q: ロック時間はどの程度が適切ですか?
A: システム利用状況によりますが、数分〜数十分が一般的です。長すぎると正規ユーザの利便性を損ない、短すぎると攻撃抑止効果が下がります。
Q: アカウントロック以外に取るべき追加策は?
A: パスワード強度の向上、多要素認証の導入、アクセス元 IP のレートリミット、ログ監視と即時アラートなどを組み合わせると防御力が高まります。

関連キーワード: ブルートフォース, アカウントロック, アクセスログ, 認証制御

設問2〔パスワード格納方法の検討〕について、(1)、(2)に答えよ。

(1)本文中の[ d ]〜[ g ]に入れる字句をそれぞれ解答群の中から選び、記号で答えよ。
解答群  ア:Dos  イ:Exploit  ウ:安全性  エ:換字  オ:サイドチャネル  カ:辞書  キ;市場性  ク:選択平文  ケ:誕生日  コ:転置  サ:分散性

模範解答

d:コ e:エ f:ウ g:ク

解説

解答の論理構成

  1. [ d ]
    • 引用: 「まず、[ d ]式暗号でdrowssapに変換」
    • “password”→“drowssap”は文字列を逆順に並べ替える操作であり、暗号学では並べ替えを行う方式を「転置式暗号」と呼びます。
    • 解答: コ「転置」
  2. [ e ]
    • 引用: 「次に、[ e ]式暗号でespxttbqに変換」
    • “drowssap”→“espxttbq”は各文字を別の文字に置き換える方式で、これは「換字式暗号」です。
    • 解答: エ「換字」
  3. [ f ]
    • 引用: 「自作アルゴリズムは、[ f ]について公的な機関の評価を受けていない」
    • 公的機関が評価するのはアルゴリズムの“安全性”であり、司法・市場性ではありません。
    • 解答: ウ「安全性」
  4. [ g ]
    • 引用: 「攻撃者の指定したパスワードとそれに対する暗号文から解読する[ g ]攻撃」
    • 攻撃者が自分で平文を選び、対応する暗号文を取得して解析する手法は「選択平文攻撃」です。
    • 解答: ク「選択平文」

誤りやすいポイント

  • 「転置」と「換字」を逆に覚えていると[d]と[e]を取り違える。並べ替え=転置、置き換え=換字と整理しましょう。
  • [g]で「辞書」攻撃と誤答しがちですが、問題文には“攻撃者が何度も会員登録した上で”とあり、自分で平文入力を選択できる点が決め手です。
  • [f]は「市場性」を連想してしまうことがありますが、CRYPTRECが評価する対象は暗号アルゴリズムの安全性です。

FAQ

Q: 転置式暗号と換字式暗号は現代でも使われていますか?
A: 基本形は歴史的意義が大きく、現代暗号として単独利用されることはありません。ただし転置・換字の考え方はブロック暗号内部構造(置換‐転置ネットワーク)に応用されています。
Q: 選択平文攻撃が可能になる典型的なケースは?
A: Webアプリでユーザが自由に入力できるデータを即暗号化して保存・表示する仕組みです。攻撃者は好きな文字列を入力し、その暗号文を取得して解析できます。
Q: 「安全性の評価を受けていない」暗号を使うと何が問題?
A: 脆弱性が見つかっても気付きにくく、短期間で解読されるリスクが高まります。また他社・他機関との相互運用性にも欠け、将来的な保守コストが増大します。

関連キーワード: 転置式暗号, 換字式暗号, 選択平文攻撃, 暗号アルゴリズムの安全性, SQLインジェクション

設問2〔パスワード格納方法の検討〕について、(1)、(2)に答えよ。

(2)本文中の下線②について,初期化する前のパスワードへの変更を禁止する以外に,会員に通知する理由は何か。その理由を50字以内で述べよ。

模範解答

他のサイトで同じ会員ID, パスワードを使用している会員に対し, その変更を促す必要があるから

解説

解答の論理構成

  1. 【問題文】には「攻撃者が何度も会員登録した上で、攻撃者の指定したパスワードとそれに対する暗号文から解読する[ g ]攻撃によって会員のパスワードを解読された可能性が高い」とあります。
  2. さらに下線②で「初期化する前のパスワードが解読されている可能性が高いことも通知してください」と明示しています。
  3. もし利用者が同じ文字列を別サイトでも用いていれば、攻撃者は流出した情報を使って他サービスへ不正ログインを試みることが可能です(いわゆるパスワード再利用問題)。
  4. 従って、通知の狙いは「他サービスで同じ認証情報を使っている利用者に、速やかな変更を促すこと」であり、受験生はここを理由としてまとめる必要があります。

誤りやすいポイント

  • 「社内システムだけの被害」と短絡し、他サービスへの波及リスクを書き忘れる。
  • 「初期化後に旧パスワードで再設定できない」という対策の説明に終始し、通知の本来目的に触れない。
  • 「解析された可能性が低い」と誤認し、通知が不要と判断してしまう。

FAQ

Q: なぜ自社サイトを再開する前に通知が必要なのですか?
A: 自社サイト再開後に流出パスワードで別サイトが突破されると被害が拡大するため、速やかな注意喚起が求められます。
Q: パスワードを使い回していない利用者には影響がありませんか?
A: 影響は小さいですが、使い回しの有無は事業者側から把握できないため、全利用者へ通知して自己確認を促すのが通例です。
Q: 暗号化されていたのになぜ解読されるのですか?
A: 【問題文】のとおり自作アルゴリズムで「公的な機関の評価を受けていない」ため、安全性が担保されておらず、辞書攻撃や総当たりで復元されたと考えられます。

関連キーワード: パスワード再利用, 辞書攻撃, 通知義務, 認証情報漏えい, セキュリティ事故

設問3SQLインジェクションによるデータ改ざんについて、(1)、(2)に答えよ。

(1)本文中の[ c ]に入れる字句を10字以内で答えよ。 なお、会員のPCのOS及びブラウザ本体への攻撃は実施されなかったものとする。

模範解答

c:プラグイン

解説

解答の論理構成

  1. 本文には
    「ブラウザが誘導先ページのコンテンツと一緒に、不正な動作を引き起こすファイルをダウンロードします。それから、そのファイルが、ブラウザの[ c ]で処理される過程で、ブラウザの[ c ]の脆弱性を突くコードを実行することで、PCが感染し…」
    とあります。
  2. さらに注記として「会員のPCのOS及びブラウザ本体への攻撃は実施されなかった」と明示されています。
  3. ブラウザ本体ではなく追加機能部分の脆弱性を突く典型例は Flash、Java、PDF ビューアなどの「プラグイン」です。
  4. したがって [ c ] に入る語は「プラグイン」が最も適切です。

誤りやすいポイント

  • 「ブラウザ本体への攻撃は実施されなかった」という一文を読み落とし、ブラウザ拡張機能 などと書いてしまう。
  • 「アドオン」「拡張子」など似た語を選んでしまい、試験では不可となる。
  • SQLインジェクションの文脈に意識が向き過ぎて、後半のマルウェア感染フローを軽視しがち。

FAQ

Q: ブラウザの「プラグイン」と「アドオン」は同じ意味ではないのですか?
A: 広い意味では似ていますが、本問で狙われたのは外部ベンダが提供する実行モジュール(Flash Player など)を指す「プラグイン」です。アドオン全般を指すと範囲が曖昧になるため、設問は「プラグイン」で固定しています。
Q: OS・ブラウザ本体が無事なら、プラグインの脆弱性だけで感染するのですか?
A: はい。プラグインは独立した実行コードを含むため、プラグイン内の脆弱性を突けば OS カーネルやブラウザ本体を直接攻撃しなくてもマルウェアを実行できます。
Q: プラグイン攻撃を防ぐにはどうすれば良いですか?
A: 使わないプラグインを無効化し、残す場合でも最新版へ速やかに更新することが基本です。加えて、コンテンツを分離実行するブラウザ設定や EDR 製品の導入が有効です。

関連キーワード: SQLインジェクション, ドライブバイダウンロード, プラグイン, 脆弱性, パスワードリセット

設問3SQLインジェクションによるデータ改ざんについて、(1)、(2)に答えよ。

(2)本文中の下線①について,会員ID及びパスワードを詐取する方法を50字以内で具体的に述べよ。

模範解答

偽の入力画面を表示させ、そこに入力させた情報を攻撃者が用意したサイトに送信する。

解説

解答の論理構成

  1. 攻撃3の本質は、表示用データに JavaScript を挿入して閲覧者側ブラウザで実行させることです。
    【問題文】の表1「22番」のクエリ文字列
    item=0b24';update m_contents set ban_url = ban_url || '&gt;&lt;script type="text/javascript"&gt;document.write("&lt;html&gt;(省略)&lt;/html&gt;");&lt;/script&gt;
    は、update m_contents set ban_url = ... により ban_url 列へ <script> タグを追記しています。
  2. <script type="text/javascript">document.write("…");</script> によって、攻撃者が用意した HTML を「画面の一部」であるバナー領域に動的生成させます。これは会員が閲覧した際にブラウザ上で実行されるので、攻撃対象の PC ではサーバ側ではなくクライアント側で改ざんページが表示されます。
  3. S氏の説明にある「①攻撃1とは異なる手口で会員IDとパスワードの詐取」という文言から、攻撃1(サーバ側のデータ直接窃取)とは違い、ユーザ入力を騙し取るクライアントサイド攻撃であると判断できます。
  4. JavaScript により「偽の入力画面(ログインフォームなど)」を生成し、action 属性や Ajax 送信先を攻撃者サイトへ設定すれば、会員が入力した cust_idpwd がそのまま外部へ送信されます。
  5. 以上より、設問の答えは「偽の入力画面を表示し、入力内容を攻撃者サイトへ送信する」と整理できます。

誤りやすいポイント

  • 「攻撃3=SQLインジェクションだからサーバ側での直接窃取」と早合点しがちですが、実際には XSS を引き起こしてユーザを“釣る”方式です。
  • ログ 22 番の document.write() を単なる defacement と誤読し、詐取手段を記述しないケースがあります。
  • 「入力フォームをメール送信」等と書くと、ブラウザから攻撃者サーバへ直接 POST させる本来の流れを外してしまいます。

FAQ

Q: SQLインジェクションと XSS はどう結び付くのですか?
A: SQLインジェクションでデータベースの表示用列に <script> を格納し、その値をページに埋め込むことで XSS が発生します。攻撃3はまさにこの連携攻撃です。
Q: なぜ JavaScript を使う必要があるのですか?
A: JavaScript で偽フォームを描画し送信先を自由に設定できるため、サーバを経由せず直接攻撃者に資格情報を渡せます。
Q: 表1 の他の union select 系レコードと何が違うのですか?
A: union select はデータ抽出目的ですが、22 番は update ... set ... で“改ざん”し、抽出ではなく表示内容の書き換えを狙っています。

関連キーワード: SQLインジェクション, クロスサイトスクリプティング, フィッシング, JavaScript, 偽装フォーム
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ