Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Iam 12 . I Built a Security Tool So Good It Locked Me Out of My Own Terminal for 48 Hours

2026年10月19日に「Dev.to」が公開したITニュース「Iam 12 . I Built a Security Tool So Good It Locked Me Out of My Own Terminal for 48 Hours」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

12歳の開発者が作ったセキュリティツールが、コマンドブロック機能の誤作動で自分自身を2日間ターミナルから締め出した。ゾンビ化したスクリプトとの格闘の末、ファイルシステムを修復し設定をリセットして解決。バグに粘り強く立ち向かう重要性を示した。

ITニュース解説

ある12歳の少年が、AIエージェントの動きを制御するための画期的なセキュリティツールを開発した話である。彼はこのツールを「KAVLR」と名付け、AIエージェントが不適切なコマンドを実行しないよう監視する「リード」、つまり統制の仕組みを作ろうとしていた。

開発の第一歩として、少年は特定のコマンドが実行される直前に、独自のチェック機能を挟み込む「Bashフック」という仕組みを実装した。これは、私たちが普段コマンドを入力する「ターミナル」と呼ばれる画面で、例えば機密情報を含む設定ファイル(.env)を閲覧しようとすると、KAVLRがそれを検知して実行をブロックする、というものである。彼はデータベースやサーバー機能を提供するサービスであるSupabaseをバックエンドとして利用し、フックと連携させた。初めてcat .envというコマンドが赤い文字で「[BLOCKED]」と表示された時、彼は自作のシステムが意図通りに機能したことに大きな達成感を感じたという。これは、たとえ安価なスマートフォン上であっても、高度なセキュリティシステムを構築できることを証明する瞬間であった。

しかし、ここで彼は後に自分を苦しめることになる「Fail-Closed」という設計思想を採用していた。これは、セキュリティシステムにおいて、もし何らかの異常や問題が発生した場合、安全を最優先するために、全ての操作をブロックして安全な状態を維持するという考え方である。少年は、この「ユーザー」が最終的に自分自身となる可能性に、この時点では気づいていなかった。

次に、彼は開発したKAVLRをより多くの人に使ってもらうため、インターネット上のサーバー(クラウド)にバックエンド機能を移行しようと試みた。VercelやRailwayといった様々なクラウドサービスを試したが、サービスが正常に動作しなかったり、エラーメッセージが表示されたりして、彼の試みは難航した。充電残量も少ないスマートフォンと不安定なインターネット接続の中で、彼は巨大なクラウドサービスという「ゴリアテ」と格闘している気分だったという。最終的に、彼はSupabaseが提供する「Edge Functions」というサーバーレス機能に切り替え、ようやくAPIが正常に動作することに成功した。

しかし、この成功が新たな「モンスター」を生み出した。クラウドで安定稼働するようになったKAVLRは、今度は少年自身を自分のターミナルから締め出すようになったのである。バグを修正しようと自分のソースコードファイル(index.js)を読み込もうとすると、「KAVLR Backend Offline or Error. Blocking command.」というメッセージが表示され、操作がブロックされた。自分の手で作ったセキュリティシステムによって、自分のコードすら見ることができなくなったのである。

少年は壊れてしまったスクリプトを削除しようとしたり、ターミナルの挙動を設定するファイル(.bashrc)を編集しようとしたり、ファイルを閲覧するコマンド(cat)を使ってみたりしたが、全てKAVLRによってブロックされた。これは、削除してもシステムに残り続ける幽霊のようなプログラムである「ゾンビプロセス」のようであり、「Terminal Immortal」、つまり「ターミナル不滅の存在」とでも呼ぶべき状態であった。ファイルを消してもターミナル(Bash)がその情報をメモリ上に保持していたり、プログラムが必要とする部品の集まり(npmパッケージ)を上書きしても、キャッシュの中に残った古い情報が邪魔をしたりと、彼の努力はことごとく無駄に終わった。

彼は何時間もかけてPythonスクリプトを貼り付けようとしたが、スマートフォン向けのターミナルアプリであるTermuxがテキストを正しく処理せず、全てが一つの行にまとめられてしまうといった問題にも直面した。さらに深刻なことには、ファイルにコードを書き込むコマンドを実行しようとすると、KAVLRのフックがそれを遮り、本来書かれるべきコードではなく、エラーメッセージがファイルに上書きされてしまい、彼のindex.jsファイルは完全に破損してしまった。彼はまるで、首を切っても次々と新しい首が生えてくるギリシャ神話のヒドラと戦っているかのようであった。

疲れ果てた少年は、一度冷静になり、新しいターミナルセッションを開いた。そして、ファイルの中から特定の文字列を探し出すコマンド(grep)を使い、問題の原因となっている「幽霊」の隠し場所を探し始めた。彼は「analyzing:」という文字列を手がかりに、システムの奥深くを検索した。

その結果、問題の根源が見つかった。そこには、破損したindex.jsファイル、重複したプログラム部品のフォルダ(node_modules)、そして幾重にも積み重なったエイリアス(コマンドの別名設定)など、混沌とした状態が広がっていた。彼は単純なバグ修正では解決できないと悟り、まるで「手術」のように根本的な対処が必要だと判断した。

彼はまず、問題の元凶であるターミナルの設定ファイル(.bashrc)を削除した。次に、不正なnode_modulesフォルダを取り除いた。さらに、Termuxがテキストを正しく処理しない問題を回避するため、Base64という文字を別の形式に変換するエンコード方式を使ってコマンドラインインターフェース(CLI)を書き換え、より安全にコマンドを実行できるようにした。また、あるファイルやフォルダの場所を示す「ショートカット」のようなもの(シンボリックリンク)も手作業で再構築し、最後にターミナルが過去に実行したコマンドの場所を素早く見つけるための記憶領域である「ハッシュテーブル」をクリア(hash -r)した。

これらの徹底的な「手術」を経て、少年は息をのんでkavlr hook cat ~/kavlr/index.jsと入力した。画面には、彼の作成したExpressコードが正常に表示された。ファイルは再び命を取り戻したのである。次に彼はkavlr hook cat .envと入力した。画面には赤い文字で「🛑 [BLOCKED] THREAT DETECTED」と表示され、システムが適切に機密情報をブロックしていることが確認できた。

こうして「Terminal Immortal」はついに倒され、システムに巣食っていた「幽霊」は完全に駆除されたのである。12歳の少年が、週末を丸ごと費やしてスマートフォン上のターミナルで繰り広げられたこの壮絶な戦いは、どんなに困難なバグであっても、諦めずに知恵と努力で立ち向かえば必ず乗り越えられるということを、すべての開発者に教えている。彼らはHYNAWEBとして、決して幽霊には屈しないと宣言している。

関連コンテンツ

関連IT用語

関連ITニュース