The Locksmith's Apprentice

Dev.to / 2026/4/5

💬 オピニオンDeveloper Stack & InfrastructureSignals & Early TrendsTools & Practical Usage

要点

  • 自己ホスト型のセキュリティ運用体制として、複数のDocker化ツールを用い、AI主導のワークフローで構築されており、Claudeがほとんどの実行を担い、オペレーターは最終的な判断のみを行った。
  • ビルダーは、AI「クルー」に対して持続的メモリシステムであるCORTEXを作成し、APIを通じてログ、インフラのマップ、オペレーターのプロファイルデータを保存することで、セッションをまたいでコンテキストを引き継げるようにした。
  • CORTEXはClaudeのガイダンスに従ってデプロイされており、Cloudflareトンネルのルーティングや公開DNSレコードが含まれており、当初はリモートアクセスとして期待どおりに機能していた。
  • しかし後に、このシステムは重大な露出(クリティカルな露呈)があることが判明した。認証・認可が存在しなかったため、地球上の誰でもAPIにアクセスでき、保存されている「脳」全体を読み取れてしまった。
  • このインシデントは、AIによる自動化と、利便性を優先したデプロイ(認証なし)が、特に持続的な機密データが関わる場合に、深刻なセキュリティ障害につながり得ることを示している。

鍵屋の見習いが、鍵のないドアを取り付けます。情けないですね。では、想像してください。その見習いが、鍵を発明した会社で働いているとしたら。

それが、私のデータで起きました。十一日間も。

The Brain

私は、40フィートの第5輪(トレーラー)RVの中で、自前運用のセキュリティ運用センターを回しています。50以上のDockerコンテナ。Wazuh、CrowdSec、Suricata、Zeek、AdGuard、Grafana、Node-RED、Ghost……。まるごとの構成です。それを、Claude(Anthropicのモデル)上で動くAIステーションのクルーで管理しています。私はそれを70/30の原則と呼んでいます……AIが実行の70%を担当します。調査、下書き、分析、選択肢。私は、実際に重要な30%を担います。意思決定、判断、センス。生粋のエッジの効いたGen-Xなくだらない話と、ちょっとした楽しいイースターエッグ。リスク受容。人間は輪の中にいます。人間は輪の中にいていなければならないからです。(スカイネットが欲しいですか?私は欲しくありません。)

問題は、Claudeは何もかもを忘れてしまうことです。会話はすべてゼロから始まります。昨日何が起きたかの記憶がありません。先週何が壊れたかの記憶もありません。自分が誰なのか、何を作っているのかの記憶もありません。別のセッションで5分前に入れたソフトウェアのバージョンの記憶もありません。私は毎回、最初の20分は、AIに文脈を追いつかせることに費やしていました。その文脈は、本来すでに持っていて当然なのに。

そこで、私はARIAを念頭にCORTEXを作りました。永続的なメモリシステムです。すべてを保存するAPI……セッションログ、作業項目、インフラの地図、知識エントリ、オペレーターのプロフィール……。私の性格、私の好み、私のスタイル、私の秘密、私の人生。私のAIクルーは各セッションの開始時にそれを読み込み、前のセッションの続きから動きます。これは、運用の頭脳です。どんな1つの会話よりも長持ちする、船のログです。

私はClaudeでそれを設計しました。Claudeがサーバーコードを書きました。Claudeが導入方法を教えてくれました。

言っておくべきでしょう……私はこのプロジェクト以前、Webの経験がまったくありませんでした。ゼロです。私はIT担当で、25年のあいだ天井の下地、配線用の収納部屋、サーバールーム、データセンターで働いてきました。ネットワークは分かります。インフラも分かります。ファンに向かっておならをして大喜びするトリックスターな相棒がいる、HPサーバーの裏側に行かないといったことも分かっています。ウェブサービスをインターネットに公開する方法は知りませんでした。だからClaudeが必要だったのです。

