本文へ移動

2026-08-01 時点の資料です。読みやすさのために、一部の文字の色を濃くしています。

記録と異常検知/ Records & Detection

残しているから、見つけられる

受取ページで起きたことは、成功も失敗もすべて残します。残す目的は 2 つあります。1 つは、発行した人が「渡した相手に届いたか」を確認できるようにすること。もう 1 つは、そこから異常を自動で見つけることです。ここでは、何をどこへ記録し、その記録からどうやって 3 種類の危険を見分けているかをご説明します。

01

アクセス記録Access Records

受取ページへのアクセスは、結果を 9 種類に分けて記録します。日時・結果・接続元 IP・ブラウザの種類が残り、発行者と管理者が一覧から確認できます。

結果いつ記録されるか意味するところ
閲覧必要な確認をすべて通り、受取画面に着いたとき相手が URL を開いた(=届いている)
ダウンロード実際に配布したとき相手が受け取った
パスワード誤りパスワードが一致しなかったとき相手が値を持っていない、または攻撃
確認コード誤りコードが一致しなかった・失効していたとき同上
期限切れ後のアクセス期限を過ぎたリンクを開いたとき相手が古い URL を開いている(再発行の合図)
無効化後のアクセス無効化したリンクを開いたとき止めたあとに誰かが開こうとしている
回数上限超過上限に達したリンクで配布を求めたとき回数の設定が実態に合っていない可能性
不明なリンク存在しないトークンでアクセスされたとき打ち間違い、または URL の推測
アクセス集中による制限レート制限に掛かったとき機械的な連打の可能性

接続元 IP は、負荷分散の転送ヘッダを信頼できる範囲から辿って求めた値です。求められなかった場合は空欄で残します(「不明」という文字列を入れて、あとから本物の値と混同することを避けています)。

(画面の画像は掲載していません)
アクセス履歴。上部に総数・成功・失敗の集計、下に 1 件ずつの日時・結果・接続元・ブラウザ。閲覧が先に 1 行、そのあとダウンロードが 1 行残っており、「開いてから受け取るまで」がそのまま読めます。
02

記録の書き分けWhat Goes Where

記録の置き場所は 2 つあります。アクセス記録は共有リンク専用で、成功も失敗も細かく残します。監査ログはアプリ全体で共通の台帳で、業務上の出来事だけを残します。

場面アクセス記録監査ログ
リンクを発行した—残す
案内メールを送った・再送した—残す
受取画面に着いた(開封)残す(一定時間に 1 件)—
パスワード・本人確認が必要と表示した——
パスワード・確認コードを間違えた残す—
パスワード・確認コードを通過した——
期限切れ・無効化済み・回数上限のリンクを開いた残す—
ダウンロードが成立した残す残す
ZIP のしきい値を超えていた—残す
ZIP の準備・進捗の確認・配下一覧の取得——
レート制限に掛かった残す—
存在しないリンクにアクセスされた書けない残す
無効化した(発行者・Owner・管理者)—残す

この分け方にしている理由

監査ログは、あとから「誰が何をしたか」を追うための台帳です。ここにパスワードの入力ミスまで書き込むと、正規の受取人の打ち間違いだけで大量に膨らみ、本当に見たい業務上の出来事が埋もれます。失敗の詳細は共有リンク専用のアクセス記録が持ち、監査ログには「発行した」「渡った」「止めた」だけを残します。

成功時のダウンロードだけは両方に残ります。受取人にとっては「アクセス」であり、業務としては「ファイルが社外に渡った」という重要な出来事でもあるためです。このとき監査ログの行為者は、人ではなく共有リンクそのものとして記録します(受取人はアカウントを持たないため)。

準備と進捗を記録しない理由

ZIP の準備・進捗の確認・配下一覧の取得は、いずれも受取人が意識して行う操作ではありません(画面が自動的に呼びます)。ここを記録すると、1 回のダウンロードのために数十件の記録が積まれ、アクセス履歴が読めなくなります。加えて、次章の異常検知はこの記録を母数にしているため、自動的に増える行を混ぜると検知そのものが狂います。

03

監査ログAudit Log

共有リンクが監査ログに残す出来事は 6 種類です。

出来事行為者残す内容
リンクを発行した発行者対象・期限・パスワードの有無・回数の設定・本人確認の有無(メールアドレスの実値とパスワードは残しません)
案内メールを送った発行者宛先の件数・メッセージの有無
ダウンロードされた共有リンク自身どのリンクから何が渡ったか
ZIP のしきい値を超えた共有リンク自身合計サイズ・ファイル数(しきい値の見直しに使う)
無効化した発行者 or Owner対象のリンク
管理者が強制無効化した管理者対象のリンク・理由(10〜256 文字・必須)

元のファイルやフォルダの削除に連動して複数のリンクが一括で無効になったときは、リンク 1 本ごとに行を積みません。削除操作そのものの記録に「同時に無効化したリンクの件数」を添える形にしています。100 件のファイルを一括削除したときに監査ログが数百行に膨れるのを避けるためです。

04

3 種類の異常検知Anomaly Detection

アクセス記録から、性質の違う 3 つの危険を見分けます。「異常」として扱うのは、そのリンク自身の記録から導ける、そのリンク固有の危険だけです。全社的な傾向は別の器(アクセス傾向のグラフ)が持ちます。

