【質問#5】ウィルス感染について。

質問・悩み相談の回答です。

質問

初めまして主様、私は主に車関係の記事を読ませて頂いている一般的善良な一小市民です。

相談の内容ですが、有名なサイトの上にも偽物のサイトが張り付けてあり、2、3分眺めているだけでもウィルスに感染してしまうというものです。今までは極めて怪しいサイトをクリックしたり、某年金機構の様に釣りメールを開けなければ(しかし、スタンドアローンでなかったということでしょうか?)感染しなかったはずです。
こうなれば感染を予防する、あるいは避ける方法はないのでしょうか。因みにその記事ではワクチンを更新しましょうなどありきたりな事しか書いていませんでした。世の中、意外にワクチンを更新している人々はいないから、ワクチンである程度防げるから注意を喚起しているのでしょうか?あるいは、更新くらいのことをしてたら、運が良ければ感染しても重症化しないかもね的な慰めなのでしょうか?私はビクビクしながら過ごさないといけません。どうかお導きを。

回答

対象のことを知らないから不安になってしまうのだと思います。正体を知り、正しい対処をすればそこまで不安では無くなると思います。こういうものはコンピュータウイルスに限らず、世の中にたくさんあります。同様にして、むやみに不安を煽り、自説を信じ込ませようとしたり、詐欺を行おうとしたり、不要な商品を購入させようとしてくる人間も数多います。

これらから自分の身を防御し、不安を解消するためには正しい知識を身に着けることが必要不可欠です。ですので、ここでは「見るだけで感染するウィルス」の仕組みと、その対処方法も合わせてなるべくわかり易く解説してみたいと思います。

なぜ実行してないのに感染してしまうのか
従来のウィルスは「実行可能ファイルを実行する」というプロセスを踏むのが定石でした。悪意を持った処理(情報を収集して外部に送信するなど)を何とかしてユーザーに実行してもらう、そのために正しいソフトに見せかけたり、正しいソフトに紛れ込ませたり、アイコンをPDFに偽装して見たりという努力がなされているわけですね。

ではなぜ「見るだけ」で感染してしまう例があるのでしょうか。ユーザーは明示的に何らかの実行ファイルを実行したわけではありません。どういう仕組みで悪意を持ったコードが実行されるのでしょうか。

そのためにはコンピュータの仕組みを簡単に知る必要があります。現在のコンピュータ(とくにPC)はほぼ全て「ノイマン型」と呼ばれるタイプのコンピュータになります。ノイマン型をごく簡単に説明すると、「命令と処理対象(データ)が同じメモリ上にある」コンピュータです。このようになったのは色々な背景があるのですが、とりあえずそれは置いておきます。で、命令とデータが同じメモリ上にあるがために、やり方によっては「データを書き換えるつもりが処理部分まで書き換えてしまう」という事が出来てしまいます。

もう少し具体的に言うと、たとえば、何かのテキスト入力ボックスに大量の特殊な文字列を書き込み、本来格納される予定のメモリ上のデータ領域を超え、命令が格納されている領域まで文字列データを書き込んでしまう事で命令を書き換えてしまう、ということも可能です(メモリ上のデータは全て数字で表現されるので、文字列も命令も区別がありません)。すると、実行ファイルを実行してもらわなくても任意のコードを実行させることができてしまいます。(バッファオーバーフロー攻撃と言います)

もちろん、ソフトの開発者はそのようなことが行えないよう、たとえばテキストボックスには最大の文字数を設定してそれ以上の入力は破棄するとか、そのような防衛策を講じなければならないのですが、人間業でこれをやるのはかなりしんどく、機械的な処理でも完全に見つけきれずに漏れてしまっていることが多々あります。こういうものを「脆弱性」と呼びます。

