リモートプロシージャコール(RPC)とは?gRPCとの違い・EternalBlue・ラテラルムーブメントへの対策を解説|サイバーセキュリティ.com

リモートプロシージャコール(RPC)とは?gRPCとの違い・EternalBlue・ラテラルムーブメントへの対策を解説



「EternalBlueがRPCに関係すると聞いた」「ラテラルムーブメントでRPCが使われるとは?」「gRPCとRESTの違いがわからない」——サイバーセキュリティの文脈でも開発の文脈でも頻繁に登場する技術が「RPC(リモートプロシージャコール)」です。

RPC(Remote Procedure Call:リモートプロシージャコール)とは、ネットワーク越しに別のコンピューター上のプログラム(プロシージャ・関数)を、あたかもローカルの関数を呼び出すかのように実行する技術です。ネットワーク通信の詳細を隠蔽し、開発者が分散システムを扱いやすくするために使われます。

セキュリティの観点では、WindowsのMS-RPCやSMB、WMI、DCOMなどの管理系通信は、攻撃者がラテラルムーブメント(横展開)・リモート実行・情報収集に悪用することがあります。WannaCryに使われたEternalBlue(CVE-2017-0144)は、WindowsのSMBv1の脆弱性を悪用した代表的な攻撃として知られています。

RPC(リモートプロシージャコール)とは?

RPC(Remote Procedure Call:リモートプロシージャコール)とは、ネットワーク上の別のコンピューターにある関数・プロシージャを、ローカルの関数を呼び出すのと同じように実行できる技術です。分散システムやマイクロサービスアーキテクチャの基盤として広く使われています。

「代理店に電話して手続きを頼む」のたとえ
RPCは「銀行の代理店に電話して、担当者に口座の残高照会をお願いすると、担当者が調べて結果を返してくれる」ようなものです。電話をかける側(クライアント)は、担当者が実際にどこのオフィスでどのように処理しているかを意識する必要がなく、結果だけを受け取れます。これがRPCの「透過性」です。

RPCの基本情報

項目 内容
開発の背景 1980年代に分散コンピューティングの基盤技術として提唱・発展
主な実装 Sun RPC(ONC RPC)、Microsoft MS-RPC、gRPC、Apache Thrift、XML-RPCなど
使用ポート(MS-RPC) TCP 135(RPC Endpoint Mapper)・RPC動的ポート。Windows Vista / Server 2008以降では通常49152〜65535が使われる。古いWindowsでは1024〜5000などが使われる場合がある
主な用途 分散システム、マイクロサービス、Windowsシステム管理、NFS、Active Directoryなど

RPCの仕組み:スタブとマーシャリング

RPCが「ローカルの関数呼び出しのように」リモートの関数を実行できる裏側には、スタブとマーシャリングという仕組みがあります。

RPCの処理フロー

  1. クライアントがローカル関数を呼び出すように関数を呼び出す(例:result = getBalance(accountId))
  2. クライアントスタブ(Client Stub)が呼び出しを受け取る。スタブはRPCフレームワークが自動生成するコードで、ローカル関数のように見せかけた「窓口」として機能する
  3. マーシャリング(Marshalling):クライアントスタブが引数をネットワーク転送できる形式(バイト列)に変換する
  4. ネットワーク送信:変換されたデータをサーバーに送信する
  5. アンマーシャリング(Unmarshalling):サーバー側でバイト列を元の引数に変換する
  6. サーバースタブ(Server Stub)が実際の関数を呼び出す
  7. 戻り値のマーシャリング:実行結果をネットワーク転送形式に変換する
  8. クライアントへの返送:結果をクライアントに送信する
  9. クライアントスタブが結果をアンマーシャリングしてクライアントプログラムに返す

IDL(インターフェース定義言語)

RPCでは通常、IDL(Interface Definition Language)でクライアント・サーバー間の関数のインターフェース(引数の型・戻り値の型)を定義します。IDLからスタブコードを自動生成することで、開発者はネットワーク通信の細かな処理を書かずに済みます。

RPC・REST・gRPCの違い

