title.png

^<< 2019.05/1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >>$

Trackback の仕組みはありませんので、コメントにでも残していただくと嬉しいかも、です。

SecurityStudy1

はじめに

エンジニアマインド Vol.7


本ページは、技術評論社の雑誌「エンジニアマインド」の Vol.7 に掲載された記事 『社内留学という選択肢【前編】』の記事を、 編集部の承諾のもと、公開するものです。まずは快諾をいただいた、編集部に感謝致します。 掲載前に査読していただいた同僚の皆さんにも感謝致します。

Vol.8 に掲載された前編は以下のページからご覧いただけます。

誌面に掲載された状態ではなく、最終的な編集が入る前の原稿の状態で公開致します。 図なども、筆者が提出したラフスケッチの状態です。

雑誌に掲載された記事であり、Web上の文章としては不自然な箇所があるかもしれませんが、ご了承下さい。 また2007年11月に刊行された雑誌であることをご考慮の上、読んでいただければと思います。

お読みになった感想などをいただけると、幸いです。

それでは、記事をどうぞ。

社内留学という選択肢【前編】

はじめに

ソフトウェアエンジニアにとって、ベクトルはどうあれ学び続けることは欠かせないアクティビティです。 筆者の知っている「できるエンジニア」は皆、学ぶということに関して意欲的な人ばかりです。 そして、それらの人達は「学ばなければいけないことを知る(自分は何を知らないかを知る)」というメタ認識をしっかり持っている点も共通しています。

ここで筆者はさらに気づいたことがあります。 彼ら彼女らは「どうやって学ぶかを学ぶ」というメタ学習に関しても、日頃から興味をもっているということです。

何かを学ぶ為に思いつく方法として、以下のようなものがあります。

  • 書籍や論文を読む
  • Webサイトを調べる
  • 実際にプログラムを作る
  • 読書会や勉強会に参加する
  • 転職や部署移動などで環境を変える

「学び方を学ぶ」について例えば勉強会に関してですと、角谷信太郎さんによる「勉強会のススメ」という素晴らしい記事が大いに参考になります *1

最後に挙げた「環境を変える」の一つの形態とも言えますが、本稿では筆者が現在体験中の「社内留学」についてレポートすることで、 読者の皆さんのメタ学習の一助となることを目指します。 なお、留学という語を使いましたが、「社内留学」として別のプロジェクトに一時的に移籍しただけですので、 実は物理的な場所ですと、同じビルの4階から6階に移ったに過ぎません。

また、筆者は、エンジニアにとって学習し続けることは権利であり、組織にとってその環境を担保することは義務であると考えています。 本レポートによって、その一つの形態を紹介し、あるいは試行錯誤の姿(そう、この制度も常に発展途上なのです)をお見せすることで、 組織と教育、個人と学び、という観点からも皆さんに何かを感じ取っていただければ幸いです。

社内留学制度の背景

筆者の勤めるソニーデジタルネットワークアプリケーションズ株式会社(以下、SDNA)は名前から分かる通り、家電メーカー系のソフトハウスです。 扱うソフトウェアの種類としては、PCアプリケーションおよび家電機器の組み込みファームウェアがメインとなります。

また、対象ドメインとしては、メディア技術/ネットワーク技術/デバイス制御技術/UI設計技術など、非常に多岐に渡ります。 さまざまな技術分野を専門とするエンジニアが集まって、一つのプロダクトが出来ていくことになります。

このような中、すべてのエンジニアが身につけているべき分野横断型の知識として、情報セキュリティに関する知識があります。 本稿の趣旨とは外れますので詳細な解説は避けますが、セキュアな設計・実装ができるエンジニアの重要性が増していることは、読者の皆さんも感じておられることでしょう。

情報セキュリティのスキルをもったエンジニアを増やす方法として、 もちろんそれを専門とする人を積極的に採用するという手もありますが、 SDNAでは「社内留学による啓蒙」というアプローチを試みることにしたわけです。

さて、元々SDNAには、セキュリティ技術を専門とするメンバー数名からなるSSAG(Software Security Assurance Group)というプロジェクトがありました。 このプロジェクトの第一義の役割は、他の製品開発プロジェクトに対して、 仕様/設計/実装コードの各側面からセキュリティの観点でアドバイスをすることです。 しかし、増え続ける製品プロジェクトに対して、SSAGのメンバーだけではいつか対応しきれなくなることが予想されました。 ここで先程述べたような事情から、SSAGのリーダーは製品プロジェクトからの「セキュリティ留学生」を受け入れることを2年ほど前に決意しました。