このような脆弱性を見つけるのは大変な苦労を必要とします。脆弱性を見つけたとしても、その脆弱性を利用して悪意のコードを実行させるのも多大な労力がかかります。「原理的には確かにできるけど、まさか本気でやろうと思ってる人はいないだろう」と従来思われていた攻撃を本当にやってしまうのがが現代のクラッキング(ハッキング)です。非常に巧妙化してきていると言えます。

「見ただけで感染してしまうウィルス」というのは、こういった脆弱性を利用しています。たとえば、Flashプラグインとその脆弱性を利用して「メモリを書き換えてしまう処理」をFlashムービーに仕込んで、本来は実行できないようなコードを実行させたりする攻撃の例が知られてしまいます。この場合は、Flashムービーがロードされた段階(つまり、Webサイトを開いた段階)で何か良からぬことが起こる、という事になります。

Flashでなくとも、たとえば画像の表示処理部分に脆弱性があれば、なにか特別な画像をブラウザで表示させるだけで任意のコードを実行するということは原理上不可能ではありません。

こういった画像やFlashが広告として多数のWebページに広がってしまうと、感染の被害も同様に広がってしまいます。

余談ですが、このような背景があるのでAdobeとしてはもう複雑で脆弱性を生み出しやすいFlashをサポートしたくないのだと思います。また、モバイル系OSはFlashがあまりサポートされていませんが、その理由の一つにはもちろん脆弱性があるのだと思われます。しかしながらユーザーが居る限りはAdobeも渋々サポートせねばならず、細々と脆弱性改善のリリースを重ねてるのだと思います。

ここでは「任意のコードを実行させる」ということに焦点を絞って述べましたが、その他にもファイルを実行させるという以外の攻撃手法は多々あります。

パターン型解析エンジンはもはや時代遅れ

因みにその記事ではワクチンを更新しましょうなどありきたりな事しか書いていませんでした。
ワクチンを更新するというのは、おそらくウィルスパターンファイル(定義ファイル)を更新しましょうという主旨と思います。しかしながら、これまで述べたことを踏まえると、脆弱性を突く巧妙な攻撃に対して「アンチウィルスソフトのパターンファイルを最新に保つ」というのは何の効果も無いということが分かります。なぜならば、ブラウザで表示されるFlash広告や画像、PDF、もしくはその裏で動いているJavaScriptコードといった類のものは別にファイルとしてHDD上に蓄積されるわけでは無いからです(キャッシュは別ですが、キャッシュされるころにはすでに実行されています)。HDD上にファイルとして蓄積されないのであれば、ファイルスキャンを行うパターンマッチ型の処理では発見不可能です。

それどころか、「ユーザーに実行してもらう」というタイプのウィルスに対してもまったく不十分です。そもそもパターンに当てはめてウィルスかどうかを判断するという仕組みなので日々登場する新しいウィルスには対処できません。攻撃を企てようとしているクラッカー(ハッカー)は攻撃を行うための専門知識を持っているわけです。そんな人がわざわざパターンマッチによって検出されてしまうウィルスを用いるわけがありません。自分で新しいウィルスを作るか、もしくは既存のウィルスを改変してパターンにマッチしないような新種に仕立て上げるはずです。

2014年にシマンテックの上級副社長が「ウィルス対策ソフトは死んだ」と述べたのは有名な話ですが、その背景の一つとしてはこのような状況があります。

ただ、誤解の無いように書いておきますと、現在でも実行ファイル型のウィルスに感染した報告例は多数あります(IPAなどの報告をご参照ください)のでパターンマッチ型のアンチウイルスソフトも効果はあります。ただ、それだけで十分に防御できてるとは言えないという事です。

では我々は攻撃者から身を守る術は何もなく、運任せにWebページのリンクをクリックするしかないのか?というと、色々やれることはあります。