比較項目 RPC(従来型) REST gRPC
設計思想 「関数を呼び出す」(アクション中心) 「リソースを操作する」(リソース中心) RPCの現代的な実装
プロトコル 実装により異なる HTTP/HTTPS HTTP/2
データ形式 実装により異なる。バイナリ形式が使われることもある JSON・XMLなど Protocol Buffers(バイナリ)
インターフェース定義 IDLを使う場合が多い OpenAPI(Swagger)など .protoファイル(IDL)
パフォーマンス 実装により異なる 一般的には扱いやすいが、テキスト形式の変換コストがある 高性能になりやすい(バイナリ・HTTP/2)
ブラウザ対応 限定的 ◎ 標準的 △(gRPC-Webで対応)
主な用途 Windowsシステム内部・分散システム・レガシーシステム Web API・外部公開API マイクロサービス間通信・内部API

WindowsにおけるRPC

Windowsのシステム管理・ネットワーク機能の多くがMS-RPCを基盤として動作しており、これがセキュリティの観点で重要な意味を持ちます。

MS-RPC(Microsoft RPC)

MS-RPCは、MicrosoftがOpen Software Foundation DCE/RPCをベースに開発したWindowsのRPC実装です。Windowsの多くのシステムサービス、ファイル共有、プリンター共有、Active Directory、WMIなどがMS-RPCに関連して通信します。

  • RPC Endpoint Mapper(ポートマッパー):TCP 135で動作。クライアントが「どのサービスのRPCエンドポイントはどのポートか」を問い合わせる窓口
  • 動的ポート:実際のRPC通信は動的に割り当てられたポートで行われる。Windows Vista / Server 2008以降では通常49152〜65535が使われる
  • 名前付きパイプ:\\server\IPC$ 経由でSMBを通じてRPC通信を行う方法もある

DCOM(Distributed Component Object Model)

DCOMは、MicrosoftのCOM(Component Object Model)をネットワーク越しに使えるようにしたもので、MS-RPCの上に構築されています。Windowsのリモート管理、スクリプト実行、オートメーションなどで使われることがあります。攻撃者は、有効な認証情報や過剰な権限を悪用し、DCOMをラテラルムーブメントに利用することがあります。

WMI(Windows Management Instrumentation)

WMIは、Windowsシステムの情報取得・管理・自動化のための標準インターフェースで、リモート管理に使われることがあります。攻撃者は、盗んだ認証情報や管理者権限を使ってWMIを悪用し、リモートからコマンド実行、プロセス起動、情報収集を行うことがあります。

攻撃者によるRPCの悪用手法

EternalBlue(CVE-2017-0144)

EternalBlueは、NSAが開発したとされ、Shadow Brokersによって公開されたエクスプロイトです。WindowsのSMBv1に存在する脆弱性(CVE-2017-0144)を悪用し、脆弱な端末に対してリモートからコードを実行する攻撃に使われました。

  • 脆弱性の種類:SMBv1サーバーのリモートコード実行脆弱性
  • 深刻度:MicrosoftのMS17-010で「Critical(重大)」として扱われた
  • 悪用可能なこと:条件がそろうと、認証なしにリモートからコードを実行されるおそれがある
  • 被害:WannaCryやNotPetyaなどの大規模攻撃で悪用された
  • 対策:MS17-010パッチの適用、SMBv1の無効化、不要なSMB通信の遮断

ラテラルムーブメント(横展開)でのRPC悪用

攻撃者が社内ネットワークで1台のPCを侵害した後、他のシステムへ移動するラテラルムーブメントの過程で、RPCに関連するWindows管理機能が悪用されることがあります。

  • PSExec(Sysinternals):リモートからWindowsサービスを作成・実行できる正規の管理ツール。攻撃者に悪用されることがある
  • WMI経由のリモート実行:盗んだ認証情報や管理者権限を使い、リモートPCでコマンドを実行する
  • DCOM経由の実行:COMオブジェクトをDCOM経由で操作し、リモート実行に利用する手法がある
  • スケジュールタスクのリモート作成:リモートのタスクスケジューラにタスクを登録して実行する


RPC Endpoint Mapperのスキャン・列挙

