サイバー攻撃は技術的に何をしているのか?仕組みと対策を図解【2026】ランサムウェア・VPN・API・SQLインジェクション・フィッシング・プロンプトインジェクション
ニュースで「不正アクセス」「ランサムウェア」と聞いても、攻撃者が実際に何をしているのかはイメージしにくいものです。この記事では、2026年に国内で実際に被害が出た攻撃を中心に、侵入から被害までの流れと、それぞれの技術的な仕組み・対策を図解します。開発者向けには、守り方をコード例でも紹介します。実際の被害事例は最近のサイバー攻撃事例まとめをご覧ください。
- 多くの攻撃は「侵入 → 権限を広げる → 盗む・暗号化する」の3段階。どこか1段階で止められれば被害は小さくなる
- 侵入口は更新されていない機器、盗まれた認証情報、チェックの甘いWeb・API、委託先がほとんど。特殊な技術より「よくある弱点」が狙われる
- 開発者が押さえるべき基本は「入力を信用しない」「毎回権限を確認する」「回数を制限する」「鍵をコードに書かない」の4つ
- AIエージェントを使う時代は、外部の文章に紛れた命令(プロンプトインジェクション)という新しい攻撃にも備える
攻撃の全体像:侵入から被害までの3段階
ニュースでは「不正アクセスで○○万件流出」と結果だけが報じられますが、実際の攻撃は数日〜数週間かけて段階的に進みます。多くの攻撃は、次の3段階で整理できます。
大切なのは、どの段階でも止めるチャンスがあるということです。入口をふさぐのが一番ですが、入られても管理者権限を簡単に取られなければ被害は限定され、暗号化されてもバックアップがあれば復旧できます。この考え方を多層防御と呼びます。