こうして(いくつかの社内手続きの末)生まれたのが、SDNAの社内留学制度、すなわち「SSAG留学制度」(通称「セキュリティ留学」)です。

留学制度のあらまし

2007年度は4〜7月/8〜11月/12月〜3月と4ヶ月間を1クールとして計3回の留学期間を設けています。 1年すべてのクールについて、前年度の終わりごろに社内全体に対して留学生公募が行われました。

上に書いた通り、本制度が始まって今年度がまだ2年目であり、まだ試行錯誤中というのが正直なところですが、 以後は筆者が留学中の2007年度第2期の事情を中心に紹介致します。 第1期では使用するテキストやカリキュラムの内容が少々違いましたが、大筋は同じです。

まずSSAGのメンバー構成についてですが、 情報セキュリティを専門とするコア・メンバーがプロジェクトリーダーを含め4名、 第2期では留学生が5名となっています(ちなみに第1期は留学生が2名でした)。 これにセキュリティ・コンサルタントサービス会社である株式会社LACよりアドバイザとしてフルタイムで1名招聘し、席を並べてもらっています。 コア・メンバーだけではカバーできない多角的な視点からコメントをしてもらい"LAC先生"として親しまれています。(図1)

fig1.jpg

【図1】 SSAGのメンバー構成

4ヶ月が1期と書きましたが、いろいろなプロジェクトから留学してくる関係上、 どうしても留学前のプロジェクトの都合によって、スケジュールがあわないこともあります。 このあたりは、受け入れる側のSSAGメンバー、留学生本人、留学生の上長などで相談して、期間をずらしたり、カリキュラムを調整して フレキシブルに対応しているのが現状です。 筆者自身も留学開始を約2週間遅らせ、8月13日からスタートしました。

なお、SDNAはマトリクス型の組織構造/プロジェクト運営をベースとしており、 留学にあたってはここもポイントとなるのですが、それについては次号掲載の後編で紹介できればと考えています。

また、留学後についてですが、当然活躍の場を実際の製品開発プロジェクトに戻すことになります。 その際、当該プロジェクトのセキュリティ担当者として仕様や実装コードのレビューアになることが期待されます。 逆に言うと、SSAGコア・メンバーでなくともその職責を担うことのできる人材を育てることが、組織から見た留学制度の眼目であると言えます。

留学生自身から見た場合、動画技術/デバイス制御技術etc.. といったエンジニアとしてのコア・スキルに、 セキュリティの知識という厚みをつけることが眼目であるのは言うまでもありません。

留学前半のカリキュラム

留学期間が4ヶ月であり、本誌は隔月刊ということもあるので、まずは前半2ヶ月のカリキュラムを本稿で紹介します。 後半2ヶ月のカリキュラムについては、後編をお待ち下さい。

カリキュラムはSSAGのコア・メンバーによって検討・編成され、 前半2ヶ月の主なコンセプトは後半2ヶ月の実践的な内容に向けたベース知識の習得にあります。

前半にやる内容は大きく分けて次の2つです。

  • 情報セキュリティ勉強会
  • 書籍トレーニング
>情報セキュリティ勉強会

毎週2回、水/金曜日に3時間の勉強会が開催され、それに参加します。 本勉強会はSSAGメンバーだけでなく、社員全員にアナウンスされ、聴講自由となっています。 余談ですが、水曜日にも開催されるのに、歴史的経緯から社内では「セキュリティフライデー」と呼ばれています:-)

1回の開催で2つのテーマを扱うのが標準で、つまり留学生は、1回1時間半の輪講発表を概ね週1回担当することになります。 表1に第2期のテーマとテキスト、およびスケジュールを挙げてみました。

