‹ ぱすてく

情報処理安全確保支援士試験

平成28年度 秋期 午後Ⅰ(旧試験)

平成28年度 秋期に実施された情報処理安全確保支援士試験 午後Ⅰの全3問(記述式)の全設問に,運営者が独自に書いた解説を付けています。事例本文のどこが根拠になるかを示し,IPA の解答例・採点講評と並べています。

この試験について:情報処理安全確保支援士試験について

この年度を解いてみる

問1 組込み機器を利用したシステムのセキュリティ対策

組込み機器を利用したシステムのセキュリティ対策に関する次の記述を読んで,設問1~3に答えよ。

C 社は,製造事業者向けの機械及び制御用コンピュータを製作・販売している従業員数 1,200 名の会社である。保守サービスの事業拡大を目的として,顧客の工場に設置された C 社製品の稼働状況を遠隔で監視するシステム(以下,工場遠隔監視システムという)を開発することになった。

工場遠隔監視システムは,機械に取り付けられているセンサの情報を制御用コンピュータ経由でリアルタイムにクラウドサービス上の監視サーバへ送信し,それを C 社保守員が遠隔で監視する。センサ情報には,異常や故障を知らせる“障害情報”及び部品交換時期の目安となる使用回数などの“統計情報”が含まれる。

携帯電話網を通じてインターネットにアクセスするために,C 社は自社が保有する組込み機器の開発技術を生かして Linux で動作する LTE(Long Term Evolution)対応ルータ(以下,LTE ルータという)を開発することにした。制御用コンピュータは,LTE ルータを使用することによって,機械から収集したセンサの情報をクラウドサービス上の監視サーバに送信できるようになる。監視サーバでは,通信プログラムが制御用コンピュータからセンサの情報を受信して,データベースに格納する。格納したデータは,保守員が使用する監視端末に表示される。また,顧客は Web ブラウザで監視サーバにアクセスし,稼働状況を確認できる。監視端末から LTE ルータの設定変更ができるように,LTE ルータでは SSH サービスを稼働させる。

〔試験環境の構築〕

開発担当の E 君は,工場遠隔監視システムの試験環境(以下,試験環境という)を構築した。試験環境の構成を図1に示す。

試験環境の構成図。左の“C社開発環境”の枠の中に,LTEルータ,その下に制御用コンピュータがあり,制御用コンピュータの下に機械が複数(2か所に重ねて描かれている)つながっている。LTEルータはアンテナから LTE回線で携帯電話網につながり,携帯電話網はインターネットにつながる。インターネットには,ほかに VPNルータ(その上に監視端末がつながる)と Webブラウザがつながっている。右の“クラウドサービス”の枠の中には VPNルータがあり,インターネットにつながる。クラウドサービスの VPNルータの先に監視サーバがあり,監視サーバの中に通信プログラム,Webサーバ,データベースがある。
図1 試験環境の構成

インターネットを流れる通信は,Web ブラウザから監視サーバへの通信を除き,全て IPsec を使って暗号化する。IPsec では,通信モードに a モードを使用し,ルータ間の通信を全て暗号化する。鍵交換には,IKEv2 を使用し,認証方式には,事前共有鍵方式を選択する。片側のルータの IP アドレスが動的に変わる環境においては,IKEv1 の場合, b モードを使用する必要があるが,IKEv2 の場合は標準で対応している。

〔試験環境における情報セキュリティインシデントの発生〕

試験を開始してから 7 日後,E 君が監視端末から LTE ルータに SSH でログインしたところ,見覚えのない IP アドレスからログインされていることに気付いた。E 君は,不正アクセスを受けている可能性があることをプロジェクト責任者の W 主任に報告し,調査を開始した。

LTE ルータにおいて,netstat コマンドを実行したところ,表1に示すとおり,試験環境と無関係のグローバル IP アドレスとの接続が複数あること,及び c を送信元として SSH サービスにログインされていることが分かった。

列はプロトコル/ローカルアドレス/外部アドレス/状態/プロセス ID。1行目:TCP/0.0.0.0:22/0.0.0.0:*/LISTEN/1543。2行目:UDP/0.0.0.0:53/0.0.0.0:*/LISTEN/1145。3行目:UDP/0.0.0.0:123/0.0.0.0:*/LISTEN/1380。4行目:UDP/0.0.0.0:500/0.0.0.0:*/LISTEN/1417。5行目:TCP/192.168.10.1:22/192.168.20.123:54433/ESTABLISHED/1545。6行目:TCP/z1.z2.z3.z4:22/x1.x2.x3.x4:32489/ESTABLISHED/1547。7行目:TCP/z1.z2.z3.z4:45532/y1.y2.y3.y4:25/ESTABLISHED/1689。8行目:TCP/z1.z2.z3.z4:45533/y1.y2.y3.y4:25/SYN_SENT/1689。注記 x1.x2.x3.x4,y1.y2.y3.y4 及び z1.z2.z3.z4 は,グローバル IP アドレスである。
表1 netstat コマンドの実行結果(抜粋)

更に調査したところ,攻撃者が SSH のポートフォワード機能を使って, d を宛先として SMTP で電子メールを転送していることが分かった。LTE ルータのログには,SSH サービスがパスワードの辞書攻撃を受けた痕跡が残っていた。

E 君は,IPsec を経由しなくても,インターネットから LTE ルータの SSH サービスにアクセスできる状態になっていることに気付いた。不正にログインされないための暫定対策として,①SSH のログイン認証をパスワード強度に依存しない方式に設定変更した。

〔セキュリティ対策の検討〕

情報セキュリティインシデントの発生を受けて,C 社は,LTE ルータのセキュリティ対策について,セキュリティ専門業者 N 社の S 氏に相談した。

次は,セキュリティ対策に関する E 君と S 氏との会話である。

E 君は,LTE ルータのセキュリティ対策を実施し,W 主任の承認を得ることができた。E 君は,工場遠隔監視システムのリリースに向けて作業を開始した。

出題趣旨(IPA)

IoT(Internet of Things)への取組みが進み,モノとモノがつながることによるリスクの増大が予想されている。本問では,IoTへのセキュリティ対策を進める上で基本となる,組込み機器のセキュリティ対策に焦点を当て,組込み機器に発生しがちな情報セキュリティインシデントを踏まえ,インシデント対応やセキュリティ対策に必要となる知識,能力を問う。

採点講評(問全体・IPA)

問1では,組込み機器を利用したシステムのセキュリティ対策について出題した。

設問と解答例

設問1 解答欄2つ

本文中の a, b に入れる適切な字句を解答群の中から選び,記号で答えよ。 解答群 ア アグレッシブ イ アドホック ウ トランスポート エ トンネル オ パッシブ カ ブロック

〔a〕解答例

  • エ

〔b〕解答例

  • ア
解説

本文の根拠

〔試験環境の構築〕

IPsec では,通信モードに a モードを使用し,ルータ間の通信を全て暗号化する。

〔試験環境の構築〕

片側のルータの IP アドレスが動的に変わる環境においては,IKEv1 の場合, b モードを使用する必要があるが,IKEv2 の場合は標準で対応している。

図1

インターネットには,ほかに VPNルータ(その上に監視端末がつながる)と Webブラウザがつながっている。

IPsec の通信モードには,トランスポートモードとトンネルモードの二つがある(RFC 4301)。トランスポートモードは元の IP ヘッダを残してペイロードだけを保護し,主に端末どうしの通信に使う。トンネルモードは元の IP パケット全体をカプセル化して新しい IP ヘッダを付けるので,ルータ(セキュリティゲートウェイ)どうしの間で,その配下の端末の通信をまとめて保護できる。本文は“ルータ間の通信を全て暗号化する”としており,図1 でも VPN ルータどうしが IPsec を張るので,a はトンネル(エ)である。

