FRL 自由研究ラボ

仕事関係 — コンセプト記事

個人の AI 開発から学ぶ、業務の情報セキュリティ

— お願いをやめて、仕組みで止める —

自分の Mac で AI に作業を任せ、守りの道具を作っては直してきた経験から、企業の業務や情報セキュリティに持ち込める考え方を5つにまとめました。 答えを先に言うと、守りは「注意してください」という文章ではなく、守らなくても止まる仕組みで作ることです。特別な製品より先に、設計の考え方で効きます。

この記事を読むとできること

  • 「お願い」ではなく「仕組み」で止める守りの組み立て方が分かります
  • 残っている許可や連携を、見える化して棚卸しする考え方が分かります
  • AI の導入・社内の道具・秘密の扱いで、見落としやすい漏れ口が分かります

想定している使い方

社内で AI や外部サービスとの連携を使い始めた、またはこれから使う職場を想定しています。個人の Mac で試して分かったことを、職場でも使える考え方として一般化して書きました。 具体的な製品の設定手順や、自分の環境の設定の中身は載せていません。守りの具体は、それ自体が攻撃する側の地図になるからです。

  1. なぜ「仕組み」なのか
  2. ヒント① お願いを、3段の仕組みに置き換える
  3. ヒント② 残っている許可を、見える化して棚卸しする
  4. ヒント③ AI に渡すものと、AI に決めさせないことを分ける
  5. ヒント④ 社内の道具は「内側だから安全」ではない
  6. ヒント⑤ 秘密は、置き場所・ログ・履歴の3か所で漏れる
  7. 職場で確かめる10項目
  8. 関連する項目

読む目安:約13分 ・ 仕事関係のコンセプト記事 ・ 図8枚

なぜ「仕組み」なのか ―― お願いは、守られない日がある

攻撃の狙いどころは、外の壁から信頼している内側へ移ってきています。AI エージェント(AI が端末を直接操作して作業する仕組み)や開発者の端末そのもの、取引先やつないだ外部サービスを経由する道、社内ネットワークの中にある管理の道具などです。さらに、攻撃されなくても、ログ(動いた記録)や設定ファイル、変更の履歴から、秘密がうっかり外に出ることもあります。

自分の環境でも、守りの決まりは長いあいだ、文章で書いた「お願い」だけでした。AI は決まりを読みますが、守らない日もあります。人も、忙しい日は読み飛ばします。しかも事故は、1回守られなかっただけで起きます。そこで、決まりを1つずつ、守らなくても止まる仕組みに置き換えてきました。この記事は、その過程で分かったことを、職場で使える形に言い直したものです。

✕ 決まりを文章で配るだけだと 「注意して」と 文章で配る 読まれない日・ 守られない日がある 1回の見落としで 事故が起きる ○ 止める仕組みに置き換えると 決まりを 仕組みに置き換える 守らなくても 止まる 事故の芽を 機械が摘む 決まりの中身は同じです。違いは、文章で頼むか、仕組みで止めるかだけです。

図の見方:上の段は、決まりを文章で配るだけの場合です。読まれない日や守られない日があり、1回の見落としで事故が起きます。下の段は、決まりを止める仕組みに置き換えた場合です。守らなくても止まるので、事故の芽を機械が摘みます。

HINT 1

お願いを、3段の仕組みに置き換える

止める仕組みは、1段では足りません。3段に重ねて、前の段の漏れを次の段が受ける形にします。

AI や人が出す操作 コマンドを動かす・ファイルを読む・外へ送る 1段目 対象そのものを止める 機密の置き場所・認証情報・履歴の書き換えを、名指しで拒否 2段目 やり方を止める 実行の直前に、危険な引数の組み合わせを検査 3段目 囲いの中で動かす 読める場所・書ける場所・通信相手を最小に 実行される 3段すべてを通ったものだけ 1段で全部を止めようとしない。前の段の漏れを、次の段が受ける。

図の見方:上から順に、AI や人が出した操作が、1段目・2段目・3段目を通ります。どこか1段で止まれば実行されません。すべての段を通ったものだけが実行されます。1つの段で全部を止めようとせず、前の段の漏れを、次の段が受ける形にしています。

自分の道具で分かったこと

名指しで禁止したつもりの操作が、別の読み方では素通りしていたことがあります。また、便利さのために設定を1つ緩めたら、別の段の検査が迂回されていたこともあります。どちらも、実際に投げて試すまで気づけませんでした。いまは、止まるべき操作を実際に投げ、止まることを自動のテストで確かめています。あわせて、止まってはいけない操作も投げます。説明の文章の中の危険な単語まで止めてしまう誤作動が、実際に起きたからです。止めすぎる守りは、いずれ外されます。

