マルウェア
マルウェア (malware) とは、不正かつ有害に動作させる意図で作成された悪意のあるソフトウェアや悪質なコードの総称。コンピュータウイルスやワームなどが含まれる。
悪意のコード（malicious code）、悪意のソフトウェア（malicious software）、悪意のある不正ソフトウェア、有害なソフトウェア、不正プログラムとも呼ばれる。
マルウェアの行う活動としてはデータの破壊やデータの盗難などがあるが、こうした「悪意のある」行動をするソフトのみならず、ユーザの望まない広告を勝手に出すアドウェアのような「迷惑ソフト」(の中で悪質なもの)もマルウェアの範疇に含める場合がある。
マルウェア("malware") は、「悪意のある」という意味の英語「malicious（マリシャス）」と「software」を組み合わせて創られた混合語である。
類義語としてクライムウェアがあり、これはマルウェアの中で特に犯罪(crime)に使われるものを指すとするものもあるが、必ずしもこれを要件としないものもあり、マルウェアとの関係は判然としない。
マルウェアの種類の代表例として以下のものがあげられる。なお、以下の種類は排他的ではなく、複数の種類の定義を満たすマルウェアも存在しうる。
狭義のコンピュータウイルスあるいは単に狭義のウイルスとは他のプログラムやファイルの一部を書き換え（寄生、感染）、自己複製する機能を持つマルウェアのことである。感染対象のプログラムの事をウイルスの宿主もしくはホストプログラムという。
狭義のウイルスは感染経路を秘匿するなどの目的で、プログラムなどに感染したあと一時的に潜伏し、その後しばらく経ってから活動を開始（発病）するものも多い。
広義のウイルスは文脈によって定義が様々であるが、 「コンピュータウイルス対策基準」では、自己伝染機能、潜伏機能、発病機能のいずれかをもつ加害プログラムの事をウイルスの定義として採用している。後述するワームやトロイの木馬は狭義のウイルスではないが、この意味での広義のウイルスには属する。最広義では「ウイルス」という語はマルウェアと同義であり、マスメディアなどではこの最広義の意味に用いられるが、これは誤用であるとされることもある。
ワームはウイルス同様自己増殖するが、ホストプログラムを持たず、単体で存在するプログラムの事を指す。
バックドアとは外部からコンピューターを操るために作られたコンピューターへの不正な侵入経路の事でRAT(Remote Administration Tool)とも呼ばれる。バックドアをしかけるマルウェアをバックドア型と呼ぶ。
トロイの木馬は一見無害なファイルやプログラムに偽装した上でコンピューターに侵入したあと悪意のある振る舞いをするものを指すことが多いが、偽装を行わずにOS等の脆弱性を悪用して勝手にインストールされてしまうもの(ドライブバイダウンロード)もトロイの木馬に含める場合がある。狭義のウイルスと違い自己増殖機能は持たない。またトロイの木馬の定義として単体で存在し宿主を必要としないことを要件に加えるものもあるが、これを要件としない場合もある。
トロイの木馬の定義として、コンピューター内部に侵入したあと攻撃者による外部からの命令で悪意のある振る舞いをする事やバックドア型である事を要件にする場合もある。
スパイウェアは情報収集を主な目的とし、コンピューターの内部情報を外部に勝手に送信するソフトウェアで、ユーザーが気づかないうちにパソコンにインストールしているパターンが多い。
IPAとJNSAの定義によればスパイウェアとは「利用者や管理者の意図に反してインストールされ、利用者の個人情報やアクセス履歴などの情報を収集するプログラム等」のことである。
スパイウェアはマルウェアの一種とみなすことが多いが、シマンテックはスパイウェアをマルウェアに含めていない（クライムウェアには含めている）。
キーロガーもしくはキーストロークロガーはキーボードからの入力を記録するプログラムのことで、キーロガーというものそれ自体はマルウェアではなく、コンピューターの所有者自身がデバッグのためにしかけるなどの使い方もあるが、パスワードや個人情報などを奪取するため悪意を持ってしかけられるなどマルウェア（スパイウェア）として用いられることもある。同様にネットワークを通るパケットを監視するスニッファも盗聴目的で使われる場合がある。
ボットも、その言葉自体は常駐してチャットで会話するなどといった機能を持つ任意のプログラムを指すもので、必ずしもマルウェアを指すものではない。マルウェアとしては、ボットネットと呼ばれる仕組みにより、IRCなどを利用して攻撃者から命令を受け取り、命令に応じてDDoS攻撃やスパムメール送信などを行うマルウェアを指す。ボットに感染したコンピューターによって構成されたネットワークをボットネットもしくはゾンビクラスタという。それに対しボットネットに指令を出すサーバをC&Cサーバ（Command and Control server)という。またボットなどの感染により攻撃者による遠隔操作が可能なコンピューターをゾンビマシンという。
ルートキットは攻撃者が被害者のコンピューターに侵入したあとに用いるツールを集めたパッケージで、マルウェアとして被害者のコンピューターにしかける。侵入の発覚を防ぐログ改ざんツール、バックドアをしかけるツール、キーロガー、パスワードやクレジットカード情報等の窃盗ツール、DDoS攻撃用のボット化ツール、セキュリティソフトの無効化ツールなどが含まれていることがある。こうした攻撃を容易にするため、システムバイナリを含めたファイルを数百個単位で改ざんする。ルート権限を奪うなど管理者レベルのアクセス権を取得する事を定義とする場合もある。
ランサムウェア(ransomware)は、コンピューターをロックしたり重要なファイルを暗号化して読めなくするなどして被害者を困らせ，身代金(ransom)を払えば元に戻すと脅迫するマルウェア。
スケアウェア(scareware)とはユーザの恐怖(scare)心を煽る偽の警告メッセージ（「PCから違法ポルノやウイルスが検出された」等）を表示し、問題を解決するには所定の金額を支払うようにと脅すマルウェア。
ダウンローダーはサイズの小さなマルウェアで、攻撃者のサーバから被害者のコンピューターに実行ファイルなどをダウンロードするなどさらなる攻撃の足がかりにする。
アドウェア（Adware）はユーザの望まない広告を勝手に出すソフトウェアである。アドウェアないしその中の悪質なものもマルウェアの範疇に含める場合がある。
不正行為を実行するために、攻撃者はマルウェアを作成するが、その不正な試みが検出されてしまっては、その目的を達成することはできない。セキュリティベンダーがセキュリティ技術を進化させると、それに合わせて攻撃者も技術を進化させる。セキュリティベンダーと攻撃者の間では、いたちごっこが繰り返されている。回避技術は、検出、分析、把握を回避するためにマルウェアが使用する手段の総称である。
セキュリティ技術に対する回避技術は次の3つに分類できる。
高度なマルウェアの中には、このような技術を組み合わせて利用しているものもある。たとえば、RunPE（メモリー内で自身のプロセスをもう1つ実行する）などの技術を使用して、マルウェア対策ソフトウェアやサンドボックス、分析を回避している。また、仮想環境に関連する特定のレジストリキーを検出し、サンドボックスでの自動分析や仮想マシン上での動的分析を回避するマルウェアもある。
ウイルスをはじめとしたマルウェアはセキュリティーソフトに発見されないよう、下記のようなツールや手法を用いていることがほとんどである。また、サイバーセキュリティの回避技術で、よく使われる用語がある。ここで、攻撃者が使用するツール、手法や用語をいくつか紹介する。
Crypter（クリプター）: マルウェアの実行時に、マルウェア対策エンジンや静的分析による検出を回避するため、マルウェアの暗号化と復号を行う。クリプターは、攻撃対象に合わせて作成されることが多く、闇市場で購入することもできる。クリプターをカスタマイズすることで、復号や逆コンパイルがさらに困難になる。既知の高度なクリプターとしては、Aegisクリプター、Armadillo、RDG Tejonなどがある。
Packer（パッカー）: クリプターと似ているが、マルウェアファイルの暗号化ではなく圧縮を行う。UPXが代表的なパッカーである。
Binder（バインダー）: 複数のマルウェアファイルを1つに結合する。マルウェアの実行ファイルの拡張子を変更せず、JPGファイルに結合できる。マルウェア作成者は、正規のEXEファイルにマルウェアファイルを結合しようとする。
Pumper（ポンパー）: ファイル サイズを増やす。これにり、マルウェア対策エンジンによる検出を回避できる場合がある。
FUD: マルウェアの販売者がツールの説明やアピールに使用するもので、あらゆるマルウェア対策ソフトで完全に検出不可（FUD/Fully UnDetectable）であることを表す。有効なFUDプログラムは、スキャンタイムとランタイムの両方を組み合わせ、100%検出不可を実現する。既知のFUDとして、次の2種類が知られている。
Unique stub generator（ユニークスタブ ジェネレーター）: 実行中の各インスタンスに固有のスタブを作成し、検出と分析を困難にする。（スタブとは、通常、元のマルウェアファイルのメモリーへの読み込み（復号または解凍）に使用するルーチンが含まれる。）
ファイルレス マルウェア: ディスクにファイルを書き込むことはせず、自身をメモリーに挿入することでシステムに感染する。
難読化: マルウェアのコードを簡単に人が理解できないようにする。プレーンテキストの文字列をエンコード（XOR、Base64など）し、マルウェアファイルに挿入したり、ジャンク関数をファイルに追加する。
ジャンクコード: 無駄なコードや偽の命令をバイナリに追加し、逆アセンブルを欺いたり、簡単に分析されないようにする。
アンチ: 保護ツールや監視ツールの回避、無効化、終了に使用するすべての手法を指す。地下フォーラムや闇市場で使用される。
Virtual machine packer（仮想マシン パッカー）: 仮想マシンの概念を取り入れた高度なパッカーである。マルウェアのEXEファイルが圧縮されると、元のコードが仮想マシンのバイトコードに変換され、プロセッサーの動作をエミュレートする。既知のものではVMProtect、CodeVirtualizerでこの手法が利用されている。
最も一般的な回避技術は次のとおりである。
マルウェアは、下記のように、様々な感染経路によって、感染活動を行っている。 ネットワーク感染やメール添付感染等の感染手法の他に、ホームページを見ただけで感染する「Web閲覧感染型」も感染手法の一つとして確認されており、その方法も高度化・巧妙化している。
下記に感染経路の例を示す。
マルウェアの検出には、マルウェア検出回避技術に対抗するために様々な技術を用いている。下記に例を示す。ただし、いかなる方法・手段・技術を用いても未知のマルウェアを100％検出・発見できるわけではない。また、いかなる方法・手段・技術を用いても未知のマルウェアからパソコンを100％保護してくれるわけではない。