![]() |
Copyright © 2000-2005 eazyfox. All Rights Reserved. | ||||
|
|
|||||
| HOME > Security > Anti-Virusの判定方法について | |||||
Anti-Virusツールを導入したとき、設定の中に見慣れない単語に戸惑うことも多くある。そんな言葉の意味を少しでも知っておけば、Anti-Virusの仕組みが少しだけ理解できるはずだ。
ここでは「指紋照合」、「Heuristic Scan」、「Integrity Check」と「SandBox」という単語について説明しよう。
一般的なウィルスの判定方法で、既知のウィルスの特徴のあるコードをデータベース(パターンデータ)に登録しておく。ファイルのコードの中にデータベースのコードと一致する部分があればウィルスと判断するというもの。このためウィルスではないプログラムをウィルスだと誤判定するケースもある。
誤判定を少なくするための判定技術とデータベースの作成技術が重要となってくる。一致する部分の場所や前後のコードも判定材料とすることで誤判定を少なくしたり、ウィルスの特徴としてコードのどの部分を切り出してデータベースに登録するのかは各メーカの力量に掛かっている。
eicarのテストウィルスの中身は「X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H* 」である。
データベースに指紋として「EICAR-STANDARD-ANTIVIRUS-TEST-FILE」の部分を登録したとする。ウィルスが自分自身を書き換えて「EICAR-STANDARD-ANTIVIRUS-hogehoge-FILE」と変更すると指紋照合の判定から逃れられてしまう。
最近ではこのように他のファイルに感染するときに自身のコードを書き換えるウィルスが多く存在するため、指紋照合のスキャンだけでウィルス判定を行うことは不可能なのが現実だ。
筆者がAntiVirやAVGなどの説明を初めて書いたときに悩んだのが、この「Heuristic Scan」である。「未知のウィルスの解析を行い検出する」と訳しているが、その仕組みの説明は各社で異なる。抜粋すると
・挙動で判断するというケース(McAfeeやSymantec)
ウィルスの挙動による解析を行うこと。つまりウィルスをサンドボックス(後述する)で動かしてみて、ファイルの書き換えやプロセスの乗っ取りなど従来の(登録済みの)ウィルスの挙動と一致するものがないか検査し、一致すればウィルスの亜種(未知のウィルス)と判断すること
・コードの内容で判断するというケース(CA)
ルールベースの解析である(登録済みのウィルスの指紋データによる判定ではないということ)。指紋照合の検査よりも簡単な解析方法で、例えばプログラムの先頭の内容を調べて一般的なプログラム作成ツールで作られた内容と異なるときには「怪しいプログラム」と判断する。
VBAのマクロ系ウィルスでは他のドキュメントに自分自身をCopyするコードの有無や、そのコードの位置などで「怪しいマクロ」と判断する。
各社の特許の問題もあると思うので、同じHeuristicでも異なるのは当然である。
CAの説明文にはさらに「スキャンの時間が増えるのでデフォルトではHeuristicは有効になっていない。PCの調子が悪いなど感染したかな?と思ったときには有効にするのが良い」とある。
どちらにしてもHeuristic Scanは「ファイルのコードをウィルスの指紋と照合する」という解析ではないということだ。その手法は様々で、サンドボックスでの挙動やコードの判定などいろいろな「これまでの経験で得られたウィルスの特徴(これがルールベースと呼ばれる理由)」をもとに判定を行っている。このため各社で判断方法の組み合わせや手法が微妙に異なるということも覚えておきたい。
セキュリティ用語でIntegrityというのは「完全性」と訳されている。これだと何のことかわからないので簡単に言うと「ちゃんと元の状態と一致しているか?」ということである。
Anti-VirusでのIntegrity Checkとは

このように未感染と最初に判定したときのファイルの情報をデータベースに格納しておいて、次回スキャンのときに格納データと現状の情報が一致すればファイルはなんら変更されていないので「未感染」。変更があれば「怪しい」としてスキャンするということである。
このIntegrity Checkを用いるとファイルの内容とウィルスの指紋照合を行わなくてもファイルの改変を判定することができる。改変があったファイルを「怪しいファイル」として、指紋照合や未知ウィルスの検査を行えばいいのだ。つまり全てのファイルを指紋照合や未知ウィルスの検査を行うよりも、はるかに少ない時間で検査することが可能となる。
話をバックアップと比較するとわかりやすい。
バックアップは最初に全てのファイルを取っておいて、その後は追加・変更されたファイルだけをバックアップする。ウィルススキャンも同じように追加・変更されたファイルだけをスキャンすれば、検査時間が短くて済む。この追加・変更されたファイルと変更されていないファイルを判断するのがIntegrity
Checkである。
「ハッシュ値」: MD5などの一方向要約関数で得られる値で「ハッシュ値」または「メッセージダイジェスト」と呼ばれる。MD5では128Bitのハッシュ値が得られる。同一データであれば何回計算しても同じハッシュ値になる。しかしデータのサイズが同じでも内容が異なればハッシュ値は異なる。このためプログラムの一部でも書き換えるとハッシュ値は変ってしまうことを利用してメッセージの改ざんやプログラムの書き換えが判定できる。
お砂場という意味だが、JAVAの実行環境でも使われている。
子供が砂場で遊んでも、怪我をしたり器物を破壊したりすることが無いのと同じように、SandBoxの中でウィルスを実行しても感染したりファイルを破壊されることが無いというところからSnadBoxと呼ばれるのだろう(憶測)
SandBoxとは低機能な仮想PCをメモリー上に作って、その中で「怪しいファイル」を実行させる環境のことを言う。SandBoxの仮想PCにはファイルへのアクセスや通信を行う機能は無い。しかし実際にはダミー機能が提供されており、ファイルアクセスを行ったようにウィルスに見せかける。つまりウィルスを遊ばせて、挙動を観察するための環境をSandBoxと言うのだ。挙動の観察とは
このようにしてAnti-VirusのSnadBox内でのファイルの挙動を観察することで判定を行うのが前述のHeuristic
Scanである。
未知のウィルスを発見する非常に良い手法だが、ウィルスをメモリー上のSnadBoxにコピーして実行することで判定を行うため、その時間が余計必要であり、スキャン全体の時間が増加することも理解しなければならない。