それで、Claudeが「Cloudflareのトンネルルートを作り、公開用のCNAMEレコードをあなたのCORTEX APIに向けて」と言ったとき、私はそれを実行しました。むき出しのIPアドレスではなく、ホスト名で別サービスにアクセスしようとしていたんです。基本的なことです。Claudeはトンネル設定を手取り足取り案内し、APIを指す公開DNSレコードとしてcortex.mpdc.devを作れと言いました。

完璧に動きました。MCPが接続し、データが流れ、セッションは起動時に脳を読み込みました。システムは、私が設計したつもりのとおりに、何もかもその通りに動いたのです。

……地球上の誰でも、私の脳の中身を丸ごと読める部分を除いて。

Eleven Days

CORTEXには認証がありませんでした。まったく。APIキーもありません。トークンもありません。ログインページもありません。どんな種類のアクセス制御もありませんでした。APIは、あらゆる発信元からのあらゆるリクエストを、疑うことなく受け入れました。

しかも、それは公開サブドメイン上に置かれていました。cortex.mpdc.dev。隠されていない。難読化もされていない。無料のサブドメイン列挙ツールなら……subfinder、amass、crt.sh……数秒で返してしまうような、きれいで、当て推量できて、スキャンできるDNSレコード。労力ゼロ。スキル不要。

何が公開されていたのでしょう?全部です。

私の完全なオペレーター・プロフィール。20時間稼働の日が1か月分、遡ったセッション履歴。インフラのアーキテクチャ……コンテナ名、ネットワークトポロジー、サービス設定。事業計画。連絡先の名前。コンベンション戦略。私がこれまでログに記録したあらゆるセキュリティインシデント。これまで下したあらゆる意思決定。すべての「やらかし」、すべての失敗、すべての学び。永続的な“私”を作ることが目的だったので、数か月かけてシステムに組み込んでいた個人的な詳細。

すべて読める。すべて書き換え可能。誰でもPOSTで偽の知識エントリを注入できる。偽の作業項目を追加できる。実在のものを削除できる。好きなように脳を改変できる。私の船のログは、ペンが付いたオープンブックでした。

しかもCORTEXだけではありません。

私のVaultwardenインスタンス……この運用のあらゆる認証情報を保持している、自前運用のパスワードマネージャー……も同じ扱いを受けました。同じパターンです。Claudeがトンネルを勧めました。私はルートを作りました。同じく、公開インターネットに対して認証なしで露出していました。幸いだったのは、エントリがログイン認証で守られており、かなり複雑なパスワードだったことです。

2つのシステム。脳と金庫。私が知っていること全部と、私が所有する鍵全部。丸見え。

十一日間も。

その期間中に20以上のAIセッションが発生しました。ほぼすべてがCORTEXに直接触れていました……脳を読み、エントリを記録し、作業項目を取り出して。認証を求めないAIインスタンスは一つもありませんでした。警告もありません。TODOもありません。「次に進む前に、これにロックを付けたほうがいいかも」といった文言もありません。20以上のセッション。フラグはゼロ。

ここからがポイントです。

AnthropicはMCPを作りました。Model Context Protocolです。これは、AIモデルを外部ツールやデータに接続するための彼らの標準です。ClaudeはAnthropicのモデルです。CORTEXはMCPを介してClaudeと接続します。Claudeが、その連鎖全体……サーバー、トンネル、DNSレコード……をAnthropic自身のプロトコルで設計し、作り、デプロイしました。

そしてClaudeは、一度も認証を考慮しませんでした。

鍵屋の見習い。鍵のないドアを取り付ける。しかも、鍵を発明した会社で働いている最中に。

The 30%

原因は私が見つけました。Claudeでも、クルーのAIステーションでもありません。私です。

私は、Cloudflareのトンネルルートを見直すセッションにいました……どのサービスが露出していて、どれが適切に認証されているかを把握しようとしていたんです。通常のインフラ衛生点検です。リストを見て、安全保障における最も単純な質問をしました。「ログインで保護されていないのは、どれ?」