日付 内容 テキストと章
8/8 ISM 「情報セキュリティ プロフェッショナル総合教科書」*2
8/10 暗号・認証(総論、歴史) 「暗号技術入門-秘密の国のアリス」*31章・2章
8/15 暗号・認証(対称暗号、ブロック暗号のモード) 「暗号技術入門-秘密の国のアリス」3章・4章
8/17 暗号・認証(公開鍵暗号、ハイブリッド認証システム) 「暗号技術入門-秘密の国のアリス」5章・6章
8/22 暗号・認証(一方向ハッシュ関数、MAC) 「暗号技術入門-秘密の国のアリス」7章・8章
8/29 暗号・認証(デジタル署名、証明書) 「暗号技術入門-秘密の国のアリス」9章・10章
8/31 暗号・認証(鍵、乱数) 「暗号技術入門-秘密の国のアリス」11章・12章
9/7 実習  
9/12 ネットワーク技術(SSL/TLS、L2/L3) 「暗号技術入門-秘密の国のアリス」14章 他
9/21 ネットワーク技術(無線LAN) 任意
9/26 プロセス 「脅威モデル」*41〜4章
9/28 プロセス 「脅威モデル」5〜8章
10/3 実習  
10/5 暗号・認証(PGP)ネットワーク技術(L4) 「暗号技術入門-秘密の国のアリス」13章 他

【表1】 情報セキュリティ勉強会のスケジュール等

本勉強会ではセキュリティ学習の前提知識として、道具としての暗号技術そのもの/事例として頻出するネットワーク技術そのものを扱うのと、 プロジェクトのセキュリティマターをどうやって評価・マネジメントしていくのかというフレームワークを身につけます。

また「実習」ではMD5ハッシュ値のコリジョンを実際のアプリケーションレベルで起こさせる仕組みを考察したり、 RC4アルゴリズムの間違った使い方について実際に実装して検証したりしました。

勉強会の場では単に担当者による発表が行われるだけでなく、 参加者全員で活発なディスカッションが行われます。

>書籍トレーニング

こちらは、実際の脆弱性について項目毎に調査・学習し、対策案を含めた考察を行います。 さらに、その内容に対してSSAGコア・メンバーとLAC先生によるレビューが行われ、 「経験者コメント」という形でアドバイスをしてもらい、理解を深めます。 また、これらすべての過程が、社内のエンジニアに公開されているWiki上でオープンに行われますので、 実際には全てのエンジニアが閲覧/コメント可能になっています。

表2に第2期の項目一覧を、図2に1項目のWikiページのテンプレートを示します。

1 SQLインジェクションの問題
2 コマンドインジェクションの問題
3 ディレクトリトラバーサルの問題
4 ファイルへの不適切なアクセス制御によって引き起こされる問題
5 プログラムの不適切な実行権限の問題
6 SSL/TSL接続に関係した問題
7 パスワード管理に関連する問題
8 URL、クエリストリングからの情報漏洩問題
9 HTTPサーバ上での不適切なファイル配置による情報漏えいの問題
10 HTTP Rquest Smuggling(HTR)の問題 
11 スタックメモリ上でのバッファオーバーフローの問題
12 文字列操作の問題
13 整数演算の基本
14 整数演算に起因する問題
15 ポインタ偽装の問題
16 動的メモリ操作でありがちな問題
17 ファイルアクセス:windowsのファイル名、パス名解釈の自由度に起因した脆弱な実装の問題
18 エラーハンドリングの問題(情報漏えい、アプリケーションの異常動作)
19 テンポラリファイルに起因する問題(情報漏えい、別ファイルの上書き攻撃)
20 DBのアクセス権限に関係した問
21 Cookieの範囲・有効期間・設定される情報の重要度の問題
22 クロスサイトスクリプティング(XSS)の問題
23 CSRFの問題
24 セッションハイジャックの問題
25 動的メモリ操作に起因する脆弱性
26 書式指定出力の問題
27 ファイルアクセス:Unixでのシンボリックリンクの扱いに起因した脆弱な実装の問題
28 クライアントから送信されるパラメータ改竄の問題
29 コンテンツ間パラメータの情報漏えい問題
30 HTTPヘッダインジェクションの問題
31 クロスサイトトレーシングの問題(XST)
32 レースコンディションの問題

【表2】 書籍トレーニング項目一覧 (掲載の都合によっては優先度1のみ)

【図2】 書籍トレーニングWikiページのテンプレート

留学生活半分の「ふりかえり」

以上のような留学制度ですが、本稿執筆時点は前半が終わろうとしている間際です。 そこで、ここまでの留学生活をふりかえって、筆者の思うところを挙げてみます。

>メンバーのモチベーションの高さ

筆者以外の留学生は皆優秀で、各プロジェクトからひっぱりだこの人材ばかりです。 そんな人達が、なんとかスケジュールをやりくりし、自分の意志で手を上げて参加しているのですから 学習に対するモチベーションは高いのも頷けるでしょう。