最新のブラウザ、OSを使う
古いブラウザを使うのはやめましょう。また、OSやその他のソフトも常に最新版にするよう心がけましょう。自動更新が出来るアプリケーション、特にブラウザは必ず自動更新にします。その理由は、とにかく脆弱性を早期に解消しておくことが重要であるからです。攻撃者は脆弱性が発見されると、修正がリリースされる前にその脆弱性を突いて攻撃を行おうとします(ゼロデイ攻撃と言います)。それ程早くに攻撃が仕掛けられる可能性があるのですから、とにかく最新の状態を保つことがリスク低減のために重要と言えます。

ちなみに、ルーターのファームウェアを自動更新するように設定しておいたらウイルスを含んだファームウェアに自動更新されていたという例もありますが、それはサーバ側セキュリティに問題があったり通信経路に問題があったりしたのが原因で、自動更新にしていたことが悪いわけではありません。自動更新しない方がよっぽどリスクが高いと思います。

Firefoxを使う
これは私感で裏付けがあるわけでは無いので話半分で聞いておいて頂きたいのですが、私はFirefoxを普段使うブラウザとしてお勧めします。Firefoxはメジャーなブラウザの中では最もセキュリティ的に厳しい措置を取っているように思えます。

少し専門的な話になりますが、具体的にはSSL証明書も厳格にチェックし、少しでもおかしなところがあればアクセスを跳ね除けますし、CA認証局証明書もブラウザ標準のものを使うのではなくて内蔵のものを利用しています。MITM攻撃がかけられている環境で同じページをIE、Chrome、Firefoxの3つで表示させてみると、Firefoxだけセキュリティエラーが出るというケースを多々見てきました。これはそれだけ厳格な判定をしているということに他なりません。(ただし、その一方で問題ないページであっても閲覧できないという弊害はあります)

攻撃サイトデータベースを使う
これは最近のブラウザではおおむね実装されているので何もする必要は無いですが、一応書いておきます。最近のブラウザでは攻撃サイトとして報告されているサーバーをデータベースとして蓄積しており、それにマッチするページにはアクセスできないような措置が講じられています。ユーザーは最新のブラウザを利用するように心がけてさえいれば良いでしょう。

公衆Wifiはなるべく使わない
ちょっとしたソフトで公衆無線LANのデータというのは抜き取ることが出来ます(高い確率で犯罪になります)。世の中にはセキュリティ的にザルなアクセスポイントは山ほどあります。中にはちゃんとした対策が講じられているものもありますが、それが判断できないようであれば使わないのが無難です。Wifiを使ってウィルスを送りつけるという事ではありませんが、重要な情報が抜き取られる可能性がある以上、セキュリティリスクがあることに違いはありません。

ヒューリスティック検知(ビヘイビア検知)ができるアンチウィルスソフトを使う
ヒューリスティックとは「発見的な」という意味です。これはソフトの「ふるまい」を常に監視して、怪しいふるまいをしているソフトがあればその動作を停止させるという仕組みになっています。このため、未知のウィルスにも対処可能ですが、弊害として正しいソフトであってもブロックされてしまう場合があります。

私が使ってよいと感じたのはAvira AntivirusとComodo personal firewallです。どちらもヒューリスティック検知が行えます。後者は英語のみで、また、多少専門的な知識が無いと使いこなすのは厳しいかもしれません。

こういったソフトは複雑な処理をしている分、PCにも若干のパフォーマンスの悪化があります(しかし、他のアンチウィルスソフトに比べればかなりマシな部類と思います)。

アンチウィルスソフトは無料のものもありますが、無料だとヒューリスティック検知に対応していなかったり、対応していても機能が限定的だったりします。不安を覚えるようであれば、ケチらず実績のある有償版のアンチウィルスソフトを購入したほうが良いと思います。

Linuxを使う
Windowsは他のOSに比べるとセキュリティ的にはかなり弱いです。それは、Windowsではブラウザでダウンロードしたフリーソフトを実行したりする文化が根付いていることや、Excelマクロやvbファイルなどの本質的に脆弱性を生みがちな機能、仕組みが数多く残っていることや、ついこないだまで管理者権限で全てのプロセスが動いていた(今もそのように設定する人はたまにいる)というのもありますが、そもそもシェアが多いOSというのはターゲットにされやすいという理由も大きいです。