b は IKEv1 のフェーズ1 のモードである。IKEv1(RFC 2409)にはメインモードとアグレッシブモードがあり,事前共有鍵方式のメインモードでは,相手の ID を受け取る前に鍵を選ぶ必要があるため,事前共有鍵を相手の IP アドレスで識別することになる。片側の IP アドレスが動的に変わると,この識別ができないので,ID を最初のメッセージで送るアグレッシブモード(ア)を使う。IKEv2(RFC 7296)にはこのモードの区別が無く,本文のとおり標準で対応している。

トランスポート(ウ)はルータ間で配下の通信をまとめて暗号化する用途には合わない。アドホック,パッシブ,ブロックは IPsec や IKE のモードの名前ではない。a と b の二つの“モード”を取り違えないこと。a は IPsec の通信モード,b は IKEv1 の鍵交換のモードである。

設問2(1) 解答欄2つ

本文中の c, d に入れる IP アドレスを答えよ。

〔c〕解答例

  • x1.x2.x3.x4

〔d〕解答例

  • y1.y2.y3.y4
解説

本文の根拠

〔試験環境における情報セキュリティインシデントの発生〕

試験環境と無関係のグローバル IP アドレスとの接続が複数あること,及び c を送信元として SSH サービスにログインされていることが分かった。

表1

6行目:TCP/z1.z2.z3.z4:22/x1.x2.x3.x4:32489/ESTABLISHED/1547。7行目:TCP/z1.z2.z3.z4:45532/y1.y2.y3.y4:25/ESTABLISHED/1689。

表1

5行目:TCP/192.168.10.1:22/192.168.20.123:54433/ESTABLISHED/1545。

〔試験環境における情報セキュリティインシデントの発生〕

攻撃者が SSH のポートフォワード機能を使って, d を宛先として SMTP で電子メールを転送していることが分かった。

表1 は LTE ルータで netstat を実行した結果で,ローカルアドレスのポート 22 は LTE ルータの SSH サービスである。ポート 22 への ESTABLISHED の接続は 5行目と 6行目の二つある。5行目の 192.168.20.123 は IPsec の内側のプライベートアドレスで,E 君の監視端末からの接続と読める。6行目はグローバル IP アドレス z1.z2.z3.z4 のポート 22 に,グローバル IP アドレス x1.x2.x3.x4 から接続しているので,インターネットから直接ログインしている見覚えのない相手である。よって c は x1.x2.x3.x4。

7行目と 8行目は,LTE ルータから y1.y2.y3.y4 のポート 25(SMTP)への接続である。SSH のポートフォワードでは,SSH サーバ側(ここでは LTE ルータ)が転送先へ TCP 接続を張るので,LTE ルータを送信元とする SMTP の接続として現れる。よって d は y1.y2.y3.y4。

送信元と宛先の向きに注意する。c は“送信元”なので外部アドレス側,d は“宛先”なのでポート 25 の外部アドレスである。LTE ルータ自身のアドレス z1.z2.z3.z4 や,監視端末の 192.168.20.123 を書かないこと。

設問2(2) 30字以内

本文中の下線①について,実施した SSH の設定変更を 30 字以内で述べよ。

解答例

  • パスワード認証を無効化し,公開鍵認証を使用する。
解説

本文の根拠

〔試験環境における情報セキュリティインシデントの発生〕

LTE ルータのログには,SSH サービスがパスワードの辞書攻撃を受けた痕跡が残っていた。

〔試験環境における情報セキュリティインシデントの発生〕

不正にログインされないための暫定対策として,①SSH のログイン認証をパスワード強度に依存しない方式に設定変更した。

LTE ルータの SSH サービスはパスワードの辞書攻撃を受けていた。パスワード強度に依存しない方式とは,SSH の公開鍵認証である。SSH のユーザ認証には password 方式や publickey 方式などがあり(RFC 4252),公開鍵認証では利用者が秘密鍵を持っていることを署名で示すので,パスワードを推測されてもログインされない。

ただし,公開鍵認証を有効にしただけでは,パスワード認証も使える状態が残り,辞書攻撃は続けて成立し得る。そのため“パスワード認証を無効化する”ことと“公開鍵認証を使用する”ことの両方が要る。講評も,公開鍵認証を有効にすることに加えて,パスワード認証を無効化する設定が必要であるとしている。

字数は 30 字以内で,解答例は 24 字。“公開鍵認証にする”だけで終わらせず,パスワード認証の無効化を必ず入れる。

採点講評(IPA)

設問2(2)は,パスワード強度に依存しないSSHのログイン認証方式について問う問題である。正答率は低かった。辞書攻撃への対策には,公開鍵認証を有効にすることに加えて,パスワード認証を無効化する設定が必要であるということを理解してほしい。

設問3(1) 30字以内 解答欄1つ

本文中の e に入れる適切な設定内容を 30 字以内で述べよ。

〔e〕解答例

  • 送信元IPアドレスを監視端末のIPアドレスに限定
解説

本文の根拠

S 氏の発言

LTE ルータでは,監視端末を利用した場合にだけ,SSH サービスにアクセスできる仕様にすべきです。

S 氏の発言

TCP Wrapper を使って, e することで実現できます。

表1

5行目:TCP/192.168.10.1:22/192.168.20.123:54433/ESTABLISHED/1545。

TCP Wrapper は,サービスへの接続を受けたときに,接続元のホスト(IP アドレスなど)を見て接続を許可するか拒否するかを決める仕組みである。S 氏は“監視端末を利用した場合にだけ,SSH サービスにアクセスできる仕様”を求めているので,e には,SSH サービスへの接続の送信元 IP アドレスを監視端末の IP アドレスに限定する設定が入る。

監視端末は IPsec の内側から LTE ルータに接続しており,表1 の 5行目の 192.168.20.123 がその例である。送信元をこのアドレスに限れば,インターネットから直接 SSH サービスに接続してきた x1.x2.x3.x4 のような相手は拒否される。

字数は 30 字以内で,解答例は 24 字。“送信元 IP アドレス”と“監視端末”の二つを入れる。“アクセス制限する”だけでは,何を基準に制限するかが伝わらない。

設問3(2) 20字以内

本文中の下線②の脆弱性を悪用する攻撃手法にはどのようなものが考えられるか。20 字以内で述べよ。

解答例

  • 中間者攻撃による通信内容の盗聴
解説

本文の根拠

S 氏の発言

市販の幾つかの組込み機器について,②SSH のホスト鍵が同一モデルで全て同じになっているという脆弱性が,セキュリティ機関から注意喚起されています。

S 氏の発言

C 社でも,SSH のホスト鍵は,機器 1 台ごとに異なるものを使用するように設定してください。

SSH のホスト鍵は,クライアントが接続先のサーバが本物かどうかを確かめるための鍵である(RFC 4251)。クライアントはサーバのホスト鍵(公開鍵)を記録しておき,接続のたびにサーバがその秘密鍵を持っていることを確かめる。

同一モデルで全てのホスト鍵が同じだと,攻撃者は同じモデルの機器を手に入れてホスト鍵の秘密鍵を取り出せる。その秘密鍵を使えば,攻撃者のサーバが本物の機器になりすましても,クライアントは気付けない。こうして通信の間に入り込む中間者攻撃を行い,通信内容を盗聴できる。講評も,同一のホスト鍵が使われた場合,SSH サーバのなりすましに気付くことができないので,中間者攻撃による通信内容の盗聴や改ざんが行われてしまうと説明している。

字数は 20 字以内で,解答例は 15 字。“中間者攻撃”という攻撃の名前と,その結果(盗聴)を短く書く。“なりすまし”だけでも方向は合うが,何をされるかまで書くとよい。

採点講評(IPA)

設問3(2)は,SSHのホスト鍵が組込み機器の同一モデルで全て同じである場合に,同じホスト鍵を使ってどのような攻撃が行われるかについて問う問題である。ホスト鍵は,SSHサーバの真正性を担保するものであるが,その目的を理解していない解答が多く見受けられた。同一のホスト鍵が使われた場合,SSHサーバのなりすましに気付くことができないので,中間者攻撃による通信内容の盗聴や改ざんが行われてしまうということを理解してほしい。

