私は日本の高校に在学しているとき、古文が好きだった。とりわけ、一番好きだったのは係り結びや動詞の活用形である。何がそんなに、と思うかもしれない。けれども、あれは奥が深く、サイバーセキュリティの分野に共通するものがあると思うのである。
係り結びも動詞の活用形も、「一見、見過ごしそうな小さなヒント」が全体の意味を大きく左右する、という共通点がある。現代日本語では失われているが、例えば「~ば」の已然形と未然形の意味の違いをとると、これは母音が一つ違うだけで全く違う意味になる。あとは、「花」と言えば「桜」のことである、というような予備知識も、古文を読み解くうえで重要なヒントとなる。
これは、「知らないと気づかない」という意味ではインサイダー知識や業界知識と、カテゴリーは一緒である。「ハッカーだからこそ知っている」手口や、またそれらの犯罪を追いかける立場から「フォレンジック調査官だからこそ目を光らせる」ディテイルは、古文の先生しか知らない「古文を読み解く知識」と、内容こそ違え、基本は同じなのである。
目次
マルウェアとは何か?難しいものではない。
マルウェアは、その実態はただのプログラムであって、マルウェアと通常のプログラムの違いは「意図」だけである。
そして、この「意図」が主観的だから、難しい。マルウェアも通常のプログラムも、だいたいは同じようにExeファイルがあるし、ほかのプロセスを呼ぶし、OSに働きかけるし、情報を保存するし、内外の機器と接続したりする。
コードを書いた人間と同じで、善と悪、なにも決定的な違いがない。
最近では「(ブラックリストに)マッチングされないように、シグネチャをどんどん変える」Polymorphic malwareに類されるマルウェアや、「サンドボックスに置かれている」ことを検知してふるまいを変えるマルウェアもある。
それに、少し毛色は違うが、「悪さはしないが場所だけとる」とか「感染したらメッセージ表示だけして消える」Stonedのような変わったマルウェアも存在する。これらは、悪なのか。以前なら「マルウェア」の定義と検知も比較的単純だったのに、もう今ではリアルタイムで刻一刻と変わっていくマルウェアの定義についていかなければいけない。
SOCチームの最上位で必要な「フォレンジック」とは?
話が少し変わるが、サイバーインシデントにかかわる法体制が本格化している欧米では、Security Operation Center(SOC)というチームが会社の内部に存在することが多い。
ブリーチなどの事件があれば、一定期間内の公示義務があったり、多額の罰金が科せられるため(GDPR然り)、企業としてもリスクヘッジのために多額を投じる分野である。リスクが非常に高いため、アウトソースをするのは運用としても、価格面からも現実的ではない。というわけで、多くの企業ではすでに内製化を進めている分野でもある。
多くのSOCではだいたい以下の図のように3つのレベルに分かれていて、ピラミッド型に先鋭部隊のように小さくなっていく。
Tier 1(Level 1とも)の担当はコールセンターの対応や、感染を受けた機器のフォレンジックデータ収集、マルウェアだと分かっているものの削除など、分量が多い「ビジーワーク」ともいえる仕事をこなす。
そして何か事件が発生すれば、その対応や無効化などに活躍するのがTier 2の担当である。彼らはもっと経験があり、きちんとした事件対応のプロセスや様々なマルウェアの無効化に長けている。
一番経験のあるTier 3の担当は何をしているかというと、フォレンジック解析を通じて原因究明やパターンの情報収集をしている。どうしても事件が解決できないときに、まず落ち着いて分析をかけたり、すでに無効化された事件の原因分析をする。また、新たな脅威に常に目を光らせており、Threat Huntingといって「プロアクティブに脅威を探しに行く」のも彼らである。
実は、複雑化するマルウェアとの闘いで効果を発揮するのが、彼らのフォレンジック解析からくる「勘」なのである。
サイバーセキュリティの最前線で培われる「勘」
サイバーセキュリティの最前線では毎日、新種のマルウェアや攻撃手法を分析している。巷の「セキュリティ」ツールはデータの内容をこじ開けるフォレンジックの機能が欠けているから、別のフォレンジック解析ツールを使って感染したエンドポイントを分析していく。
すでにブラックリストに公表されているものはもう見なくていい。けれども、「怪しい」だけのものや「今までに見たことのないもの」は、1から分析を始めなければならない。彼らは多くの場合何を尺度にしているかというと、マルウェアの「クセ」ともいえる、通常とは少しかけ離れた動きや性質を頼りにしているらしい。
以下、Threat Huntingの経験者・現役ファイターたちに、(筆者でもわかるような簡単なものを)ヒントを分けてもらった。
プロセスを呼ぶ
プロセスを呼ぶのはプログラムとして何も不思議なことではないが、ここでキーとなるのは「プログラムのタイプからして、普通は呼ばなくてもいいプロセスをわざわざ呼ぶ」ということらしい。
特にWoW64というDLLは、マルウェアのにおいがプンプンらしく「WoW64を呼ぶプログラムがあったら、とりあえず見てみるね」(弊社 ”Jonathan”)というほど。
ご存じなければ、WoW64とは「Windows 32-bit on Windows 64-bit」の略称で、64ビットのシステム上で32ビットのプログラムを実行するために必要な「翻訳」プロセス。
なぜ怪しいかというと、マルウェアはだいたい32ビットで書かれているのに対し、ほとんどのシステムは64ビットだから、らしい。
32ビットで書かれたプログラムが64ビットのシステムで実行するには、このDLLを介する必要があるのである。
ではなぜマルウェアが32ビットで書かれるのか。これには、ひとこと:「’Cause it’s a lot of work, duh!(そんなの、めんどくさいからに決まってるだろ)」(弊社 ”Jonathan”)。
64ビットのプログラムを書くのは大変だから、マルウェアを書くみんなは、まだ32ビットで書きたがるらしい。意外に人間的な理由が背景にあった。
パスが普通じゃない
これは、単純だけれども使えるヒントで、インストールパスなどをみて、「いつもと違わないか?」ということを疑うというものである。とはいえ、プログラムごとにインストールしたがるパスは違うし、ファイルの数も千差万別。この見極めはどうするのか?
当たりをつけられるフォルダパスなどはいくつかあるが、ほとんどの場合これは「ツールに頼る」しかないらしく、膨大な量のフォレンジックデータを分析できるツールを使って、ほかのプログラムとの違いが大きいものをピックアップしてくるらしい。
使うポート番号が高い
これもわかりやすいが、ポートには80や8080のように、使う頻度の高いものがいくつかある。もしポートが足りなくなったら、新しく作っていけばいいのだが、だいたいはすでに存在するポートで事足りる。こういう背景もあって、5万台のポート番号などを見かけたら、疑ってかかる価値がある。
社員番号と似ていて、往々にして後で作られたポートほど番号が高くなるからである。この場合、ポート番号が高い=最近作られたポート(=マルウェアが作ったかもしれない)という考えが成り立つ。
例えば、プロセススキャンをしてPort 50913を使っているということに気づいたら、いったいなんでそんな番号の高いポートが開いているのか、何のためなのか、レビューをかけたい。
レコメンドするのは「49xxxから65xxx台」のポートをちょっと疑ってみること、だそうだ。
まとめ
ここで紹介したのは、彼らが日々作業をする中で培ってきた膨大なサイバーフォレンジック知識のほんの一部であるが、このようなプロの不足も相まって、こういった「勘」のソフトウェア化はもう進んでいる。
ただ、日本のお客様に話をしていると、そんなものよりも「アラート」が好きな方が多い。「マルウェア辞書」のようなものを頼りに「検知」をして、ヒットが多いのが「守れている」という実感につながるそうである。ただ、そのようなやり方では最近のマルウェアには太刀打ちできない。それよりも、マルウェアの「クセ」を分析するような、より有機的なアルゴリズムのほうが柔軟で、強い。
揮発性メモリを含むデータを短時間で読み取り、それを分析して「不審な点」を差分比較などのアルゴリズムを通して洗い出せるツールは最近リリースされている。ただ、このような作業に必要なのは、見ているデータが「その時点の機器の状態そのもの」であるという確証である。これには、彼らの使っているフォレンジックツールが欠かせない。
OSをだましたり、巷のアンチウイルスの検知を難なくまぬかれるマルウェアが増加する中、「本当のデータ」なしでは成り立たない彼らの仕事は、今も深くフォレンジックの技術に根差している。
最後に、古文のテーマで思い出したが、高校時代に点数が高かった同級生は、大きな「古語辞典」ではなく、よりスリムな「例文集」を使っていた。そのマネをして、負けず嫌いなアメリカ人が高校時代に買った古文例文集は、今もロサンゼルスで私の机に座っている。