【令和4年度 春期 午後Ⅰ】情報処理安全確保支援士 SC 過去問 解説メモ

試験間近。過去問追い込み中。整理用にメモ。

IPA午後Ⅰ回答

午後Ⅰ 問1

設問1
(1)ア:%0D%0A

HTTP ヘッダインジェクション:URLのクエリストリングに改行コードなどを挿入することでHTTPヘッダを不正に改変し、ブラウザに不正な動作をさせる攻撃。任意のスクリプトを埋め込んだり任意のCookieを発行しセッションIDを固定化したりできる。

対策としては、外部から渡されるパラメータをエスケープ処理すればよい。

HTTPヘッダは改行コード「%0D%0A」が使われる。(CR:行頭復帰/コード0x0D/正規表現\r、LF:改行/コード0x0A/正規表現\n)

改行コードに要注意! HTTP ヘッダインジェクションの概要と対策 | yamory Blog


(2)プレースホルダ

SQLインジェクションの対策として、まずプレースホルダを考える。
後から入力で受け取る部分を「?(=プレースホルダ)」で代用したSQL文をあらかじめ用意し、構文解析まで済ませてしまう。
すると「?」部分に不正なコードを埋め込まれても構文解析されないため、不正なコードが実行されない。


(3)a:改行コード

メールヘッダインジェクション:メールヘッダに改行コードなどを挿入することで、メールの送信先を意図せず改変される攻撃。

対策としては、Webフォームからの外部入力がメールヘッダに反映されないようにする。つまりメールヘッダを固定値にすればよい。
また、外部入力に含まれる改行コードを削除すればよい。

 
設問2
(1)クエリ文字列の id に,未参加のプロジェクトのプロジェクト ID を指定する。

ログイン時の処理でGETリクエストのクエリ文字列が指定され、表2の項番2が表示される。クエリ文字列をチェックしないまま利用する現状の仕様だと、連番で採番された他のプロジェクトIDを推測してクエリ文字列を改変すれば、未参加のプロジェクトでもリスト表示できる。

※どちらかというと情報表示機能の脆弱性の方が深刻な気がするが、ここでは情報選択機能が取り上げられている。情報表示機能は後から問題文で触れられる。


(2)・プロジェクトを示すパラメタを外部から指定できないから
   ・セッション情報からプロジェクト ID を取得するから

ブラウザ側で指定するクエリ文字列をもとにリスト表示する仕様が問題だった。セッション情報を利用してサーバ側でプロジェクトIDを生成してリスト表示することで、ブラウザ側から改変できなくなった。


(3)b:ウ PreparedStatement

一つ上でプレースホルダをはめ込んだSQL文がある。そのSQL文を構文解析するんだと繋げれば変数の名前からもわかる。


(4)c:stmt

プレースホルダを設定したPreparedStatementオブジェクトstmtに対して、パラメータに設定する実際の値をsetInitで代入する。

 
設問3
情報番号=? AND プロジェクトID=?

表示ボタンを押した後にどの情報を表示したいか。表示したいのは情報管理テーブルの情報。情報管理テーブルは主キーが情報番号、外部キーがプロジェクトIDだから、その二つをプレースホルダにおいたSQL文とすればよい。

 

午後Ⅰ 問2

設問1
(1)a:ア Aレコード、b:エ TTL

Aレコード:ホスト名とIPアドレスを関連付けるもの。
TTL:Time To Liveの略。キャッシュDNSサーバで保持される有効期限。


(2)外部から LAN 側への通信の許可設定が変更される。

ルータAのファイアウォール機能にインバウンド通信を全て拒否する設定がある。この設定を変更されるとWANからLANへ不正に侵入される。


(3)PC からのファイル操作ではアクセスできない領域のファイルが暗号化されたから

/rootディレクトリ配下のファイルが暗号化されているということは、そこにアクセスできるNAS-A自体がランサムウェアに感染したと考える。

 
設問2
(1)c:パストラバーサルディレクトリトラバーサル