攻撃者はTCP 135(RPC Endpoint Mapper)に接続し、どのRPCサービスが動作しているかを列挙しようとすることがあります。この情報をもとに、攻撃対象のサービスや設定不備を探す可能性があります。

DCOMの設定悪用

DCOMのアクセス権限設定が過剰に広い場合や、攻撃者が有効な認証情報を入手している場合、リモートからCOMオブジェクトを操作されるリスクがあります。不要なDCOMリモートアクセスは制限し、管理者権限を最小限にすることが重要です。

企業向けのRPCセキュリティ対策

SMBv1の無効化とEternalBlueパッチの適用

WindowsでSMBv1を無効化し、MS17-010をはじめとするセキュリティパッチを適用します。古いOSやサポート切れOSでは、パッチが適用できない場合もあるため、サポート対象のOSへ移行することが重要です。

Set-SmbServerConfiguration -EnableSMB1Protocol $false

ファイアウォールでのRPCポートの制限

  • インターネットからTCP 135(RPC Endpoint Mapper)・445(SMB)へのアクセスを遮断する
  • 社内でもRPCの動的ポートを必要なサーバー間のみに制限する
  • Windowsファイアウォールとネットワークファイアウォールの両方で制限する
  • Windows Vista / Server 2008以降では、RPC動的ポートとして49152〜65535が使われる点を考慮する

WMI・DCOMのアクセス制限

  • WMIのリモートアクセスを不要なシステムでは制限する
  • DCOMのアクセス権限を最小権限に設定する
  • 管理者権限を必要最小限にする
  • WMIアクティビティやリモート実行のログを収集し、SIEMやEDRで監視する

EDRによるRPC悪用の検知

EDRでは、PSExec、WMI、DCOM、リモートサービス作成、スケジュールタスク作成など、ラテラルムーブメントに関連する挙動を検知・調査できる場合があります。正規の管理ツールを使った攻撃はマルウェア検知だけでは見逃されることがあるため、プロセス作成、認証ログ、ネットワーク通信、管理者権限の使用状況を組み合わせて確認することが重要です。

特権アカウントの保護

WMI・DCOM・PSExecなどを使ったリモート実行には、管理者権限や有効な認証情報が使われることが多いため、特権アカウントの保護が重要です。Domain Admins、Local Administrators、サーバー管理用アカウントなどの使用を最小限にし、PAM(特権アクセス管理)やMFA、端末制限、監査ログを組み合わせて管理します。

RPCに関連する被害・注意事例2選

事例1:WannaCryがEternalBlueを悪用して世界中に拡散

2017年5月、ランサムウェアWannaCryは、EternalBlueと呼ばれるエクスプロイトを悪用して世界的に感染を拡大しました。EternalBlueは、WindowsのSMBv1に存在する脆弱性(CVE-2017-0144)を悪用し、脆弱なWindows端末に対してリモートからコードを実行する攻撃に使われました。

Microsoftは2017年3月にMS17-010として修正プログラムを公開していましたが、パッチ未適用の端末が残っていたことで、WannaCryの感染が世界的に広がりました。自社サイトのWannaCry解説でも、WannaCryはEternalBlueを利用して自己増殖し、ネットワークを通じて感染を拡大したと説明されています。

この事例は、RPCやSMBなどWindowsの基盤通信に関連する機能では、不要なサービスの無効化、インターネットからの遮断、脆弱性情報の把握、迅速なパッチ適用が重要であることを示しています。


事例2:PSExec・WMIを悪用したラテラルムーブメント

RPCは、脆弱性攻撃だけでなく、侵害後のラテラルムーブメントにも関係します。攻撃者は、盗んだ認証情報や管理者権限を使って、PSExec、WMI、スケジュールタスク、サービス作成などのWindows管理機能を悪用し、ネットワーク内の別端末へ移動することがあります。

サイバーセキュリティ.comのラテラルムーブメント解説では、PsExecのようなWindows管理ツールが、リモートシステム上でコマンドを実行する手段として悪用されることがあると説明されています。また、Impacketにはpsexec.pyやwmiexec.pyなど、Windows環境でのリモート実行に使われるツールが含まれています。

