今年はIPA試験に挑戦した1年だったので、試験勉強のことも書きつつ、勉強が実務にどう活きたか、に軸をおいて書いていこうと思います。
最初に試験結果を示しておくと、NWは不合格、SCは結果発表待ちの状態です。
合格の勉強方法などを示す記事ではないため、了承の上、お読みいただけるとありがたいです🙇♂️
受験動機 📃
私は社会人5年目のSEで、その当時IPAの試験には基本情報(FE)と応用情報(AP)に合格していました。
APを取ってからは期限付きでその次の高度試験の午前I試験の免除もあるので、途切れず資格を取らないとなーと漠然と焦っていました。
自分の実力だと高度試験受けるのは無謀かなと思いつつ、スキルアップのモチベーションも高い方ではなかったので、自分を強制的に勉強に投じさせるためにも受験するに至りました。
私のやってきた業務はWebエンジニアなので、通常であれば次受ける高度試験は、データベーススペシャリスト(DB)やシステムアーキテクト(SA)なんかが候補なんじゃないかなと思います。
ただ、業務外で業務に関係する勉強をすることを考えた時に、継続できなそうだなと思いました。
それなら全然知らない分野を勉強した方が気分転換にもなるなと考え、出題範囲に重複する分野が多い、ネットワークスペシャリスト(NW)と情報処理安全確保支援士(SC)をそれぞれ春期と秋期に挑戦してみることにしました。
勉強スケジュール 🗓️
ざっくり以下のようなスケジュールで取り組みました。
- 🌸 春期(ネットワークスペシャリスト)
- 1月 午前II対策(一問一答で基礎勉強)
- 2月 午前II対策(一問一答で基礎勉強)
- 3月 午後I対策
- 4月 午後II対策
- 4/20 試験本番
- 🍁 秋期(情報処理安全確保支援士)
- 8月 午前II対策(一問一答で基礎勉強)
- 9月 午後対策
- 10月 午後対策
- 10/15 試験本番
勉強量はどちらも、平日2~3時間、休日6時間ほど費やし、長時間勉強するよりも、毎日ネットワークやセキュリティ周りの知識に触れて継続していくことに重きを置きました。
私は文章を読むのにかなり体力と時間を使ってしまうため、午後試験の対策は休日で時間があっても6時間勉強するのが限度でした😞
高度試験は勉強をするのにも頭の糖分と体力を使うため、可処分時間があっても身体的な限界がすぐきてしまうなという印象だったので、自分と同じような方は、より長く試験勉強の期間を設け、早めに午後試験の対策に取り組むことをお勧めします!
勉強を実務へ ✏️→🧑💻
IPA試験は実務に活かすことができないってイメージがあったのですが、高度試験を受けてイメージが変わりました。
活かすことができないのは、FEやAPでは浅く広く学んでしまっているから、専門性の高い知識が身につきづらいからだなと感じました。
(例えば、プログラムを書くことが仕事だとネットワークなどの部分は詳しくなくてもライブラリが足りない知識を勝手に補ってくれるので、役立てるところがないみたいなことかなと🧐)
NW・SCの試験は各分野に特化した知識を要求されるので、その分野を一問一答や参考書で体系的に学ぶことができる試験勉強をできた点が、一番やってよかったなと思いました。
ネットワークやセキュリティの知識を体系的に学ぶ技術書などは世の中にあり、そちらの方がコスト・タイムパフォーマンスに優れているとは思います。
しかし、私のように特別技術習得のモチベーションが高いわけではないが、スキルアップをしないといけない焦りを抱えている人にとっては、決められた日に避けられない試験が待っているというプレッシャーと強制力を受験料で買うというやり方で習得もいいのではないかなと思います。
具体的に実務で活きた例を少しだけ話していこうと思います。
よく見るこの図を理解する・・・
まず恥ずかしながら勉強のスタートはこの図を理解することでした。
| OSI参照モデル |
|---|
| アプリケーション層 |
| プレゼンテーション層 |
| セッション層 |
| トランスポート層 |
| ネットワーク層 |
| データリンク層 |
| 物理層 |
FE試験から頻出のOSI参照モデルです。
頭文字を取って、「アプセトネデブ」と覚えていましたが、勉強前の自分にとってそれ以上でもそれ以下でもない概念でした。
なので、こんな間違いをしていました。
「全部の通信はどこかしらのポートを開けて通信している」→ ![]()
開発の時にサーバーへ通信が届かなかったりして、ポートが空いている空いてないみたいな文脈で出てくることはあったものの、これがTCPやUDP(トランスポート層)の中での話なことに気づきませんでした![]()
開発の文脈でpingが通るかとかを確認するためのコマンドを実行したりしますが、これもポートが空いているかの確認に使えると勘違いしていました。
pingコマンドはICMPを使ったネットワーク層の通信のため、引数にはURLスキーム(https://など)を指定せずにドメインを指定する。
逆に、curlコマンドはアプリケーション層のプロトコルの通信のため、引数にはURLを渡すことに気づき、やっとOSI参照モデルの扱い方が体に馴染んできたのを実感しました。
FWでつけてる csrf_token って?
私はWebフレームワークのLaravelが手に馴染んでいるのですが、フォームに@csrfなどでトークンを埋め込むことがよくあります。
これに対しての理解は、CSRF対策で入れている、サイバー攻撃に対策できる魔法の文字列だと思ってました。(勉強した後だと、その仕組みについて無知だったことを恐ろしくなりますが
)
CSRF(クロスサイトリクエストフォージェリ)は、悪意のあるサイトを介することで、偽造のリクエストをWebサーバーに処理させてしまう攻撃のことです。
AサイトにログインしたユーザーのがCSRFトークンが仕込まれていない偽サイト(A'サイト)にアクセスしてしまうと、偽サイトから意図しない内容のリクエストをAサイトのサーバーに送ってしまいます。ここで、CSRFトークンの正当性チェックが入っていることにより、偽サイトからの不正なリクエストを弾くことができていることを知りました。
不正なリクエストとは、ECサイトであれば意図しないものの購入や、金融機関のサイトであれば意図しない額の送金などがあり、実害が大きい攻撃であることもこの勉強で知りました。
根本対策としては他にもありますが、IPAが公開している保険的対策に行った操作のメールを送信するというものがあり、送金や入金などで送られてくるメールにはそういった対策の意味があるのだと実生活に反映して理解することができました。
まとめ
試験勉強が実務に役立ったことは、他にもネットワークの穴あけ作業への理解ができるようになったことやセキュリティに対して意識が高まったことなど多々あります。
AP取り立ての方はそのまま高度試験を試しにでもいいと思うので受けてみることをおすすめします!
来年からIPAの試験が大きく変わるので、どうなるか分かりませんが、せっかく勉強したので来年こそNW取るぞ🔥
長々と退屈な文章を読んでいただきありがとうございました![]()
・・・
FWは「フレームワーク」ではなく、しっかり「ファイアウォール」と呼ぶようになりました![]()