コンピューティングにおいて、ポリモーフィックコードとは、ポリモーフィックエンジンを使用して元のアルゴリズムをそのまま維持しながら変化するコードのことです。つまり、コードは実行されるたびに変化しますが、コードの機能(意味論)は同じままです。たとえば、単純な数式 3+1 と 6-2 はどちらも同じ結果になりますが、CPUでは異なるマシンコードで実行されます。この手法は、コンピュータウイルス、シェルコード、コンピュータワームが自身の存在を隠すために使用することがあります。 [ 1 ]
暗号化は、コードを隠す最も一般的な方法です。暗号化では、コードの本体(ペイロードとも呼ばれます)が暗号化され、意味不明な状態になります。コードが以前と同じように機能するためには、復号化関数がコードに追加されます。コードが実行されると、この関数がペイロードを読み込み、復号化してから実行します。
暗号化だけではポリモーフィズムとは言えません。ポリモーフィズムを実現するには、暗号化/復号化ペアをコードのコピーごとに変更する必要があります。これにより、同じ機能を持つコードの異なるバージョンが可能になります。[ 2 ]
ほとんどのウイルス対策ソフトウェアや侵入検知システム(IDS)は、コンピュータネットワーク上で送信されるコンピュータファイルやデータパケットを検索することで、悪意のあるコードを特定しようとします。セキュリティソフトウェアが既知のコンピュータウイルスやワームに対応するパターンを発見した場合、脅威を無力化するための適切な措置を講じます。しかし、ポリモーフィックアルゴリズムは、悪意のあるコードを絶えず変異させるため、こうしたソフトウェアがそれを認識するのを困難にします。
悪意のあるプログラマーは、ウイルスやワームが拡散されるたびに、暗号化されていない復号エンジン(および結果として生成される暗号化されたペイロード)を書き換えることで、このウイルススキャン戦略から暗号化されたコードを保護しようとしてきました。アンチウイルスソフトウェアは、高度なパターン分析を使用して復号エンジンのさまざまな変異の中に潜むパターンを見つけ出し、このようなマルウェアを確実に検出しようとしています。
エミュレーションは、マルウェアが仮想環境で自己復号化してから、従来のシグネチャスキャンなどの他の方法を利用することで、ポリモーフィック難読化を回避するために使用されることがあります。このような仮想環境は、サンドボックスと呼ばれることもあります。復号化アルゴリズムの変更に関わらず復号化されたペイロードが同じままであれば、ポリモーフィズムはこのようなエミュレーションからウイルスを保護しません。メタモルフィックコード技術は、ウイルスが感染ごとに一定の識別可能なコードブロックをメモリ内に持たずに実行される可能性があるため、検出をさらに複雑にするために使用されることがあります。
最初の既知の多型性ウイルスは、マーク・ウォッシュバーンによって作成されました。1260 と呼ばれるこのウイルスは、1990年に作成されました。 [ 3 ]より有名な多型性ウイルスは、1992 年にハッカーのダーク・アベンジャーによって、アンチウイルス ソフトウェアのパターン認識を回避する手段として作成されました。一般的で非常に悪質な多型性ウイルスは、ファイル感染ウイルス Virutです。