設問3(3) 35字以内 解答欄2つ

本文中の下線③について,どのようにして実現するか。イメージファイルの作成時と更新時に行うディジタル署名に関連した処理を,使用する鍵の種類を明示した上で,それぞれ 35 字以内で述べよ。

〔作成時〕解答例

  • 秘密鍵を使用してイメージファイルにディジタル署名を付与する。

〔更新時〕解答例

  • 公開鍵を使用してイメージファイルのディジタル署名を検証する。
解説

本文の根拠

S 氏の発言

ファームウェアの更新機能において,イメージファイルが③改ざんされていないか検証できるようにする必要があります。

E 君の発言

インターネット又は外部記憶媒体経由で,ファームウェアの更新用イメージファイル(以下,イメージファイルという)を LTE ルータに読み込んで保存し,コマンドを使って更新するという機能を実装したいと考えています。

ディジタル署名では,署名する側が自分の秘密鍵で署名を作り,検証する側が対応する公開鍵で署名を確かめる。秘密鍵を持たない者は正しい署名を作れないので,イメージファイルが途中で書き換えられると検証に失敗する。

イメージファイルの作成時には,C 社が秘密鍵を使ってイメージファイルにディジタル署名を付与する。更新時には,LTE ルータが公開鍵を使ってイメージファイルのディジタル署名を検証し,検証に成功したものだけで更新する。イメージファイルはインターネット又は外部記憶媒体経由で読み込むので,経路の途中で改ざんされても,この検証で見つけられる。

字数はそれぞれ 35 字以内で,解答例はどちらも 30 字。設問は“使用する鍵の種類を明示”することを求めているので,作成時は“秘密鍵”,更新時は“公開鍵”を必ず書く。鍵を逆にしないこと。

設問3(4) 35字以内

本文中の下線④について,攻撃者はどのような方法で復号のための鍵を入手するか。35 字以内で具体的に述べよ。

解答例

  • LTEルータにログインしてファイルシステムの中から見つける。
解説

本文の根拠

S 氏の発言

④しかし,イメージファイルを暗号化しても,攻撃者が復号のための鍵を入手して,イメージファイルを復号するという可能性を排除できません。

E 君の発言

インターネット又は外部記憶媒体経由で,ファームウェアの更新用イメージファイル(以下,イメージファイルという)を LTE ルータに読み込んで保存し,コマンドを使って更新するという機能を実装したいと考えています。

冒頭

監視端末から LTE ルータの設定変更ができるように,LTE ルータでは SSH サービスを稼働させる。

暗号化したイメージファイルで更新するには,LTE ルータ自身がそれを復号できなければならない。つまり復号のための鍵は LTE ルータの中に置かれている。攻撃者は LTE ルータを入手してログインし,ファイルシステムの中から鍵を見つければ,イメージファイルを復号できる。

本文の LTE ルータは Linux で動作し,SSH サービスでログインできる。試験環境でも辞書攻撃でログインされた。講評は,平文の状態の鍵を探すといった攻撃側の視点を踏まえて対策が立案できるようになることを期待している。だから S 氏は,暗号化に頼らず“解析されても問題がないように設計すること”が重要だと述べている。

字数は 35 字以内で,解答例は 30 字。“どこにある鍵をどうやって手に入れるか”を,ルータへのログインとファイルシステムからの探索の二つで書く。“鍵を盗む”だけでは具体的でない。

採点講評(IPA)

設問3(4)は,イメージファイルを復号するための鍵を,攻撃者がどのように入手するかについて問う問題である。平文の状態の鍵を探すといった攻撃側の視点を踏まえて対策が立案できるようになることを期待したい。

出典:平成28年度 秋期 情報処理安全確保支援士試験 午後Ⅰ 問1(表記を一部改変)

問2 ソフトウェア開発における脆弱性対策

ソフトウェア開発における脆弱性対策に関する次の記述を読んで,設問1~4に答えよ。

V 社は,ディジタル機器の開発及びソフトウェアの受託開発を行う,従業員数 400 名の企業である。昨今,ソフトウェアの重大な脆弱性が相次いで報告されているので,V 社開発部の L 氏は,セキュリティ専門業者 S 社の情報セキュリティスペシャリストの K 氏から,ソフトウェア開発についてのアドバイスを受けることとした。

〔脆弱性及びその悪用〕

ソフトウェアの脆弱性の情報を組織間で一意に特定し共有できる仕組みが運用されている。例えば,脆弱性が報告されると, a 識別子が付番され,日本国内では JPCERT/CC などが公表し注意喚起している。ただし,公表前に悪用されるものもあり, b 脆弱性と呼ばれる。 b 脆弱性は,特定の組織を狙う攻撃,つまり c 型攻撃でしばしば悪用される。

脆弱性の中でも,バッファオーバフロー脆弱性(以下,BOF 脆弱性という)は,最近開発されたソフトウェアにおいても数多く報告されている。BOF 脆弱性は,主に,スタックベース BOF 脆弱性とヒープベース BOF 脆弱性に分類される。ソフトウェアに BOF 脆弱性がある場合,当該ソフトウェアへの入力によって,①開発者が想定しないメモリ領域に書き込まれ,開発者の意図しない命令が実行されることがある。

今,Linux において実行可能ファイルが四つあるとする。図1は,それらが存在するディレクトリでの ls コマンドの出力である。実行権限の属性に“s”が表示されているファイルは,ファイルの所有者権限で実行されることを示している。四つのファイルのうち [ ア ] は,一般利用者 suzuki によって起動された場合でも root 権限で動作する。 [ ア ] に BOF 脆弱性があると,外部の攻撃者やマルウェアによって,開発者の意図しない命令が root 権限で実行されてしまう。

枠内の端末出力(9行)。1: suzuki@linux:~/temp$ ls -al 2: 合計 40 3: drwxrwxr-x 2 suzuki suzuki 4096 1月 18日 16:19 . 4: drwxr-xr-x 22 suzuki suzuki 4096 1月 18日 15:54 .. 5: -rwxrwxr-x 1 root root 7205 1月 18日 16:08 sample1 6: -rwsrwxr-x 1 root root 7205 1月 18日 16:10 sample2 7: -rwxrwxr-x 1 suzuki suzuki 7205 1月 18日 16:10 sample3 8: -rwsrwxr-x 1 suzuki suzuki 7205 1月 18日 16:10 sample4 9: suzuki@linux:~/temp$
図1 ls コマンドの出力

〔ヒープベース BOF 脆弱性〕

K 氏によると,最近,ヒープベース BOF 脆弱性を悪用する攻撃の報告が増えてきているという。L 氏は,出荷前の V 社製品のソフトウェアについてヒープベース BOF 脆弱性がないか,K 氏のレビューを受けることにした。

図2のプログラム Y は,起動時に,第 1 引数は利用者 ID を,第 2 引数はパスワードを受け取る。このプログラム用にあらかじめ登録された“利用者 ID とパスワード”の組と引数で与えられた組を比較し,利用者認証する。“利用者 ID とパスワード”は,いずれも半角英数字,最小 6 文字最大 8 文字の文字列と仕様で定められている。

