はじめに
NTTドコモ マーケティング戦略部の木村祥也です。
新卒入社で、現在は主にアプリに組み込むdアカウントの認証周りの開発を担当しています。
担当業務である認証・認可の実装は、現代のWebサービスにおいて非常に重要かつセンシティブな領域の一つです。
お客様の大切な情報を守り、安心してサービスを利用していただくために、セキュリティに関するスキルが求められます。
そんな重要な役割を任された私ですが、実は配属当初はセキュリティに関する実践的な知識はほぼゼロでした。
しかし、ドコモグループには新人でも短期間でセキュリティの実践力を身につけられる環境があります。
今回は、私がエヌ・エフ・ラボラトリーズ(以下NF Labs.)のBootUP研修という2ヶ月間の集中プログラムを通じて、どのようにセキュリティエンジニアとしての基礎を築き、実務に役立つ技術を習得したかをご紹介します。
きっかけ:なぜセキュリティ研修を受けたのか
配属されたチームでは開発を担当することになり、「認証のような業務に携わるにはセキュリティの知識が必要だから、研修を受けてきてほしい」ということで研修に参加しました。
この研修はドコモグループのセキュリティCoE(Center of Excellence )という取り組みの一環で行われたものです。
これはNTTドコモビジネスが立ち上げたセキュリティ人材のエコシステム構築を目指す取り組みで、 NF Labs. と協力して運営されています。
現在はNTTドコモグループとしてグループ内で連携してセキュリティ人材の育成を推進しています。
※エヌ・エフ・ラボラトリーズ(NF Labs.) :セキュリティ人材の育成を通じたサイバーセキュリティ支援を専門に行う 、NTTドコモビジネス(旧:NTTコミュニケーションズ)の子会社。
研修前の私のスキルレベル
まず、研修前の私のIT関連スキルを正直にお話しします:
- Web系のHTML、CSS、JavaScriptは読めるし多少書ける
- 機械学習の研究でPythonは使っていた
- 基本的なPC操作とかターミナル操作は抵抗なく可能
- ITパスポートは取得済み
まあ、「プログラミングはできるけど、セキュリティは素人」という状態でした。
BootUP研修を受講して
2ヶ月間の研修プログラムは、基礎から実践まで体系的に構成されていました。ここからは研修の概要と、特によかったコンテンツ、さらにそこから得た学びを紹介します。
研修プログラムの概要
代表的なプログラムを紹介します。
ITシステムの基礎知識
ネットワークの基礎知識
ソフトウェア開発の基礎知識
脆弱性診断(プラットフォーム・Webアプリケーション)
Webアプリケーション開発演習
情報セキュリティインシデント対応
ハードニング演習
本研修の利点
以下のような充実した研修環境で、セキュリティエンジニアの技能の基礎を身に着けることができました。
実践的な研修プログラム:座学だけでなく、手を動かして学べる環境
専門家による指導:現場で活躍するセキュリティエンジニアからの直接指導
最新の演習環境:実際の攻撃・防御を安全に試せる環境
このように、必須となるITの基礎知識の習得から各レイヤーでの技術のハンズオン、演習を通した実践による定着、という流れで研修が進んでいきました。
2ヶ月で身につけた実践的な技術
研修で最も印象的だったのは、実際に手を動かして「技術」を学べたことです。
その中でも代表的な例を紹介します。
1. 脆弱性診断の実践スキル
診断技術の習得
プラットフォーム診断:OSやミドルウェアの脆弱性を実際に発見し、評価する方法
Webアプリケーション診断:OWASPに基づく診断手法の実践
診断ツールの活用:各種診断ツールの効果的な使用方法と結果の解析
特に印象的だったのは、単にツールの使い方を覚えるだけでなく、「なぜこの診断が必要か」「どのような脅威から守るのか」「情報セキュリティへの考え方」という理解を得られたことです。
実際の診断演習
演習環境で以下のような脆弱性を実際に発見・検証しました:
# SQLインジェクションの例(脆弱なコード)
def get_user(user_id):
query = f"SELECT * FROM users WHERE id = {user_id}"
# この実装では、user_id に悪意のある入力が来た場合SQLインジェクションが可能
このような脆弱性を実際に攻撃者の視点で検証し、その後防御側の視点で対策を実装する(ex:プレースホルダの利用)という攻撃と防御双方向のアプローチで理解を深めることができました。
この脆弱性診断の講義・演習を通して、「攻撃者はシステムのごくわずかな脆弱性をついて攻撃してくるので、攻撃を知らないと防御ができない。」という前提と、「では脆弱性を探すにはどうすればいいのか?」という方法を学びました。
2. セキュアコーディングの実践
Webアプリケーション開発演習での学び
研修中間の成果物として、セキュアなWebアプリケーションをフルスクラッチで開発しました。
開発演習では以下の流れで進めました:
要件定義:セキュリティ要件を含めた仕様策定(研修で学んだ脆弱性対策や工夫を行う)
設計:設計書作成(pptxで簡易に、DB図なども)
実装:Python/Flaskでの開発
テスト:セキュリティテストの実施
デプロイ:Linux環境での環境構築
私が開発したのは、資格試験学習支援アプリです。

