見出し画像

【登録セキスペ】令和6年春午後問1の解説(情報安全確保支援士)

このNoteでは「セキスペR6春午後問1」の解説をします。

最新問題なので、試験1ヶ月前後からの演習をお薦めします。それまでは旧セキスペの午後1問題を解き倒してください。

>SCR05春PMI問2解説Note
>SCR05春PMI問3解説Note
>SCR04秋PMI問2解説Note
>SCR04秋PMI問3解説Note
>SCR04春PMI問2解説Note
>SCR04春PMI問3解説Note


私はPGは選ばないと心に決めているので問4は×、ネットワークは得点源なので問2は○、残りはこの問1か問3。正直迷います。

私の場合、この問1を選ぶかは、最初の用語・次の計算を呑めるかどうかでした。両方確実に失点するなら選ばないです。

問1を解いてみると、中盤のJWT周辺で浮足立ちますが、ノーヒント問題はないので、問題文を紐解けばどうにかなりそうです。

図6の攻撃の全容を把握できるかが鍵でした。図を描いた方が良いですね。

終盤はテスト環境の王道の解答でした(何となくですが、最近は中盤が山場な問題構成が多い気がします)。

総じて5割は切らないかなという印象。初見で良くて7割だと思います。後は問2のネットワークで稼いでもらう寸法。


このNoteは、私が独学97点合格した経験と、IT専門学校での授業のノウハウで書いています。合格のお手伝いに少しでもなったら嬉しいです。

それでは始めましょう!



設問1a | 知らない用語は確実失点


正答は、「ステートレス」。

用語です。耐タンパ性と同じで覚えておくしかないです。

知らないと、問題を選ぶ時に「確実に失点」が見えちゃうので、この問を選ぶかかなり迷いますね。




設問2(1)b | 計算は確実に得点したい


正答は、「500」秒。


計算問題は、数値のヒントを搔き集めます。問題文を読むときに数値を丸で囲むと良いですよ。

  • 表3-4。文字列Xに1秒間に10回試行する総当たり攻撃

  • 表2:文字列Xは数字4桁の文字列

よって、文字列の全パターンは10×10×10×10 = 10000。1秒間に10回なので、10000/10=1000秒で、全パターン試せる。

ここで表3の空欄b周辺。「平均的な認証成功までの時間」。

数字4桁に総当たり攻撃をした時、運よく最初に当たることもあれば、運悪く最後に当たることもあります。よって平均時間は1/2。記憶ディスクの平均回転時間と同じ考え方です。

よって、1000 / 2 = 500秒。

なお設問文の「小数点以下を四捨五入して」を使わなかったので不安に思います。しかし、使わないこともあるんです。例えばAPで出題実績アリ。>APR06春問5ネットワーク




設問2(2) | 問題文から仕様を読み取る


模範解答は、

  • JWTヘッダ内のalgに指定された値

  • NONEでないことを検証する


表5-1の下線①で、ライブラリQを修正するので、ライブラリQの問題点はと、遡ります。

6頁最後。表4のJWTにて「algの値がRS256でなくNONEしたら、改ざんしたJWTの検証に成功した」のが問題です。

ではalgとは何だったのか。答えは検証の「アルゴ」リズム。


ヒントは更に遡っても見つかります。

図4に「ライブラリQは、JWT内のヘッダに指定されたアルゴリズムに基づいてJWTを検証する」。

よって、alg値はアルゴリズムを指定していると分かります。それをNONEにしたらアルゴリズムの検証をせず通ってしまうのが問題でした。

したがって改善は、alg値がNONEだったら弾くなどが考えられます。


では設問に合わせて解答を作って模範解答の通り。

  • JWTヘッダ内のalgに指定された値

  • NONEでないことを検証する

「どのようなデータに対してどのような検証を行うか」が少し分かりにくかったですね。とはいえ「データの値が何なのかを確認するか」だと簡単すぎたのでしょう。




設問2(3) | 仕様からセキュリティの穴を見つける


模範解答は「JWTに含まれる利用者IDがmidの値と一致するかどうかを検証する処理」。


表5下線②が「P呼出し処理」に関するので、遡ってヒントを見つけます。

まず問題な現象は、表3-2。midに他の利用者IDを指定しても処理が進んでしまうのが問題です。

P呼出し処理は表2。

  • 共通モジュールPを呼び出す処理。

    • GETメソッド:midで指定した利用者IDの情報を得る

    • PUTメソッド:midで指定した利用者IDの情報を更新する

APIでmidを指定するだけで、自分以外の利用者の情報をいじれるのが分かります。

よってAPI呼び出した利用者が自分の情報(mid)へアクセスしているのかを確認する処理が必要です。


この段階で、「P呼出し処理するAPIを呼出した利用者が、midで指定した利用者と同一か確認する」40文字。私の解答です。JWTが絡んでないからキビシイかな。部分点をお祈りです。

模範解答ではAPIを呼び出した利用者IDが載っている箇所まで書いています。表2で認証APIで認証成功すればJWTが発行され、表4の通りJWTペイロードのuser値が利用者IDです。

なお、userを改ざんできるリスクは、表5-1(表3-1)の不具合で、ライブラリQの修正で対策済み(設問2(1))。




設問2(4)c | 問題文から忠実に


正答は、「共通モジュールP」。


無課金ユーザなのに課金ユーザとしてアクセスできてしまうってことですね。

表3で利用者APIが対象になっているので、表2の利用者APIを見ます。

表2の利用者APIが使っているのは、共通モジュールP。共通モジュールPはサービスMを呼び出しています。