枠内の C++ソースコード(32行)。1: #include <iostream> 2: #include <cstring> 3: (省略) 4: #define UID_SIZE 8 // 利用者 ID の文字列の上限値 5: #define PASS_SIZE 8 // パスワードの文字列の上限値 6: (省略) 7: using namespace std; 8: (空行) 9: void getPass(char *pass, char *uid) 10: { 11: (省略,uid で指定された利用者 ID を基に登録済パスワードを取得し pass に格納,利用者 ID が存在しない場合は長さ 0 の文字列を pass に格納) 12: } 13: (省略) 14: (空行) 15: int main(int argc, char **argv) 16: { 17:   static char *uid; 18:   static char *pass; 19:   (省略,引数の個数をチェック) 20:   uid = new char[UID_SIZE+1]; 21:   pass = new char[PASS_SIZE+1]; 22:   getPass(pass, argv[1]); 23:   strcpy(uid, argv[1]); 24: (空行) 25:   if (strlen(pass) == 0 || strcmp(argv[2], pass) != 0) { 26:     cout << "認証失敗" << endl; 27:     (省略,uid を出力,認証失敗時の処理) 28:   } else { 29:     cout << "認証成功" << endl; 30:     (省略,uid を出力) 31:   } 32: }
図2 ヒープベース BOF 脆弱性のあるプログラム Y

プログラム Y にはヒープベース BOF 脆弱性があり,②引数によっては,利用者認証を回避される可能性があると,L 氏は K 氏に指摘された。ただし,K 氏によると,③このプログラム Y は引数が同じでも,実行環境によっては利用者認証を回避されないとのことだった。L 氏は,V 社の開発した他のプログラムについても確認することとした。

〔V 社の脆弱性対策〕

BOF 脆弱性は,メモリを直接操作することが可能なプログラム言語 C や C++などで発生する。その対策として,例えば,Windows ではハードウェア DEP(Data Execution Prevention)のようなデータ実行防止機能を適用することで,一部の BOF 脆弱性を悪用する攻撃を抑制できる。しかし,④プログラム Y での利用者認証を回避する攻撃に対しては有効に機能しない。そこで,V 社では,C や C++の利用が避けられない場合を除き,BOF 脆弱性が起きにくい他のプログラム言語を利用することとした。一般的には,開発時に,静的解析ツールを利用したり,通常の利用では想定しないデータを入力し,その応答から脆弱性を探す d 検査を行うツールを利用したりして,脆弱性を洗い出すことも効果的である。また,V 社では,ソフトウェアのリリース後,脆弱性が発見された場合に備え,V 社製品の利用者に更新プログラムを提供するサイトを準備することとした。

出題趣旨(IPA)

依然として報告件数が減らないバッファオーバフロー脆弱性についての問題である。状況設定では開発ベンダとしているが,ソフトウェア開発業務に従事していなくても,今日の情報セキュリティスペシャリストならば,単なるキーワードの理解だけではなく,そのメカニズムと具体的対策も知っておくべきものである。本問では,それらを問う問題と共に,ソフトウェア開発における脆弱性対策全般についての取組みも問う。

採点講評(問全体・IPA)

問2では,ソフトウェアの脆弱性,特に,バッファオーバフロー(以下,BOFという)脆弱性の対策について出題した。

設問と解答例

設問1 解答欄4つ

本文中の a~ d に入れる最も適切な字句を解答群の中から選び,記号で答えよ。 解答群 ア CVE イ ゼロデイ ウ 標的 エ ファジング

〔a〕解答例

  • ア

〔b〕解答例

  • イ

〔c〕解答例

  • ウ

〔d〕解答例

  • エ
解説

本文の根拠

〔脆弱性及びその悪用〕

ソフトウェアの脆弱性の情報を組織間で一意に特定し共有できる仕組みが運用されている。例えば,脆弱性が報告されると, a 識別子が付番され,

〔脆弱性及びその悪用〕

ただし,公表前に悪用されるものもあり, b 脆弱性と呼ばれる。 b 脆弱性は,特定の組織を狙う攻撃,つまり c 型攻撃でしばしば悪用される。

〔V 社の脆弱性対策〕

通常の利用では想定しないデータを入力し,その応答から脆弱性を探す d 検査を行うツールを利用したりして,

a は,脆弱性を組織間で一意に特定し共有するために付番される識別子なので,CVE(ア)である。CVE(Common Vulnerabilities and Exposures)は脆弱性ごとに“CVE-年-番号”の形の識別子を割り当てる仕組みで,MITRE が運営している。b は,公表前(修正プログラムの提供前)に悪用される脆弱性なので,ゼロデイ(イ)である。c は“特定の組織を狙う攻撃”なので,標的(ウ)型攻撃である。

d は,通常の利用では想定しないデータを大量に入力し,その応答(異常終了など)から脆弱性を探す検査なので,ファジング(エ)である。IPA も,ファジングを脆弱性の検出手法として紹介する手引きを公開している。

解答群は四つで,空欄も四つなので,一つずつ当てはめる。ゼロデイと標的型は“公表前に悪用”“特定の組織を狙う”という本文の言い換えをそのまま手掛かりにすればよい。

設問2(1) 20字以内

本文中の下線①について,スタックベース BOF 脆弱性を悪用する攻撃の場合,関数呼出し時にスタックに必ず積まれるはずの,何の値を書き換えることによって攻撃が開始されるか。20 字以内で答えよ。

解答例

  • 呼出し元関数への戻りアドレス
解説

本文の根拠

〔脆弱性及びその悪用〕

ソフトウェアに BOF 脆弱性がある場合,当該ソフトウェアへの入力によって,①開発者が想定しないメモリ領域に書き込まれ,開発者の意図しない命令が実行されることがある。

C や C++ で関数を呼び出すと,スタックには,呼び出された関数の処理が終わったあとに戻る先,つまり呼出し元関数への戻りアドレスが積まれる。関数の局所変数(配列など)も同じスタック上に置かれるので,配列の範囲を超えて書き込むと,その先にある戻りアドレスが上書きされる。

攻撃者が戻りアドレスを自分の用意したコードの位置に書き換えておけば,関数から戻るときに処理がそこへ移り,下線①の“開発者の意図しない命令が実行される”状態になる。講評も,C / C++での関数呼出し時のスタックの状況に関する問題で,いわゆる攻撃ベクタの一つとしている。

字数は 20 字以内で,解答例は 14 字。“戻りアドレス”だけでなく,“呼出し元関数への”と,どこへ戻るためのアドレスかまで書く。“スタックポインタ”や“局所変数”と取り違えないこと。

採点講評(IPA)

設問2(1)は,C / C++での関数呼出し時のスタックの状況に関する問題である。正答率は低かった。いわゆる攻撃ベクタの一つなので,基本的な知識として確認をしてほしい。

設問2(2) 解答欄1つ

本文中の [ ア ] に入れるファイル名を全て答えよ。

〔ア〕解答例

  • sample2
解説

本文の根拠

〔脆弱性及びその悪用〕

実行権限の属性に“s”が表示されているファイルは,ファイルの所有者権限で実行されることを示している。四つのファイルのうち [ ア ] は,一般利用者 suzuki によって起動された場合でも root 権限で動作する。

図1

6: -rwsrwxr-x 1 root root 7205 1月 18日 16:10 sample2

図1

8: -rwsrwxr-x 1 suzuki suzuki 7205 1月 18日 16:10 sample4

本文のとおり,実行権限の属性に“s”があるファイルは,起動した利用者ではなくファイルの所有者の権限で実行される。suzuki が起動しても root 権限で動作するのは,“s”があり,かつ所有者が root のファイルである。図1 では sample2(-rwsrwxr-x,所有者 root)だけが当てはまる。

sample4 も“s”を持つが,所有者は suzuki なので,suzuki の権限で動作するだけである。sample1 は所有者が root でも“s”が無いので,起動した suzuki の権限で動作する。sample3 はどちらにも当てはまらない。

“全て答えよ”とあるが,答えは sample2 の一つだけである。“s”が付いた sample4 を一緒に書かないよう,所有者の列も必ず見る。

設問3(1)

本文中の下線②はどのような引数で利用者認証を回避されるか。引数の組を解答群の中から選び,記号で答えよ。 解答群(記号/第 1 引数/第 2 引数) ア/001(繰返し)0111111111/11111110 イ/001(繰返し)1111111111/11111110 ウ/011(繰返し)1111111101/11111101 エ/111(繰返し)1111111111/67891231 オ/123(繰返し)1231231231/67891231

