こんにちは、愛甲です。今日は月第一週目ということで(関係ないですが(汗))「私がセキュリティの世界に挑戦した理由 ~愛甲編~」を書かかせていただきたいと思います。
と言っても、正直なところ、私の場合、何かひとつこれいったものがあってセキュリティの世界に足を踏み入れたわけではありません(汗)。なのであまり書くこともないのですが、それでもあえて何かひとつ挙げるとするならば、アセンブラを必要とするソフトウェア開発会社が他になかったからでしょうか。
-----
私が初めてパソコンを触ったのは、おそらく小学5~6年生の頃だったと思います。当時、兄がWindows3.1の載ったノートPCを持っており、それをたまたま使わせてもらったのがきっかけです。ただ、当時はペイントブラシ(現ペイント)というWindowsに標準でインストールされている絵描きソフトで好きな絵を書く程度で、コンピュータについての興味も特にありませんでした。また、小学生の時にパソコンを初めて使ったのは事実ですが、実際のところは1年に数回程度、兄が実家に帰ってきた際に見よう見まねでやっていただけで、特に何かを学んでいたわけでも、特別な興味を持っていたわけでもありません。そういう意味では、本当にコンピュータを使い始めたのは中学に入ってからになります。
私が中学生になった頃、世間ではWindows95、Windows98などがリリースされていた時期であり、兄のパソコンもWindows95になっていました。しかし、私は相変わらずパソコンに興味はなく、中学では学習塾に通い始め、バスケットボール部に所属していたこともあり、パソコンに触れる時間もほとんどありませんでした。おそらく、もしこのまま高校生になっていたら、私はコンピュータについて興味を持つことも、セキュリティについて学ぶこともなかったと思います。
中学2年になった頃、叔父から古いノートPCをもらいました。叔父としては「捨てようと思っているんだけど、もし欲しいなら...」という程度だったと思います。ただ実際は、当時の私も特別欲しかったわけでもなく、もらえるならもらっておこうという感覚だったと思います。ノートPCにはMS-DOSとCコンパイラが入っており、家には兄が大学で使っていたC言語の入門書がありました。今思えば、これらがすべてのきっかけだったかもしれません。
最初のうちは入門書に書かれてあるプログラムを書き写すだけでしたが、高校生になる頃には、自由に自分の好きなプログラムを作れるようになっていました。といっても、完全に独学であるため、すべての変数をグローバルで定義してたり、数千行にも及ぶ関数を平気で作成したりとかなりフリーダムなコードを書いていましたが...(汗)。ただ正直なところ、この時期は毎日がとても楽しかったのを覚えています。実装の時間がもったいないので、学校の授業中にアルゴリズムを考え、家に帰って実装し、次の日、今日考えなければならないプログラムをまとめながら登校します。高校は一応進学校でしたが、私は受験にまったく興味がありませんでしたし、学校の勉強もほとんどしませんでした。もちろん成績は落ちていく一方で、実際問題、赤点連発して留年しそうになったりもしましたが、プログラミングの楽しさと比べると、学校の授業はどうしても見劣りしてしまい、やる気が起きませんでした。
中学、高校と少しずつコンピュータに触れる機会が増えていき、それなりに知識もついてきました。特に最初に学んだコンピュータについての知識がWindowsの使い方ではなく、C言語であったことも幸運だったかもしれません。大学に進み、一人暮らしを始めると同時にWindowsXPが搭載されたノートPCを購入し、常時接続のインターネット環境を契約しました。ここで初めて本格的にWindowsプログラミングや、Windowsの使い方そのものについて学び始めるのですが、正直なところ、当時はWindowsプログラミングがあまり面白いとは思えませんでした。なぜならWindowsが提供するAPI群はどれも主要な部分を隠すようにラップされていたからです。なぜCreateProcess関数を呼び出すと新しいプロセスを生成できるのか? そういった疑問を持ち始めました。
MS-DOSは低レイヤーな部分が比較的分かりやすかったのに対し、Windowsは複雑で難しいものでした。そうして、私は少しずつアセンブラの世界に興味を持ち始めました。今になって考えてみると、最初にWindows95を見たときは特に何も思わなかったのに、MS-DOSとCコンパイラに出会った際に、それらがすごく面白そうに感じたのは、そもそも私がプログラミングではなく、コンピュータそのものの動作原理にこそ興味があったからかもしれません。
そうして私はOSのシステム構造やアセンブラといった世界に少しずつはまっていきました。しかし、こういった知識や技術が一般的なソフトウェア開発の現場において役立つかと言うと、正直、微妙なところです。確かに知らないよりは知っていた方がよいのですが、それよりも大切なことは多々あります。アセンブラが分からなくともソフトウェアは開発できますが、オブジェクト指向を知らずして大規模な開発プロジェクトは動かせません。ソフトウェア開発の現場においては、アセンブラはもはや過去の技術であり、必ずしも覚える必要のないものでした。
大学3年になり、本格的に就職について考えるようになってから、私はアセンブラでの求人情報を検索しました。しかし、当時はほとんどのソフトウェア企業が.NETやJavaを使っており、アセンブラの出来るエンジニアを募集しているところはありませんでした。私がネットエージェントで働いている理由は、ある意味、2006年の時点において「アセンブラが書ける方」を募集していたからでしかないかもしれません(笑)。こうして私はセキュリティの世界へ進みました。
ネットエージェントに入社して4年が経過しますが、この業界で思うことは、セキュリティエンジニアリングは常に低いレイヤーの知識が不可欠であるように感じます。バッファオーバーフローを初めとするメモリ破壊系の脆弱性はアセンブラレベルでの理解が必要ですし、Webアプリ脆弱性を代表するSQLインジェクションやXSSは、データベースやブラウザのコアな仕様を熟知している必要があります。セキュリティ問題の多くは、普通の開発者には不必要な低いレイヤーのことばかりです。
プログラミングが好きで、何かのソフトウェアを開発することが好きならば、それは開発者になるべきです。しかし、OSのカーネルやアセンブラに興味があったり、文字コードやブラウザの細かな挙動に興味があったり、ストレージに展開されているファイルシステムに興味があったりするならば、セキュリティ業界に挑戦するのも楽しいかもしれません。そしてそれらを踏まえての製品開発は、通常のソフトウェア開発とはまた一味違った楽しみがあります。
●お知らせ
ネットエージェントではこの夏、8月23~8月24日にかけて、インターンシップを開催することとなりました。特に以下の内容に興味がある学生のみなさんのご参加をお待ちしております。
・HTTP、SMTP、DNS等、現在のインターネットを支えている根幹技術に興味がある
・tcpdumpで一日中パケットを眺めていても飽きない
・C言語やアセンブラが大好き
・脆弱性を作らない実装、開発フロー、コードレビュー等に関心がある
詳細はこちらをご覧ください。
2010/08/06 コース:元祖こってり
「元祖こってり」記事はネットエージェント旧ブログ[netagent-blog.jp]に掲載されていた記事であり、現在ネットエージェントに在籍していないライターの記事も含みます。