また、SSAGコア・メンバーに関しても、 職責の第一義であるセキュリティレビューだけでなく、敢えて留学制度を創設した意味を十分に理解しており、 丁寧な対応をしてくれています。 そして、留学生から逆に何かを学ぼうという姿勢すら感じます。

重要なのは、そういう環境に置かれることで相互によい刺激となり、 ますますモチベーションが上がることです。 これはいわば、モチベーションの正のスパイラルと言えますが、 社内外問わず自発的な勉強会・読書会などに参加したことのある方なら実体験があるのではないでしょうか。

このような環境で学ぶ機会を得たことは僥倖だと感じています。 さらに、これはセキュリティ学習に限らずすべてにおいて共通だと思いますので、 これから別のことを学んでいく上でも糧となってくれそうです。

>スケジュールのタイトさ

カリキュラムをみていただくと分かる通り、実際は(少なくとも筆者にとっては)非常にタイトな内容となっています。 もちろん適当に手を抜くことも可能ですが、それは留学している趣旨そのものに反しますのでNGです。 つまり、腰掛け気分で留学するのではなく、真剣に取り組む必要があります。

せっかく給料をもらいながら勉強をする幸運に浴しているのですから、 アジャイル開発実践者の習性を発揮して、つまり「状況を楽しむ」ことにして、タイトな状況そのものを楽しんでいます。

>セルフマネージメントについて

しかし、状況を楽しむと言っても楽しみ方にはコツというか仕掛けが必要です。

筆者はこの機会に、以前から試してみたいと思っていた株式会社チェンジビジョンの「見える化」ソフト、 TRICHORD*5で留学期間中の進行管理をしてみることにしました。(図3)

【図3】 筆者のTRICHORDメイン画面

TRICHORD自体はチームで活用した時に最大限の効果を発揮するソフトですが、 まずは個人のタスク管理に使ってみることにしたのです。 さらに個人で使うことでツールとしてのTRICHORDの評価をして、 感触が良ければ留学後のプロジェクトでいつか採用してみようという一石二鳥の作戦です。

また、「一人計画ゲーム」や「キッチンタイマーによるタスク・タイムボックス」などのプラクティスを試すことが出来たのも収穫です。

>「留学」の意義

そもそも知識を敷衍(ふえん)する為だけなら、定期的な勉強会などでも対応可能ではないか、という疑問をお持ちになる方もいるかもしれません。 実際に、留学制度だけでなくそういう趣旨のセミナーも年に数回開催されています。

しかし、筆者も学習においてモチベーションが寄与する部分はとても大きいとは思いますが、 「留学」によって

  1. まとまった時間を使って、
  2. 体系的に学べて、
  3. 複数人からのフィードバックをすぐに受けられる

環境が作られることも見逃せないと考えています。 そして、セキュリティに関する知識はこのような環境で学習することが適した分野だと感じています。

また後半のカリキュラムとして次回で取り上げますが、 実際のプロジェクトの仕様/コードをレビューするという実践の場を体験できることも この留学制度の大きな利点だと考えています。

組織から見ると、必要な人材を短期間で集中的に育てたい技術分野に関して、社内留学は悪くない方法だと思います。

前編のまとめ

今回は筆者の勤務するSDNAでの社内留学制度について概要を記し、 実際の留学生として筆者が感じていることをお伝えしました。 そして次回後編では、留学後半の取り組みについて紹介し、全体を通して正直しんどかった所や今後への改善ポイント提案などに触れ、 SSAGコア・メンバー/筆者の上司/留学同期生やOBといった周辺の人へのインタビューも掲載できればと考えています。

繰り返しになりますが、本レポートを通して皆さんの会社での取り組みの時に、少しでも参考になればと思っています。 それではまた次回にお会いしましょう。お楽しみに!

Footnotes

*1Life Hacks PRESS(ISBN:4774127280,技術評論社) の記事。http://gihyo.jp/lifestyle/serial/01/study-meeting でも読むことができます

*2ISBN:479800880X,秀和システム

*3ISBN:4797322977,ソフトバンククリエイティブ

*4ISBN:4891004576,日経BPソフトプレス

*5TRICHORDについては本誌Vol.2 水越明哉さんの「見える化の最前線 TRICHORD」をご参照下さい

ツッコミ