OSをLinuxに替え、正しい使い方をすればWindowsに比べてかなりセキュリティリスクを低減できます。LinuxはデスクトップOSとしてのシェアは極端に低いです。このため、そもそも(サーバ用でない)個人用途のLinuxが攻撃対象となる可能性がかなり低いです。

また、LinuxにはOSとその関連ソフトそのもののセキュリティがWindowsに比べるとかなり優秀です。Linuxでは厳格に正しい配信者であることが確認されたサーバーから全てのソフトウェアをダウンロード・インストールする仕組みが整っています。このため、「ウィルスをダウンロード・実行してしまった」ということが起こりにくいです。起こりにくいというか、意図的に危険なことをしない限りはほぼあり得ないのではないでしょうか。

こういった背景もあり、Linuxではアンチウィルスソフトは不要と言われています。一部、Linux向けアンチウィルスソフトのキャンペーンなのか、必要だと主張する人たちもいますが、私は上記のような仕組みを利用する限りは不要と考えています。

もっとも、Windowsのように正しく管理されていないソフトウェアをダウンロードしてきて実行すればウィルスに感染する可能性はありますが、別にやらなければいいだけの話です。逆に言えば、OSに備わっている機能であらゆるソフトウェアを安全にインストールして利用できるための仕組みが備わっているということです。

Linuxというと専門的な知識が無いと使うのは厳しいと思われがちですが、最近ではもはやWindowsと大差ないか、時にWindowsを上回る使いやすさがあります。特にメール、インターネット程度がメインの使い方であればLinuxで全く問題はありません。日ごろ、メールやインターネットをするためだけのLinux PCを用意しておけば完璧です。WindowsとLinuxを一つのパソコンでどちらも起動できるようにしておいても良いでしょう(デュアルブートなどで検索すれば簡単に出来る方法が見つかると思います)。

Android, iOS, Chrome OSを使う
モバイル系のOSは最近登場したということもあり、過去のしがらみを捨ててセキュリティを高めるための数々の措置が織り込まれています。最近は大きな画面を持った2-in-1タブレットなども多々登場してきたので、こういった製品を購入してブラウジングやメールに利用するのも良いと思います。

これ等のOSであればLinuxよりはずっとシェアも大きく、ネットを検索しても使い方を説明したサイトがごまんと出てきますからそこまで使い方に戸惑う事も無いでしょう。ただし、シェアが大きいという事もあって攻撃の対象にはなり易いです。

完全な方法は無い
上記まで色々述べましたが、考えられる全ての策を講じたとしても、セキュリティリスクが完全に無くなるわけではありません。LinuxやiOSを使って健全なソフトウェアのみを利用していたとしても脆弱性を突いた攻撃を受ける可能性はあります。完全に情報流出やコンピュータウィルスの被害を防ぐには情報機器を使わない以外の方法はありません。

ただ、世の中の事には全てリスクがあります。極端なリスクフリーを追求してしまうと、過剰品質や非合理な結論に行きつきがちです。ですので許容できる程度のリスクで妥協するしかないでしょう。その点を踏まえれば、上記のような対策を組み合わせれば、十分に許容できる程度まで感染のリスクは抑えることは可能と思います。

ちなみに、私はメインPCにLinuxをインストールしており、なるべく公式パッケージ(公式配布のソフトウェア)を利用するよう心がけ、Firefoxによってブラウジングを行い、アンチウィルスソフトは使用していません。Windowsは仕事以外ではめったに使用しません。これは、Windowsがセキュリティ的に弱いからというよりは、「Windowsでセキュアな使い方をするのがめんどくさい/セキュアなところまで持っていくのがめんどくさい/セキュアにすると動作が重い」という三重苦があるからです。

頑張ればWindowsでもセキュアな環境に持って行けると思います。