ウェブ・セキュリティ基礎試験(徳丸基礎試験) 受けてみました

# ウェブ・セキュリティ基礎試験(徳丸基礎試験) 受けてみました

## はじめに

こんにちは！株式会社BTM 仙台ラボの関口と申します。
Webアプリケーション開発において、重要なセキュリティ知識の習得の導入として最適な「ウェブ・セキュリティ基礎試験(徳丸基礎試験)」について紹介させていただきたいと思います！

## ウェブ・セキュリティ基礎試験(徳丸基礎試験)とは？

ウェブ・セキュリティ基礎試験とは、PHP技術者認定機構が実施する試験で、Webアプリケーションのセキュリティに関する基礎知識を問うものです。ITセキュリティの第一人者である徳丸浩氏による著書「体系的に学ぶ 安全なWebアプリケーションの作り方 第2版」(以下、徳丸本)を主教材としており、開発者だけでなく、Webサイト運営者やユーザーにも役立つ内容となっています。

## 受験の動機
私はWebアプリケーション開発に携わっていますが、セキュリティに関する知識が体系的に整理できていなかったため、セキュリティの基礎固めとして徳丸本を学習することにしました。
しかし、本書はボリュームが多く、読み進めるにはモチベーションの維持が課題でした。そこで、学習の目標としてウェブ・セキュリティ基礎試験の受験を決めました。試験合格を目標にすることで、学習のモチベーションを維持し、計画的に進めることにしました。

## 試験の概要

| 項目 | 内容 |
|---|---|
| 試験時間 | 1時間 |
| 設問数 | 40問 |
| 出題形式 | 選択式 |
| 合格基準 | 70%正解 |
| 試験方式 | コンピューター上で実施するCBT（Computer Based Testing）方式 |
| 出題範囲 | 「体系的に学ぶ 安全なWebアプリケーションの作り方 第2版」の内容に基づく |
| 受験料 | 一般価格：11,000円（税込） / 学割価格： 5,500円（税込） |

## 試験範囲
試験は徳丸本から出題されますが、範囲は以下の通りです。

| 章 | 出題数 | 概要 |
|---|---|---|
| 1章 Webアプリケーションの脆弱性とは | 1 | 脆弱性の定義、重要性、発生理由など、Webセキュリティの基礎を解説 |
| 2章 実習環境のセットアップ | 0 | 【試験範囲外】実習環境の概要、各種ツールのインストールと設定について解説 |
| 3章 Webセキュリティの基礎 ～ HTTP、セッション管理、同一オリジンポリシー | 3 | HTTP、セッション管理、同一オリジンポリシーなど、Webセキュリティの基本的な概念を解説 |
| 4章 Webアプリケーションの機能別に見るセキュリティバグ | 27 | 入力処理、表示処理、SQL呼び出しなど、Webアプリケーションの機能別に脆弱性の種類、発生原因、対策を解説 |
| 5章 代表的なセキュリティ機能 | 6 | 認証、認可、ログ出力など、Webアプリケーションのセキュリティ対策に欠かせない機能を解説 |
| 6章 文字コードとセキュリティ | 0 | 【試験範囲外】文字コードとセキュリティの概要、文字集合、文字エンコーディングなどを解説 |
| 7章 脆弱性診断入門 | 0 | 【試験範囲外】脆弱性診断の概要、各種診断ツールの使い方、診断実施上の注意などを解説 |
| 8章 Webサイトの安全性を高めるために | 2 | Webサーバーへの攻撃、なりすまし対策、盗聴・改ざん対策、マルウェア対策など、Webサイト全体のセキュリティ対策を解説 |
| 9章 安全なWebアプリケーションのための開発マネジメント | 1 | 開発マネジメントにおけるセキュリティ施策の全体像、開発体制、開発プロセスなどを解説 |

## 試験対策
本書はボリュームが多いため、以下のポイントを意識しながら進めました。

### 3章 Webセキュリティの基礎をしっかり理解する
第3章はHTTP、セッション管理、CORS、クッキー等のWebの基礎に関する部分ですが、Webアプリケーション開発では重要な知識ですし、以降の脆弱性もこれらの知識の延長線上にあるので、何度も読み直して理解を深めておきました。
特にCORSは、Webアプリを開発していてちらほら出くわすので、改めてしっかりCORSについて確認しました。

### PHP等の実装例はさらっと確認する程度に留める
本試験では**PHP等の特定のプログラミング言語に依存する出題はされない**と明言されているので、PHP等の具体的な実装例は戦略的に深入りしないようにしました。
とはいうものの、実装を見た方が攻撃手法を理解しやすかったので、**どのように脆弱性が突かれるか**がイメージできる程度に確認しておきました。

### 脆弱性の概要・攻撃手法・原因・対策を重点的に抑える
メインの脆弱性については、**どのように悪用されるのか**（攻撃手法）、**なぜ脆弱性になるのか**（原因）、**どうすれば防ぐことができるのか**（対策）という観点で理解するようにしました。

対策終盤では、徳丸本の目次の内容から脆弱性の原因や対策を自分の言葉で説明できるか確認し、知識が曖昧な部分を再度学習して知識の穴を埋めるようにしました。

:::note info
徳丸本の目次は、最後の知識の確認をするのにとても便利でした！
:::

## 試験結果
上記の試験対策で毎日1時間程度、約1カ月かけて学習を行いました。
結果として850点（1000点満点）で合格することができました。
![IMG_0760.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824453/addd49ba-3da1-4aa6-be16-5c240ef3f188.jpeg)

試験時間は一時間で、一通り回答した後、保留にした問題をじっくり見直すると丁度制限時間いっぱいで終了といった具合でした。

:::note info
本試験では、後で見直ししたい問題にフラグを立てることが可能です。
:::

## 試験を受けた感想

対策方針のおかげで、効率よく学習することが出来たと思います。
上記の対策方針で、脆弱性が悪用される過程をイメージ出来て、自分自身に原因や対策を説明することが出来れば十分合格圏内に入れると感じました。

この試験を学習に活用したことは、以下の点で非常に有効でした。
- 学習する観点にメリハリをつけることが出来た
- 〆切効果で集中して学習出来た
- 過去問がないため、丸暗記ではなく、本質的な理解をする学習が出来た

過去問がない点については、本質的な理解をしないと試験で正答できないため、学習効果が高まってとても良かったです。

この学習を通して、セキュリティ以前のWebの基礎も再確認できましたし、どのようなところに脆弱性が生じるか見当をつけ、調べながら基本的な対策をすることが出来るようになったと思います。

一方で、今回の学習では、具体的な実装例や攻撃手法、脆弱性診断については、深堀できなかったので、まだまだ理解が足りていないと感じています。
ウェブ・セキュリティ**実務知識**試験もあるようなので、次はこちらの試験の合格を目標にしつつ、さらに理解を深めていきたいです。

## まとめ
ウェブ・セキュリティ基礎試験は、Webアプリケーション開発に携わる方にとって、セキュリティ知識を習得するための非常に有効で、ウェブ・セキュリティ入門者や徳丸本を買ったはいいものの積んだままになっているという方にとてもおすすめの試験です！
Webアプリケーション開発で欠かすことのできないセキュリティ知識、この試験を活用してみませんか？

:::note info
株式会社BTMではエンジニアの採用をしております。
ご興味がある方は是非[こちら](https://www.b-tm.co.jp/recruit/mid-career.html)をご覧ください。
:::

## 参考
[ウェブ・セキュリティ基礎試験(徳丸基礎試験）](https://www.phpexam.jp/tokumarubasic)