web-dev-qa-db-ja.com

通常のプロセス内でシェルコードを実行できるところで、それを利用して不快なPowershellコードを実行するステルスな方法は何ですか?

現在、Powershellの攻撃的な使用は、infosecで最もホットなトピックの1つです。 Powershellスクリプトは、ペネトレーションの「悪用後」フェーズに適していると最も頻繁に言われています。この質問は、Powershellを通常よりも少し早く使用するためのステップを含むことを除いて、これらの線に沿っていくらか続きます:only足場がそうであるとき選択したシェルコードを実行するアプリケーションを取得することはこれまでとは異なります。 (必要に応じて、「非常に早期の悪用後の攻撃」と呼びます)。

Windowsマシンの特定のプロセス内で(サイズ制限や文字制限なしで)アセンブリシェルコードを実行できるようになったとします。多くの低レベルコードを直接実行するのではなく、まったく別のことを実行するために、その機能を活用したいと思います。 Powershellコードを実行できるプロセス内に実行環境を作成します。

その選択の背後にある理由は非常に単純です。Powershell実行環境を設定すると、セキュリティコミュニティが現在生成/生成している、Powershellを使用して増え続けるすべてのツール、戦術、および手順を利用できます。そして、その環境をセットアップするwithin既に実行中のプロセスにより、Powershellコードを実行するための新しいプロセスの開始を回避できます(特にpowershell.exeの開始を回避できます) 、cmd.exe、またはwscript.exe)は、ほとんどの低スキルペンテスターや悪者がよく行うように、イベントログを監視している、または適切に構成されたHIDS/HIPSソフトウェアを使用しているディフェンダーに非常に非常に疑わしいことがある。全体的な目標は、既存のPowershellスクリプト/ツールの世界を利用する代わりに、低レベルのプログラミング言語で多くのカスタムプログラミング作業を行うことなく、一部のハイエンド攻撃者の一部の機能とステルスを複製することです。

ここで私が興味を持っていることの一般的な概念が機能していることを知っています。これは、(たとえば)Metasploitを使用して、具体的には dllinject で始まるペイロードで証明できるためです。 msfvenomによって生成されたシェルコードから-反射dllとともに(たとえば Empire から)、いくつかのテスト状況で新しいプロセスを作成せずにPowershellエージェントを正常に起動して実行します。しかし、率直に言って、Metasploitペイロードまたは通信に依存するものを最終的に(うまくいけば)HIDS、HIPS、NIDSなどのディフェンダーに対する実際のエンゲージメント中に使用される可能性があるものに使用するという考えについては、少し巧妙です。 。

同じ結果を達成しながら静かになる可能性のある代替のツール/方法はありますか?すでにいくつかのコードが実行されているターゲットでPowershellコードを実行し、簡単に検出できる新しいプロセスを作成しませんか? Assemblyで多くのカスタムコードを記述する必要がないほとんどすべてのことを検討できます。 (もちろん、より簡単に実装することが常に望ましいですが。)

4
mostlyinformed

私があなたが何を望んでいるかを正しく理解していれば、書き込み可能なページのマッピング、コードの記述、実行可能ページへの切り替えを試み、それを実行するだけです(それはPSでも何でもかまいません)。 Mallocの代わりにVirtualAllocを使用して、PAGE_EXECUTE_READWRITEでメモリ書き込み権限を取得します。メモリに書き込んだ後、最後に実行する前に、VirtualProtectを使用して実行フラグを設定することを忘れないでください。そのような戦術はあなたの目的のために働くべきであり、新しいプロセスは関与していません。

1
Overmind