日本商工会議所は2026年11月10日、簿記などのネット試験で使う試験管理システムへの不正アクセスを公表しました。漏えいした可能性があるのは、最大約98万人分、約197万件の受験者情報です。対象は2022年4月1日から2026年11月4日までにネット試験を受けた人で、氏名・生年月日・合否結果・試験得点などが含まれます。前半では公表文で分かる経緯と対象、受験者が不審な連絡を見分ける方法を整理します。後半は、外部サーバーに不正なファイルを置かれたときの検知方法と差分を取るPythonの例、委託先で起きた漏えいの報告と監督の扱いです。
まとめ:日商簿記ネット試験の情報漏洩で分かっていることと受験者・運営者の対応
日本商工会議所の公表文によると、11月1日に試験管理システムへ不正なファイルが設置されました。11月4日にシステム管理会社の報告で判明し、ファイルを削除して同日深夜にパッチを当てています。漏えいや不正利用の事実は、現時点で確認されていません。
| 項目 | 公表文の記載 |
|---|---|
| 対象者 | 最大約98万人分(約197万件) |
| 受験期間 | 2022年4月1日〜2026年11月4日 |
| 主な項目 | 氏名・生年月日・合否結果・試験得点 |
| 任意入力 | メールアドレス・電話番号・住所 |
| 対象外 | クレジットカードなどの決済情報 |
| 未公表 | 脆弱性の種類・管理会社の名称 |
受験者がやることは1つです。商工会議所を名乗るメールやSMS、電話は、届いた連絡先ではなく公式サイトの窓口で確かめます。試験や会員の管理を外部のサーバーに預けている組織は、公開ディレクトリに知らないファイルが増えていないかを、正常時との差分で点検してください。
公表文で分かる範囲:11月1日の不正ファイル設置から11月10日の公表までの経緯
外部サーバーの試験管理システムに置かれた不正ファイルと11月4日の削除・パッチ
被害を受けたのは、日本商工会議所がネット試験で利用している外部サーバーです。公表文はこれを「試験管理システム」と呼んでいます。受験者の申込や結果を管理する仕組みで、全国のテストセンターでの受験とつながっています。
時系列は次のとおりです。11月1日に不正なファイルが置かれ、11月4日にシステム管理会社から報告を受けました。ファイルはすぐに削除し、脆弱性対策のパッチを同日深夜に適用しています。11月9日に漏えいの可能性が判明し、同じ日に個人情報保護委員会へ報告しました。公表は翌10日です。ネット試験は通常どおり受けられると案内されています。
漏えいの事実は未確認でも「可能性」として公表と報告に進んだ理由
公表文は、漏えいや不正利用は確認されていないと書いています。それでも公表したのは、攻撃者が置いたファイルから受験者情報に手が届いた可能性を否定できないためとみられます。サーバー上でファイルが実行できる状態だった期間は、少なくとも設置から削除までの3日間です。
個人情報保護法は、漏えいが確定した時点ではなく「おそれ」の段階で報告を求めています。報告の要否は後の章で扱います。受験者の側では、確認されていないことを安心材料にせず、連絡先が使われる前提で備えるのが妥当です。
対象は2022年4月以降のネット試験受験者:8つの試験と漏えいのおそれがある項目
簿記・販売士・日商PCなど対象の8試験と、受験期間で自分が該当するかの確認
対象は、2022年4月1日から2026年11月4日までに商工会議所のネット試験を受けた人です。試験は次の8つです。
- 簿記
- リテールマーケティング(販売士)
- 日商PC
- 電子会計実務
- キータッチ2000
- ビジネスキーボード
- 日商プログラミング
- 日商ビジネス英語
簿記2級・3級をテストセンターで受けた人の多くはここに入ります。公表文は「ネット試験」の受験者を対象としており、会場で一斉に行う統一試験の受験者には触れていません。受験日が期間内か分からない場合は、受験後に届いた結果の通知や申込時のメールで日付を確かめます。
氏名・生年月日・合否・得点と任意入力の連絡先、決済情報は対象外
漏えいのおそれがある項目は、氏名、フリガナ、性別、生年月日、合否結果、試験得点です。申込時に任意で入力した人は、メールアドレス、電話番号、住所も加わります。クレジットカードなどの決済情報は含まれません。
金銭の情報が無くても、警戒は要ります。氏名と生年月日に加え、何の試験を受けて何点だったかまでそろうと、受験者しか知らないはずの事実を添えた偽の連絡が作れるからです。「合格証明書の再発行手続き」や「得点の訂正」を装う文面は、本人に疑われにくくなります。
受験者がやること:商工会議所を装う不審な連絡の見分け方と問い合わせ窓口
メール・SMS・電話・郵便物の偽装と、日商が尋ねないと明言した2つの情報
公表文は、商工会議所や関係先を装ったメール、SMS、電話、郵便物に注意するよう呼びかけています。身に覚えのないリンクや添付ファイルは開かず、不審なサイトにパスワードや決済情報を入れないことも求めています。
見分ける手がかりになるのが、日本商工会議所が明言した次の一文です。メール、SMS、電話などでパスワードやクレジットカード情報を尋ねることはない。これを求める連絡は、文面がどれほど本物らしくても偽物と判断できます。問い合わせは日本商工会議所の事業部(03-6402-6154、平日9:30〜20:00)か、公表文にある問い合わせフォームを使います。届いたメールに書かれた番号やリンクからは連絡しません。
任意入力の連絡先を登録した人と、試験の受験歴を使った詐欺への備え
メールアドレスや電話番号を任意で入力した人は、偽の連絡が直接届く経路を持たれています。入力しなかった人は、氏名と住所の組み合わせがない限り、個別に狙われる経路は狭くなります。
どちらの場合も、受験に使ったメールアドレスと同じパスワードを他のサービスで使っているなら、この機会に変えておきます。公表文の項目にパスワードは入っていません。それでも、メールアドレスが特定されると、使い回しを狙ったログインの試行を受けやすくなります。受験者を社内で取りまとめた企業の人事・研修担当は、該当する社員へ注意を回してください。
試験管理システムに設置された不正ファイル:Webシェルの手口と検知までの3日間
外部から置かれたファイルが情報の窓口になる仕組みとNSAのガイダンス
公表文は、置かれたファイルの種類を明らかにしていません。一般に、公開されたWebサーバーへ攻撃者がファイルを置く目的は、外から命令を送ってサーバーを操作する「Webシェル」の設置であることが多くあります。置かれたファイルがURLから呼び出せる場所にあれば、攻撃者はブラウザ経由でデータベースを読み出せます。
米国家安全保障局(NSA)が公開するMitigating Web Shellsは、検知の手段として、既知の正常版とのファイル比較、Webサーバーのログから少数の送信元しか呼ばないURIを抜き出す方法、Webサーバーのプロセスが子プロセスを起こす動きの監視を挙げています。比較には dirChecker.ps1 や diff -r -q を使う例が載っています。Tomcat・PHP・IISごとの除去手順はWebシェルの検知・除去の手順で解説しました。
設置から判明までの3日間を縮める、既知の正常版との比較を毎時回す考え方
今回は、設置から管理会社の報告まで3日かかりました。差分の比較を1時間ごとに回していれば、追加されたファイルは次の実行で見つかります。検知が早いほど、攻撃者がデータを読み出せた時間は短くなります。
比較の基準は、リリース時点のファイル一覧です。デプロイのたびに基準を作り直し、それ以外の時間帯に増えたり書き換わったりしたファイルを異常として扱います。アップロード機能がある領域は、画像やPDFしか置かれないはずの場所にPHPやJSPが現れたかを別に見ます。IPAの安全なウェブサイトの作り方が挙げるファイルアップロードの不備は、この経路の典型です。
公開ディレクトリの改ざんを検知する:SHA-256一覧で差分を出すPythonの実装
追加・変更・削除されたファイルとサーバー側スクリプトを洗い出すスクリプト
次のコードは、公開ディレクトリの全ファイルについてhashlibのSHA-256を計算し、基準の一覧と比べます。init は基準を保存する操作で、check は差分を出す操作です。差分があれば終了コード1を返すので、監視ツールの通知につなげられます。
# 公開ディレクトリのSHA-256一覧を作り、基準との差分(追加・変更・削除)を出す(Python 3.9以上・標準ライブラリのみ)
import hashlib, json, os, sys
SCRIPT_EXT = {".php", ".phtml", ".jsp", ".jspx", ".asp", ".aspx", ".ashx", ".cgi", ".pl", ".py"}
def sha256_of(path):
h = hashlib.sha256()
try:
with open(path, "rb") as f:
for chunk in iter(lambda: f.read(65536), b""):
h.update(chunk)
except OSError as e:
return "unreadable:" + type(e).__name__ # ウイルス対策の隔離などで読めないファイルも報告する
return h.hexdigest()
def build_manifest(root):
manifest = {}
for dirpath, _, files in os.walk(root):
for name in files:
full = os.path.join(dirpath, name)
rel = os.path.relpath(full, root).replace(os.sep, "/")
manifest[rel] = sha256_of(full)
return manifest
def compare(base, now):
added = sorted(set(now) - set(base))
removed = sorted(set(base) - set(now))
changed = sorted(k for k in set(base) & set(now) if base[k] != now[k])
return added, changed, removed
if __name__ == "__main__":
mode, root, baseline = sys.argv[1], sys.argv[2], sys.argv[3]
now = build_manifest(root)
if mode == "init":
with open(baseline, "w", encoding="utf-8") as f:
json.dump(now, f, ensure_ascii=False, indent=1)
print("baseline saved:", len(now), "files")
sys.exit(0)
with open(baseline, encoding="utf-8") as f:
base = json.load(f)
added, changed, removed = compare(base, now)
for label, items in (("ADDED", added), ("CHANGED", changed), ("REMOVED", removed)):
for rel in items:
ext = os.path.splitext(rel)[1].lower()
flag = " <-- server-side script" if label != "REMOVED" and ext in SCRIPT_EXT else ""
print(f"{label:8s} {rel}{flag}")
sys.exit(1 if (added or changed or removed) else 0)
基準のファイル(baseline.json)は、監視対象のサーバーとは別の場所に置きます。同じサーバーにあると、侵入した攻撃者が基準ごと書き換えられるからです。ウイルス対策ソフトが隔離して読めなくなったファイルは、unreadable として変更扱いで出ます。
合成5ファイルで確かめた出力と、デプロイ時の基準更新・定期実行の組み込み
トップページ、ログイン画面、ライブラリ、アップロード画像、CSSの5ファイルを置いた合成ディレクトリで基準を取り、その後に3か所を変えて check を実行しました。アップロード領域へのスクリプト追加、ライブラリの書き換え、CSSの削除です。Python 3.14.10(Windows)で2026年11月10日に得た出力です。
ADDED exam/upload/thumb.php <-- server-side script
CHANGED exam/lib/db.php <-- server-side script
REMOVED exam/style.css
基準を取った直後の check は差分0件で、終了コードは0でした。運用に組み込む手順は次の3つです。
- デプロイの最後に init を実行し、新しい基準をサーバー外へ保存する
- cron やタスクスケジューラで check を1時間ごとに実行し、終了コード1で担当者に通知する
- 通知が来たら ADDED のサーバー側スクリプトから中身を確かめ、Webサーバーのアクセスログで呼び出し元を探す
キャッシュやログを公開ディレクトリの中に書くアプリでは、毎回差分が出て通知が無視されるようになります。書き込みが起きる場所は監視から外すのではなく、公開ディレクトリの外へ移すのが先です。
委託先のサーバーで起きた漏えい:委託元の報告義務と個人情報保護法25条の監督
不正の目的と1,000人超の両方に当たる事案と、委託元・委託先のどちらが報告するか
個人情報保護法ガイドライン(通則編)では、不正の目的をもって行われたおそれのある漏えい等は件数にかかわらず、また漏えい等のおそれがある本人が1,000人を超える場合も、個人情報保護委員会への報告が必要です。今回は不正アクセスで、かつ最大約98万人分なので両方に当たります。速報はおおむね3〜5日以内、不正の目的による事案の確報は事態を知った日から60日以内です。
システムを運用していたのは管理会社でも、受験者の個人情報を取り扱う事業者として報告したのは日本商工会議所です。ガイドラインは、委託先が委託元へ事態を通知した場合、委託先の報告義務は免除されるとしています。報告の様式と期限の数え方は個人情報保護委員会への報告義務の実務で解説しました。
25条の監督義務と、委託先から異常を受け取るまでの時間を契約で決める方法
個人情報保護法25条は、個人データの取扱いを委託した事業者に、委託先への必要かつ適切な監督を求めています。今回、日本商工会議所が異常を知ったのは管理会社の報告によってでした。委託元が委託先の異常を知る経路は、契約と報告の取り決めしかありません。
契約では、改ざんや不審なファイルを見つけてから委託元へ通知するまでの時間、通知に含める項目、ログの保存期間を決めておきます。設置から判明までに日数がかかる構成では、委託元が通知を受け取る時点でさらに遅れることになるためです。契約条項とチェックリストは委託先管理の監督義務とチェックリストにまとめています。
判断:受験者・会員の情報を外部サーバーに預ける組織が診断に出す範囲
差分検知・アップロード領域・通知期限の3点が無いなら今月中に手を付ける
試験の申込、会員登録、資格の合否など、外部の人の情報を長期間ためるシステムを外部サーバーで運用している組織は、次の3点を確かめます。
- 公開ディレクトリの差分検知が動いていて、通知が担当者に届くか
- アップロードされたファイルが、URLから実行できる場所に置かれていないか
- 委託先が異常を見つけてから委託元へ伝えるまでの時間が契約で決まっているか
3点のうち1つでも無いなら、先送りしない対象です。とくに4年以上の受験者をためている今回の構成と同じく、保存期間の長いシステムほど一度の侵入で失う件数が大きくなります。古い受験者のデータを消す期限が決まっていないなら、それも同時に決めます。
静的サイトだけなら見送り、受験者DBと管理画面を持つなら第三者診断へ
サーバー側でプログラムが動かない静的なサイトだけを外部に置いている場合は、第三者診断まで急ぐ必要はありません。ファイルが置かれても実行されないからです。差分検知だけで十分です。
一方、受験者や会員のデータベースと管理画面を同じサーバーに持つ構成は、診断の対象です。他社の利用者まで被害が広がった事例はスカラコミュニケーションズの不正アクセスで、APIの認可の作りはJPCERTの注意喚起に沿うAPI不正アクセス対策の実装手順で扱いました。自社や委託先のシステムで、アップロード処理と管理画面の守りを第三者に確かめてもらいたい場合は、脆弱性診断・セキュリティ診断で相談できます。
よくある質問
日商簿記などのネット試験の情報漏洩について、受験者と運営側から出やすい質問をまとめました。
日商簿記を受けましたが、自分が対象かどうか分かりますか?
2022年4月1日から2026年11月4日までに、商工会議所のネット試験で簿記などの8試験のいずれかを受けた人が対象です。テストセンターで受けた簿記2級・3級の多くも、この対象に該当する受験です。公表文に個別連絡の記載はないため、受験日が分からない場合は受験後に届いた通知で日付を確かめます。分からないときは日本商工会議所の事業部(03-6402-6154、平日9:30〜20:00)か、公表文の問い合わせフォームに問い合わせます。
漏れた可能性がある情報は何ですか?
氏名、フリガナ、性別、生年月日、合否結果、試験得点です。申込時に任意で入力した人は、メールアドレス、電話番号、住所も含まれます。クレジットカードなどの決済情報は含まれていません。11月10日の公表時点で、漏えいや不正利用の事実は確認されていないとされています。
商工会議所を名乗るメールが届いたらどうすればよいですか?
メールのリンクや添付ファイルは開かず、書かれた電話番号にもかけないでください。日本商工会議所は、メールやSMS、電話でパスワードやクレジットカード情報を尋ねることはないと明言しています。気になる場合の確認先は、公式サイトに載っている問い合わせ窓口です。合格証明書や得点の訂正を口実にした連絡には、とくに注意が要ります。
ネット試験はこれからも受けて大丈夫ですか?
日本商工会議所は、脆弱性対策は完了しており、ネット試験は通常どおり受験できると案内しています。不正なファイルは11月4日に削除され、同日深夜にパッチが当てられました。申込時の任意入力の項目は、必要がなければ空欄にしておくと、万一の際に漏れる情報を減らせます。
運営側が不正なファイルの設置に早く気づくにはどうすればよいですか?
リリース時点のファイル一覧を基準として保存し、定期的に差分を取るのが基本です。NSAのWeb shell緩和ガイダンスも、既知の正常版との比較を検知の手段の筆頭に挙げています。本文のPythonの例のように、SHA-256の一覧を1時間ごとに比べれば、追加されたスクリプトを見つけられるのは次の実行時です。基準のファイルはサーバーの外に置きます。
関連記事
- Webシェルとは?仕組み・代表例と検知・除去の手順をTomcat・PHP・IISのコマンド例で解説:置かれたファイルを見つけた後の除去手順
- 個人情報保護委員会への報告義務|対象4類型・速報3〜5日と確報30日の実務:漏えいのおそれがあるときの報告の流れ
- 委託先管理とは?個人情報保護法25条の監督義務とチェックリスト・契約条項の実務:システムを外部に預けるときの契約と監督
- API不正アクセス対策の実装手順:JPCERT注意喚起に沿うレート制限・認可・トークン失効とアプリ解析・SSRF対策:外部に公開したシステムの入口を固める実装
- ハッシュ化とは?暗号化との違いとパスワード保管・改ざん検知の仕組みを解説:差分検知に使うハッシュの仕組み