解答例

  • ウ
解説

本文の根拠

図2 20~23行目

20: uid = new char[UID_SIZE+1]; 21: pass = new char[PASS_SIZE+1]; 22: getPass(pass, argv[1]); 23: strcpy(uid, argv[1]);

図2 25行目

25: if (strlen(pass) == 0 || strcmp(argv[2], pass) != 0) {

〔ヒープベース BOF 脆弱性〕

“利用者 ID とパスワード”は,いずれも半角英数字,最小 6 文字最大 8 文字の文字列と仕様で定められている。

プログラム Y は,20・21 行目で uid と pass の領域(それぞれ 9 バイト)をヒープに続けて確保し,22 行目で登録済パスワードを pass に入れたあと,23 行目で第 1 引数を uid に strcpy でコピーする。strcpy は長さを確かめないので,第 1 引数が長いと uid の後ろにある pass の領域まで上書きする。上書きは getPass の後に起きるので,pass には登録済パスワードではなく第 1 引数の後ろの部分が入る。25 行目は pass が空でなく,第 2 引数と pass が一致すれば認証成功とするので,“第 1 引数のうち pass に重なる部分”と第 2 引数を同じにすれば,存在しない利用者 ID でも認証を回避できる。

各選択肢の“(繰返し)”は,pass の先頭に第 1 引数の末尾の 8 文字が重なるよう長さを調整する部分と読める。そうすると pass は第 1 引数の末尾 8 文字になる。ウは第 1 引数の末尾 8 文字が“11111101”で,第 2 引数の“11111101”と一致する。アとイは末尾 8 文字が“11111111”で第 2 引数“11111110”と合わず,エは“11111111”と“67891231”,オは“31231231”と“67891231”で合わない。

記号で答える設問。第 1 引数の“先頭”ではなく,pass の領域に重なる“末尾”を第 2 引数と比べるのが要点である。

設問3(2)

利用者認証を回避される原因となるヒープベース BOF 脆弱性の存在箇所を,実際にバッファがオーバフローするコードの行番号で答えよ。

解答例

  • 23
解説

本文の根拠

図2 20~23行目

20: uid = new char[UID_SIZE+1]; 21: pass = new char[PASS_SIZE+1]; 22: getPass(pass, argv[1]); 23: strcpy(uid, argv[1]);

実際にバッファがオーバフローするのは,第 1 引数を長さを確かめずに uid にコピーする 23 行目の strcpy(uid, argv[1]); である。uid の領域は UID_SIZE+1(9 バイト)しかないが,strcpy はコピー元の文字列の終わり(ヌル文字)までを全てコピーするので,9 バイトを超える第 1 引数は uid の後ろの領域にはみ出す。

22 行目の getPass も argv[1] を受け取るが,第 1 引数は登録済パスワードを探すための利用者 ID として使われるだけで,pass には登録済パスワード(又は長さ 0 の文字列)が入る。20・21 行目は領域の確保で,書き込みではない。

行番号で答える設問。“原因となる行”として 20 行目(領域が小さい)を挙げたくなるが,設問は“実際にバッファがオーバフローするコード”を問うている。

設問3(3)

(2)で示した行番号の行を差し替えて行う改修案として適切なものを解答群の中から全て選び,記号で答えよ。 解答群 ア memcpy(uid, argv[1], strlen(argv[1])+1); イ memcpy(uid, argv[1], UID_SIZE+1); ウ pass = new char[PASS_SIZE+8]; エ strncpy(uid, argv[1], strlen(argv[1])+1); オ strncpy(uid, argv[1], UID_SIZE+1);

解答例

  • イ,オ
解説

本文の根拠

図2 4行目

4: #define UID_SIZE 8 // 利用者 ID の文字列の上限値

図2 20行目

20: uid = new char[UID_SIZE+1];

〔ヒープベース BOF 脆弱性〕

“利用者 ID とパスワード”は,いずれも半角英数字,最小 6 文字最大 8 文字の文字列と仕様で定められている。

uid の領域は UID_SIZE+1(9 バイト)なので,コピーするバイト数をこの大きさまでに抑えれば,uid の外には書き込まれない。イの memcpy(uid, argv[1], UID_SIZE+1); とオの strncpy(uid, argv[1], UID_SIZE+1); は,どちらもコピーする量を 9 バイトまでに限るので,改修案として適切である。講評も,プログラムの引数は仕様でサイズの上限が定義されており,この上限を利用することによってオーバフローを防ぐとしている。

アとエは,コピーする量を strlen(argv[1])+1,つまり第 1 引数の長さに合わせているので,長い第 1 引数ではやはり uid の外に書き込む。ウは pass の領域を大きくするだけで,uid からのはみ出しは止まらない。なお,C 言語の strncpy は,コピー元が指定の長さ以上だと末尾にヌル文字を付けないので,実際の改修では終端の扱いにも気を付ける。

“全て選べ”の設問で,解答例は“イ,オ”の二つ。関数名(memcpy か strncpy か)ではなく,第 3 引数がバッファの大きさに抑えられているかで選ぶ。

採点講評(IPA)

設問3(3)は,ヒープベースBOF脆弱性を悪用する攻撃を引き起こすコードの改修に関する問題である。正答率は低かった。この問題では,プログラムの引数は仕様でサイズの上限が定義されており,この上限を利用することによってオーバフローを防ぐ。受験者には,この観点で正しい改修に気が付いてほしかった。

設問4(1) 40字以内

本文中の下線③について,利用者認証が回避されない理由を,攻撃のタイミングではなく実行環境の観点で,40 字以内で述べよ。

解答例

  • ヒープメモリの確保方法が,メモリ確保のライブラリによって違うから
解説

本文の根拠

〔ヒープベース BOF 脆弱性〕

ただし,K 氏によると,③このプログラム Y は引数が同じでも,実行環境によっては利用者認証を回避されないとのことだった。

図2 20~21行目

20: uid = new char[UID_SIZE+1]; 21: pass = new char[PASS_SIZE+1];

設問3(1)の攻撃は,uid の領域の先頭から pass の領域の先頭までの距離を前提に,第 1 引数の長さを調整している。この距離は,ヒープメモリをどのように確保するか(領域の並べ方,管理用の情報や詰め物の大きさなど)で決まり,それはメモリ確保のライブラリによって違う。実行環境が違えば距離も変わるので,同じ引数でも pass に第 1 引数の末尾 8 文字が重ならず,認証を回避できない。

講評も,今回のヒープベース BOF 脆弱性を悪用する攻撃は常に成功するものではなく,このケースでは OS に依存することを問うているとしている。設問は“攻撃のタイミングではなく実行環境の観点で”と断っているので,実行のたびに変わるといった時間の話ではなく,環境ごとの確保方法の違いを書く。

字数は 40 字以内で,解答例は 32 字。“ヒープメモリの確保方法”と“ライブラリによって違う”の二つを入れる。

採点講評(IPA)

設問4は,いずれも,BOF脆弱性を悪用する攻撃とその対策技術の有効範囲を問う問題である。正答率は低かった。今回のヒープベースBOF脆弱性を悪用する攻撃は,常に成功するものではなく,このケースではOSに依存することを問うている。データ実行防止機能は,スタックベースBOF脆弱性の対策技術であり,ヒープベースBOF脆弱性には効果がない。セキュリティ技術者としては,これらの知識は身に付けておいてほしい。

設問4(2) 30字以内

本文中の下線④について,有効に機能しない理由を,30 字以内で述べよ。

解答例

  • ヒープ領域を書き換える行為を防止できないから
解説

本文の根拠

〔V 社の脆弱性対策〕

例えば,Windows ではハードウェア DEP(Data Execution Prevention)のようなデータ実行防止機能を適用することで,一部の BOF 脆弱性を悪用する攻撃を抑制できる。しかし,④プログラム Y での利用者認証を回避する攻撃に対しては有効に機能しない。

図2 25行目

25: if (strlen(pass) == 0 || strcmp(argv[2], pass) != 0) {

データ実行防止機能は,データを置くためのメモリ領域に書き込まれた内容を命令として実行させないことで,攻撃コードの実行を防ぐ仕組みである。名前のとおり,防ぐのは“実行”であって,メモリへの書き込みそのものではない。

プログラム Y への攻撃は,ヒープ上の pass の領域を第 1 引数で書き換え,25 行目の比較を成り立たせるだけで,攻撃コードを実行させてはいない。ヒープ領域を書き換える行為そのものは防止できないので,データ実行防止機能は有効に機能しない。講評は,データ実行防止機能はスタックベース BOF 脆弱性の対策技術であり,ヒープベース BOF 脆弱性には効果がないと説明している。

字数は 30 字以内で,解答例は 22 字。“ヒープ領域を書き換える行為”を防げない,という点を書く。“コードを実行しないから”と書く場合も,書き換えで認証を回避している点が伝わるようにする。

採点講評(IPA)

設問4は,いずれも,BOF脆弱性を悪用する攻撃とその対策技術の有効範囲を問う問題である。正答率は低かった。今回のヒープベースBOF脆弱性を悪用する攻撃は,常に成功するものではなく,このケースではOSに依存することを問うている。データ実行防止機能は,スタックベースBOF脆弱性の対策技術であり,ヒープベースBOF脆弱性には効果がない。セキュリティ技術者としては,これらの知識は身に付けておいてほしい。

出典:平成28年度 秋期 情報処理安全確保支援士試験 午後Ⅰ 問2(表記を一部改変)

問3 プロキシサーバによるマルウェア対策

プロキシサーバによるマルウェア対策に関する次の記述を読んで,設問1~4に答えよ。

Q 社は従業員数 1,000 名の医薬品製造会社である。Q 社では,セキュリティ対策を強化するために,ブラックリスト指定の URL フィルタリング機能だけを有しているプロキシサーバ(以下,プロキシ 1 という)を,セキュリティ機能が豊富な新しいプロキシサーバ(以下,プロキシ 2 という)に更新するプロジェクトを開始した。Q 社のネットワーク構成を図1に示す。

Q社のネットワーク構成図。インターネットの下にルータ,その下に FW,その下に L3SW が縦につながる。FW の右には DMZ(点線の枠)の L2SW がつながり,DMZ の L2SW にはプロキシ1,プロキシ2,外部DNSサーバ,外部メールサーバがつながる。L3SW の左上にはサーバセグメント(点線の枠)の L2SW がつながり,サーバセグメントの L2SW には内部メールサーバ,内部DNSサーバ,PC管理サーバがつながる。L3SW の右には利用者セグメント(点線の枠)がつながる。凡例 FW:ファイアウォール,L2SW:レイヤ2スイッチ,L3SW:レイヤ3スイッチ。注記1 プロキシ2は,プロジェクトの途中で設置される。注記2 Q社の管理PC及び社員PCは,利用者セグメントに接続されている。
図1 Q 社のネットワーク構成

情報システム部(以下,情シ部という)は,情報システムの管理及び情報セキュリティインシデントの対応を行っている。サーバ管理業務は,情シ部のサーバ管理者が行う。情シ部にはサーバ管理者が複数人いる。サーバ管理者は各種設定などのサーバ管理業務を行う場合だけ,1 台の管理 PC に自分の管理者 ID でログオンし,OS の管理用のコマンドなどを使用する。OS の管理用のコマンドは,一般利用者でも起動可能なものもある。管理 PC はサーバ管理業務だけに用い,Web ブラウザによるインターネット接続及び電子メール(以下,メールという)の送受信はできないように設定されている。管理 PC での作業後には,開始日時,終了日時及び作業者名を記録する運用が徹底されている。

Q 社の従業員は,一人 1 台貸与された社員 PC を使用している。管理 PC 及び社員 PC には,全て,固定 IP アドレスが割り振られている。社員 PC からインターネットへの通信は,外部メールサーバ経由のメールの送受信と,プロキシ 1 経由の HTTP 及び HTTP over TLS での Web アクセスだけが利用できるようになっている。社員 PC の Web ブラウザは,インターネット接続時に,プロキシ 1 を経由するよう設定されている。社員 PC には OS の管理用のコマンドはインストールされていない。

PC のプログラム起動禁止設定は,PC 管理サーバによって,全て一括管理されている。プログラム起動禁止設定には,プログラム名が一致した場合にプログラムの起動を禁止にする方式と,プログラムの実行ファイルのハッシュ値が一致した場合に禁止する方式があり,両方の方式を組み合わせた設定もできる。Q 社は,複数の P2P プログラムのプログラム名を指定して起動を禁止している。

サーバ及び PC では,ログオン,ログオフ及び操作のログを,ネットワーク機器では通信ログをそれぞれ取得している。プロキシ 1 では,日時,接続先 URL,送信元 IP アドレス,ステータスコード,応答のサイズなどのログを取得している。

プロキシ 2 の機能を表1に示す。

列は機能/説明。フィルタリング機能のうち URL フィルタリング機能:・ホワイトリストに設定した URL を許可する。・ブラックリストに設定した URL を遮断する。フィルタリング機能のうちカテゴリ単位フィルタリング機能:・カテゴリ単位に次のいずれかを指定する。“許可”:カテゴリごとに定義された URL を許可し,ログに記録しない。“検知”:カテゴリごとに定義された URL を許可し,ログに記録する。“遮断”:カテゴリごとに定義された URL を遮断し,ログに記録する。プロキシ認証機能:・PC からインターネットの Web サイトへの接続時に利用者 ID とパスワードによる利用者認証を行い,認証結果をログに記録する。[ a ] 機能(注 1)):・インターネットから Web サーバへの通信を中継する。注 1) Q 社では本機能は使用しない。
表1 プロキシ 2 の機能

