
Windows RPCファイアウォールは、悪意のあるリモートプロシージャコールを監査、検出、ブロックし、DCSyncやZeroLogonなどのRPCベースの攻撃による横移動、偵察、悪用を防止します。
RPC Firewall のブログ記事や、BlackHatの講演 をご覧いただくと、RPC、RPC攻撃、そしてその解決策であるRPC Firewallについてより深く理解できます。
ご質問や問題、あるいは単に声を上げたい方は、|Zero| Labs Slackコミュニティワークスペースにご参加ください。
また、メールでのご連絡も歓迎します(そんなタイプの方)。[email protected] までお問い合わせください。
以下のチュートリアルでは、RPC Firewallの基本的なインストールとセットアップ、および様々なRPCベースの攻撃から保護するデモを示します。
RPCは、数多くの横移動テクニック、偵察、リレー攻撃、または単に脆弱なRPCサービスを悪用するために使用される基盤となるメカニズムです。
DCSync攻撃? RPC経由。リモートDCOM? RPC経由。WMIC? RPC経由。SharpHound? RPC経由。PetitPotam? RPC経由。PsExec? RPC経由。ZeroLogon? RPC経由… まあ、お分かりいただけるでしょう :)
このドキュメントでは、以下の用語を使用します。
すべてのリモートRPC呼び出しを監査するために使用できます。 リモート攻撃ツールを実行すると、どのRPC UUIDとOpnumがリモートから呼び出されたかを確認できます。
設定例はこちらにあります。
RPCFW Configurationが監査するように設定されている場合、イベントはWindowsイベントログに書き込まれます。 RPC Filter イベントはセキュリティログにイベントID 5712として書き込まれます。RPC Firewallのログはアプリケーション/RPCFWに書き込まれます。
ユーザーはこれらのログをSIEMに転送し、様々なサーバーにおけるリモートRPCトラフィックのベースラインを作成するために使用できます。 異常なRPC呼び出しが監査された場合、SOCチームにアラートをトリガーするために使用します。
いくつかのSigmaルールを統合しており、異常なRPCアクティビティや攻撃を検出するために使用できます。
RPCFW Configurationは、悪意のある可能性があるRPC呼び出しのみをブロックおよび監査するように設定できます。他のRPC呼び出しはノイズを減らしパフォーマンスを向上させるために監査されません。
悪意のある可能性のあるRPC呼び出しが検出されると、ブロックされて監査されます。これにより、SOCチームに警告を発しつつ、サーバーを保護し続けることができます。
保護を補完するために、RpcFwManager.exeを介してサポートされるRPCフィルタリング機能を使用することもできます。
そのような設定の例はこちらにあります。
3つのコンポーネントで構成されています。
それぞれの方法には長所と短所がありますが、RPC Firewallを使用する際のいくつかの大きな利点には特に注意が必要です。それは以下の通りです。
一方、RPC Filtersは、UUID全体の一括許可または拒否に優れており、問題なく実行できます。
コマンドを実行する前に、展開のステータスを確認することをお勧めします。これは'/status'コマンドを発行することで行います。
RpcFwManager.exe /status
これにより、RPC FirewallとRPC Filtersの両方のステータスが表示されます。インストールステータスと実行中の展開のステータスに関する詳細情報が出力されます。
ほとんどのコマンドの末尾にfwまたはfltを付けることができます。これにより、RPCFW Managerに、コマンドがRPC Firewall('fw')、RPC Filters('flt')、またはサフィックスなしの場合は両方に適用されるかを指示します。
関連する機能(RPC Filters / RPC Firewall / 両方)のインストールを実行します。
インストール/アンインストール中はイベントビューアーを閉じてください。 また、以前のバージョンがインストールされていないことを確認するために、インストール前に停止およびアンインストールすることをお勧めします。
RpcFwManager.exe /stop
RpcFwManager.exe /uninstall
RpcFwManager.exe /install
アンインストールは逆の操作を行います。ここでも、アンインストール前にサービスが停止していることを確認することをお勧めします。
RpcFwManager.exe /stop
RpcFwManager.exe /uninstall
RPC Filtersは、その性質上、システム全体のすべてのRPCサーバーに適用されます。このようなフィルターの適用は再起動後も永続的です。 新しいプロセスも古いプロセスも、RPCFW Configurationに従ってRPC Filtersによって保護されます。
RPC Firewallは注入され、リモートRPC呼び出しをリッスンしているRPCサーバープロセスを保護します。 これは、RPCRT4.DLL(RPCランタイム)をロードするプロセスにRPC Firewallを注入することによって行われます。ロードされると、RPC FirewallはRPCサーバーがリモートRPC呼び出しをリッスンしているかどうかを検出します。そうでない場合は、自身をアンロードします。 プロセスが有効なRPCサーバーである場合、rpcFirewallはRPCFW Configurationに従って、着信RPC呼び出しの監査と監視を開始します。
RPCサービスを保護する推奨方法は、*'/start'*コマンドを使用することです。これにより、RPC Firewallサービスが開始され('fw'またはサフィックスなしの場合)、RPC Filtersが作成されます('flt'またはサフィックスなしの場合)。
RpcFwManager.exe /start
RPC Firewallをアドホックに使用して、特定のプロセスを保護することも可能です。これはRPC Firewallサービスを開始せず、再起動後も永続化しません。
プロセスID(PID)によって単一のプロセスを保護するには:
RpcFwManager.exe /start pid <pid>
名前によって単一のプロセスを保護するには:
RpcFwManager.exe /start process <プロセス名>
保護を停止するには、適切なサフィックスを付けて*'/stop'*コマンドを発行するだけです(特定のプロセスの保護を停止することはできません)。
RpcFwManager.exe /stop
使用されたサフィックス('fw'、'flt'、またはなし)に応じて、これによりRPC Firewallサービスが停止され、すべてのプロセスからRPC Firewall DLLがアンロードされます。RPC Filtersの場合、RPCFW Managerによって生成されたすべてのフィルターが削除されます。
一度開始されると、RPC Firewallは再起動後も永続します。 RPC Filtersも永続的です。
RPCFW Managerは、実行可能ファイルと同じディレクトリにあるRpcFw.confファイルを探します。 このファイルは以下の設定オプションを使用します。
重要: 各設定行は、その行がRPC Firewall用かRPC Filter用かを示すために、'fw:'または'flt:'を接頭辞として付ける必要があります。
RPC関連の"もっと"を表示するには、show コマンドがあります。現時点では、RPCファイアウォールモジュールで保護できない保護対象プロセスのみを表示します。
RpcFwManager.exe /show
設定の順序は重要であり、最初に一致したものがRPC呼び出しの結果を決定します。
例えば、次の設定スニペットは、RPC Firewallを使用してDCをDCSyncから保護します。 これは、MS-DRSR UUIDの"危険な"opnum 3 DRSGetNCChangesを他のドメインコントローラーからのみ許可することで実現します。
fw:uuid:e3514235-4b06-11d1-ab04-00c04fc2dcd2 addr:<dc_addr1> opnum:3 action:allow
fw:uuid:e3514235-4b06-11d1-ab04-00c04fc2dcd2 addr:<dc_addr2> opnum:3 action:allow
fw:uuid:e3514235-4b06-11d1-ab04-00c04fc2dcd2 opnum:3 action:block
設定が変更された場合は、updateコマンドを使用してrpcFirewall.dllに通知する必要があります。
RpcFwManager.exe /update
RPC Firewallの場合、イベントビューアー -> アプリケーションとサービスログ -> RPCFW を開きます。 イベントID 1と2は'保護'および'保護解除'イベントを参照します。イベント3は実際のRPC呼び出しを監査します。 また、キーワード列を追加します。この列には監査成功/失敗が含まれ、RPC呼び出しがブロックされたかどうかを示します。
RPC Filtersの場合、イベントビューアー -> セキュリティ -> RPCFW を開きます。イベントID 5712でフィルターします。
はい!プルリクエストを遠慮なくお送りください。
私たちもそれを望んでいます! ご意見、アイデア、問題などがありましたら、[email protected] までご連絡ください。
詳細については LICENSE をご覧ください。
| パラメータ名 | 説明 | サポート対象 |
|---|
| opnum: | RPC opnumに一致 | RPC Firewall |
| verbose: | true または false のいずれか。trueの場合、特定のRPC呼び出しのデバッグ情報を出力します(デフォルトはfalse) | RPC Firewall |
| prot: | 使用するプロトコルをプロトコルシーケンス定数のいずれかに一致させます | RPC FirewallとFiltersの両方 |
| addr: | リモートIPアドレス(IPv4またはIPv6、CIDRを含む)に一致 | RPC Firewall、およびRPC Filtersでは部分的にサポート。詳細はこちら |
| uuid: | 特定のuuidに一致 | RPC FirewallとFiltersの両方 |
| action: | allow または block のいずれか(デフォルトはallow) | RPC FirewallとFiltersの両方 |
| audit: | true または false のいずれか。イベントをRPCFWログに書き込むかどうかを制御します(デフォルトはfalse) | RPC FirewallとFiltersの両方 |
| sid: | 認証されたユーザーをセキュリティ識別子に一致させます。特定のユーザーまたはグループにできます。 | RPC FirewallとFiltersの両方 |