このような攻撃は、OSの正規機能や管理ツールを使うため、単純なマルウェア検知だけでは見逃される場合があります。管理者権限の最小化、不要なWMI/DCOMリモートアクセスの制限、WindowsイベントログやEDRによるリモート実行の監視が重要です。


よくある質問(FAQ)

Q. RPCとAPIの違いは何ですか?

APIは「外部のプログラムから機能を呼び出すためのインターフェース全般」を指す広い概念です。RPCはAPIを実現する具体的な技術の一つで、「関数呼び出しのようにリモート処理を実行する」ことに焦点を当てています。

Web APIでよく使われるRESTやGraphQLもAPIの一種ですが、RPCとは設計思想が異なります。gRPCはRPCの実装であり、APIインターフェースとして使われることもあります。

Q. gRPCとRPCはどう違いますか?

gRPCは、Googleが開発したRPCフレームワークで、HTTP/2とProtocol Buffers(protobuf)を使う現代的なRPCの実装です。従来型のRPCと比べて、型安全性、クロス言語対応、双方向ストリーミングなどに強みがあります。

マイクロサービスアーキテクチャでは、サービス間通信にgRPCが使われることがあります。ただし、ブラウザから直接扱う用途ではRESTの方が扱いやすい場合もあり、用途に応じて使い分けます。

Q. ポート135はなぜ危険と言われるのですか?

ポート135は、Windows RPCのEndpoint Mapperが動作するポートです。このポートに接続することで、Windowsサーバーで動作しているRPCサービスの情報を取得できる場合があります。攻撃者はこの情報を使って、攻撃対象のサービスや設定不備を探す可能性があります。

また、過去にはWindowsのRPCや関連サービスの脆弱性がワーム感染やリモートコード実行に悪用された事例もあります。インターネットからポート135への接続は、原則としてファイアウォールで遮断すべきです。

Q. WMIはセキュリティ上の問題があるのに無効にできますか?

WMIは多くのWindowsシステム管理機能、システム情報取得、イベントログ、パフォーマンス監視などの基盤であるため、完全な無効化は多くの環境で現実的ではありません。

代わりに、WMIのリモートアクセスを必要な管理端末やサーバーに限定し、アクセス権限を最小化し、WMIアクティビティをSIEMやEDRで監視する対応が現実的です。

Q. MS-RPCはLinuxやMacでも使われますか?

MS-RPCはWindows向けの実装ですが、LinuxではSambaがMS-RPC互換の通信をサポートしており、Windowsとのファイル共有やドメイン参加などで使われることがあります。

また、LinuxのNFSではSun RPC/ONC RPCが使われることがあります。macOSについては、通常のシステム機能ではWindowsのMS-RPCとは異なる仕組みが使われますが、Sambaなどを通じてWindows互換の通信が関係する場合があります。

まとめ

RPC(リモートプロシージャコール)は、ネットワーク越しに別のコンピューターの関数をローカルの関数のように呼び出せる技術です。スタブ、マーシャリング、IDLなどの仕組みによって、開発者はネットワーク通信の詳細を意識せずに分散システムを構築できます。従来型RPCに対して、RESTはリソース指向のWeb API、gRPCはProtocol BuffersとHTTP/2を使う現代的なRPC実装として使われています。

セキュリティの観点では、WindowsのMS-RPC、SMB、DCOM、WMIなどの管理系通信が、攻撃者に悪用されることがあります。EternalBlue(CVE-2017-0144)はWindowsのSMBv1の脆弱性を悪用し、WannaCryやNotPetyaの世界的な感染拡大に関係した代表的な事例です。

攻撃者は、PSExec、WMI、DCOM、スケジュールタスク、サービス作成などの正規のWindows管理機能を使い、ラテラルムーブメントを行うことがあります。そのため、単純なマルウェア検知だけでなく、認証ログ、プロセス作成、リモート実行、管理者権限の使用状況を監視することが重要です。

企業の対策としては、SMBv1の無効化、MS17-010などのパッチ適用、TCP 135・445のインターネット遮断、RPC動的ポートの制限、WMI・DCOMのアクセス制限、EDRによるラテラルムーブメント検知、特権アカウントの保護を組み合わせることが重要です。

SNSでもご購読できます。