↑こんな感じでアプリを作って、デモを交えて発表する機会もありました。
発表では、ほかの研修生のアプリや開発での工夫、講師の方の質疑応答を交えることで、自分のアプリに足りていなかったことや、もっと良くする工夫などを知ることができました。その中では似たようなコンセプトのアプリもあり、アプリ開発を行って市場にリリースし比較されるような感覚で、演習を通して開発から公開までの各工程をなぞることができました。
さて、この演習の肝は研修で学んだ内容を活かす、特に様々なセキュリティ要件を満たす必要があることです。 一例を紹介します。
実装したセキュリティ機能:
以下はあくまで例ですが、研修で学んだ脆弱性対策の知識を動員して開発を行いました。
# パスワードの安全な管理
from werkzeug.security import generate_password_hash, check_password_hash
import secrets
def create_user(username, password):
# Salt付きハッシュ化
salt = secrets.token_hex(32)
password_hash = generate_password_hash(password + salt + PEPPER)
# DBにはハッシュ値とsaltのみを保存
# XSS対策
from markupsafe import escape
@app.route('/api/chat')
def chat_response():
user_input = escape(request.args.get('message'))
# LLM APIからのレスポンスもサニタイズ
response = sanitize_llm_response(llm_api_call(user_input))
return jsonify({'response': response})
これらのセキュリティ要件の開発を通じて、知識として身についていたパスワード管理や、各Webアプリ脆弱性に対して実際にどのように実装して物として落とし込むか、をよく考えました。 実装にあたっては自分で考え、さらにインターネットでのベストプラクティスを参考にするなどの方法で行いました。 最後の成果物発表の場では、ほかの研修生の方が紹介されていた実装方法をソースを見て学ぶこともでき、自分では見落としていた箇所を拾えるなど、研修生どうしの相互作用もうまく効いていました。
また、この手の問題は脆弱性の対策、という話で情報安全確保支援士試験でもよく出てくるトピックですが、もし書籍で勉強するだけでは「○○という対策をすればいい」とは覚えられるものの、「○○の実装方法は...?コードは?」となっていたと思います。 その点、これらの要件を実際にコードに落とし込んでいくところまでを実践できたことは、言葉だけの知識のみならず技術を身に着けられる経験となりました。
3. インシデントレスポンスの実践
ハードニング演習での緊張感ある学び
研修の中で特に実践的だったのが、実際のサイバー攻撃を想定したハードニング演習でした。
演習の流れ:
攻撃検知:各種ログ(Apache、システムログ)から異常を発見
分析・特定:攻撃の種類と影響範囲を特定
封じ込め:一時的な対策で被害拡大を防止
恒久対策:根本的な脆弱性を修正
実際に経験した攻撃シナリオとして、
Webアプリケーションへの総当たり攻撃
既知の脆弱性を突いた不正アクセス
などがありました。
チームで役割分担しながら限られた時間内で対応する必要があり、実際のインシデント対応に近い緊張感を体験できました。
役割分担や報告・時間内での実際の対応など、座学ではあまり触れられない生のオペレーションをロールプレイという形で体感できたことは、セキュリティエンジニアの業務への理解度を向上させ、キャリアを考える上で役立つと考えています。
研修で得たもの
これら3つの例が示すように、研修ではセキュリティエンジニアとしての考え方、それに付随する生の知識・技能とその基礎(いわゆる業界での「共通言語」的なところ)を体系的に会得することができました。
これは本来実務やもっと長い時間をかけて身に着けるスキルを短時間かつ実践的に身に着けるもののはずで、それを身に着けられたということで充実した研修となりました。
実務での活用と成果
業務理解度の向上
現在の担当業務では、研修のように情報セキュリティ全体を扱うことはありません。
しかし、研修で学んだセキュリティに関わるエンジニアとしての共通言語は格段に役立っています。 例えば、やはり認証を扱う以上は暗号化やなりすまし対策は必須ですから、そのあたりの理解について研修で学んだSSLやCSRF対策の知識を活かせています。CVEなどの脆弱性情報がある、という前提知識を得たことで、まず今何がどれだけ危ないのか、どんか攻撃があるのか、という観点から普段からアンテナを立てることができ、特に認証に関わる攻撃や脆弱性の情報を積極的に確認するようになりました。
このように、共通言語を習得したことにより業務に関わる技術の見える範囲が広がり解像度が上がったことで、円滑に業務遂行できるようになりました。
情報処理安全確保支援士試験への挑戦
研修で得た実践的な知識は、資格試験対策でも大いに役立ちました。特に情報安全確保支援士の午後問題では:
「あ、これ研修でやった攻撃パターンだ!」
「この対策、実際に実装したことがある」
という場面が多く、単なる暗記ではなく実体験に基づいた回答ができました。
午前問題の午前Iは応用情報技術者試験と重複しどちらかというと広い範囲や最近の知識を問う形ですので、研修ではやっていない内容が出ることもありますが、それでも午前IIと午後の問題に対しては「実際にやったことあるな」で挑めるのは気の持ちようが違いますし、解きやすかったです。
ドコモグループの技術者育成
最後にドコモグループの育成環境にも触れさせてください。 私のような新人でも短期間で実践的なセキュリティ技術を身につけられたのは、セキュリティCoEなどのドコモグループの充実した人材育成環境があってこそだと思っています。 これは単に研修があるということではなく、技術者の成長を組織全体で支えていく文化があるということなのだと思います。
継続的な成長機会
BootUP研修の後にはさらに高度な内容を学べる「高度技術研修(ATT)」も用意されているほか、グループ内の各種キャリアアップ支援施策もあります。私自身、今後ぜひ活用したく、セキュリティエンジニアとしてさらなる成長を目指しています。
まとめ:技術者として成長できる環境
2ヶ月間の研修を通じて、私はセキュリティの基礎知識だけでなく、実践的な診断技術、セキュアコーディング、インシデント対応など、セキュリティエンジニアの必須技術の基礎を体系的に身につけることができました。
高度に情報化する現代において、情報セキュリティはますます重要になる分野です。私のように未経験からでも、適切な環境とサポートがあれば短期間で実践的な技術を身につけることができます。
まだまだ学ぶことは山積みですが、このような素敵な環境で成長を続けていきます!
さてNTTドコモ アドベントカレンダーはまだまだ続きます!
他の記事ではネットワークや機械学習・AI、社内の取り組み、R&Dなど、ドコモで取り組んでいる様々な技術分野の話が読めますので、ぜひお楽しみください!
おまけ
情報処理安全確保支援士試験の合格発表が12/25… 研修で身につけた実践力が試験でも発揮できている、はず。
それはともかくみなさま、よいクリスマスを!