情報処理安全確保支援士 2014年 秋期 午後1 問01
スマートフォンに関する次の記述を読んで、設問1~4に答えよ。
K社は、従業員数5,000名の情報システム会社である。K社では、モバイルPCに加えて、スマートフォン(以下、スマホという)から、従業員が電子メールやグループウェアなどの社内システムへアクセスできるシステム環境(以下、Bシステムという)を昨年導入した。Bシステムの利用に先立ち、従業員が電子メール用やグループウェア用のアプリケーションソフトウェア(以下、アプリケーションソフトウェアをアプリという)をスマホにインストールする。また、Bシステムの導入に当たっては、スマホを遠隔で管理するシステム(以下、Mシステムという)を追加で導入し、スマホのOSやアプリのバージョンなどの構成情報の管理や、スマホの紛失時のデータ消去などのセキュリティ対策を実現した。さらに、“個人の所有物であるスマホからBシステムを利用する際は、事前に、利用者の氏名に加えてスマホの製品名や電話番号といった情報をK社に申請すること”などを定めたスマホ利用規程を策定した。
Bシステムの導入から1年が過ぎたので、K社では、セキュリティ対策及びスマホ利用規程が有効であったかについて確認することにした。その際に、スマホに関するセキュリティ対策を改めて議論することにした。
〔ルート特権の利用について〕
スマホのルート特権を利用者が利用できる状態にする行為(以下、ルート特権化という)について、セキュリティ上の問題がないかを検討することになった。スマホの多くは、利用者がルート特権をもたず一般利用者の権限だけで利用することを前提にしている。そのため、ルート特権をもつ個人のPCと違い、OSの設定の一部を自由に変更できないという制約や、スマホのベンダによってあらかじめインストールされているアプリを削除できないという制約などがある。そのような制約を嫌う利用者の中には、ベンダが想定していない手段で、ルート特権化を自ら行う者もいる。
K社で調査したところ、ルート特権化は、主に、バッファオーバフロー攻撃を用いて実現されることが分かった。
〔バッファオーバフロー攻撃の詳細と対策について〕
バッファオーバフロー攻撃に関するセキュリティホールは、スマホ用のOSだけではなく、PC用OSやサーバ用OSにおいても報告されている。通常、OSやライブラリのセキュリティホールが公表された場合、PCやサーバを管理する者は、開発元から提供されるaの適用やソフトウェアの更新によって、セキュリティホールに対処する。他方、Webサーバにおいては、aの適用やソフトウェアの更新をしなくても、①通信路上にIPSやWAFを設置することによって、インターネットからWebサーバへのバッファオーバフロー攻撃を防止することもできる。
バッファオーバフロー攻撃としては、スタックバッファオーバフロー攻撃、bバッファオーバフロー攻撃や、静的メモリ領域を対象としたバッファオーバフロー攻撃が知られている。いずれのバッファオーバフロー攻撃も、主にCやC++で作成されたプログラムが狙われる。スタックバッファオーバフロー攻撃は、スタック領域を破壊するので、スタック破壊攻撃とも呼ばれる。スタック破壊の挙動をプログラム実行時に検知して停止する機能(以下、スタック破壊検知機能という)を含むコードを生成するコンパイラも普及している。
図1は、スタックバッファオーバフロー攻撃に対して脆弱なプログラム(以下、Vulnという)である。図2は、関数fooが呼び出された後のメモリ配置である。ここで、図2中のshellコードは、攻撃者がスタックバッファオーバフロー攻撃によってメモリ上に配置するものである。スタック破壊検知機能を含めずにコンパイルしたVulnにおいては、攻撃を成立させるために挿入するデータ(以下、インジェクションベクタという)を変数aに与えることによって、shellコードにプログラムの制御が移ってしまう。ここでは、図3がVulnに対するインジェクションベクタである。その際、Vulnが実行時に②一定の条件を満たせば、あらゆる命令の実行がshellコードで可能となる。