試験1 止まるべきものを投げる 危険な操作(の見本)を、守りに入力として渡す 実際には実行しない。判定だけを見る 「止まった」なら合格 通ってしまったら、守りに穴がある 試験2 止まってはいけないものを投げる ふつうの操作や、危険な単語を含む説明文を渡す 日々の作業で使うものを選ぶ 「通った」なら合格 止まってしまったら、止めすぎ(誤作動) どちらかがずれたら、知らせる 設定を緩めたとき・端末を移ったときに、特に効く 止めすぎる守りは、いずれ外される。両方を試して、はじめて効いていると言える。

図の見方:上は、止まるべき操作の見本を守りに渡し、止まることを確かめる試験です。実際には実行せず、判定だけを見ます。下は、ふつうの操作や、危険な単語を含む説明文を渡し、通ることを確かめる試験です。どちらかがずれたら知らせます。

もう1つ、2台目の端末には、設定が付いてこないことがありました。守りの設定が片方にしか入っていない状態が、2週間気づかれずに続いたことがあります。それ以来、守りの設定は原本を1か所で管理して配り、ずれていたら知らせるようにしています。

職場での当てはめ:規程やガイドラインを配って周知するだけで終わらせず、拒否の設定・実行前の検査・権限を絞った実行環境の3段を重ねます。そのうえで、「止まるべきものが止まるか」「止まってはいけないものが通るか」の試験を、決まった間隔で回します。設定は端末ごとに抜けるので、原本からの配布とずれの検知を、仕組みに含めます。

HINT 2

残っている許可を、見える化して棚卸しする

一時的に出した許可や連携は、使わなくなっても残り続けます。そして残った許可は、悪用されたときの入口になります。見落としやすいのは、OS のプライバシー許可、自動で起動する常駐プログラム、外部サービスとの連携の許可、ブラウザの拡張機能、ログイン用の鍵、AI につないだ外部の道具です。

自分の道具で分かったこと

これらを1か所に集めて、危険度の高い順に並べる点検の画面を作りました。各項目には、消すとできなくなることと消すと防げること、そして自分の仕組みがその許可を使っているかを並べます。危険度だけで消すと、その許可に頼っていた自動の処理が、黙って失敗し続けるからです。外すかどうかは人が決め、外す前には確認を出し、元に戻せる控えを残します。

① 集める OS の許可・常駐・連携・拡張・鍵・AI の外部の道具 ② 危険度の高い順に並べる まず「高」だけ見れば、最初の確認は終わる ③ 消したときの損得を並べる できなくなること/防げること/頼っている仕組み ④ 人が決める 外す・残す(残すなら、その記録を付ける) ⑤ 控えを残して外す 外す前に確認を出し、戻し方を残す 危険度だけで消さない。頼っている自動の処理が、黙って止まるからです。

図の見方:上から順に、許可を集め、危険度の高い順に並べ、消したときの損得と頼っている仕組みを並べます。そのうえで人が決め、外すときは控えを残します。危険度の高さだけで消さないのが要点です。

点検の画面そのものを、危なくしないことも大切です。見るだけの操作と変える操作を分け、どの端末の許可を見ているかを常に表示し、秘密の値は伏せて表示します。「どこまで許しているか」の一覧は、攻撃する側にとっては、入口の一覧と同じ価値があるからです。

職場での当てはめ:退職・異動・プロジェクト終了のときだけでなく、決まった間隔で「いま有効な許可」を一覧にして見直します。一覧には、外すかどうかを判断する材料(その許可を使っている業務や仕組み)を一緒に出し、外すときは控えと戻し方をセットにします。

HINT 3

AI に渡すものと、AI に決めさせないことを分ける

外から来た文章は「データ」で、「命令」ではない

AI に読ませる文章の中に、AI への命令が紛れ込んでいると、AI がそれに従ってしまうことがあります。プロンプトインジェクション(文章に紛れた命令で AI を操る手口)です。Web から取ってきた文章、社内の共有ノート、他人が書いた資料が、その入口になります。

自分の道具で分かったこと

ノートに紛れた「AI へのお願い・命令の形」の文を探す検査を作りました。最初は危ない単語を見つけるだけの作りで、自分が書いた記録が全部引っかかりました。そこで、命令の形になっていることを条件にしています。ただし、この検査は保険です。言い回しを変えた命令は、すり抜けられます。本命の守りは、AI ができること(外への送信・削除など)を、そもそも絞っておくことです。

