分析を回避することを目指しているマルウェアの著者は、DelphiやHaskellなどの人気のないプログラミング言語に目を向けています。
ギリシャのピレウス大学およびアテナ研究センターとオランダのデルフト工科大学に所属するコンピューター科学者は、最近のマルウェアを調べて、それの一部が静的分析で見逃される理由をよりよく理解しました。
著者 – Theodoros Apostolopoulos、Vasilios Koutsokostas、Nikolaos Totosis、Constantinosos Patsakis、およびGeorgios Smaragdakis-彼らの調査結果を説明してください プレプリントペーパー 「楽しみと利益のために、派手なプログラミング言語でマルウェアをコーディングする」というタイトル。
がある 多くのマルウェア – AV-TESTによると、2025年にわずか2025年に悪意のあるコードの約2600万個の新しいインスタンスがあります。また、悪いコードを識別する主な方法の1つは、静的分析です。
マルウェアの著者はこれを知っており、多くの人がコードを難読化したり、サンドボクシングを防止したり、不動の手法を適用したりする努力をしています。
そのための1つの方法は、単にマルウェアに広く使用されていないプログラミング言語を使用することです。これは、CまたはC ++で記述される傾向があります。
「何年もの間、ランサムウェアグループは、リバースエンジニアリングと検出をより困難にするために、新しい、型破りな言語に切り替えてきました」と著者は述べています。さらに、さまざまな脅威アクターがこのアプローチを使用しており、幅広いプログラミング言語と技術を採用して悪意のあるコードを難読化しています。」
彼らは、ソフトウェアのリバースエンジニアリングの複雑さ、2012年の炎のマルウェアにおけるLUA難読化層の存在、および例としてキーコードを生成するためにアセンブリにコード化された脳動脈インタープリターを含むグリップウイルスのために、セキュリティ研究者が視覚的な基本6バイナリを嫌っていたことを指摘しています。
「Cで書かれたマルウェアは引き続き最も一般的であるが、主にAPT29などの主に知られている脅威グループになっているマルウェア演算子は、彼らの兵器庫に非典型的なマルウェアプログラミング言語を含むようになっている」と彼らは書いている。
「たとえば、APT29は最近、ウクライナに対するメイシピーマルウェアでPythonを使用しましたが、Zebrocyマルウェアでは、Delphi、Python、C#、およびGoの混合物を使用しました。同様に、AkiraランサムウェアはC ++からRust、BlackbyteランサムウェアからC#からシフトし、Hiveに移植されました。
ある程度、これはあいまいさを介したセキュリティのバリエーションです。特定の言語に精通している人が少ない場合、より少ない手動検出が予想され、自動化されたツールのサンプルが少なくなります。
しかし、特定されたマルウェアの署名に基づく自動検出メカニズムは、マルウェアが別の言語で書き換えられている場合、機能しません。また、HaskellやLispのような言語では、Cで開発されたマルウェアとは異なる実行モデルを採用しています。DARTやGOなど、他の言語では、標準環境の一部として多くの機能を実行可能ファイルに追加し、簡単なプログラムでさえ複雑にします。
特定の言語が他の言語よりも分析に抵抗する理由をよりよく理解するために、著者はマルウェアバザールから約400,000のWindows実行可能ファイルのセットを調べました。
彼らは、使用されるプログラミング言語がマルウェア検出率に影響することだけでなく、コンパイラの選択が違いをもたらすことも発見しました。 「サンプルのスパース性が堅牢なルールの作成を許可しないため、使用されていないプログラミング言語など、錆やNIMなどの検出率が低いと予想されますが、無線の使用されていないコンパイラの使用、例えば、ペルレスC、エンバルカデロデルフィ、タイニーCは、検出率に大きな影響を与えます。
APTS(高度な永続的な脅威)に焦点を当てたより限られたデータセットを見た後、研究者は、APT著者がプログラミング言語とコンパイラの選択を多様化していることは明らかであると述べています。
Boffinsがプログラミング言語間でマルウェアの違いを調査した方法の1つは、バイナリがシェルコードパターンのマッチングにどれだけ抵抗したかを評価することを含みました。
結果は、言語間で大きな変動を示し、マルウェアがより一般的な言語で見つけやすい理由を強調しました。 「CやC ++などの言語で記述されたサンプルは、通常、すべてのシェルコードバイトバイトで順次順序でバイトであるか、バイト間に固定ギャップがあり、比較的単純な検出につながります」と著者は言います。 「しかし、他の言語は、メモリレイアウトの有意なバイトの断片化と変動を示し、静的検出を複雑にしました。」
彼らは、シェルコードバイトを不規則または非自明な方法で分配する言語として、Rust、Phix、Lisp、およびHaskellを引用します。
実行された関数の複雑さ、実行された間接コールとジャンプの数、および生成されたスレッドの数など、人気の少ない言語をマルウェアの識別がより困難にすることができる他の理由があります。
「マルウェアは主にC/C ++で書かれており、Microsoftのコンパイラでコンパイルされています」と著者は結論付けています。 「しかし…私たちの研究は、コードベースを他の、使用されていないプログラミング言語またはコンパイラにシフトすることにより、マルウェアの著者がバイナリの検出率を大幅に減らすことができるが、マルウェアアナリストのリバースエンジニアリングの取り組みを同時に増やすことができることを実際に示しています。」
したがって、著者は、あまり一般的ではないプログラミング言語のコードは、セキュリティコミュニティでより多くの注目に値し、より関連性のある検出ツールに値すると主張しています。 ®
#不明瞭な言語で書かれた場合マルウェアを見つけるのが難しいレジスタ