マルウェア
マルウェア (malware) とは、不正かつ有害に動作させる意図で作成された悪意のあるソフトウェアや悪質なコードの総称。コンピュータウイルスやワームなどが含まれる。
悪意のコード (malicious code) 、悪意のソフトウェア (malicious software) 、悪意のある不正ソフトウェア、有害なソフトウェア、不正プログラムとも呼ばれる。
マルウェアの行う活動としてはデータの破壊やデータの盗難などがあるが、こうした「悪意のある」行動をするソフトのみならず、ユーザの望まない広告を勝手に出すアドウェアのような「迷惑ソフト」(の中で悪質なもの)もマルウェアの範疇に含める場合がある。
マルウェア (malware) は、「悪意のある」という意味の英語「malicious(マリシャス)」と「software」を組み合わせて創られた混合語である。
類義語としてクライムウェアがあり、これはマルウェアの中で特に犯罪 (crime) に使われるものを指すとするものもあるが、必ずしもこれを要件としないものもあり、マルウェアとの関係は判然としない。
マルウェアの種類の代表例として以下のものがあげられる。なお、以下の種類は排他的ではなく、複数の種類の定義を満たすマルウェアも存在しうる。
文脈によって定義が様々であるが、 「コンピュータウイルス対策基準」では、自己伝染機能、潜伏機能、発病機能のいずれかをもつ加害プログラムの事をウイルスの定義として採用している。後述するワームやトロイの木馬は狭義のウイルスではないが、この意味での広義のウイルスには属する。最広義では「ウイルス」(virus) という語はマルウェアと同義であり、マスメディアなどではこの最広義の意味に用いられるが、これは誤用であるとされることもある。
他のプログラムやファイルの一部を書き換え(寄生、感染)、自己複製する機能を持つマルウェアのことである。感染対象のプログラムの事をウイルスの宿主もしくはホストプログラムという。感染経路を秘匿するなどの目的で、プログラムなどに感染したあと一時的に潜伏し、その後しばらく経ってから活動を開始(発病)するものも多い。
ウイルス同様自己増殖するが、ホストプログラムを持たず、単体で存在するプログラムの事を指す。
外部からコンピュータを操るために作られたコンピュータへの不正な侵入経路の事でRAT (Remote Administration Tool) とも呼ばれる。バックドアをしかけるマルウェアをバックドア型と呼ぶ。
一見無害なファイルやプログラムに偽装した上でコンピュータに侵入したあと悪意のある振る舞いをするものを指すことが多いが、偽装を行わずにOS等の脆弱性を悪用して勝手にインストールされてしまうもの(ドライブバイダウンロード)もトロイの木馬に含める場合がある。狭義のウイルスと違い自己増殖機能は持たない。またトロイの木馬の定義として単体で存在し宿主を必要としないことを要件に加えるものもあるが、これを要件としない場合もある。
トロイの木馬の定義として、コンピューター内部に侵入したあと攻撃者による外部からの命令で悪意のある振る舞いをする事やバックドア型である事を要件にする場合もある。
情報収集を主な目的とし、コンピュータの内部情報を外部に勝手に送信するソフトウェアで、ユーザーが気づかないうちにパソコンにインストールしているパターンが多い。
IPAとJNSAの定義によればスパイウェアとは「利用者や管理者の意図に反してインストールされ、利用者の個人情報やアクセス履歴などの情報を収集するプログラム等」のことである。
スパイウェアはマルウェアの一種とみなすことが多いが、シマンテックはスパイウェアをマルウェアに含めていない(クライムウェアには含めている)。
キーボードからの入力を記録するプログラムのことで、キーロガーというものそれ自体はマルウェアではなく、コンピュータの所有者自身がデバッグのためにしかけるなどの使い方もあるが、パスワードや個人情報などを奪取するため悪意を持ってしかけられるなどマルウェア(スパイウェア)として用いられることもある。同様にネットワークを通るパケットを監視するスニッファも盗聴目的で使われる場合がある。
ボット自体は常駐してチャットで会話するなどといった機能を持つ任意のプログラムを指すもので、必ずしもマルウェアを指すものではない。マルウェアとしては、ボットネットと呼ばれる仕組みにより、IRCなどを利用して攻撃者から命令を受け取り、命令に応じてDDoS攻撃やスパムメール送信などを行うマルウェアを指す。ボットに感染したコンピュータによって構成されたネットワークをボットネットもしくはゾンビクラスタという。それに対しボットネットに指令を出すサーバをC&Cサーバ (Command and Control server) という。またボットなどの感染により攻撃者による遠隔操作が可能なコンピュータをゾンビマシンという。
攻撃者が被害者のコンピュータに侵入したあとに用いるツールを集めたパッケージで、マルウェアとして被害者のコンピュータにしかける。侵入の発覚を防ぐログ改ざんツール、バックドアをしかけるツール、キーロガー、パスワードやクレジットカード情報等の窃盗ツール、DDoS攻撃用のボット化ツール、セキュリティソフトの無効化ツールなどが含まれていることがある。こうした攻撃を容易にするため、システムバイナリを含めたファイルを数百個単位で改竄する。ルート権限を奪うなど管理者レベルのアクセス権を取得する事を定義とする場合もある。又、基本的にルートキットは隠蔽されているので、普通のセキュリティソフトでは見つけられなく、専用のセキュリティソフトでないと見つける事が困難とされる。
ランサムウェア (ransomware)
コンピュータをロックしたり重要なファイルを暗号化して読めなくするなどして被害者を困らせ,身代金 (ransom) を払えば元に戻すと脅迫するマルウェア。
スケアウェア (scareware)
ユーザの恐怖 (scare) 心を煽る偽の警告メッセージ(「PCから違法ポルノやウイルスが検出された」等)を表示し、問題を解決するには所定の金額を支払うようにと脅すマルウェア。
サイズの小さなマルウェアで、攻撃者のサーバから被害者のコンピュータに実行ファイルなどをダウンロードするなどさらなる攻撃の足がかりにする。
ドロッパー(Dropper)
本体内部に不正なプログラムが格納されており、実行時に実行可能ファイルに展開する。暗号化や難読化、パッキングなどが施されているため、簡単には不正プログラムとして認識されないようになっている。
アドウェア (Adware)
ユーザの望まない広告を勝手に出すソフトウェアである。アドウェア又はその中の悪質なものもマルウェアの範疇に含める場合がある。
ハードディスクドライブ内のデータを完全消去することを目的としたもの。
不正行為を実行するために、攻撃者はマルウェアを作成するが、その不正な試みが検出されてしまっては、その目的を達成することはできない。セキュリティベンダがセキュリティ技術を進化させると、それに合わせて攻撃者も技術を進化させる。セキュリティベンダと攻撃者の間では、いたちごっこが繰り返されている。回避技術は、検出、分析、把握を回避するためにマルウェアが使用する手段の総称である。
セキュリティ技術に対する回避技術は次の3つに分類できる。
セキュリティ対策の回避: マルウェア対策エンジン、ファイアウォール、アプリケーション隔離などの保護ツールによる検出を回避するために使用される。
サンドボックスの回避: 自動分析を検出し、マルウェアの挙動を報告するエンジンを回避するために使用される。仮想環境に関連するレジストリキー、ファイル、プロセスを検出することで、サンドボックス内で実行されているかどうかをマルウェアに通知する。
分析の回避: マルウェア分析を検出して欺くために使用される。たとえば、Process ExplorerやWiresharkなどの監視ツールを検出するだけでなく、リバースエンジニアリングを回避するために圧縮や難読化などを行う。
高度なマルウェアの中には、このような技術を組み合わせて利用しているものもある。たとえば、RunPE(メモリー内で自身のプロセスをもう1つ実行する)などの技術を使用して、マルウェア対策ソフトウェアやサンドボックス、分析を回避している。また、仮想環境に関連する特定のレジストリキーを検出し、サンドボックスでの自動分析や仮想マシン上での動的分析を回避するマルウェアもある。
ウイルスをはじめとしたマルウェアはセキュリティソフトに発見されないよう、下記のようなツールや手法を用いていることがほとんどである。また、サイバーセキュリティの回避技術で、よく使われる用語がある。ここで、攻撃者が使用するツール、手法や用語をいくつか紹介する。
Crypter(クリプター): マルウェアの実行時に、マルウェア対策エンジンや静的分析による検出を回避するため、マルウェアの暗号化と復号を行う。クリプターは、攻撃対象に合わせて作成されることが多く、闇市場で購入することもできる。クリプターをカスタマイズすることで、復号や逆コンパイルがさらに困難になる。既知の高度なクリプターとしては、Aegisクリプター・Armadillo・RDG Tejon などがある。
Packer(パッカー): クリプターと似ているが、マルウェアファイルの暗号化ではなく圧縮を行う。UPXが代表的なパッカーである。
Binder(バインダー): 複数のマルウェアファイルを1つに結合する。マルウェアの実行ファイルの拡張子を変更せず、JPGファイルに結合できる。マルウェア作成者は、正規のEXEファイルにマルウェアファイルを結合しようとする。
Pumper(ポンパー): ファイル サイズを増やす。これにより、マルウェア対策エンジンによる検出を回避できる場合がある。
FUD: マルウェアの販売者がツールの説明やアピールに使用するもので、あらゆるマルウェア対策ソフトで完全に検出不可 (FUD; Fully UnDetectable) であることを表す。有効なFUDプログラムは、スキャンタイムとランタイムの両方を組み合わせ、100%検出不可を実現する。既知のFUDとして、次の2種類が知られている。
FUD scantime: マルウェアファイルの実行前に、マルウェア対策エンジンで検出されないように保護する。
FUD runtime: マルウェアファイルの実行中に、マルウェア対策エンジンで検出されないように保護する。
Unique stub generator(ユニークスタブ ジェネレーター): 実行中の各インスタンスに固有のスタブを作成し、検出と分析を困難にする。(スタブとは、通常、元のマルウェアファイルのメモリへの読み込み(復号または解凍)に使用するルーチンが含まれる。)
ファイルレス マルウェア: ディスクにファイルを書き込むことはせず、自身をメモリに挿入することでシステムに感染する。
難読化: マルウェアのコードを簡単に人が理解できないようにする。プレーンテキストの文字列をエンコード (XOR, Base64など) し、マルウェアファイルに挿入したり、ジャンク関数をファイルに追加する。
ジャンクコード: 無駄なコードや偽の命令をバイナリに追加し、逆アセンブルを欺いたり、簡単に分析されないようにする。
アンチ: 保護ツールや監視ツールの回避、無効化、終了に使用するすべての手法を指す。地下フォーラムや闇市場で使用される。
Virtual machine packer(仮想マシン パッカー): 仮想マシンの概念を取り入れた高度なパッカーである。マルウェアの EXE ファイルが圧縮されると、元のコードが仮想マシンのバイトコードに変換され、プロセッサの動作をエミュレートする。既知のものではVMProtect、CodeVirtualizerでこの手法が利用されている。
最も一般的な回避技術は次のとおりである。
難読化: データ・変数・ネットワーク通信を保護する。変数または関数の名前をランダム化する。XORなどのエンコーディング方法を使用する。
環境のチェック: 仮想環境に関連するツールやアーティファクトを検出し、セキュリティソフトやベンダ等の分析を回避する。
サンドボックスの検出: サンドボックス関連のファイルやプロセスを検出するためにディスクをチェックする。
マルウェアは、下記のように様々な感染経路によって感染活動を行っている。 ネットワーク感染やメール添付感染等の感染手法の他に、ホームページを見ただけで感染する「Web閲覧感染型」も感染手法の一つとして確認されており、その方法も高度化・巧妙化している。
下記に感染経路の例を示す。
Web閲覧感染型:ブラウザで閲覧したサイトに埋め込まれたマルウェアをダウンロードし、感染させるタイプである。サイトを見ただけで感染することもあり、インターネット利用者が自身で感染を認識することが難しくなっている。表示された広告を通して感染する場合もある。
Web誘導感染型:メールに添付されたURLをクリックし、アクセスしたサイトからマルウェアをダウンロードするよう誘導して感染させるタイプである。
偽セキュリティソフト配布サイト誘導感染型: あたかも無料のウイルス対策ソフトのように見せかけて、悪意のあるプログラムをインストールさせようとする「偽セキュリティソフト」の被害が増えている。その代表的な手口は、ホームページなどで「あなたのコンピュータはウイルスに感染しています」のようなメッセージを表示し、利用者を偽のウイルス対策ソフトを配布するWebサイトに誘導するタイプである。
ネットワーク感染型:Windows OS等の基本ソフトの設定の不備を悪用し、感染させるタイプである。
メール添付型:メールの添付ファイルにマルウェアが埋め込まれており、この添付ファイルをクリックすることにより、感染させるタイプである。
外部記憶媒体感染型:USBメモリ、デジタルカメラ、ミュージックプレイヤー等の外部記憶媒体を介して感染させるタイプである。
感染型: ファイル共有ソフトでは、不特定多数の利用者が自由にファイルを公開することができるため、別のファイルに偽装する等の方法で、いつの間にかウイルスを実行させられてしまうタイプである。暴露ウイルスなどがその一例である。
マクロプログラム悪用感染型:Officeアプリケーションでは、マクロを作成する際に、高度なプログラム開発言語であるVBA (Visual Basic for Applications) を使用できるため、ファイルの書き換えや削除など、コンピュータを自在に操ることが可能である。そのため、マクロウイルスに感染した文書ファイルを開いただけで、VBAで記述されたウイルスが実行されしまい、脅威となるコードが実行されるタイプである。
CMS改ざん型:個人や企業が運営するCMS(コンテンツマネジメントシステム・ワードプレスサイトの被害が特に多い)の脆弱性を利用して、管理者権限を乗っ取ったうえで、不正なコードをウェブサイトに埋め込む。改ざんによりマルウェアを埋め込まれたサイトはスパムメールの配信元となったり、そのサイトにアクセスしたユーザーを意図しないサイトに転送したりする。
マルウェアの検出には、マルウェア検出回避技術に対抗するために様々な技術を用いている。下記に例を示す。ただし、いかなる方法・手段・技術を用いても未知のマルウェアを100%検出・発見できるわけではない。また、いかなる方法・手段・技術を用いても未知のマルウェアからパソコンを100%保護してくれるわけではない。
パターンマッチング検出技術:セキュリティソフトなどがマルウェアを発見するための、最も一般的な方式である。セキュリティソフトは、パターンファイルと呼ばれるマルウェアの特徴(パターン)を記録したリストを持っている。そして、そのリストとパソコン内のファイルを比較して、一致すればマルウェアと判定して除去する。これが、パターンマッチングと呼ばれる方式である。パターンマッチングは、すでに存在が知られているマルウェアは間違いなく検出できる可能性が高い。ただし、そのためには常にパターンファイルを最新の状態にしておく必要がある。新しいマルウェアが登場したとき、その存在が知られて、パターンファイルに新しいマルウェアの情報が登録されるまでは効果がない。亜種・変種といって、既知のマルウェアを僅かに改変したマルウェアにも対応できない。
ヒューリスティック検出技術:ヒューリスティック検出技術とは、セキュリティソフトなどがマルウェアを探索する際に、パターンマッチングではなくマルウェアに特徴的な挙動の有無を調べる手法である。ヒューリスティック検知では、実行ファイルの挙動などを解析し、ライブラリファイルの書き換えなど、一般的なプログラムではあまり見られないような特異な挙動を探し出し、感染したマルウェアによるものと類推する。未知のマルウェアや亜種などに対して、ある程度の対応が可能である。ただし、この方法では未知のマルウェアを100%発見できるわけではなく、また、マルウェアではないものをマルウェアと誤認する場合もある。
サンドボックス検出技術:パソコンの内部に「サンドボックス」と呼ぶ仮想化環境を用意して、そこで不審なプログラムを動作させてみてマルウェアかどうかを判定する手法である。仮想化環境でなら不審なプログラムを動作させても、実環境に被害が及ぶことはない。
ビヘイビアブロッキング(振る舞い検知)技術:サンドボックス検出技術のサンドボックス上の実環境におけるプログラムの挙動を見てウイルスを検出するものを「振る舞い検知」あるいは「ビヘイビアブロッキング」と呼ぶ。
ジェネリック検出技術:短期間に大量発生するウイルスの亜種に迅速に対応する検出技術として採用されているのがジェネリック検出である。ジェネリック検出では、特定のマルウェアの既知の亜種から共通点を抽出し、既知の亜種だけでなく亜種と想定される複数のマルウェアを検出する。また、パターンマッチング方式では検出できない新しい亜種であっても、共通点が一致していれば発生した時点で検出できる。
パッカー検出技術:使われたパッカー・クリプターなどのコード改変ツールの「種類」から、怪しいかどうかを判定してマルウェアの疑いのあるファイルを検出する手法である。マルウェアに使われることの多いコード改変ツールが利用されたファイルを、疑わしいファイルとして検出する。
ホストベース不正侵入検知システム (Host-based Intrusion Detection System, HIDS) :Host IDSはシステム設定の変更を行ったユーザーや設定ファイルの変更箇所など、ファイルやレジストリへの変更をリアルタイムで監視し不正動作を検出する手法である。
ホストベース不正侵入防止システム (Host-based Intrusion Prevention System, HIPS) :アプリケーションに対しての最小権限アクセス制御機能によりゼロデイ攻撃を防ぎ、承認されたアプリケーションのプロセスであっても所定の動作に制限し、不正な攻撃からシステムを防御する手法である。
エクスプロイト対策技術:アプリケーション(PDFビューア・ブラウザなど)の脆弱性を突くエクスプロイト攻撃により、パソコンが不正侵入を受けないように保護する機能である。一般的なエクスプロイト対策としてはアプリケーションを最新の状態に更新することが非常に重要であるが、未知のエクスプロイト攻撃があった場合、更新を行っているだけでは完全に防げない可能性がある。どうしても防ぎきれない未知のエクスプロイト攻撃から出来る限りパソコンを保護する機能である。脆弱性攻撃防御技術とも呼ばれる。