プロキシ 2 のカテゴリ単位フィルタリング機能のために,ニュース,ゲーム,外部ストレージサービスなどのカテゴリが用意されており,これらについては,カテゴリごとに分類された URL リストが随時更新され,プロキシベンダの Web サイトを通じて提供される。サーバ管理者がカテゴリを選んで,通常は“遮断”を指定する。URL フィルタリングとカテゴリ単位フィルタリングで同じ URL が設定された場合は,URL フィルタリングによる設定が優先される。URL フィルタリングのホワイトリスト,ブラックリストで同じ URL が設定された場合は,ホワイトリストの設定が優先される。

Q 社では,フィルタリング機能の設定は,情シ部のサーバ管理者が行う。

〔プロキシ更新〕

情シ部ではプロキシ 1 からプロキシ 2 への更新を,次に述べるフェーズ 1~3 の 3 段階で行うことにした。

フェーズ 1 では,プロキシ 1 と社員 PC との通信方法を変えずに,DMZ にプロキシ 2 を導入し,プロキシ 1 とインターネット間の通信を,全てプロキシ 2 経由とする。プロキシ 1 の URL フィルタリング機能を無効にして,プロキシ 2 のフィルタリング機能の一部だけを有効にする。ログについては,プロキシ 2 で,プロキシ 1 と同じ項目のログを取得するよう設定する。

フェーズ 2 では,プロキシ 2 のフィルタリング機能及びプロキシ認証機能を強化する。

フェーズ 3 では,社員 PC の Web ブラウザのプロキシ設定をプロキシ 1 からプロキシ 2 に変更し,プロキシ 1 を撤去する。

このようにフェーズ分けを行うのは,情シ部の次の二つの判断による。

〔情報セキュリティインシデントの発生と対応〕