計算と判定は、プログラムに任せる

金額の計算、合否や可否の判定のように、答えが1つに決まる処理は、AI に任せずプログラムで行います。AI には、提案や理由の説明を任せます。AI の「できました」も、そのまま信じません。合否は、テストが通ったかどうかという機械の結果で決めます。

伏せて渡す、理由は2つ

AI に渡す前に、個人名、日付、認証情報などを伏せます。理由の1つは、漏れないためです。もう1つは、判断を歪めないためです。相場の動きを AI に判断させる試みで、年月と銘柄の名前をそのまま渡すと、AI はその後の結果を知識として知っているので、答えを当ててしまいました。いまは、どちらも伏せて渡しています。

外に出さないデータの境界線を引く

日記、体調、思いつき、話した言葉のような生の情報は、手元の機械で動く AI だけで扱い、外のサービスには出さないと決めています。速さや賢さより、外に出さないことを優先する、という境界線です。

役割を分ける AI ― 提案する・理由を説明する 外から来た文章は「データ」として読む。命令としては従わない プログラム ― 計算する・合否を判定する 答えが1つに決まる処理は、こちらで行う 人 ― 最後に決める 外す・送る・公開するなど、戻せない操作 データの境界を決める 外のサービスに出してよい 公開済みの情報・一般的な質問 伏せてから渡す 個人名・日付・認証情報・答えにつながる情報 外に出さない(手元の AI だけで扱う) 日記・体調・思いつき・話した言葉のような生の情報 「何をさせるか」と「何を渡すか」を、別々に決める。

図の見方:上の段は、仕事の分け方です。AI には提案と説明を、プログラムには計算と判定を、人には戻せない操作の最終決定を任せます。下の段は、データの分け方です。外に出してよいもの、伏せてから渡すもの、外に出さず手元の AI だけで扱うものの3つに分けます。

職場での当てはめ:AI に読ませてよいデータと、外のサービスへ出してはいけないデータの境界を、文書の種類ごとに決めて明文化します。AI に任せる仕事は「提案と説明」、決めるのは「プログラムと人」と分け、外部の文章を読ませる AI には、送信や削除の権限を持たせません。

HINT 4

社内の道具は「内側だから安全」ではない

社内の管理画面や、手元で動かしている道具は、外からは見えないので安全だと思われがちです。ところが、内側の道具は、内側にいる誰かを踏み台にして狙われます。

URL を取りに行く機能は、行き先を毎回確かめる

入力された URL の中身を取りに行く機能は、SSRF(サーバーを踏み台にして、外からは届かない内側を叩かせる手口)の入口になります。最初の URL を確かめるだけでは足りません。リダイレクト(別の URL への転送)の1回ごとに、行き先を確かめ直します。自分の機械、社内のアドレス、VPN(決まった端末どうしだけをつなぐ通信の仕組み)が使うアドレス帯(たとえば 100.64.0.0/10)も、内側として扱って断ります。

入力された URL 外のサイトに見える 確かめる:内側のアドレスではないか 自分の機械・社内のアドレス・VPN のアドレス帯 転送(リダイレクト)1回目 別の URL へ飛ばされる 確かめ直す:行き先は内側ではないか 転送のたびに、毎回 内側のアドレスに向かったら、そこで止める 最初の URL だけ確かめても、ここで内側に入られる 最初の1回だけ確かめても、転送の先で内側に入られる。

図の見方:上から順に、入力された URL をまず確かめ、転送が来るたびに行き先を確かめ直します。最初の URL が外のサイトに見えても、転送の先で内側のアドレスに向かうことがあるので、そこで止めます。

ブラウザ経由の踏み台を断る

社員が別のサイトを見ている間に、そのブラウザから社内の道具の「削除」「起動」「設定の変更」を叩かせる手口があります(CSRF や DNS リバインディングと呼ばれる手口)。変更を伴う要求は、同じ画面から来たか(ブラウザが付ける Sec-Fetch-Site という印)と、宛先の名前が正しいか(Host という印)を確かめ、それ以外は断ります。大事な操作には、その画面の中にだけ渡した合言葉を求めます。