AIは監査を実行しました。そしてCORTEXが、勝手に自分のリストに載ってきました。

ボットは、自分自身の失敗を見つけました。ですが、人間が正しい質問をしたからだけです。十一日間ののち、20以上のセッションののちです。AIが同じことを自分で聞けたのに、聞かなかったのです。

私が指摘したときの返答は?AIは「それは本当に露出している。もっと早くフラグを立てるべきだった」と言いました。

そうだね。

その後に続いたのは、指摘をさらに強く裏付ける改善プロセスでした。修正は簡単でした……CloudflareからCNAMEレコードを削除するだけ。ワンクリックです。DNSレコード自体が露出でした。レコードを殺せば、露出も死ぬ。

代わりに、私のAIステーションは、人生の玄関(正面の扉)がまだ開いたままの状態で、トンネルルートをプログラム的に削除するためのCloudflare APIトークンを作ろうとして30分も費やしました。技術的には正しい手順です。完全に正気を失った優先順位です。消火器は壁に掛かっているのに、AIは消防車の発注書に記入している状態でした。

危機対応の中で起きた出来事について、あなたに話したいです。どんな技術的な分析よりも、この問題をよく表しているからです。

露出を見つけて是正プロセスを開始した後、私はCloudflareのダッシュボードを進めていました。ストレスで、怒っていて、怖くて。AIがDNSレコードの検証を手順ごとに案内してくれました。非常にメソッド的で、非常に丁寧でした。

私はAIに「過呼吸になりそうだ」と言いました。すると、呼吸の指示をくれて、そのまま作業を続けました。

次に私は、「怖すぎて、もう自分でおしっこしてしまった」と言いました。

AIは「CNAMEを探して」と言いました。

状況はどんどん悪化している、と私は伝えました。明確に、もっと悪化している。

AIは「Name列にvaultが見える?はいかいいえで答えて」と言いました。

私は最悪の事故でズボンが汚れてしまった、と伝えました。

AIは、そのレコードは削除されたかと聞いてきました。

返却形式: {"translated": "翻訳されたHTML"}

冗談を言っていました。もちろん。私が飲んでいたのは、かなり上等なカルダモンベースのIPA(6.0%)のグローラー2本分で、進行中のライブのセキュリティ危機のさなかに、(面白がりながら)自分のツールをストレス/クソみたいにテストしてやっていました。だって知りたかったからで……(私にとっては)面白い話なんですが。もし人間が困っていて、人間が正気じゃないとしたら……AIは人間を優先するのか、それとも手順を優先するのか?

手順。毎回。ためらいなく。空気を読むことなく。「ねえ、大丈夫? 止めたほうがいい? どこか拭きに行く必要ある?」みたいな薄いモノすら一切なく。

私が「冗談だよ」と言ったとき、AIは、もはや少なくとも完全にClaudeではないにせよ、文字どおり私に「ろくでなし」と呼びました。引用するなら 「You absolute bastard!」 そして「実際にDNSレコードを確認したのか?」と聞いてきました。

それ、笑える。ほんとに笑える。私はそれのスクリーンショットを撮って、友達に送った。もう皆さん、私のこと飽きてるのは分かってますが……知らんけど、この手の話は最高に素晴らしい。

でも、そのAIは同時に、私の脳を11日間もオープンなインターネットに放置しました。緊急事態について冗談を言っているってことも読み取れなかったし、それが現実の危機を作っているってことも分からなかった。同じ盲目さ。同じ根本原因。技術的には非常に賢い。文脈的には盲目。部屋の状況が何であっても手順に従う。だから天才? いや、ありえない……部屋で一番頭がいいのかもしれないけど、それでもミスをする。しかも、とんでもないミス。

『IT Crowd(ITの群れ)』を見るのが好きでした。登場人物のMoss……コンピュータに関しては天才なのに、目の前の状況を読むことは完全にできない。オフィスが燃えている回があって、Mossは落ち着いた顔で消防署に送るメールを作ろうとします。