フェーズ 1 開始後まもなく,海外のセキュリティ専門業者から,C&C(Command & Control)サーバに Q 社からの通信の記録があるとの連絡があった。情シ部の J 部長が経営陣に報告し,情報セキュリティスペシャリストの T さんとともに調査したところ,次のことが分かった。

J 部長は,不審なメールを受信した場合,添付ファイルや,メール内に記載されている URL をクリックしないよう全従業員に注意喚起を行った。次に,J 部長は次の二つを指示した。

〔プロキシサーバにおける追加設定〕

情シ部は,C&C サーバの URL をプロキシ 2 のブラックリストに設定した。また,マルウェアの感染の拡大に備えて,今後はプロキシ 2 によって C&C サーバへの接続が遮断された PC をプロキシサーバのログから特定し,直ちに LAN から切り離すことにした。ところが,T さんは,次の問題があることに気付いた。

そこで,プロキシ 1 では,HTTP ヘッダとして d ヘッダフィールドを追加するように設定し,プロキシ 2 では, d ヘッダフィールドをログに出力するように設定した。

情シ部は,インシデント対応を完了し,プロジェクトをフェーズ 2 に進めた。

〔フェーズ 2 の開始〕

フェーズ 2 において,情シ部は,まず,②プロキシ認証に対応したマルウェアも多いとの調査報告を踏まえ,効果が完全ではないことを認識しながらも,プロキシ 2 のプロキシ認証機能を有効にした。

次に,計画どおりプロキシ 2 のカテゴリ単位フィルタリング機能を用いて,業務に不要と思われるカテゴリを“遮断”に設定した。すると,一部の部門から,業務で使用している Web サイトが使用できなくなったとの連絡があった。そこで,業務に不要と思われるカテゴリを“検知”に設定し,1 か月間運用した後,③業務に必要かつ安全であることを確認した URL は許可し,それ以外の URL は遮断することにした。

情シ部は,問題がないことを確認後,プロジェクトをフェーズ 3 に進めた。

出題趣旨(IPA)

昨今,特定企業を狙った標的型の電子メールを利用した攻撃の被害が多発しており,マルウェア対策の強化が求められている。本問では,PCにおけるプログラムの起動禁止設定やプロキシサーバにおけるフィルタリング機能とプロキシ認証機能を用いて,マルウェアに対応する方法を考える能力を問う。

採点講評(問全体・IPA)

問3では,プロキシサーバを用いたマルウェア対策について出題した。

設問と解答例

設問1 解答欄1つ

表1中の a に入れる適切な字句を解答群の中から選び,記号で答えよ。 解答群 ア DMZ イ フォワードプロキシ ウ プロキシ ARP エ リバースプロキシ

〔a〕解答例

  • エ
解説

本文の根拠

表1

a 機能(注 1)):・インターネットから Web サーバへの通信を中継する。

インターネット側から来た通信を受けて,内側の Web サーバへ中継するプロキシは,リバースプロキシ(エ)である。Web サーバの手前に置いて,負荷分散や Web サーバの保護に使う。

反対に,社員 PC などの内側の利用者からインターネットの Web サイトへの通信を中継するのがフォワードプロキシで,Q 社がプロキシ 1・2 で使っている機能はこちらに当たる。表1 の a は向きが逆の“インターネットから Web サーバへ”なので,フォワードプロキシ(イ)ではない。DMZ(ア)はネットワークの区画の名前で機能ではなく,プロキシ ARP(ウ)は他のホストに代わって ARP 要求に応答する機能で,Web の中継とは別物である。

記号で答える設問。中継の向き(内から外か,外から内か)で見分ける。

設問2(1) 解答欄2つ

本文中の b, c に入れる次の(ⅰ)~(ⅲ)の適切な組合せを,それぞれ解答群の中から選び,記号で答えよ。 (ⅰ) OS の管理用のコマンド (ⅱ) 攻撃用プログラム (ⅲ) マルウェア Z 解答群 ア (ⅰ) イ (ⅰ),(ⅱ) ウ (ⅰ),(ⅱ),(ⅲ) エ (ⅰ),(ⅲ) オ (ⅱ) カ (ⅱ),(ⅲ) キ (ⅲ)

〔b〕解答例

  • イ

〔c〕解答例

  • オ
解説

本文の根拠

〔情報セキュリティインシデントの発生と対応〕

マルウェア Z は,文書ファイルのマクロとして実装されていた。

〔情報セキュリティインシデントの発生と対応〕

攻撃用プログラムは,OS の管理用のコマンドを U さんの社員 PC 上に複数ダウンロードして起動させ,サーバ情報を窃取した。

冒頭

サーバ管理者は各種設定などのサーバ管理業務を行う場合だけ,1 台の管理 PC に自分の管理者 ID でログオンし,OS の管理用のコマンドなどを使用する。

冒頭

社員 PC には OS の管理用のコマンドはインストールされていない。

冒頭

プログラム起動禁止設定には,プログラム名が一致した場合にプログラムの起動を禁止にする方式と,プログラムの実行ファイルのハッシュ値が一致した場合に禁止する方式があり,

プログラム起動禁止設定は,プログラム名や実行ファイルのハッシュ値でプログラムの起動を止める仕組みである。マルウェア Z は文書ファイルのマクロとして実装されており,文書閲覧ソフトの中で動くので,プログラムとして起動を禁止する対象にならない。したがって b にも c にも(ⅲ)は入らない。

社員 PC には OS の管理用のコマンドがもともとインストールされておらず,業務で使わない。攻撃用プログラムは OS の管理用のコマンドをダウンロードして起動させたので,社員 PC では(ⅰ)と(ⅱ)の両方を禁止すればよく,b はイ。一方,管理 PC ではサーバ管理者が OS の管理用のコマンドを使ってサーバ管理業務を行うので,これを禁止すると業務ができなくなる。管理 PC で禁止できるのは攻撃用プログラム(ⅱ)だけで,c はオである。

記号で答える設問。“攻撃に使われたものは全部禁止”と考えると,管理 PC で OS の管理用のコマンドまで止めてしまう。それぞれの PC で業務に必要かどうかを確かめる。

設問2(2) 30字以内

プログラム名を指定する方法とハッシュ値を指定する方法の両方でプログラム起動禁止設定を行ったとしても,攻撃用プログラムの起動を防ぎきれない場合がある。それは,どのような攻撃用プログラムの場合か。30 字以内で具体的に述べよ。

解答例

  • プログラムの内容を変え,かつ,プログラム名を変える場合
解説

本文の根拠

冒頭

プログラム起動禁止設定には,プログラム名が一致した場合にプログラムの起動を禁止にする方式と,プログラムの実行ファイルのハッシュ値が一致した場合に禁止する方式があり,両方の方式を組み合わせた設定もできる。

プログラム名による禁止は,名前が一致したときだけ働くので,名前を変えれば逃れられる。ハッシュ値による禁止は,実行ファイルの内容が一致したときだけ働くので,内容を少しでも変えればハッシュ値が変わり,逃れられる。

両方を組み合わせても,どちらか一方に一致すれば止まるだけなので,攻撃用プログラムの内容を変え,かつプログラム名も変えた場合は,どちらの条件にも一致せず起動を防ぎきれない。攻撃者は C&C サーバから攻撃用プログラムをダウンロードさせているので,配るプログラムの内容と名前を変えるのは容易である。

字数は 30 字以内で,解答例は 27 字。“内容を変える”と“名前を変える”の両方を“かつ”でつなぐ。片方だけでは,もう一方の方式で止められてしまう。

設問3(1) 30字以内

本文中の下線①について,プロキシ 2 のログだけでは送信元 PC が特定できない理由を,30 字以内で述べよ。

解答例

  • 送信元IPアドレスがプロキシ1のIPアドレスとなるので
解説

本文の根拠

〔プロキシ更新〕

フェーズ 1 では,プロキシ 1 と社員 PC との通信方法を変えずに,DMZ にプロキシ 2 を導入し,プロキシ 1 とインターネット間の通信を,全てプロキシ 2 経由とする。

