あんちういるす

このサイトはマルウェア、アンチウイルス、あとはセキュリティ全般について、素人がざっくばらんと書いていくブログです。でもあんまりしっかりと書く気はないというか、わりと適当に書いていくつもりなのでちゃんとした文章を期待している高モチベな方々向けではありません。あらかじめご了承ください。

アンチウイルスの限界

 前回マルウェアを解析する作業もだいぶ自動化されているよ、という話をしました。コンピュータができることはなるべくコンピュータにやらせて、人間は人間でしかできないことをやる、これが現代社会の、というかコンピュータ社会のコンセプトだったりするわけですね。アンチウイルスにおいても、マルウェアはめっちゃ増えているためよりそうなるべきなんですね。
 では今回はアンチウイルス、つまりはマルウェア検知はどう変わったのか?について、またアンチウイルスの限界について書いてみたいと思います。

 ここでもういちどマルウェアの定義について振り返ってみます。マルウェアとは、不正かつ有害な動作を行う意図で作成された悪意のあるソフトウェアや悪質なコードの総称である、わけですが、じゃあ、"不正な動作"とか"有害な動作"ってなに? 悪意あるソフトウェアの"悪意"ってなに? って話ですね。
 マルウェアかどうかを識別するためには、どうやら不正とか有害とか悪意とかそういったものを検知しなければならないようですが、それって可能なの?と。
 ここであらためてコンピュータについて考えてみましょう。
 コンピュータってのは電子計算機と呼ばれてて、まぁ要は計算する機械なわけです。計算する機械なので計算ができますね。というより、計算しかできない。計算というのは数式を解くことですね。1+2=と入力すると3と出力することです。まぁ電卓と変わらないわけです。四則演算を高速に処理(計算)できることが電子計算機の利点なわけです。
 ではコンピュータの限界とはどこだろ?という話になります。プロセッサの性能が限りなく無限大に近づいたとき、それでも実現できないことはなんだろう?という話です。

 たとえば世界の通信を守っているRSA暗号素因数分解の難しさで安全性を保っているので、プロセッサの処理速度が無限になったら崩壊しますね。つまり、理論上はコンピュータが"解ける問題"なわけです。理論上は。
 逆にプロセッサの性能がどれだけ上がっても解けない問題とは何か? それはたとえば証明問題ですね。素数が無限にあることを証明せよ、という問題。これは人間にとってはとても簡単ですが、コンピュータには絶対に解けないわけです。所詮はただの"計算機"なわけですね。数学を理解しているわけではない。
 要するによくもわるくもただの計算機であり、それはつまるところ「数式に変換できるあらゆる問題は解くことができる」というのがコンピュータの本質なのですね。多少例外はありますが(停止性問題)。
 そして、この数式ってやつをアルゴリズムと呼んだりしてるわけで、そのアルゴリズムを"人間が"コンピュータに入力しているわけですね。コンピュータがコンピュータ自身でアルゴリズムを発明したりはしないわけです。いま話題の機械学習データマイニングだって所詮はアルゴリズムを高速に解いているに過ぎないわけです。内積を求めてるだけなわけです。

 つまり、マルウェアを100%完璧に検知することは可能か?という問題は、悪意の識別をアルゴリズムに変換できるか?という問題とイコールなわけです。悪意を識別する数式があるかってことですね。それをコンピュータに入力できればすべて解決、オールオーケーなわけですね。まぁないんですけどね。
 なので、不可能という前提を置いて、じゃあどうするのかってのがアンチウイルスのスタンスであり、いたちごっこがいたちごっこたりうる所以なわけですね。出現したマルウェアに"可能な限り"速く対応する、これがアンチウイルスのひとつの答えであり、限界なのです。

 しかし可能な限り速く対応するだけでは結局のところ後追いですね。未知のマルウェアを検知できません。なのでアプローチを変えましょう。これまで出現したマルウェアをすべて集めて、それらの統計情報から未来のマルウェアを予測できないかという話です。まさに流行りのビッグデータというやつですね。"悪意の識別"ではなく、"悪意の類似"を試みたわけです。過去のマルウェアと類似するものはマルウェアってことですね。
 コンピュータセキュリティの世界では、ベイジアンフィルタというスパムメールのフィルタリングに関する成功例があります。これをマルウェアでもできないのかという話です。
 スパムメール自然言語で、マルウェアはソフトウェアなので一緒くたにできないかもしれませんが、まぁとりあえずやってみようと。そしてこれまたそこそこ良い結果が出ることが分かっています。そこそこですけどもねw
 その理由はマルウェアの類似性にあります。類似性というか亜種の増加性というか、言葉選びは難しいですが、マルウェアには流行があり、ある一定期間に区切ると流行しているものと似たもの、いわゆる亜種が大半を占めることが分かっています。そうなる理由はまだ分かっていませんが、まぁそうなることは経験上分かっていると。
 理由は分からんけども、似たものが増えるっぽいからいま流行りのビッグデータとやらが使えるんじゃないの? ちょっと使ってみようぜ! というのが、未知のマルウェア検知の技術なわけです。かなりざっくりですけどね(それに本当はもうちょっといろいろあるんですけども)。
 んで、マカフィートレンドマイクロシマンテック、カスペルスキ―といった有名どころのアンチウイルスは、当然未知マルウェア検知に対するアルゴリズムも実装しており、それにおいて、じゃあどのくらい未知のマルウェアを検知するのかというと、だいたい20%から多くても50%前後程度です。未知のマルウェアを1000個集めてきたら、500個程度はマルウェアと検知してくれます。え?たった50%なの? もしかしてアンチウイルスって死んでる?
 まぁそこそこ良い結果が出ているって程度が現状なわけですね。もちろんすでに知っている既存のマルウェアについては90~99%くらいは検知しますよ。あくまで未知のマルウェアに対してですね。なので不運にも新種のマルウェアに当たっちゃわない限りはモウマンタイです。新種のマルウェアに当たっちゃったら50/50のコインを投げてもらう感じですねw
 ちなみに論文なんかだと90%以上検知できたとかなんとか書いてたりするものもあるので、研究が進めばもっとよい感じになるのかもしれませんが、現状はそんなもんなわけです。

 というわけで、いろいろとがんばっているけれど、アンチウイルスはいろいろと詰んでる、努力しているんですね。ちなみにMicrosoftWindows8からWindows Defenderというアンチウイルスをデフォルトで付属しているようですね。Microsoft Security Essentialsをパワーアップさせた版っぽいですが、これも一種のコモディティ化というやつですかね(なんじゃそりゃ)。
 そんなこんなでマルウェア検知のざっくりとした話を書きました。未来が明るいセキュリティ万歳!