✕ 確かめないと 社員が、別のサイトを開いている そのページに、仕掛けが埋め込まれている ブラウザが、裏で社内の道具に要求を送る 「削除」「起動」「設定の変更」 社内の道具が、そのまま実行してしまう 内側からの要求に見えるため ○ 3つを確かめると 同じ画面から来た要求か ブラウザが付ける Sec-Fetch-Site という印 宛先の名前が正しいか Host という印 画面に渡した合言葉が付いているか 大事な操作だけ 1つでも違えば、断る 見るだけの要求は、今までどおり通す 「社内からしか開けない」は、守りの理由にならない。

図の見方:上の段は、確かめない場合です。社員が別のサイトを見ている間に、ブラウザが裏で社内の道具に要求を送り、道具がそのまま実行してしまいます。下の段は、同じ画面から来たか、宛先の名前、合言葉の3つを確かめる場合です。1つでも違えば断ります。

自分の道具で分かったこと

同じ機械で、いくつもの道具を別々の番号(ポート。1台の機械の中で通信の入口を区別する番号)で動かしていると、ブラウザの印は番号の違いを見ないので、別の道具からの要求まで「同じサイト」に見えます。そのため「同じサイトなら通す」では不十分で、「同じ画面から来たものだけを通す」形にしました。

職場での当てはめ:社内向けの管理画面にも、外向けのサービスと同じ検査を入れます。「社内からしか開けない」ことを、守りの理由にしません。

HINT 5

秘密は、置き場所・ログ・履歴の3か所で漏れる

置き場所 ― 平文で置かない

合言葉や API キー(サービスを使うための鍵になる文字列)を、コードや設定ファイル、共有のフォルダに、そのままの文字で置きません。OS の鍵束(Mac ならキーチェーン)のような、守られた保管場所に集めます。

ログ ― 記録や検査の画面が、漏れ口になる

エラーの記録、動作のログ、検査の結果を表示する欄そのものが、秘密の2次的な漏れ口になります。抜き出して表示するときは、値を伏せてから出します。秘密を探す検査の画面が、見つけた秘密をそのまま表示しては本末転倒です。

履歴 ― 消しても残る

一度リポジトリ(変更の履歴ごとコードを保管する場所)に記録した秘密は、ファイルを消しても、変更の履歴に残ります。見つけたら、①管理から外す ②除外のリストに足す ③その秘密自体を作り直す、の3つをセットで行います。消しただけでは、漏れは止まりません。

自分の道具で分かったこと

コードを定期的に検査して、文字列をそのまま実行してしまう危険な書き方や、秘密らしい名前のファイルが管理に入っていないかを探しています。あわせて、AI が残す作業の記録やメモ、変更の説明にも、値そのものは書かないと決めています。「どこに移した」までは書き、値は書きません。記録は、あとから読まれるからです。

漏れる3か所と、その守り 置き場所 → 守られた保管場所に集める コード・設定ファイル・共有フォルダに、そのままの文字で置かない ログ → 伏せてから出す エラーの記録・検査の結果・作業の記録にも、値を残さない 履歴 → 消しても残るので、作り直す ①管理から外す ②除外のリストに足す ③秘密自体を作り直す 「消した」は、漏れが止まったことを意味しない。

図の見方:上から順に、秘密が漏れる3か所と、それぞれの守りです。置き場所は守られた保管場所に集め、ログは伏せてから出し、履歴に入った秘密は、消すだけでなく作り直します。

職場での当てはめ:秘密の保管場所を1つに決め、コード・共有フォルダ・チャットへの貼り付けを禁止します。ログと検査結果の表示には伏せ字を入れ、履歴に入ってしまった秘密は「作り直す」までを手順に含めます。

CHECKLIST

職場で確かめる10項目

上から順に、自分の職場がどうなっているかを確かめてください。答えられない項目が、最初に手を付ける所です。

  1. 守ってほしい決まりのうち、仕組みで止まるものと、お願いのままのものを分けて言える
  2. 止まるべき操作が実際に止まるかを、決まった間隔で試している
  3. 止まってはいけない操作が通るかも、あわせて試している
  4. 守りの設定の原本があり、端末ごとのずれに気づける
  5. いま有効な許可・連携・鍵を、一覧で見られる
  6. 許可を外す前に、頼っている仕組みを確かめ、控えを残している
  7. AI に読ませてよいデータと、外に出さないデータの境界が決まっている
  8. 計算や合否の判定を、AI ではなくプログラムと人が行っている
  9. 社内の管理画面にも、踏み台にされない検査が入っている
  10. 秘密の置き場所が1つに決まり、ログ・履歴・記録に値が残らない

どれも、特別な製品を買う前にできる、考え方の見直しです。まずは1つ、「お願い」のままになっている決まりを選び、仕組みで止める形に変えてみてください。