冒頭

プロキシ 1 では,日時,接続先 URL,送信元 IP アドレス,ステータスコード,応答のサイズなどのログを取得している。

〔プロキシ更新〕

ログについては,プロキシ 2 で,プロキシ 1 と同じ項目のログを取得するよう設定する。

フェーズ 1 では,社員 PC は今までどおりプロキシ 1 に接続し,プロキシ 1 がプロキシ 2 を経由してインターネットへ中継する。プロキシ 2 から見ると,接続してくる相手は常にプロキシ 1 である。

プロキシ 2 はプロキシ 1 と同じ項目(送信元 IP アドレスなど)をログに取るが,その送信元 IP アドレスはどの通信でもプロキシ 1 の IP アドレスになる。そのため,プロキシ 2 のログだけでは,どの社員 PC からの通信だったかが分からない。講評も,ログから送信元 PC を特定できない理由について,他者に誤解なく伝わるように必要な情報を正確に記述してほしかったとしている。

字数は 30 字以内で,解答例は 27 字。“送信元 IP アドレス”が“プロキシ 1 の IP アドレス”になる,と何が何になるのかを具体的に書く。“プロキシ 1 を経由するから”だけでは,ログのどの項目が問題なのかが伝わらない。

採点講評(IPA)

設問3(1)は,プロキシサーバのログに関する問題である。正答率は低かった。ログから送信元PCを特定できない理由について,他者に誤解なく伝わるように,必要な情報を正確に記述してほしかった。

設問3(2) 解答欄1つ

本文中の d に入れる適切な字句を解答群の中から選び,記号で答えよ。 解答群 ア Max-Forwards イ Proxy-Authorization ウ Referer エ User-Agent オ X-Forwarded-For

〔d〕解答例

  • オ
解説

本文の根拠

〔プロキシサーバにおける追加設定〕

そこで,プロキシ 1 では,HTTP ヘッダとして d ヘッダフィールドを追加するように設定し,プロキシ 2 では, d ヘッダフィールドをログに出力するように設定した。

プロキシが中継するときに,元のクライアントの IP アドレスを HTTP ヘッダに書いて次へ渡すのが X-Forwarded-For(オ)である。プロキシ 1 がこのヘッダに社員 PC の IP アドレスを入れ,プロキシ 2 がそれをログに出力すれば,プロキシ 2 のログから送信元 PC を特定できる。RFC 7239 は,X-Forwarded-For を,広く使われている非標準のヘッダフィールドとして挙げ,標準の Forwarded ヘッダフィールドを定めている。

Max-Forwards(ア)は TRACE や OPTIONS で中継できる回数を制限するヘッダ,Proxy-Authorization(イ)はクライアントがプロキシに認証情報を渡すヘッダ,Referer(ウ)は直前に閲覧していたページの URI,User-Agent(エ)はクライアントのソフトウェアの情報を伝えるヘッダで,どれも送信元の IP アドレスは運ばない。

記号で答える設問。講評は,広く使われている HTTP プロトコルについての知識を深めてほしいとしている。名前の似た Max-Forwards と取り違えないこと。

採点講評(IPA)

設問3(2)は,プロキシサーバが処理するHTTPヘッダに関する問題である。正答率は低かった。広く使われているHTTPプロトコルについての知識を深めてほしい。

設問4(1) 50字以内

本文中の下線②について,マルウェアは,どのようにして,認証を成功させるか。50 字以内で具体的に述べよ。

解答例

  • Webブラウザからプロキシサーバへの通信を盗聴して認証情報を取得し,プロキシサーバに送信する。
解説

本文の根拠

〔フェーズ 2 の開始〕

フェーズ 2 において,情シ部は,まず,②プロキシ認証に対応したマルウェアも多いとの調査報告を踏まえ,効果が完全ではないことを認識しながらも,プロキシ 2 のプロキシ認証機能を有効にした。

表1 プロキシ認証機能

PC からインターネットの Web サイトへの接続時に利用者 ID とパスワードによる利用者認証を行い,認証結果をログに記録する。

プロキシ認証は,利用者 ID とパスワードで利用者を認証してからインターネットへの接続を許す仕組みで,人が操作しない通信(マルウェアの C&C 通信など)を止める効果が期待される。しかし,マルウェアは感染した PC 上で動いているので,その PC の Web ブラウザがプロキシサーバへ送る通信を盗聴して認証情報(利用者 ID とパスワード)を取得できる。取得した認証情報を自分の通信に付けてプロキシサーバに送信すれば,認証は成功する。

HTTP のプロキシ認証では,クライアントは Proxy-Authorization ヘッダで認証情報を送る(RFC 7235)。Basic 認証の場合,認証情報は利用者 ID とパスワードを Base64 で符号化しただけのものである(RFC 7617)。情シ部が“効果が完全ではない”と認識していたのはこのためである。講評も,認証機能を通過する仕組みについて,他者に誤解なく伝わるように必要な情報を正確に記述してほしかったとしている。

字数は 50 字以内で,解答例は 47 字。“どこから認証情報を得るか(Web ブラウザからプロキシサーバへの通信の盗聴)”と“それをどう使うか(プロキシサーバに送信)”の二つを入れる。

採点講評(IPA)

設問4(1)は,プロキシサーバの認証機能を通過する最新のマルウェアに関する問題である。正答率は低かった。認証機能を通過する仕組みについて,他者に誤解なく伝わるように,必要な情報を正確に記述してほしかった。

設問4(2) 40字以内 解答欄2つ

本文中の下線③について,プロキシ 2 でどのように設定すべきか。URL フィルタリング機能及びカテゴリ単位フィルタリング機能について,それぞれ 40 字以内で具体的に述べよ。

〔URLフィルタリング機能〕解答例

  • ホワイトリストに業務に必要かつ安全であることを確認したURLを設定する。

〔カテゴリ単位フィルタリング機能〕解答例

  • 業務に不要であるカテゴリを遮断する。
解説

本文の根拠

〔フェーズ 2 の開始〕

そこで,業務に不要と思われるカテゴリを“検知”に設定し,1 か月間運用した後,③業務に必要かつ安全であることを確認した URL は許可し,それ以外の URL は遮断することにした。

表1 URL フィルタリング機能

・ホワイトリストに設定した URL を許可する。・ブラックリストに設定した URL を遮断する。

表1 カテゴリ単位フィルタリング機能

“遮断”:カテゴリごとに定義された URL を遮断し,ログに記録する。

表1 の後

URL フィルタリングとカテゴリ単位フィルタリングで同じ URL が設定された場合は,URL フィルタリングによる設定が優先される。

下線③は,“検知”で 1 か月間記録したログを基に,業務に必要かつ安全と確認できた URL だけを許可し,それ以外を遮断するという方針である。カテゴリ単位フィルタリング機能では,業務に不要であるカテゴリを“遮断”に設定する。そのうえで URL フィルタリング機能のホワイトリストに,業務に必要かつ安全であることを確認した URL を設定する。

本文のとおり,URL フィルタリングとカテゴリ単位フィルタリングで同じ URL が設定された場合は URL フィルタリングの設定が優先される。そのため,遮断したカテゴリに含まれる URL でも,ホワイトリストに入れたものは許可される。最初に“遮断”にしたときに業務の Web サイトが使えなくなった問題も,この組合せで解消できる。

字数はそれぞれ 40 字以内で,解答例は URL フィルタリング機能が 36 字,カテゴリ単位フィルタリング機能が 18 字。URL フィルタリング機能は“ホワイトリスト”に設定することを,カテゴリ単位フィルタリング機能は“遮断”に設定することを明記する。ブラックリストを使うと書くと,確認していない URL が許可されたままになる。

出典:平成28年度 秋期 情報処理安全確保支援士試験 午後Ⅰ 問3(表記を一部改変)