図 10 · アクセス記録から 3 種類の異常を見分ける
アクセス記録アクセスが起きるたびに 1 行結果は 9 種類総当たり直近 60 秒の認証の失敗が20 件以上大量アクセス IP同じ接続元から直近 5 分に100 件以上閲覧元の分散認証を通った異なる接続元が想定より多いアラート(重大)+ 通知メール発行者と管理者へ・URL は載せないアラート(警告)起票のみメール通知はしないアラートは作らない一覧に表示するだけ(止めるかは管理者が判断)全社管理画面総当たりのバナー異常バッジ 3 種「異常を検知中」の指標強制無効化アラートは条件が消えれば自動的に解決する ─ リンクを無効化したとき/期限が切れたとき/その接続元から一定時間アクセスが無いとき。同じ危険が続いている間は 1 件にまとめ、発生回数だけを増やす。上 2 つはアクセスと同じ処理の中で判定し、いちばん下は一覧を出すときにまとめて数える。

3 つは検知の重さも違います。総当たりだけがメール通知を伴い、管理画面の上部にバナーとして出ます。ほかの 2 つは一覧の行に印を付けるだけです。

総当たり ― 何を数えるか

数えるのは認証の失敗だけです。具体的には「パスワード誤り」「確認コード誤り」、そして「パスワードやコードの端点でレート制限に掛かった分」の 3 つを合わせて、直近 60 秒で 20 件以上なら検知します。

レート制限に掛かった分を数に含めるのは、必須の措置です。失敗が 3 件たまるとロックが立ち、ロック中の拒否は失敗として記録されません。含めなければ 1 時間に最大 3 件しか積まれず、20 件には決して届きません。つまりレート制限が効くほど検知が鈍るという逆転が起きます。

逆に、ダウンロードの成功や閲覧は数に入れません。しきい値を超えるフォルダでは 1 件ずつのダウンロードをご案内しており、そのために配布の上限を意図的に高めにしてあります。成功も数に入れると、仕様が許した正当な使い方がそのまま検知されることになります。

大量アクセス IP ― どのリンクに印を付けるか

「同じ接続元から 5 分に 100 件以上」という判定は接続元に対するものです。この接続元が触ったリンクへ印を付けるのですが、その接続元が過去に触ったすべてのリンクを対象にすると、たまたま同じ回線から普通に開いただけのリンクまで塗られてしまいます。

そこで、印を付けるのはその集中が起きていた時間帯(検知の 5 分前から)にそのリンクが触られていた場合だけに絞っています。集中の前後に無関係で開かれたリンクは対象になりません。

閲覧元の分散 ― いちばん実務的な危険

実際に起きやすいのは総当たりよりも、渡した URL が第三者に転送されることです。この場合、認証は正しく通るためどのレート制限にも掛かりませんが、閲覧してくる接続元の数が増えます。認証を通ったアクセスの異なる接続元が想定より多くなったら、一覧に印を付けます。

集計の期間は設けていません。リンクの寿命は最長 14 日で既に区切られており、「多くの場所から開かれた」という事実は時間で薄れないためです。しきい値は、案内メールの宛先の上限を踏まえ、正当な使い方(複数の受取人がそれぞれ複数の端末で開く)では到達しない数にしています。接続元の数は人数の粗い代わりでしかないので、表示も「拡散」と断定せず「閲覧元が分散」という言い方にしています。

05

アラートと通知Alerts & Notification

総当たり大量アクセス IP閲覧元の分散
重さ重大警告—
アラートの起票するするしない
メール通知発行者と管理者へしないしない
管理画面のバナー出る出ない出ない
一覧のバッジ総当たり疑い大量アクセス IP閲覧元が分散
判定するタイミングアクセスと同じ処理の中で一覧を出すときに

同じ危険を何度も知らせない

総当たりの最中は、1 秒間に何度も条件を満たします。そのたびにアラートを作ってメールを送っては、受け取る側が使い物になりません。そこで1 つのリンクにつき未解決のアラートは 1 件だけとし、2 回目以降は発生回数を増やすだけにしています。メールが飛ぶのも最初の 1 回だけです。

条件が消えたら自動で片付ける

アラートを手動で解決する画面は今後実装するため、現時点では条件の消滅で自動的に解決します。

  • そのリンクを無効化したとき(発行者・Owner・管理者のいずれの操作でも)── 総当たりの条件そのものが消えます
  • そのリンクの期限が切れたとき── 日次の掃除処理がまとめて解決します
  • その接続元から一定時間アクセスが無くなったとき── 大量アクセスの警告を解決します

この仕組みが無いと、未解決のアラートが積み上がり続け、管理画面の一覧が古い項目で埋まって「今見るべきもの」が分からなくなります。

総当たりの通知メールに URL を載せない理由: 「このリンクが攻撃を受けています」という警告メールに共有 URL を書くと、そのメールが転送された時点で攻撃者が探していた URL そのものを配って回ることになります。通知に入れるのは Box 名・失敗回数・管理画面への導線だけです。
この検知が扱えない範囲: 存在しないトークンを次々に試す形の攻撃(URL の推測)は、この 3 つのどれにも掛かりません。アクセス記録は「どのリンクへのアクセスか」を必ず持つ形のため、存在しないリンクの分をそこに残せないからです。この種の試行は監査ログには残っており、外周のレート制限が実際の到達を止めています。全社的な観測は今後実装するアラート画面で扱います。