よって空欄cは「共通モジュールP」。




設問2(5)d | 総当たり攻撃対策の王道


模範解答は、「連続失敗回数がしきい値を超えたらアカウントをロックする処理」。


表5で「しきい値を10とする」の「10」。今までみた「10」は表3の文字列Xへの試行回数「1秒間に10回」、と気づいても良いです。


丁寧に遡ると、

  • 空欄dは表5-4。脆弱性は表3-4。

  • 表3-4は、2要素認証で文字列Xへの総当たり攻撃(1秒間に10回)

総当たり攻撃への対策は、IPアドレスが特定できるなら遮断、ですが、IPアドレスを変えられたり、そもそも他の攻撃者に対しては無力。攻撃だ!と判定した後の対策です。

ログイン試行の対策で代表的なのは「ロックアウト」。一定回数失敗すればアカウントを凍結する処理。

よって模範解答のように、「連続失敗回数がしきい値を超えたらアカウントをロックする処理」。

結構余裕があるかもです。「認証失敗回数が一定数を超えたらアカウントを一時的に凍結する」。「連続」も「しきい値」もあった方が良いですが、ないから×とは採点されないかなぁと思います。




設問3(1) | 攻撃手口の全容把握は必須


模範解答は「テストサーバのindex.htmlへのアクセスを記録し、確認する仕組み」。


図7下線③は「図8のコマンドが実行されたことを確認」を、テストサーバでどうするかを考えます。

図6の攻撃手順を紐解きましょう。

※分かりやすくするために、LDAPサーバをDBサーバ、HTTPサーバをWebサーバ、攻撃対象Webサーバを対象サーバと書きます。

  • (1)攻DBサーバと攻Webサーバを準備する

  • (2)攻撃者は、LDAPを含んだJNDI攻撃コードを作成する

  • (3)JNDI攻撃コードを、HTTPヘッダに入れて、対象サーバへ送信する

  • (4)対象サーバはJNDIを実行し、LDAPリクエストを攻DBサーバへ送信する

  • (5)攻DBサーバは、

    • LDAPリクエストからコマンドを取り出しJavaファイルを生成。

    • 攻撃Webサーバに配置。

    • 攻撃WebサーバはURL-Jを発行

    • URL-Jを攻撃DBサーバに教える

  • (6)攻DBサーバはURL-Jを、対象サーバに返答

  • (7)対サーバは、LDAP返答のURL-Jにアクセスし、Javaをダウンロードしてコマンド実行

攻撃が成功したのは当然ですが(7)。

テストサーバのうち攻WebサーバのURL-Jにアクセスされたのが分かれば、きっと攻撃対象サーバでコマンドが実行されたと分かります。

私の解答は「攻撃用HTTPサーバのURL-Jにアクセスがあったのを確認する」31文字。たぶんダメ。理由は図8で指定したコマンドに具体的に答えていないから。


設問で問われているのは「図8で指定したコマンド」なので、図8を見ると、URL-Jは「http://a2.b2.c2.d2/index.html」。これだけで29文字。文字制限は35文字なのでキビシイ。

よって「index.html」と省略して模範解答「テストサーバのindex.htmlへのアクセスを記録し、確認する仕組み」。




設問3(2)ef | 問題文を根拠に判断する


正答は、どちらも「Header」。


WAFによってWebサーバへの攻撃コード入力を遮断しようって話です。図8のようにjndiとldapが含まれたコマンドです。

図6-(3)の攻撃手口より「攻撃コードをHTTPリクエストのa-api-versionヘッダの値として指定」。つまりHearderです。




設問3(3) | 正規表現「的」なのにも慣れておく


模範解答は2つ提示されています。

  • \W[jJ][nN][dD][iI]\W

  • \W(i|J)(n|N)(d|D)(i|I)\W

私は下の方でした。


他にも小文字と大文字を逆にしても、構いません。[Jj]など。

また、小文字大文字・大文字小文字の順番が混在しても構いません。[jJ][Nn]など。




設問3(4) | 常識の範疇「最初は様子見」


模範解答は、

  • 利点:誤検知による遮断を防ぐことができる

  • 内容:アラートを受信したら攻撃かどうか精査する

特段、問題文からヒントを見つけなくて良いです。


下線⑤で「本番運用開始後の一定期間」だけ様子を見たいんですよね。WAFの設定でシステムの稼働に問題が出ないかを。

ただ「検知」なので通信が通ります。本当の攻撃だったら遮断対応したいです。攻撃じゃなかったら通信は通したままにして、WAFルールの改善のために記録を取りたいです。

私の解答は、

  • 「現ルールで正常な通信を遮断することがあるか確認できる」25文字

  • 「検知したら攻撃なのかをすぐに判定確認する」19文字




まとめ


お疲れ様でした!


まずは、確実に得点すべき問題を正解し、得点/失点のキワドイ問題をギリギリ正答していくことを目指しましょう。

初見で解けなくても、模範解答から「問題文のどこをみて、どう考えるべきか」を必ず復習してください。なかなか効果が出づらかったり、目に見えなかったりですが、知らず知らずのうちに必ず身についていきます。

逆に、いつまでも「正解した/しなかった」「6割超えた/超えなかった」なんて、点数と運ばかり見ては、過去問演習の真の意味を享受できません。

「深い復習」で「初見正解力」を高めていきましょう。


ぜひ「情報セキュリティスペシャリスト」に合格してくださいね。

\私の3ヶ月の学習履歴/

p.s. 普段は >> 専門学校とIT就職のブログ << をやってます。
でわでわ(・ω・▼)ノシ


この記事が参加している募集

学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