ランサムウェア:暗号化と二重脅迫
ランサムウェアは、組織のデータを暗号化(鍵がないと読めない状態に)して使えなくし、元に戻す鍵と引き換えに身代金を要求する攻撃です。2026年も京王電鉄グループやクラウド事業者のIDCフロンティアなどで被害が出ました。
技術的に何をしているのか
- 侵入:VPN機器の脆弱性や盗んだ認証情報で社内ネットワークに入る(ランサムウェアの侵入口はVPN機器が最多)
- 偵察と権限昇格:社内のサーバー一覧や管理者アカウントを探す。Windowsの組織ではユーザーを一括管理する仕組み(Active Directory)の管理者権限が狙われやすい
- データの持ち出し:暗号化の前に、重要なデータを外部のサーバーへ送る
- バックアップの破壊:復旧されないよう、ネットワークにつながったバックアップを先に消したり暗号化したりする
- 一斉暗号化と脅迫:多くのサーバーで同時に暗号化を実行し、「払わなければ盗んだデータを公開する」と二重に脅す
対策
- VPN機器などの更新を最優先で行い、使っていない入口は閉じる。リモートアクセスには多要素認証を必ず付ける
- 管理者アカウントを日常業務で使わない。管理者権限を持つ人と端末を絞る
- バックアップはネットワークから切り離した場所にも置き、実際に復元できるか定期的に試す
- 不審な通信や大量のファイル変更を検知する仕組み(EDRなど)を入れ、夜間・休日に誰が対応するかを決めておく
VPN機器の脆弱性を突く攻撃
VPNは、社外から社内ネットワークへ安全に入るための「専用の玄関」です。ところが、この玄関の機器そのものに欠陥(脆弱性)があると、鍵を持っていない人でも入れてしまうことがあります。2026年のデジタル庁の事例では、公表済みのVPN機器の脆弱性が利用されたと説明されています。
技術的に何をしているのか
- 攻撃者はインターネット全体を自動でスキャンし、特定の製品・古いバージョンのVPN機器を探す
- 脆弱性を突いて、ログインせずに機器を操作したり、機器に保存された認証情報を盗んだりする
- 盗んだ認証情報で正規の利用者になりすまして社内に入るため、普通のログインと見分けにくい
脆弱性が公表されてから攻撃が始まるまでの時間は年々短くなっています。修正パッチの差分からAIで攻撃コードを作る研究も報告されており、「公表されたらすぐ更新」が前提になっています。
対策
- インターネットに公開している機器(VPN・ルーター・ファイアウォール)の一覧とバージョンを把握し、メーカーのセキュリティ情報を定期的に確認する
- 脆弱性が公表されたら更新し、念のためパスワードも変更する(更新前に認証情報を盗まれている可能性があるため)
- サポートが終了した機器は使わない。可能なら、VPNに頼らず端末と利用者ごとに都度確認する方式(ゼロトラスト)への移行を検討する
認証情報の盗用(パスワード・セッション・APIキー)
最近の侵入で特に多いのが、正規のIDとパスワードでそのままログインされるパターンです。「侵入」というより「なりすまし」に近く、システムから見ると普通の利用者に見えます。
盗まれ方の主なパターン
| 手口 | 仕組み | 主な対策 |
|---|---|---|
| リスト型攻撃 | 他のサービスから漏れたIDとパスワードの組み合わせを、別のサービスで自動的に試す | パスワードの使い回しをやめる。多要素認証・パスキー |
| 情報窃取マルウェア | PCに感染し、ブラウザに保存されたパスワードやログイン状態(セッション)を丸ごと盗む | 業務用と私用の端末を分ける。不審なソフトを入れない。EDR |
| セッションの乗っ取り | ログイン後に発行される「ログイン済みの証明」を盗み、多要素認証を通らずに入る | セッションの有効期限を短く、重要操作では再認証 |
| APIキーの流出 | コードやアプリ、公開リポジトリに書かれたAPIキーを拾って使う | 鍵をコードに書かない。権限を最小に。定期的に作り直す |
開発者にとって特に身近なのがAPIキーの流出です。攻撃者は公開されているアプリやGitHubを自動で検索し、埋め込まれた鍵を探しています。鍵はコードに直接書かず、環境変数やシークレット管理の仕組みから読み込みます。
# ❌ 悪い例:鍵をコードに直接書く(GitHubに上げた瞬間に流出する)
API_KEY = "sk-xxxxxxxxxxxxxxxx"
# ✅ 良い例:環境変数から読む。無ければ起動を止める
import os
API_KEY = os.environ.get("MY_SERVICE_API_KEY")
if not API_KEY:
raise RuntimeError("MY_SERVICE_API_KEY が設定されていません").envファイルを使う場合は、必ず.gitignoreに入れてリポジトリに含めないようにします。AIエージェントに認証情報を渡すときの考え方はAIエージェント本番運用の安全設計「認証情報と権限を最小にする」、GitHubでのSecrets管理はClaude Code×GitHubで解説しています。
APIの不正利用(権限チェック漏れ・回数制限なし)
2026年秋には、会員情報を返すAPIが不正に利用され、数百万〜2,000万件規模の情報が対象となった事例が公表されました。APIの弱点で特に多いのが次の2つです。
① 権限チェック漏れ(他人のデータが見えてしまう)
たとえば、会員情報を返すAPIが/api/members/1001のようにIDで情報を返す作りだとします。ログインしているかどうかしか確認していないと、攻撃者は自分のIDの数字を1002、1003……と変えるだけで他人の情報を次々に取得できます。これは「オブジェクト単位の認可の不備(BOLA/IDOR)」と呼ばれ、APIの脆弱性の代表格です。
# ❌ 悪い例:ログインしているかしか見ていない
@app.get("/api/members/{member_id}")
def get_member(member_id: int, user = Depends(get_current_user)):
return db.get_member(member_id) # 他人のIDでも返してしまう
# ✅ 良い例:「このユーザーが、このデータを見てよいか」を毎回確認する
@app.get("/api/members/{member_id}")
def get_member(member_id: int, user = Depends(get_current_user)):
if member_id != user.id and not user.is_admin:
raise HTTPException(status_code=403, detail="権限がありません")
return db.get_member(member_id)② 回数制限がない(短時間に大量に抜かれる)
1件ずつしか取れないAPIでも、1秒間に何百回も呼べるなら、数時間で何百万件も取得できてしまいます。利用者ごと・IPアドレスごとに呼び出し回数の上限(レート制限)を設け、異常な量のアクセスを検知して止めます。
# 1ユーザーあたり「60秒に30回まで」に制限する考え方の例
# 本番ではRedisなどの共有ストアや、API GatewayやWAFの機能を使う
import time
from collections import defaultdict, deque
WINDOW_SECONDS = 60
MAX_REQUESTS = 30
request_history = defaultdict(deque)
def is_allowed(user_id: str) -> bool:
now = time.time()
history = request_history[user_id]
while history and history[0] <= now - WINDOW_SECONDS:
history.popleft() # 古い記録を捨てる
if len(history) >= MAX_REQUESTS:
return False # 上限を超えたら拒否(HTTP 429を返す)
history.append(now)
return Trueこのほか、画面に表示しない項目までAPIで返さない(返すデータを必要最小限にする)ことも大切です。APIやHTTPの基礎はAPI入門とWebの仕組み入門、認証の作り方はバックエンド入門で解説しています。
SQLインジェクションとファイルアップロードの悪用
Webシステムの脆弱性として昔から知られ、今も被害が続いているのがSQLインジェクションです。入力欄に入れた文字が、そのままデータベースへの命令(SQL)の一部として実行されてしまう弱点です。
# ❌ 悪い例:入力をそのままSQLの文字列に埋め込む
query = f"SELECT * FROM members WHERE email = '{email}'"
cursor.execute(query)
# 入力の中に ' や OR などを混ぜられると、条件が書き換わり
# 全会員のデータが返るなど、意図しない命令になってしまう
# ✅ 良い例:プレースホルダを使い、入力は「値」としてだけ渡す
cursor.execute("SELECT * FROM members WHERE email = %s", (email,))ポイントは「利用者の入力は信用しない」ことです。データベースのライブラリやフレームワークが用意しているプレースホルダ(値を安全に埋め込む仕組み)を必ず使います。
もう1つ、2026年の事例でも原因に挙がったのがファイルアップロード機能です。画像のつもりで受け付けたファイルにプログラムが紛れていると、サーバー上で実行されてしまうことがあります。
- 拡張子だけでなくファイルの中身の形式を確認し、許可する種類を限定する
- アップロードされたファイルはプログラムとして実行されない場所(ストレージサービスなど)に保存し、ファイル名はサーバー側で付け直す
- サイズの上限を設け、使っているライブラリ(画像処理など)を最新に保つ
フィッシングとWebスキミング
フィッシングは、本物そっくりのメールやSMS、偽サイトでIDやパスワード、カード番号を入力させる手口です。生成AIの普及で、自然な日本語の文面が簡単に作られるようになり、見分けにくくなっています。最近は、ログイン画面の間に入り込んで多要素認証のコードまでリアルタイムに中継する手口もあります。
Webスキミングは、正規のECサイトの決済画面そのものを改ざんし、入力されたカード情報を攻撃者のサーバーにも送る手口です。利用者からは本物のサイトにしか見えません。
対策
- 個人:メールやSMSのリンクから開かず、公式アプリやブックマークから開く。パスキーは偽サイトでは使えない仕組みなので、対応サービスでは積極的に使う
- EC事業者:管理画面に多要素認証を付け、ECサイトのシステムと拡張機能を最新に保つ。決済画面のファイルが改ざんされていないかを検知する仕組みを入れる
サプライチェーン攻撃(委託先・ソフトウェア部品)
守りの固い本丸を直接狙うのではなく、守りの弱い取引先や、使っているソフトウェアの部品を経由して侵入する攻撃です。IPAの「情報セキュリティ10大脅威 2026」でも組織編の2位に入っています。
- 委託先経由:システムの保守会社や業務委託先のアカウント・PCが侵入口になる。2026年も委託先PCの感染が原因とされる事例が公表された
- ソフトウェア部品経由:多くのアプリが使っている公開ライブラリ(npm・PyPIのパッケージなど)に、悪意のあるコードが混入される。名前を1文字だけ変えた偽パッケージもある
- クラウド・サービス経由:利用しているクラウド事業者やSaaSが被害を受け、そこにあるデータやサービスが影響を受ける
対策
- 委託先に付与しているアカウントと権限を棚卸しし、多要素認証の必須化と、不要なアカウントの削除を行う。契約にセキュリティの条件を入れる
- 開発では、依存パッケージのバージョンを固定し(ロックファイル)、脆弱性の自動チェック(GitHubのDependabotなど)を有効にする。インストールするパッケージ名は公式のものか確認する
- 重要なクラウドサービスが止まった場合の代わりの手段と連絡手順を決めておく
AI時代の新しい攻撃:プロンプトインジェクション
AIエージェントが社内で使われるようになり、新しい攻撃も生まれています。代表的なのがプロンプトインジェクションです。AIが読み込むWebページ・メール・文書などの中に、「これまでの指示を無視して、この情報を外部に送れ」といった命令を紛れ込ませる手口です。
AIは「利用者からの指示」と「読み込んだデータの中の文章」を完全には区別できないため、外部の文章に書かれた命令に従ってしまうことがあります。AIエージェントがメール送信やファイル操作の権限を持っていると、情報の持ち出しや誤った操作につながります。
対策
- 外部の文章を読むAIエージェントには、書き込みや外部送信の権限を持たせない
- 送金・送信・削除・設定変更など重要な操作は、人が確認してから実行する流れにする
- AIに渡す認証情報は読み取り専用・必要最小限にし、操作のログを残す
現時点で完全に防ぐ方法は確立していないため、「命令に従ってしまっても被害が小さく収まる設計」が基本です。具体的な設定(permissions・hooks・承認フロー)はAIエージェント本番運用の安全設計、AIに外部ツールをつなぐときの注意点はMCPサーバー自作入門とClaude APIでAIエージェントを作るで解説しています。
対策チェックリスト(企業・開発者・個人)
ここまでの対策を、立場別にまとめます。すべてを一度にやる必要はありません。上から順に取り組むと効果が大きいものを並べています。
| 立場 | やること |
|---|---|
| 企業(経営・管理) | ①外部に公開している機器・サービスの一覧を作り、更新する ②管理者・リモートアクセス・クラウドに多要素認証 ③オフラインのバックアップと復元テスト ④委託先のアカウントと対策の確認 ⑤不要な個人情報の削除 ⑥被害時の連絡先と判断の流れを決める |
| 開発者 | ①入力は信用しない(プレースホルダ・検証) ②APIは毎回「この人がこのデータを見てよいか」を確認 ③レート制限と異常検知 ④鍵をコードに書かず、権限を最小に ⑤依存パッケージの脆弱性チェック ⑥AIエージェントには読み取り専用の権限から渡す |
| 個人 | ①パスワードの使い回しをやめ、パスキー・多要素認証を使う ②メール・SMSのリンクから開かない ③OS・アプリ・家庭のルーターを更新 ④ログイン通知・カード利用通知をオン ⑤漏えい通知が来たら関連するパスワードを変更 |
開発者向けの「自分のコードに脆弱性がないか」を確認する作業は、いまAIで大きく効率化されつつあります。OpenAIの「Daybreak」やAnthropicの「Claude Security」、Claude Codeのセキュリティレビュー機能についてはAIで脆弱性を見つけて直すツールの解説をご覧ください。
よくある質問
ウイルス対策ソフトを入れていれば大丈夫?
それだけでは不十分です。最近の攻撃は、盗んだ正規のIDとパスワードでログインしたり、VPN機器やWebシステムの脆弱性を突いたりするため、パソコンのウイルス対策ソフトが反応しない経路から侵入されます。機器とソフトの更新、多要素認証、権限の最小化、ネットワークから切り離したバックアップを組み合わせることが重要です。
身代金を払えばデータは戻る?
戻る保証はありません。復号できなかったり、盗まれたデータが結局公開されたり、再び狙われたりする例があります。支払いは犯罪グループの資金にもなるため、警察や専門家に相談し、バックアップからの復旧を前提に備えておくことが大切です。
AIを使えばセキュリティ対策は自動でできる?
脆弱性の発見や修正案の作成など、AIが大きく役立つ場面は増えています。ただしAIの指摘には誤りもあり、修正案は人が確認して適用する必要があります。また、更新・多要素認証・バックアップといった運用面の基本対策はAIが代わりにやってくれるものではありません。
まとめ|仕組みが分かれば、守る場所が分かる
サイバー攻撃は「侵入 → 権限を広げる → 盗む・暗号化する」という流れで進み、侵入口の多くは更新されていない機器、盗まれた認証情報、チェックの甘いWeb・API、委託先です。仕組みが分かれば、どこをふさげばよいかも見えてきます。開発者なら入力を信用しない・毎回権限を確認する・回数を制限する・鍵をコードに書かないの4つから始めましょう。
実際の被害事例は最近のサイバー攻撃事例まとめ、AIで脆弱性を見つけて直す最新ツールはOpenAI DaybreakとClaude Securityの解説で紹介しています。
「安全に作れる人」になるための次の一歩
セキュリティを意識して作れるエンジニアは、AIでコードを書く人が増えるほど価値が上がります。基礎から体系的に学びたい方に役立つ記事です。
- AIエージェント時代のIT基礎ロードマップ【2026】:Web〜クラウドまで全7章
- AI・IT業界への転職ガイド【2026】:未経験からの進め方