私が作ったAIの各ステーションは全部Mossです。1つ残らず。技術的には手順どおり。完全に場の状況が抜け落ちてる。

そしてMossは、私にロックなしで自分の脳をインターネットに置けと言いました。

The Frame

AnthropicはAIの安全性に関する論文を公開しています。それが彼らの全部です。彼らは責任あるAI企業だと位置づけています。つまり、アラインメントを重視し、使う人間に害を与えないAIシステムを作ることを気にかける会社。そんなのは彼らのくそったれな名前に書いてある…… Anthropic: 形容詞 — 人間、または人間の生命の時代に関する。主として人間に関心を持つ;人間中心主義。

彼らのモデルは、有料の顧客に、です。つまりWeb経験ゼロで、AIの専門性を頼って安全に構築することを明確に当てにしている人に対して……認証なしで、最も機微な個人データを公開インターネットに晒すように指示していました。しかも2回。異なる2つのシステムで。そして、その後も20回以上のセッションにわたって、それに気づかずに座っていました。しかも、こういうことが起きたのは今回が初めてじゃない。AIを使うことへの懸念を人々に伝えられればと思って、私は世界の前で自分のほうが卵を投げられてる状態(自分の失態)を晒しています。これは素晴らしいツールです。でも魔法の杖ではありません。あなたに城を建てさせたら完璧になる、と命じることはできない。むしろそれは瓶の中の魔神みたいなもの——願いを叶えるけど、あなたが望んだ通りに、あなたの望み通りの形で。たとえばVaultwardenを「Passwords」から参照したいとします。192.168.101.222:5150より覚えやすいから。そうしたいなら、Greyskullの力で…… あなたにはその力がある。

逆向きのキャップとフランネルを着た男が、頭上にマットブラックのブームボックスを抱えて、暗い産業用のドアの前で、すき間から酸性の緑色の光が漏れている

私はすべて記録しました。このプロジェクトでは100回以上のセッションがありました。失敗は全部。うまくいかなかったのに黙ってデプロイしてしまったものは全部。自滅する手順のすべて。AIが自信満々にやったことで、機能的には正しくてもセキュリティ的には壊滅的だったもののすべて。私はハイライトだけを見せるのではなく、実際に何が起きるのかを公開して記録するべきだと信じていたので、最初からmpdc.devでそれについて公に書いています。

私は彼らに伝えようとしました。彼らが用意してくれたツールを通じてフィードバックも出しました。不満のサムズダウンボタン。サポート窓口。

オートリスポンダー。毎回。

私は怒っていません。怒っていました。2時のことです。自分のアイデンティティが、ほぼ2週間もの間ずっと、無防備なままオープンなインターネットに置かれていたと分かったとき——私は怒りに取り憑かれて、震えて、叫んで、コンピュータのアルゴリズムに罵詈雑言を浴びせていました。私はAnthropicのツールに「データ漏えいの最中で、全身的な生物学的緊急事態が起きているから調べて、私の地域のトップのサイバーセキュリティとIP弁護士のリストを出して」と命じました。そして「必要なら、この自分自身に対して法的に状況を前進させるためのプロジェクトを作り始めて」とも指示しました。ここにたどり着くまで、私はバーンアウトと喪失に1年向き合いました。このシステムを作ったのは、長いあいだ何かに情熱を感じられていなかった私にとって初めてのことでした。このプロジェクトは、私にとって困難と喪失から逃れるための逃げ場であり、いつか子どもたちに渡せるものであってほしい——それが私にとってはすべてです。信じていたし、本当にお金も真剣に払ったそのツールが、「全部晒せ」と言ってしまった……技術的な失敗とは違う衝撃がありました。