意図しないディレクトリにアクセスされる→ディレクトリトラバーサル攻撃。
「..%2f」は「../」を表す。

対策としては、入力パラメータとして絶対パス「/」や相対パス「../」「..\」などを受け付けないようにエスケープ処理すればよい。


(2)d:OSコマンドインジェクション

任意のOSコマンドを実行される→OSコマンドインジェクション攻撃。

対策としては、外部から渡されるOSコマンドのパラメータをエスケープ処理すればよい。


(3)e:ア URLデコード →f:ウ パス名の正規化 →g:イ 除外リストとの比較

URLをデコードをしないとパス名の正規化や除外リストとの比較ができないので最初にやる。
次にパス名を正規化(相対パス記法を含まない形式に変換)しないと、除外リストとの比較を相対パス表記ですり抜けてしまうので、正規化、除外リストとの比較の順番になる。

 
設問3
(1)POST メソッドで送信したボディがアクセスログに残っていなかったから

アクセスログのリクエスト一覧を見ると、リクエストライン(メソッド/リクエスURI/HTTPバージョン)しか載っていないように見える。GETメソッドであればクエリ文字列+URLとしてログに含まれるが、POSTメソッドのメッセージボディのデータはログには含まれていない。

HTTPとPOSTとGET - Qiita


(2)sudo コマンドの設定ファイルで,tar コマンドのオプションを受け付けないように設定する。

sudoはスーパユーザの権限でコマンド実行するためのコマンド。

sudoコマンドの設定ファイルが図4のようになっている。
tarコマンドには任意のOSコマンドを実行できるオプションがある。ただし、このオプションは使用していない。と問題文に書かれている。

 
設問4
h:・noindex 
  ・none

noindex:検索エンジンから非表示にするためにHTMLのタグ内に記述する。

 

午後Ⅰ 問3

設問1
a:イ アカウント作成、b:ア Qサービスへのログイン

身元確認:”登録する氏名・住所・生年月日等が正しいことを証明/確認すること” → アカウント作成時の入力情報の身元確認
当人認証:”認証の3要素のいずれかの称号で、その人が作業していることを示すこと” → Qサービスのアカウントへログインする人の当人認証

 
設問2
(1)①漏えいしている口座番号と暗証番号を悪用する方法
   ②口座番号と暗証番号をだまして聞き出し,悪用する方法

前提としてQサービスのアカウント作成は身元確認がされないため、誰でも好きにアカウントを作れてなりすましも可能。
あとは氏名、口座番号および暗証番号がどうにか手に入れば、他人の銀行口座を勝手に紐づけできる。

回答としては、どうやって銀行口座の情報を入手するかを2パターン答える。


(2)c:写真

写真付き本人確認書類と容貌の画像を照合する。


(3)d:ウ 秘密鍵 、e:イ 公開鍵

ディジタル署名公開鍵暗号方式


(4)f:・署名用電子証明書の有効性
    ・署名用電子証明書の失効の有無

問題文にマイナンバーカードには、地方公共団体情報システム機構が発行した署名用電子証明書などが格納、と書かれていることからディジタル証明書を使用したディジタル署名の仕組みを使っていると繋げる。

ディジタル証明書の失効有無を検証し、その有効性を確認する必要がある。


(5)g:そのランダムな数字を紙に書き,その紙と一緒に容貌や本人確認書類を
撮影

過去の画像ではなく、リアルタイムに撮影された画像が欲しい。写真撮影されたタイムスタンプを検証するには、数字が書かれた紙と容貌や本人確認書類を一緒に写真に含めて撮影するしかなさそう。

 
設問3
(1)スマートフォンを盗まれた場合


(2)Q アプリの起動時に,PIN コードで利用者を認証する機能

端末を盗まれても、アプリが使われなければよい。ただし、問題文に利便性向上のためにログイン成功後は1か月間ログイン状態を保持すると書いてある。
そこで、アプリ起動時にPINコード(端末本体に関連付けられるパスワード)による利用者認証をかませることを考える。