Webサーバを運営していてよかったことの一つは、「悪意ある攻撃」をリアルタイムで見られること、に尽きます。

2026/02/17も、そのようなログを見かけました。どのような攻撃で、どんな悪意があったのかのメモです。

さっくりとした攻撃概要

  1. 攻撃者はNode.js系のサービスが生きているかを確認した。
  2. その上で、サーバ乗っ取りを画策した。

環境・備考

  • Apache 2.4
  • ModSecurity v2 / CRSを利用

以下、ご紹介するログは実際のログですが、

  • IPアドレス
  • どのサイトに来たか

は別のものに置き換えています。これはプライバシー配慮という点ではなく「攻撃者に名前を与えない」から来るものです。

攻撃ログ(抜粋)

攻撃者は、Unix系とWindows系の両方のサーバーを想定し、2回に分けて「点火テスト」を試みています。

A. Unix/Linuxターゲットのペイロード

[Tue Feb 17 03:16:50 2026] [security2:error] [client 192.0.2.55] 
ModSecurity: Access denied with code 403 (phase 2). 
[id "932130"] [msg "Remote Command Execution: Unix Shell Expression Found"]
[id "934100"] [msg "Node.js Injection Attack 1/2"]

[data "Matched Data: var res=process.mainModule.require('child_process').execSync('echo $((40261*44548))').toString().trim(); ..."]

[hostname "sub.example.jp"] [uri "/"]

B. Windowsターゲットのペイロード

[Tue Feb 17 03:16:51 2026] [security2:error] [client 192.0.2.55] 
ModSecurity: Warning. [id "932120"] [msg "Remote Command Execution: Windows PowerShell Command Found"]
[data "Matched Data: var res=process.mainModule.require('child_process').execSync('powershell -c 40261*44548').toString().trim(); ..."]

攻撃の構造解析:何が行われようとしたのか

この攻撃はサーバー乗っ取りを目的としたものです。

「点火テスト」による生存確認

攻撃コードの中にある 40261*44548 という計算式が肝です。

  • 手口:
    • サーバー上でこの計算を実行させ、その結果(1,793,526,428)をレスポンスとして返させようとしています。
  • 意図:
    • もし計算結果が返ってくれば、そのサーバーは「外部からの命令をそのまま実行する状態」にあることが証明され、攻撃者は本格的なマルウェアの設置へ移行します。

Node.jsの深部への侵入

  • 手口:
    • process.mainModule.require('child_process') という、Node.jsの最も強力な権限を持つ命令を呼び出そうとしています。
  • 意図:
    • これが成功すると、サーバー上で任意のOSコマンド(ファイルの削除、パスワードの窃取など)が実行可能になります。

プロトタイプ汚染 (Prototype Pollution)

  • 手口:
    • __proto__ という特殊なプロパティを操作しようとしています。
  • 意図:
    • アプリケーション全体の挙動を「根底から書き換える」手法です。Next.jsの内部ロジックを捻じ曲げ、セキュリティチェックをバイパスしようとしています。

特記事項

今回のログで最も注目すべきは、ModSecurityの異常スコア(Anomaly Score)が 45点〜50点というそこそこ高い数値を叩き出している点です。

  • Unixシェルの構文検知(RCE)
  • Node.jsの危険な関数検知(Injection)
  • プロトタイプ汚染の検知(JavaScript攻撃)
  • PowerShellの使用検知(Windows攻撃)

これら複数のフィルタが同時にに反応したため、ModSecurityはこれは間違いなく脅威であると断定し、即座に遮断しました。

まとめ

攻撃は「いきなり行う」というよりは「どの攻撃が効くか」を確認してからリソースを集中していきます。なので、実際のログを見て「これが攻撃の前段階である」をつかんでおくのは大事。(そのためのログ確認です)

『孫子 虚実篇 六』の

「攻めて必ず取る者は、其の守らざる所を攻むればなり。守って必ず固き者は、其の攻めざる所を守ればなり」

これは、守備側に立たされるサーバ管理者も持っておきたい心構えだと思いました。