セキュリティ研究者への道:中級編
前回のこちらの「入門編」の記事の説明に基づき、今回は、セキュリティ研究者への道の続編をお届けします。前回の記事では、この役割にいくつかの考え方があることや、「ホワイトハッカー」という呼び方について説明しました。この役割には他にも色々な呼び方(ペネトレーションテスター、倫理的なハッカーなど)があるようですが、この記事では(特に断りのない限り)この「セキュリティ研究者」という肩書に沿って話を進めます。
この記事の目的は、ペネトレーションテスト/脆弱性評価を実施する際の方法論的アプローチのいくつかの異なる段階を順を追って説明することです。しかしながら、ここで説明するのは、これらの高度な手順の説明を理解する上で必要な基礎部分に過ぎません。実際には、多くの異なるテクノロジを学ぶ必要があるだけでなく、簡単に諦めることなく、学ぶ努力を続ける必要があります。一朝一夕には習得できないとことを念頭に置きつつ、このプロセスを噛み砕いてできるだけわかりやすく説明したいと思います。そして、「万能」のアプローチは存在しません。このことは、私のこれまでの経験からも明らかです。
前置きが長くなりましたが、本題である「セキュリティ研究者への道:中級編」に入ることにしましょう。
練習をひたすら重ねれば、セキュリティ研究者になれるのでしょうか。答えは「Yes」でもあり、「No」でもあります。私自身は本当に多くの方法で学んでおり、時には、理論的アプローチによって、テクノロジや関連する内容に関する技術書を読むなどの方法で 1 つの概念の知識を身につけたり発展させたりすることもあれば、実践的な方法で学ぶこともあります。この 2 つをうまく組み合わせるのが、私にとっては効果的な方法のようです。結局のところ、理論あるいは実践のどちらか一方に偏ると、セキュリティ研究者に必要な知識と経験を身に付けることはできません。
仮想化テクノロジ
理論的な学習という点では、Secplicity.org の記事やお気に入りのコンテンツを常日頃から読むことが有効な手段となります(もちろん、Secplicity の記事をすでにご愛読いただいていることは十分に承知しています)。そして、実践的な学習という点で最も有効なのは、仮想化された環境を利用する方法です。
仮想化については、重要ではあるもののちょっとした、知っておくべきことがいくつかあります。もちろん、我々のほとんどが、Windows、Mac、あるいは Linux のいずれであるかは別として、オペレーティングシステムが何であるかを知っています。同様に、仮想化ソフトウェアが何であるかを知っている人もたくさんいるでしょう。ここでは、この仮想化されたソフトウェアの展開のレベルが重要になります。すなわち、タイプ 1 とタイプ 2 のハイパーバイザがあり、展開の方法によって、それぞれに向き不向きがあります。
- タイプ 1 のハイパーバイザは、スタンドアロン OS であり、特定のコンピュータシステムのハードウェアに直接インストールされるソフトウェアです。このハイパーバイザは、OS ソフトウェア層という前提で、複数の仮想マシンをホスティングするよう設計されています。この例としては、VMware の ESXi サーバや Microsoft の Hyper-V があります。
- タイプ 2 のハイパーバイザは、標準 OS にインストールされるソフトウェアアプリケーションです。つまり、前述の OS にインストールされますが、その OS と同様に仮想化機能を提供することができます。基本的には、タイプ 2 のハイパーバイザ展開には追加ソフトウェア層が存在します。この例としては、VMware の Fusion(Mac)や Workstation / Player(Windows)などがあります。
仮想化についてここで説明したのは、仮想化検知機能があるマルウェアサンプルがあることを知っておくことが重要であるからです。この機能が含まれていると、このロジックによって、マルウェアが実行を監視されないようにするのを防ぐことができます。さらには、ハイパーバイザから逃れることのできる「ゼロデイ」マルウェアに関連するロジックを組み立てることもこともできます。タイプ 2 のハイパーバイザを使用して新しいマルウェアを分析する場合、このシナリオにおいては、ホストの OS が感染する可能性があります。
次に、タイプ 1 のハイパーバイザですが、このシナリオでも、ハイパーバイザを回避できる脅威が確かに存在しますが、標準に基づいて構築された業務用の(受動的な方法では個人用も)コンピュータやラップトップに影響することはありません。マルウェアの分析とサンプリングに関連するリスクを知ることが重要です。
仮想化する理由
いずれの方法を選択する場合も、テストベッドを仮想化しますが、上記の理由から、個人的にはタイプ 1 のハイパーバイザをお勧めします。何かを仮想化する主な理由の 1 つとして、「スナップショット」と呼ばれるものの存在があります。スナップショットとは、VM を起動して動作を開始した後に作成できる、すぐに利用できるイメージです。たとえば、マルウェアのサンプリングで収集したマルウェアサンプルの数が 50 個だったとして、それを検査したいとします。新しい VM を 1 つずつ作成する作業を 50 回繰り返すのかと言えば、もちろん、そんなことはありません。そのような無駄な時間をかけなくても、スナップショットを使うことで簡単に実行できます。時間をかけて VM を作成し、その VM にいずれかのソフトウェア(たとえば、オフィススイートや電子メール、写真、動画、ビジネス文書などのサンプルデータなど)をインストールし、ハイパーバイザソフトウェアにマシンの「スナップショット」を作成します。
このスナップショットはそのマシンの状態の再利用可能なイメージであり、何回も繰り返し展開したり、場合によっては自動化したりすることもできます。したがって、マルウェアサンプルを実行すると VM は感染しますが、何もクリアする必要はなく、以前に作成したスナップショットをリストアするだけで、次のマルウェアサンプルをすぐに検査できるようになります。
マルウェアのサンプリングとリバースエンジニアリングだけでなく、ハイパーバイザの実装をさまざまなニーズに利用することができます。企業であれば、タイプ 1 の導入を選択して管理機能を一元化し、個人や少人数のチームであれば、タイプ 2 か、おそらくは両方の組み合わせを選択することになるでしょう。
仮想化のもう 1 つの理由は、実践的な体験です。前述のとおり、一般的に使われているテクノロジを学ぶことが重要であり、そのための 1 つの方法は、仮想化された環境を想定される多くのシナリオのいずれか、時には、極めて具体的な状況を想定して実行することです。たとえば、Windows Server 2012 と Windows Server 2016 を使用する方法、あるいは、Windows 7/8/10 の異なるクライアントをテストしてそれぞれのサーバのバージョンを統合する方法を学びたいとします。そのような場合も、インスタンスを仮想化して少し調整するだけで、それぞれのホストを準備するプロセスが完了し、その動作を学ぶことができます。
何を調整するかというのは、難しい問題です。セキュリティに対する興味の度合いによって異なりますが、方法論的アプローチに沿って、ネットワーキング(アクセスと管理)とそのマシンでの永続性な活動を中心に考えると良いでしょう。つまり、ある OS がネットワーク接続をどのように処理し、どのようにデータを保存し、実行中のタスクをどのように監視するのでしょうか。もちろん、他にも学ぶべきことはたくさんあり、したがって、学ぶ努力を続けることが重要です。その過程でおそらく多くの困難に直面することになりますが、努力を続けて前進することで、道が開けるでしょう。1 つの分野だけにとらわれることなく、コンピューティングテクノロジの異なる領域に挑戦することで、継続的な知識の習得が可能になります。
ホストハードウェア
先ず初めに、現状と実現のための手段を評価し、さらには、最終目標も明確にすることをお勧めします。当然ながら、ほとんどの場合にもう 1 つの大きな要因となるのが、予算です。予算が十分にあるのであれば、高性能の CPU と十分な大きさの RAM のサーバに投資し、ストレージ領域も十分に確保します。予算が限られているのであれば、タイプ 2 のハイパーバイザの方が良いかもしれません。いずれの場合も、無料またはオープンソースのハイパーバイザのオプションがあります。これらの異なるオプションについて解説している、とても良い記事があり、ここで紹介されているオプションの中には、試用期間内であれば無料で利用できるものや、オープンソースのものもあります。選択したハイパーバイザをマニュアルの手順に従ってホストにインストールし、テスト用にいくつかの ISO を取得する方法も調べます。
ISO は、データの送受信を表す、光学ディスクのディスクイメージです。光学ディスクや CD は、コンテンツを保存して共有できる、USB フラッシュドライブより前からある方式です。そのため、ISO を取得すれば、そのソフトウェアのディスクイメージを取得できます。Linux ISO をここから取得するか、Google で Linux フレーバーを検索してそこから取得します。Microsoft は評価版を提供しており、こちらに詳しい説明が記載されています。Mac の評価版については、公開フォーラムのこちらの記事をお勧めします。シナリオの展開方法に関わらず、準備が終わって OS 変更機能に進む前にスナップショットを取得します。そうすることで、「完全なイメージ」に簡単に戻して、さまざまな方法で動作をテストできるようになります。
適切な仮想ホストの要件に関連して、最適なハードウェアの選択に悩むことになるかもしれません。最も重要なのは、その CPU が仮想化を提供できるかどうかという点であり、CPU が仮想化をサポートしていなければ何も始まりません。一部のハイパーバイザにはハードウェア互換性リストが用意されているため、そのリストを確認することが重要です。NIC やその他のコンポーネントに互換性があるのか(私自身、ESXi ホストのセットアップで自分のホストセットアップを取得しようとしたときに、この問題が発生した経験があります)をチェックして、ソフトウェアに互換性があり、サポートされていることを確認します。次に、必要な RAM の大きさを決めますが、これは同時に起動する仮想マシンの数によって異なり、この点は、最初に判断すべき重要な問題です。最後に、VM で使用できるようにするストレージ容量も判断する必要があります。
あくまでも私個人のお勧めですが、CPU を最初に決めて、そこからブレインストーミングしてサーバを構築すると良いでしょう。newegg.com などのような、お買い得商品が紹介されている Web サイトもあります。こういったサイトを利用するか、あるいは、近所の PC ショップで探すという手もあるでしょう。最初はそれほど高価でない CPU を探して仮想化をサポートしているかチェックし、サポートしている RAM の最大サイズや速度も確認します。次に、そのハードウェアを入れる、互換性のあるマザーボードを探します。ハイパーバイザによっては複数の CPU を利用できるものもあるため、複数の CPU を使用する場合は、マザーボードが複数の CPU、複数の RAM に対応しているものであることを確認します。
まとめ
説明がかなり長くなりましたが、この記事の要点をまとめると、主な目的は、自分が行うことの達成理由を明確にし、自分と自分のユースケースに最適な仮想デプロイメントが何かを判断し、仮想化環境を用意したら、そこからはひたすら経験を積むことです。仮想環境は今日、IT の多くの場面でほとんど標準のようになっていますが、マルウェア分析では、一部の高度なマルウェアサンプルの仮想化対策ロジックのためにハードウェアテストクライアントが必要であることを繰り返し述べておく価値があるでしょう。また、私自身もそうですが、さまざまな異なるテクノロジを経験しておくことをお勧めします。あるソフトウェアアプリケーションで試してから別のソフトウェアアプリケーションを試し、また元に戻ることもでき、そうすることで、さまざまな製品を経験することができます。