このスタックバッファオーバフロー攻撃を防止するため、指定されたメモリ領域でのコードの実行を禁止する機能(以下、データ実行防止機能という)が登場した。これは、CPUの機能を用いて実現されている。
しかし、プログラム実行時に共有ライブラリがメモリ上にロードされていることを利用して、データ実行防止機能を回避する新たな攻撃法が登場した。これは、共有ライブラリ内の関数であって、かつ、任意のプログラムを実行できる関数を、スタックバッファオーバフロー攻撃時に利用するものである。libc共有ライブラリを利用する場合、この攻撃はd攻撃と呼ばれる。
最近のOSでは、こういった攻撃が成功することを抑制するため、アドレス空間配置ランダム化技術が実装されている。アドレス空間配置ランダム化技術を用いると、スタック破壊検知機能を含めずにコンパイルしたプログラムであっても、スタックバッファオーバフロー攻撃の成功を抑制することができる。
〔K社での対策〕
K社の調査の結果、スマホのOSのあるバージョン(以下、バージョンVという)以降ではデータ実行防止機能及びアドレス空間配置ランダム化技術が実装されていることが分かった。また、バージョンV以降では、その他様々な点でセキュリティ対策が強化されていることも分かった。
その上で、ルート特権化されたスマホからBシステムを利用することについて改めて検討したところ、ルート特権化されたスマホは、ベンダの保守サポートの対象外になること、及びMシステム用のアプリやBシステム用のアプリが動作しなくなることが分かった。さらに、ルート特権化されていないスマホと違い、ルート特権化されたスマホでは、“データを盗み出すタイプのマルウェア”が侵入してしまうと、それがルート特権を取得して、③スマホ内に保存されているアプリのデータを不正に読み出してしまうリスクが高まることも分かった。そのため、K社では、スマホ利用規程で、ルート特権化されたスマホからのBシステムの利用を禁止することにした。
しかしながら、④それだけでは、従業員がスマホ利用規程を守ったとしても、“意図しないルート特権化”のリスクが残存する。K社は、Bシステムのセキュリティを確保するために、スマホでは、バージョンV以降のOSを利用することが必要であるとの結論に至った。そのため、⑤スマホのOSのバージョンをK社が確認する運用策を実施することにした。
設問1:
問題文を見る本文中のa、b、dに入れる適切な字句を、aは15字以内で、bは5字以内で、dは20字以内でそれぞれ答えよ。
模範解答
a:セキュリティパッチ
b:ヒープ
d:return-to-libc
解説
解答の論理構成
-
a の文脈
- 原文引用:
「開発元から提供されるaの適用やソフトウェアの更新によって、セキュリティホールに対処する。」 - “開発元から提供される”かつ“セキュリティホールに対処”という説明は、一般に「セキュリティパッチ」を指します。
- さらに「Webサーバにおいては、aの適用やソフトウェアの更新をしなくても」と続くため、対策手段としてのパッチが念頭に置かれていると判断できます。
⇒ a = 「セキュリティパッチ」
- 原文引用:
-
b の文脈
- 原文引用:
「スタックバッファオーバフロー攻撃、bバッファオーバフロー攻撃や、静的メモリ領域を対象としたバッファオーバフロー攻撃が知られている。」 - スタックに対比される動的メモリ領域は “ヒープ” であり、「ヒープバッファオーバフロー攻撃」は定番の分類です。
⇒ b = 「ヒープ」
- 原文引用:
-
d の文脈
- 原文引用:
「libc共有ライブラリを利用する場合、この攻撃はd攻撃と呼ばれる。」 - libcの既存関数へ制御を飛ばす古典的手法は「return-to-libc攻撃」です。
- “任意のプログラムを実行できる関数を、スタックバッファオーバフロー攻撃時に利用”という説明もreturn-to-libcの特徴と一致します。
⇒ d = 「return-to-libc」
- 原文引用:
以上より、
a:セキュリティパッチ
b:ヒープ
d:return-to-libc
b:ヒープ
d:return-to-libc
誤りやすいポイント
- 「セキュリティパッチ」を「アップデートファイル」「修正プログラム」などと曖昧に書くと減点対象になりやすいです。
- ヒープとグローバル領域(BSS/データ領域)を混同し、「静的メモリ領域=ヒープ」と誤読してしまうケースがあります。
- return-to-libcをROP(Return Oriented Programming)と書く誤答が散見されます。ROPはより包括的な概念で、本問はlibcを明記している点が決め手です。
FAQ
Q: “セキュリティパッチ”と“サービスパック”は同じ意味ですか?
A: サービスパックは複数のパッチをまとめた大型更新を指す場合が多く、単発の穴埋めとして配布される“セキュリティパッチ”とは区別されることがあります。
A: サービスパックは複数のパッチをまとめた大型更新を指す場合が多く、単発の穴埋めとして配布される“セキュリティパッチ”とは区別されることがあります。
Q: ヒープバッファオーバフローはスタックの場合と何が違いますか?
A: 上書きする対象が戻り番地ではなくヒープ管理構造や関数ポインタになるため、攻撃成功の糸口や検知方法が異なります。
A: 上書きする対象が戻り番地ではなくヒープ管理構造や関数ポインタになるため、攻撃成功の糸口や検知方法が異なります。
Q: return-to-libc攻撃はデータ実行防止機能を必ず回避できますか?
A: 成功率は高いものの、ASLR(アドレス空間配置ランダム化)などが併用されるとlibcのアドレスが特定しづらくなり、抑制効果が期待できます。
A: 成功率は高いものの、ASLR(アドレス空間配置ランダム化)などが併用されるとlibcのアドレスが特定しづらくなり、抑制効果が期待できます。
関連キーワード: セキュリティパッチ、バッファオーバフロー、ヒープ、return-to-libc, アドレス空間配置ランダム化
設問2:Vulnへのスタックバッファオーバフロー攻撃とその対策について、(1)〜(3)に答えよ。
問題文を見る(1)図2のメモリ配置について、スタックバッファオーバフロー攻撃を防止するには、データ実行防止機能をどのメモリ領域に適用すればよいか。図2中の用語を用いて答えよ。
模範解答
スタック領域
解説
解答の論理構成
- 攻撃の成立条件を確認
- 【問題文】には「図2中のshellコードは、攻撃者がスタックバッファオーバフロー攻撃によってメモリ上に配置するものである。」とあり、悪意のコードは「スタック領域」に置かれると明示されています。
- シェルコード実行を阻止する仕組み
- 同じく【問題文】で「指定されたメモリ領域でのコードの実行を禁止する機能(以下、データ実行防止機能という)」と紹介されており、これは“その領域を実行不可にする”ことで攻撃を防ぐ機能です。
- どの領域を実行不可にすべきか
- 攻撃者が配置するのは「スタック領域」にあるシェルコードなので、ここを実行不可に設定すればプログラムカウンタがスタックに移っても命令として解釈されません。
- 結論
- したがって、データ実行防止機能を適用すべきメモリ領域は「スタック領域」となります。
誤りやすいポイント
- 「ヒープ領域」や「BSS領域」もデータ領域なので誤答しやすいが、本問でシェルコードが載るのはスタックであり、他領域に配置されるケースは示されていない。
- 「共有ライブラリ」を実行不可にするという考え違い。共有ライブラリは正規の実行コードであり、実行不可にすると通常動作まで阻害される。
- データ実行防止機能は“全メモリを対象にする”と早合点してしまう。実際にはセグメント単位で細かく制御でき、必要最小限の領域だけを実行不可にするのが基本。
FAQ
Q: スタックを実行不可にすると正規処理に支障はありませんか?
A: CやC++で通常生成されるコードはテキスト領域で実行されるため支障はありません。正規処理でスタック上のデータを命令として実行する場面は想定されていないため、安全に適用できます。
A: CやC++で通常生成されるコードはテキスト領域で実行されるため支障はありません。正規処理でスタック上のデータを命令として実行する場面は想定されていないため、安全に適用できます。
Q: ヒープにもデータ実行防止を掛けるべきでは?
A: ヒープを実行不可にすることで別種の攻撃(ヒープバッファオーバフローなど)も緩和できますが、本問は「図2」に示されたスタックバッファオーバフローへの対処が焦点です。設問が求めているのはスタック領域です。
A: ヒープを実行不可にすることで別種の攻撃(ヒープバッファオーバフローなど)も緩和できますが、本問は「図2」に示されたスタックバッファオーバフローへの対処が焦点です。設問が求めているのはスタック領域です。
Q: アドレス空間配置ランダム化とデータ実行防止は同時に使うべきですか?
A: はい。ランダム化はアドレス予測を困難にし、データ実行防止は実行自体を阻止します。複数の防御策を重ねる「多層防御」が推奨されます。
A: はい。ランダム化はアドレス予測を困難にし、データ実行防止は実行自体を阻止します。複数の防御策を重ねる「多層防御」が推奨されます。
関連キーワード: スタックバッファオーバフロー、データ実行防止、シェルコード、メモリセグメント、多層防御
設問2:Vulnへのスタックバッファオーバフロー攻撃とその対策について、(1)〜(3)に答えよ。
問題文を見る(2)図3中のcに入れる適切なバイト列を解答群の中から選び、記号で答えよ。ただし、バイトオーダはリトルエンディアンとする。
解答群
ア:068004c8
イ:08048026
ウ:26800408
エ:268004c8
オ:5e8004c8
カ:c8048006
キ:c8048026
ク:c804805e
模範解答
c:エ
解説
解答の導き方
まず設問が問うことを整理します。図3のインジェクションベクタ中のcには、関数の復帰時にEIP(命令ポインタ)として読み出され、実行を開始させたい「シェルコードの先頭アドレス」を32ビットで格納します。問題文は「バイトオーダはリトルエンディアンとする」と明示しているので、格納順は下位バイト→上位バイトの順になります。
次に図2のアドレス対応から何がどこに入るかを厳密に対応づけます。図2で示されている主要な位置は次の通りです(図中の表記をそのまま使用します)。
- "char c[24]" のアドレスは "c8047fe6"
- "リターンアドレスX" のアドレスは "c8048026"
- "(ここにshellコードが入る)" の領域は、図の描き方からその下端(低いアドレス側)が "c8048026" で、上端(高いアドレス側)が "c804805e" になっていることが読み取れます。したがってシェルコードの先頭(実行開始すべき最初のバイト)はアドレス "c8048026" に位置します。
次にstrcpyによるメモリへの配置向きを確認します。strcpyは与えられた文字列をバッファ先頭(ここでは "char c[24]" が指すアドレスc8047fe6)から順に書き込むため、インジェクションベクタの左端がメモリの低いアドレス側(c8047fe6)に対応し、右に進むほど高いアドレスへ配置されます。よって図3の並び("41, … ,41, [c], (空欄) … shellコード")は、メモリ上では次のように対応します。
- インジェクションベクタの先頭バイト → アドレスc8047fe6
- …
- インジェクションベクタの64バイト目(オフセット0x40)まででアドレスはc8048025まで埋まるため、インジェクションベクタの次の4バイト(図3の c)がメモリ上でアドレスc8048026 ~ c8048029の領域に書かれ、これが「リターンアドレス」を上書きします(差分計算:c8048026 - c8047fe6 = 0x40 = 64)。
- その後に続くバイト群が更に上のアドレスへ入り、図2に描かれた "shellコード" の領域を形成します。
したがって、復帰先に設定すべきアドレスはシェルコードの先頭である "c8048026" です。これをリトルエンディアンで4バイト列に直します。
アドレスc8048026をバイト列に分解すると(上位→下位)は
c8 04 80 26ですが、リトルエンディアンでは下位バイトから並べますので
26 80 04 c8になります。16進表記でつなげると "268004c8" です。
よって図3中のcに入れるべきバイト列は 解答群の エ:268004c8です。
誤りやすいポイント
- 図2のアドレス表示の上下(図の上側=大きいアドレス/下側=小さいアドレス)を取り違えると、シェルコードの「先頭」アドレスを逆に解釈してしまいます。図中の矩形の「下端(低いアドレス側)」が実行開始点である点を必ず確認してください。
- インジェクションベクタの左端がメモリの低いアドレスに対応すること(strcpyの書き込み方向)を誤解すると、オフセットの向きが逆になってしまいます。
- オフバイワン(何バイト目がリターンアドレスに対応するか)の計算ミス。今回はc8048026 - c8047fe6 = 0x40(64)であることを正確に求める必要があります。
- リトルエンディアンを忘れて、アドレスをそのまま "c8048026" と4バイト列にしてしまうミス。メモリには下位バイトが先に置かれます。
FAQ
Q: なぜシェルコードの先頭が "c8048026" なのですか?
A: 図2の描き方では、シェルコード領域の下端(低いアドレス側)が "c8048026" で、その上端が "c804805e" になっています。CPUは低いアドレスから順に命令を実行するため、その「下端」がシェルコードの実行開始アドレスになります。図3のインジェクションベクタは左から順にメモリの低いアドレスに書き込まれるので、リターンアドレスとして設定すべき値は "c8048026" です。
A: 図2の描き方では、シェルコード領域の下端(低いアドレス側)が "c8048026" で、その上端が "c804805e" になっています。CPUは低いアドレスから順に命令を実行するため、その「下端」がシェルコードの実行開始アドレスになります。図3のインジェクションベクタは左から順にメモリの低いアドレスに書き込まれるので、リターンアドレスとして設定すべき値は "c8048026" です。
Q: リトルエンディアン変換の具体的な手順を教えてください。
A: 32ビットアドレス0xc8048026をバイト単位で見ると上位からc8 04 80 26です。リトルエンディアンでは下位バイトが最初にメモリに置かれるので、メモリ上の並びは26 80 04 c8になり、これを連続した16進表記にすると268004c8です。
A: 32ビットアドレス0xc8048026をバイト単位で見ると上位からc8 04 80 26です。リトルエンディアンでは下位バイトが最初にメモリに置かれるので、メモリ上の並びは26 80 04 c8になり、これを連続した16進表記にすると268004c8です。
Q: なぜ c がリターンアドレスを書き換える位置になるのですか?
A: 図3の構成('41の繰り返し' → c → 'shellコード')を、strcpyがバッファ先頭(c8047fe6)から順に書き込むという性質でメモリに写すと、c がメモリ上のc8048026~c8048029(元のリターンアドレス領域)に対応するため、ここを書き換えることで復帰先(EIP)を制御できます。
A: 図3の構成('41の繰り返し' → c → 'shellコード')を、strcpyがバッファ先頭(c8047fe6)から順に書き込むという性質でメモリに写すと、c がメモリ上のc8048026~c8048029(元のリターンアドレス領域)に対応するため、ここを書き換えることで復帰先(EIP)を制御できます。
関連キーワード: スタックバッファオーバフロー、リトルエンディアン、リターンアドレス、スタックフレーム、strcpy、NOPスレッド
設問2:Vulnへのスタックバッファオーバフロー攻撃とその対策について、(1)〜(3)に答えよ。
問題文を見る(3)アドレス空間配置ランダム化技術は、攻撃者のどのような行為をできないようにすることによって、図3のインジェクションベクタによるスタックバッファオーバフロー攻撃が成功することを抑制するか。25字以内で具体的に述べよ。
模範解答
攻撃を成功させるためのジャンプ先アドレスの特定
解説
解答の論理構成
- 攻撃者は図3のインジェクションベクタで「リターンアドレス」を上書きし、プログラムの制御をshellコードや共有ライブラリ内部に飛ばすことで任意コード実行を狙います。
- その際に不可欠なのが「飛び先の実メモリアドレスを正確に書き込む」行為です。
- 【問題文】には、アドレス空間配置ランダム化技術について
“最近のOSでは、こういった攻撃が成功することを抑制するため、アドレス空間配置ランダム化技術が実装されている”
とあり、OS起動やプロセス実行のたびにスタック・ヒープ・共有ライブラリ・実行ファイル等の配置アドレスをランダム化することが示唆されています。 - アドレスが毎回変われば、攻撃者は「ジャンプ先アドレス」を事前に決め打ちできず、図3のベクタに正しい値を埋め込めません。
- したがって、「攻撃を成功させるためのジャンプ先アドレスの特定」を不能にすることが、成功率を大きく下げる直接要因となります。
誤りやすいポイント
- 「ASLRはコード実行そのものを禁止する」と誤解し、制御移譲の鍵となるアドレス特定阻止という本質を外す。
- スタック破壊検知機能やデータ実行防止機能と混同し、「実行可能/非実行可能の切替」と答えてしまう。
- “ランダム化でシェルコードを置けなくなる”と表現し、シェルコードの配置自体は可能である点を見落とす。
FAQ
Q: スタック破壊検知機能とASLRの役割はどう違いますか?
A: 前者は「破壊が検知されたら異常終了」で攻撃を遮断、後者は「制御を渡す先のアドレスを推測不能化」して成功確率を低下させます。
A: 前者は「破壊が検知されたら異常終了」で攻撃を遮断、後者は「制御を渡す先のアドレスを推測不能化」して成功確率を低下させます。
Q: ASLRがあればスタックバッファオーバフローは完全に防げますか?
A: いいえ。情報漏えいやブルートフォースでアドレスを割り出されると突破される可能性があり、他の対策との併用が前提です。
A: いいえ。情報漏えいやブルートフォースでアドレスを割り出されると突破される可能性があり、他の対策との併用が前提です。
関連キーワード: アドレス空間配置、スタックバッファ、リターンアドレス、任意コード実行、メモリ保護
設問3:バッファオーバフロー攻撃について、(1)、(2)に答えよ。
問題文を見る(1)本文中の下線①にある、インターネットからWebサーバへのバッファオーバフロー攻撃の対策として、IPSやWAFではどのような処理をするか。25字以内で具体的に述べよ。
模範解答
インジェクションベクタを検知・破棄する。
解説
解答の論理構成
- 問題文は「①通信路上にIPSやWAFを設置することによって、インターネットからWebサーバへのバッファオーバフロー攻撃を防止することもできる」と述べています。
- IPS/WAFはネットワーク上の通信内容を解析し、攻撃パターンに合致するデータを遮断する製品です。バッファオーバフロー攻撃では、攻撃用のデータ列(本文では「インジェクションベクタ」)がリクエスト中に含まれます。
- したがって、IPS/WAFが行う具体的処理は「インジェクションベクタを識別して通信を止める」ことになります。
- 以上から模範解答「インジェクションベクタを検知・破棄する。」となります。
誤りやすいポイント
- IPS/WAFの役割を「暗号化」「アクセス制御」と誤解しやすい。ここではペイロード解析による攻撃データの遮断が本質です。
- 「バッファオーバフロー全体を防ぐ」とだけ書くと、具体的処理を問う設問意図から外れて減点対象になります。
- 「パケットを破棄」とだけ書くと、何を根拠に破棄するのかが不明確で説明不足になります。
FAQ
Q: IDSとIPSの違いは関係しますか?
A: 本問は「検知後に遮断」まで行うため、IDS(検知のみ)よりもIPS/WAF(検知+遮断)の動作を答えます。
A: 本問は「検知後に遮断」まで行うため、IDS(検知のみ)よりもIPS/WAF(検知+遮断)の動作を答えます。
Q: 「インジェクションベクタ」とは何ですか?
A: バッファオーバフロー攻撃を成立させるために入力データ内へ挿入される悪意ある命令列やアドレス列です。
A: バッファオーバフロー攻撃を成立させるために入力データ内へ挿入される悪意ある命令列やアドレス列です。
Q: WAFは本来Webアプリケーション層の攻撃対策ですが、OSの脆弱性由来のバッファオーバフローにも有効ですか?
A: 攻撃ペイロードがHTTPリクエスト内に載っていれば、シグネチャやルールによって検知・遮断できます。
A: 攻撃ペイロードがHTTPリクエスト内に載っていれば、シグネチャやルールによって検知・遮断できます。
関連キーワード: IPS, WAF, バッファオーバフロー、インジェクションベクタ、パケット解析
設問3:バッファオーバフロー攻撃について、(1)、(2)に答えよ。
問題文を見る(2)本文中の下線②の条件を20字以内で述べよ。
模範解答
ルート特権があること
解説
解答の論理構成
- 問題文は、スタックバッファオーバフロー攻撃によって「shellコードにプログラムの制御が移ってしまう」ことを説明したうえで、
「Vulnが実行時に②一定の条件を満たせば、あらゆる命令の実行がshellコードで可能となる」
と述べています。 - ここで「あらゆる命令」とは、OS全体を支配するようなシステムコールの実行を含みます。OSが備える保護機構を回避して完全掌握するためには、プロセスが最上位権限(スーパーユーザ権限)で動いている必要があります。
- 同じ本文中には、スマホに関する説明として
「スマホのルート特権を利用者が利用できる状態にする行為(以下、ルート特権化という)」
という定義が登場しており、ルート特権化された端末では「データを盗み出すタイプのマルウェア」が「ルート特権を取得」して多大な影響を及ぼすリスクが強調されています。 - 以上より、スタックバッファオーバフローでshellコードが“何でもできる”状態になる条件は、対象プロセス(今回のVulnプログラム)が「ルート特権」で実行されていることです。
- 従って、下線②の条件は「ルート特権があること」となります。
誤りやすいポイント
- DEP(データ実行防止機能)やASLRが無効であることを条件と誤解しやすい。本文は「一定の条件」を“権限”の話としており、メモリ保護機構の有無とは別問題です。
- 「スタック破壊検知機能を含めずにコンパイルしていること」が条件だと考えてしまう。これは攻撃成功率を高める要因であって、“あらゆる命令”を実行できるかどうかを決める条件ではありません。
- インジェクションベクタの長さやshellコードの配置アドレスを条件と勘違いするケース。これらは攻撃のテクニカルな要件であり、問題文の「一定の条件」の主眼ではありません。
FAQ
Q: なぜroot権限が必要なのですか?
A: 一般権限のプロセスが乗っ取られても、その権限の範囲でしかシステムコールを発行できません。root権限で動作していれば、ファイルシステム全体の読み書きや権限変更など“あらゆる命令”が可能になるためです。
A: 一般権限のプロセスが乗っ取られても、その権限の範囲でしかシステムコールを発行できません。root権限で動作していれば、ファイルシステム全体の読み書きや権限変更など“あらゆる命令”が可能になるためです。
Q: DEPやASLRが有効でもroot権限があれば危険ですか?
A: はい。DEP/ASLRは攻撃成功率や手法を限定する防御策ですが、最終的にbypassされroot権限プロセスを奪われると深刻な被害が発生します。
A: はい。DEP/ASLRは攻撃成功率や手法を限定する防御策ですが、最終的にbypassされroot権限プロセスを奪われると深刻な被害が発生します。
Q: root権限で動作するプロセスを減らす理由は?
A: 乗っ取られた際の影響範囲を限定するためです。必要最小限のプロセスのみをrootで実行し、他は一般ユーザで実行することで被害を局所化できます。
A: 乗っ取られた際の影響範囲を限定するためです。必要最小限のプロセスのみをrootで実行し、他は一般ユーザで実行することで被害を局所化できます。
関連キーワード: ルート権限、バッファオーバフロー、shellコード、権限昇格
設問4:〔K社での対策〕について、(1)〜(3)に答えよ。
問題文を見る(1)ルート特権化されていないスマホでは、本文中の下線③の不正な読出しを、OSのファイルシステムがどのような仕様で制限しているか。40字以内で述べよ。
模範解答
あるアプリから、ほかのアプリのデータへのアクセスを禁止するという仕様
解説
解答の論理構成
- 【問題文】では「ルート特権化されたスマホでは、“データを盗み出すタイプのマルウェア”が侵入してしまうと、それがルート特権を取得して、③スマホ内に保存されているアプリのデータを不正に読み出してしまうリスクが高まる」と述べています。
- 逆に言えば、ルート特権化されていないスマホでは、この“不正な読出し”がOSの仕様で制限されていることになります。
- 多くのスマホOS(AndroidやiOS)は、アプリごとに専用のユーザIDを割り当て、アプリのデータ領域をそのユーザIDだけが読み書きできるようにファイルシステム上で分離しています。この仕組みは一般に「サンドボックス」と呼ばれます。
- したがって、通常権限のアプリは「ほかのアプリのデータ」を参照できません。ルート特権を得たときのみ、このUIDベースのアクセス制御を迂回できるため、上記のリスクが顕在化します。
- 以上より、解答は「あるアプリから、ほかのアプリのデータへのアクセスを禁止するという仕様」となります。
誤りやすいポイント
- 「暗号化しているから読めない」と考える誤解
→ 問題が訊いているのはファイルシステムのアクセス制御であり、暗号化の有無は問われていません。 - 「Mシステムでリモートワイプできるから安全」と答えてしまう
→ リモートワイプは紛失対策であり、アプリ間アクセス制御とは別の話題です。 - サンドボックス=ウイルス対策ソフトと混同する
→ サンドボックスはOSレベルの権限分離、ウイルス対策ソフトはアプリケーション層の防御で目的が異なります。
FAQ
Q: サンドボックスはAndroid特有の概念ですか?
A: いいえ。iOSを含む多くのスマホOSが同様のアプリ間分離を採用しています。実装方法は異なりますが目的は共通です。
A: いいえ。iOSを含む多くのスマホOSが同様のアプリ間分離を採用しています。実装方法は異なりますが目的は共通です。
Q: ルート特権化すると必ずしもマルウェアが入るのですか?
A: 必ずではありませんが、OSのアクセス制御を破壊できるためマルウェアが取得した権限の範囲が格段に広がります。リスクが跳ね上がるので企業では禁止されることが一般的です。
A: 必ずではありませんが、OSのアクセス制御を破壊できるためマルウェアが取得した権限の範囲が格段に広がります。リスクが跳ね上がるので企業では禁止されることが一般的です。
Q: MDMでルート化を検知できますか?
A: 多くのMDM製品はルート化痕跡のスキャン機能を持ちますが、完全検知は困難です。問題文でも「意図しないルート特権化のリスクが残存」と指摘されています。
A: 多くのMDM製品はルート化痕跡のスキャン機能を持ちますが、完全検知は困難です。問題文でも「意図しないルート特権化のリスクが残存」と指摘されています。
関連キーワード: サンドボックス、アクセス制御、権限分離、ルート特権、ファイルシステム
設問4:〔K社での対策〕について、(1)〜(3)に答えよ。
問題文を見る(2)本文中の下線④について、意図しないルート特権化がどのような状況で起こり得るか。25字以内で述べよ。
模範解答
ルート特権化するマルウェアに感染したとき
解説
解答の導き方
設問は「意図しないルート特権化がどのような状況で起こり得るか」を問うています。本文の該当箇所を順にたどると、答えに自然に到達できます。
- 本文はまず、K社の調査で「ルート特権化は、主に、バッファオーバフロー攻撃を用いて実現されることが分かった」と記しています。これは攻撃者が脆弱なプログラムに対してデータを注入し、図3のようなインジェクションベクタで図2のshellコードを配置して任意命令を実行することで権限を奪うことを意味します。
- 次に本文は、ルート化された端末について「“データを盗み出すタイプのマルウェア”が侵入してしまうと、それがルート特権を取得して、スマホ内に保存されているアプリのデータを不正に読み出してしまうリスクが高まる」と述べています。ここから、マルウェアが侵入して端末内で権限昇格(ルート取得)を行うことが問題であると読み取れます。
- 以上を合わせると、利用者が規程を守って意図的にルート化していなくても、マルウェアや脆弱性を突く攻撃によって端末が勝手にルート化される状況が想定されます。したがって設問にふさわしい表現は「ルート特権化するマルウェアに感染したとき」です。
誤りやすいポイント
- 利用者が自らルート化しない限り意図しないルート化は起こらないと考える誤り。本文はマルウェアや脆弱性攻撃を原因として明示しています。
- 「古いOSだからだけが原因」と単純化する誤り。確かに脆弱性は関係しますが、攻撃手法(マルウェアやバッファオーバフロー)が直接の誘因です。
- 図の細部(図2/図3)を見落とし「root化=ユーザ操作のみ」と誤解すること。図は攻撃により任意コードが実行され得ることを示しています。
- 設問の下線番号や該当箇所を間違えて参照することで、根拠のずれた説明をする誤り。
FAQ
Q: 意図しないルート特権化はマルウェア感染だけが原因ですか?
A: 主因としてマルウェア感染が挙げられますが、リモートの脆弱性exploit(例:バッファオーバフロー)で任意コード実行→権限昇格が起きる場合も同じ結果になります。本文は両者を想定しています。
A: 主因としてマルウェア感染が挙げられますが、リモートの脆弱性exploit(例:バッファオーバフロー)で任意コード実行→権限昇格が起きる場合も同じ結果になります。本文は両者を想定しています。
Q: バージョンV以降のOSを使えば完全に防げますか?
A: 本文は「バージョンV以降ではデータ実行防止機能及びアドレス空間配置ランダム化技術が実装されている」としてリスク低減を述べていますが、完全な防御ではありません。新たな脆弱性や他手法による攻撃の可能性は残ります。
A: 本文は「バージョンV以降ではデータ実行防止機能及びアドレス空間配置ランダム化技術が実装されている」としてリスク低減を述べていますが、完全な防御ではありません。新たな脆弱性や他手法による攻撃の可能性は残ります。
Q: 運用での追加対策は何が有効ですか?
A: OSバージョン確認に加え、Mシステム等で不正なroot化検知・端末整合性チェック・アプリの署名検査や定期的な脆弱性対応(更新適用)を組み合わせることが有効です。
A: OSバージョン確認に加え、Mシステム等で不正なroot化検知・端末整合性チェック・アプリの署名検査や定期的な脆弱性対応(更新適用)を組み合わせることが有効です。
関連キーワード: バッファオーバーフロー、データ実行防止、アドレス空間配置ランダム化、ルート特権化、マルウェア
設問4:〔K社での対策〕について、(1)〜(3)に答えよ。
問題文を見る(3)本文中の下線⑤について、確認方法を具体的に20字以内で述べよ。
模範解答
Mシステムを使って確認する。
解説
解答の論理構成
- 【問題文】には、スマートフォン管理用として「スマホを遠隔で管理するシステム(以下、Mシステムという)」を導入し、 “スマホのOSやアプリのバージョンなどの構成情報の管理” まで実施できると明記されています。
- さらに〔K社での対策〕で、“スマホのOSのバージョンをK社が確認する運用策を実施することにした” とあります。
- すでに “構成情報の管理” 機能を備えた「Mシステム」が稼働しているため、追加の仕組みを用意せずとも同システムでバージョン確認が完結します。
- よって、下線⑤の具体的な確認方法は「Mシステムを使って確認する。」となります。
誤りやすいポイント
- “Bシステム用のアプリ” と混同し、メールやグループウェアの画面から手動確認と答えてしまう。
- 既存の資産管理台帳や申請書を想起し、紙ベースの確認策を挙げてしまう。
- 「Mシステム」の役割が“遠隔ワイプ”と“紛失時対策”だけだと思い込み、バージョン情報収集機能を見落とす。
FAQ
Q: 社員に自己申告させる方法では不十分ですか?
A: 不十分です。自己申告では偽装や申告漏れが起き得ますが、Mシステムであれば端末から取得した実データを自動的に収集できます。
A: 不十分です。自己申告では偽装や申告漏れが起き得ますが、Mシステムであれば端末から取得した実データを自動的に収集できます。
Q: Mシステムに登録されていない私物端末はどう扱いますか?
A: そもそも登録されていない端末はBシステムに接続させない運用とし、利用規程違反として遮断・警告を行います。
A: そもそも登録されていない端末はBシステムに接続させない運用とし、利用規程違反として遮断・警告を行います。
Q: OSアップデートを促す仕組みも必要ですか?
A: はい。確認だけでなく、非準拠端末を検出した際にアップデートを強制または利用停止にするポリシー連携が推奨されます。
A: はい。確認だけでなく、非準拠端末を検出した際にアップデートを強制または利用停止にするポリシー連携が推奨されます。
関連キーワード: モバイルデバイス管理、バージョン管理、バッファオーバフロー、アドレス空間配置ランダム化、データ実行防止





