📑 Table of Contents

ポリモルフィックコード: Polymorphic code)とは、本来のアルゴリズムを保ったまま変化していくコード(プログラム)である。この技法はコンピュータウイルスシェルコードワームが自身の存在を隠すために使われる。

アンチウイルスソフトウェア侵入検知システムの多くは、ファイルやコンピュータネットワーク上のパケットを調べ、悪意あるコードがないか調べる。これにおける検出方法はもっぱらパターンマッチであるため、ポリモルフィック手法によりコードを絶えず変化させることで、検出を難しくすることができる。

ポリモルフィックコードを実現する手段としてよく使われるのは暗号である。しかし、コード全体を暗号化してしまうと実行不可能となるので、それはできない。したがって、一部のコードは暗号化せずに残しておく。アンチウイルスソフトウェアは、その暗号化されない一部分をターゲットとして探索する。

悪意あるプログラマは、暗号化できない復号エンジン部をウイルスやワームが伝播するたびに書き換えることでセキュリティソフトウェアから逃れようとする。また、アンチウイルスソフトウェア側もマルウェアを確実に検出するため、復号エンジン部の突然変異によっても変化しないパターンを見つけ出そうとする。

ポリモルフィックコードを利用したマルウェアを「ポリモルフィック型マルウェア」、ウイルスを「ポリモルフィック型ウイルス」という。

世界初のポリモルフィックコード方式のウイルスを作ったのは Mark Washburn である。そのウイルス 1260 は1990年に書かれた。もっとよく知られているポリモルフィックコード方式のウイルスとしては、1992年にブルガリアのクラッカー Dark Avenger(en:Dark Avenger)が作った、ミューテーションエンジン(Dark Avenger Mutation Engineを略してDAME、あるいはMtEと略される)がある。MtEの著しい特徴は、それ自身は厳密にはウイルスではなく、他のウイルスにとりつき、そのウイルスのコードを暗号化する「エンジン」である点である。

編集

以下の擬似コードは、コードの一部が暗号化されているとして、それを復号して実行するコードである。

Start:
GOTO Decryption_Code
Encrypted:
    ...
    暗号化されたコード列
    ...
Decryption_Code:
    A = Encrypted
Loop:
    B = *A
    B = B XOR CryptoKey
    *A = B
    A = A + 1
    GOTO Loop IF NOT A = Decryption_Code
    GOTO Encrypted
 CryptoKey:
    何らかの乱数

以下は同じコードを不必要な C という変数を導入して擬装した例である。

Start:
GOTO Decryption_Code
Encrypted:
    ...
    暗号化されたコード列
    ...
Decryption_Code:
    C = C + 1
    A = Encrypted
Loop:
    B = *A
    C = 3214 * A
    B = B XOR CryptoKey
    *A = B
    C = 1
    C = A + B
    A = A + 1
    GOTO Loop IF NOT A = Decryption_Code
    C = C^2
    GOTO Encrypted
 CryptoKey:
    何らかの乱数

"Encrypted" 以下の暗号化されたコードを復号して実行したとき、Decryption_Code と CryptoKey の間にあるコードを調べ、変数 C をいじっている部分を削除する。次に暗号化されるとき、C をいじる不要なコードを新たに生成する。一般に、最初は暗号キーとしてゼロを使う。そうすると復号時に何も変化しないため、暗号化されていない通常のコードのままでよい。それを1回実行したときに新たな暗号キーを生成するなどして暗号化する。

他にも、NOP(何もしない)命令を適当に挿入するなどのポリモルフィックな技法がある。

関連項目

編集

参考文献

編集

📚 Artikel Terkait di Wikipedia

CODE リョーコ

ポータル ディズニー 『CODE リョーコ』(コード・リョーコ、原題:Code Lyoko)は、従来のアニメーション技術とCGIを用いたフランスのテレビアニメシリーズ。 2003年に第1シーズン全26話が放送され、2005年に第2シーズン全26話が放送、2006年には番外編全2話と第3シーズン全1

Scala

types. [A & B] や [A | B] と表現可能 Implicitsの文法変更 Dependent function types. Polymorphic function types. Type lambdas. Match types. Trait は class のように引数をとれるようになった。

Parrot

7.0で放棄された。将来的には、LLVMやnanojitなどの既存のJITライブラリを利用して新しいコンパイラを用意するとしている。 Polymorphic Container(PMC, 以前はParrot Magic Cookieの略とされていた)は、クライアント言語が扱う型を拡張するための仕組みである。

Linuxにおけるマルウェア

^ herm1t (2008年8月). “Linux.42: Using CRC32B (SSE4.2) instruction in polymorphic decryptor”. 2010年1月17日閲覧。 ^ Ferrie, Peter (2008年9月). “Life, the Universe

バッファオーバーフロー

Evangelos P.; Polychronakis, M.; Anagnostakis, Kostas D. (2005). “STRIDE: Polymorphic Sled Detection through Instruction Sequence Analysis.” (PDF). Proceedings

デキストロメトルファン

Woodworth, J. R.; Dennis, S. R. K.; Moore, L.; Rotenberg, K. S. (1987). “The Polymorphic Metabolism of Dextromethorphan”. The Journal of Clinical Pharmacology

心停止

症候群の例としては、QT延長症候群(LQTS)、ブルガダ症候群、カテコールアミン作動性多形性心室頻拍(Catecholaminergic polymorphic ventricular tachycardia: CPVT)(英語版)、QT短縮症候群などがある。また、致死的な不整脈を引き起こす可能性

ChatGPT

Your Code? Not So Fast”. Carnegie Mellon University Software Engineering Institute. 2024年10月4日閲覧。 ^ “Chatting Our Way Into Creating a Polymorphic Malware”