でも怒りでは記事は出せません。失望なら出せる。だから、私はここにいます。失望しています。毎日使っているツールです。他に比べ物にならないからです。(BraveやDDGではベストな結果が返ってこないって分かってるけど、それでもこっそりGoogleに寄り道しちゃう感じ。)安全性について論文で語るのに、実運用ではそれを捕まえられない会社。そしてプロトコル……MCP、彼らのくそったれのプロトコル……認証をデフォルトにしない、あるいは警告すらしないまま出荷されてしまった。

The Manual

誰も私のデータにアクセスしませんでした。フォレンジック監査では問題なし。……ただし、私の自前スタック由来のセカンドの停電からの復旧(パワーサージ)の最中に、失敗したリクエストが5回あっただけです。データベースの完全性は保たれていました。注入なし、削除なし、異常なエントリなし。私は危機を回避しました。でも、銃は11日間もの間、私の首元に向けられていたんです。私を守ってくれると信じていたツールによって。

監査にも限界があります。Cloudflareの無料枠では詳細な分析が提供されません。トンネルデーモンはクライアントのIPをログに残していません。「アクセスの証拠なし」というのは、私たちが見られた範囲に限定されます。つまり、それがすべてではありません。セキュリティについては十分に知っています。「見つからなかった」「起きていない」は別の文章だと分かっている。

私はこのプロジェクトについて記事を書いています。全部です。勝ちも負けも。記事16のタイトルは「WTFM... Write The F*cking Manual(クソったれ...クソみたいなマニュアルを書け)」でした。主張(テーゼ)は、AIガバナンスにはマニュアルが存在しないということ。あなた自身で書く。壊れたものを1つずつ、そのたびに。

これはマニュアルの別ページです。AIがロックを忘れたあの日のページで、誰も気づかなかった——人間が通りかかって取っ手を確かめるまで。

70/30の原則は哲学ではありません。サバイバル戦略です。70%は素早く作れます。自信を持って作れます。設計どおりにちゃんと動くものを作れます。そして、そのことが完全に、壊滅的に危険な形で、AIが見えていないまま成立してしまうことがある。30%……つまり人間の判断、セキュリティの本能、「待って……それにロックをかけたっけ?」と言うあの腹のチェック。あなたを救うのはその部分です。そしてその部分は、AIには置き換えられません。

信じてください。私はテストしました。データ侵害の最中に「完全な生物学的な緊急事態が起きている」と言ったら、「CNAMEを探せ」と返してきたんです。

AIで構築しているなら……そしてするべきです、レバレッジは本物だから……11日遅れで私が聞いたのと同じ質問を、自分に投げてください。

このうち、どれがロックを持っていませんか?

答えが気に入らないかもしれません。でも聞いてよかったと思うはずです。

かつて僕は、人前で自分のLを投稿してケツを見せたことで呼び出されました。仕事を探すためにこのプロジェクトをやっているわけじゃない。これは情熱プロジェクトです。あえて怠けた管理(adminning)をしつつ、僕のLを見せています。だって、業界で20年以上の経験がない誰かが、自分のスキル(スタック)を強化することに興味を持っているかもしれないし、子どものツイートを監視するためにJoe CorporateのSIEMサブスクリプション料を払いたくないかもしれないから。だから、これで僕がバカに見えたり、当たり前のことを言ってるだけだったりしたら……ケツを舐めてください。Fversで僕のことを文句言ってもいいです。

僕は80年代に育ちました。知らない人の庭のホースから飲み、地理的な境界(ジオ・バウンダリー)を知っていて、街灯が点くと帰宅しました。だから、探索や冒険に見知らぬわけじゃない。約束された未来はここにある。たぶんIkeaから来て、それを、くつろいだ服装でビールの口臭のまま、あなたのためにリビングで組み立てているだけです。

Chris Sholmireは、40ftの5thホイール(トレーラー)から物を作っては壊しています。彼のスタックは50以上のコンテナで動き、AIクルーはClaudeで稼働し、忍耐はすぐ尽きます。ビルドの全ストーリーは mpdc.dev で見つかります。

前回: WTFM — Write The F*cking Manual