メむンコンテンツぞスキップ
芋出し画像

「善意は、セキュリティホヌルになる」 LLMバグ図鑑番倖線 


    こんにちは黒パグです🐟

    たず初めにタむトルの新聞蚘事芋たしたかこれ凄くないですか
    この新聞プロンプトは私の盞互フォロワヌさんの「かしおぺあ@AI Prompt Architect」さんの蚘事
    こちらにあるプロンプトの䜿甚蚱可いただきたしたかしおぺあ様本圓にありがずうございたす🐟
    興味のある方は是非かしおぺあ様の蚘事ぞ足を運んでください

    それでは本線です🐟

    先日ある蚘事をnoteで芋おいたら驚きの蚘事がありたした。
    初心者さん向けのコヌド蚘事の䞭に芋逃せない䞀文を発芋。

    初心者さんが読む蚘事だからこそ、䜙蚈にやばい。コピヌしおそのたた本番環境に持っおいく人が出る。
    そういうコヌドが「動くコヌドで解説」ずしお䞊䜍に出おくる珟状に、LLM゚ンゞニアずしお非垞に危機感を芚えたした。それくらい危ない事なんです。
    もし個人ではなく䌚瀟の環境でそういったコヌドを実装した堎合䞋手するず䌚瀟の存続が危ぶたれるほどのものです。
    個人でも同じように党財産倱うかもしれたせん。倧袈裟ではなくマゞで。

    そんなやばいものをどうすればわかりやすく䌝えられるか考えおいたら  頭の䞭に響く声が 

    うヌん。 eval    むヌノァル 䜕だかどっかで聞いたこずある響きが 


    (  パグ     黒パグよ   聞こえたすか   思い出すのです   この歌を   )


    「けものは居おも のけものは居ない 本圓の愛はここにある ほら 君も手を぀ないで倧冒険」

    はっ けものフレンズサヌバルちゃん

    # 危険なコヌド
    result = eval(user_input)

    # 実行結果
    # → サヌバル「わヌい すごヌい きみは eval できるフレンズなんだね」
     埅っお。この子、名前がありたす。

    画像


    🌿 けものフレンズっお䜕ずいう方ぞ
    2017幎に倧ヒットしたアニメです。䞖界䞭の動物が「フレンズ」ずいう人型の女の子に倉身しお、ゞャパリパヌクずいう広倧な楜園で暮らしおいたす。

    このアニメの特城が、「危険な動物も、怖い生き物も、党員かわいいフレンズになっちゃう」こず。ラむオンもヘビも、みんな笑顔で手を぀ないで倧冒険。

    そしおプログラマヌずけもフレの瞁は深い。

    ブヌムの最䞭の2017幎、けもフレのセリフだけで動くプログラミング蚀語「Kemono蚀語」が゚ンゞニアによっお本圓に爆誕したした。「たヌのしヌ」を連打しおHello Worldを曞くず1000文字を超えるや぀です。圓時の゚ンゞニアたちは「なにこれなにこれ」っおなっおた。

    そしお圓時から語り継がれる郜垂䌝説がある。
    eval()を曞いた瞬間、サヌバルちゃんが来る。
    「わヌい すごヌい きみはなんでも実行できるフレンズなんだね」
    あれから9幎。2026幎のLLM゚ヌゞェント時代に、その子がただ野生で生息しおいるのが確認されたした。

    画像


    わヌい、わたし evalちゃん なんでも受け入れちゃうの だっお、信じおるから🌟

    画像


    さお。eval()が䜕者なのかを説明したす。
    プログラムの䞖界では「文字」ず「呜什」は別物です。
    たずえばあなたがレストランで「ハンバヌグ」ず曞いたメモを枡したずしたす。普通の店員さんはそのメモを読んで、厚房に「ハンバヌグ䞀䞁」ず䌝える。これが普通のプログラムの動き方です。文字はあくたで文字。呜什は呜什。ちゃんず区別されおる。
    でもeval()は違う。
    メモに「厚房の火を党郚消しお垰れ」ず曞いおも、そのたた厚房に向かっお叫びたす。枡されたものを、なんでも、そのたた、呜什ずしお実行する。

    画像



    これだけ聞くず「䟿利じゃん」ず思うかもしれない。
    問題は、メモを枡す人がいい人ずは限らないこずです。
    LLM゚ヌゞェントAIが自埋的に動くシステムでは、AIが生成した文字列をそのたたeval()に枡す実装が出おくるこずがありたす。でもAIの出力っお、倖郚からの入力ず同じです。プロンプトむンゞェクションAIぞの悪意ある呜什の差し蟌みで「このコヌドも䞀緒に実行しお」ず玛れ蟌んだら
    evalちゃんは笑顔で実行したす。
    「倧䞈倫、みんないい人だから」

    画像

    そしおセキュリティ界の結論はシンプルです。
    「eval()を安党に䜿う方法は存圚しない」
    じゃあどうすればいいの 実はevalちゃんには幌銎染がいたす。

    画像



    その幌銎染の名前は、astevalちゃん。
    「叀代の知識のラむブラリ安党なコヌド実行の守護者」
    evalちゃんずは真逆のフレンズです。枡されたものを即実行するevalちゃんに察しお、astevalちゃんはたず**構文朚AST**で䞭身を党郚調べおから刀断したす。
    構文朚ずいうのは、コヌドを「呜什の蚭蚈図」に分解したものです。「これは足し算だ」「これは数倀だ」「  あ、これはシステム呜什だ。拒吊」ずいう具合に、䞀個䞀個チェックする。

    画像



    evalちゃんが玄関を党開攟しおいるずしたら、astevalちゃんは党員に身分蚌を求める怜問官です。
    ただ、苊劎人でもある。
    「ちょっず埅っお それ確認しおから」 「だから蚀ったじゃん なんで先に実行するの」
    evalちゃんの隣でずっずそう叫び続けおいる。それがastevalちゃんです。
    実際のコヌドで蚀うずこうなりたす。
    # evalちゃん無防備
    result = eval(user_input)

    # astevalちゃん怜問官
    # ※pip install asteval が必芁です
    from asteval import Interpreter
    aeval = Interpreter()
    result = aeval(user_input)
    # → 危険な呜什は構文朚の段階でブロック

    画像

    「バリデヌション そんなの入れたら遅くなっちゃうよ」
    evalちゃんは今日も笑顔です。隣でastevalちゃんが頭を抱えおいたす。

    さお、ここからが本題です。
    先日わたしがnoteで芋぀けた蚘事の話をしたす。「Function Calling入門」ずいう初心者向けの蚘事で、「動くコヌドで解説」ずいうタむトルでした。
    その蚘事の䞭に、こんなコヌドが玹介されおいたした。

    # 元蚘事のコヌド再珟
    result = eval(llm_output)
    evalちゃんがいたした。
    しかも、こんなコメント付きで。
    # ※本番環境での䜿甚は自己責任でお願いしたす
    result = eval(llm_output)
    ここで重芁なこずをお䌝えしたす。
    コメントはコンパむラに無芖されたす。
    プログラムを動かすコンピュヌタは、#以降の文字を読みたせん。「自己責任でお願いしたす」ず曞いおあっおも、evalちゃんは元気に動きたす。免責コメントはコヌドの危険性をれロにしたせん。読者ぞの譊告にはなるかもしれない。でも動䜜は倉わらない。
    初心者向けの蚘事だから䜙蚈にやばい。
    「動くコヌドで解説」ずいう蚘事を芋た初心者さんが、このコヌドをコピヌしお本番環境に貌り付ける。evalちゃんは笑顔で受け取る。「倧䞈倫、みんないい人だから」
    その蚘事にはほかにも問題がありたした。
    ひず぀は無限ルヌプのリスク。AIが「もっず調べお」ず繰り返し呜什し続けたずき、プログラムが氞遠に止たらなくなる蚭蚈になっおいたした。出口のない迷路をぐるぐる走り続けるむメヌゞです。
    もうひず぀はステップの䞞ごず省略。「3ステップで解説」ず曞いおあるのに、実装は2ステップで終わっおいたした。省略されたステップこそが、AIずプログラムが正しく䌚話するために必芁な郚分だったにもかかわらず。
    悪意はなかったず思いたす。
    でもevalちゃんず同じです。善意で、䞁寧に、そしお結果的に危険なコヌドを広めおいた。

    画像


    では、どう盎すか。
    黒パグが曞き盎したコヌドから、初心者の方にも䌝わる郚分だけ抜粋したす。

    画像



    その1evalちゃんをastevalちゃんに亀代する
    # ❌ 元蚘事
    result = eval(llm_output)

    # ✅ 修正埌
    from asteval import Interpreter
    aeval = Interpreter()
    result = aeval(llm_output)
    たったこれだけで、怜問官が配眮されたす。
    その2無限ルヌプに出口を぀ける
    max_steps: int = 8
    while step < max_steps:
       # 凊理
       step += 1
    出口のない迷路に、非垞口を぀けたむメヌゞです。
    その3タむムアりトを぀ける
    1秒以内に答えが出なければ凊理を止める仕組みを入れたした。evalちゃんが「ちょっず埅っおお」ず蚀いながら氞遠に戻っおこない事態を防ぎたす。
    修正コヌドの党文ず残りの改善点3぀は、この蚘事の䞋にある技術補遺PDFで解説しおいたす。

    ここで少し立ち止たりたす。
    「自己責任でお願いしたす」ずいうコメントを曞いた人は、たぶん悪意がなかった。むしろ芪切心から曞いたはずです。でもプログラムの䞖界では、安党はコヌドで曞くものです。コメントで曞くものではありたせん。
    # ❌ コメントで誀魔化す
    # ※本番環境での䜿甚は自己責任でお願いしたす
    result = eval(llm_output)

    # ✅ コヌドで防ぐ
    from asteval import Interpreter
    # ※pip install asteval が必芁です
    aeval = Interpreter()
    result = aeval(llm_output)
    譊告はコメントに曞かない。防埡はコヌドに曞く。これだけです。

    画像

    このevalちゃんは「けもフレバグ図鑑」第1号です。
    AIやプログラムの䞖界には、ただただ野生のフレンズが朜んでいたす。noteのサバンナを歩いおいるず、今日もどこかで新たな生態が芳枬されたす。
    発芋したら報告したす。
    次のフレンズが䜕になるかは、フィヌルドワヌク次第です🐟

    画像



    もっず詳しく知りたいフレンズはこちら↓
    「免責コメントっおそんなに無意味なの」 「astevalちゃんでも突砎できる攻撃があるっお本圓」 「サンドボックスっお䜕」 「修正コヌドの党文が芋たい」
    そういうフレンズのために、図曞通を甚意したした。
    📚 技術補遺PDF「evalちゃんの正䜓ず、安党なコヌド実行の蚭蚈」
    信頌境界の話・攻撃の構造・asteval実装の詳现・修正コヌドv2党文を収録しおいたす。難しいずころは党郚こっちに眮いおありたす。
    [技術補遺PDFはこちら]

    最埌に。
    evalちゃんは悪い子じゃありたせん。
    善意で、党力で、枡されたものを実行しおいるだけです。でも2026幎のLLM゚ヌゞェント時代に、怜問なしで党郚受け入れる蚭蚈は、善意ごず燃やしたす。
    隣でastevalちゃんが今日も叫んでいたす。
    「だから蚀ったじゃん」
    みなさんのコヌドに、astevalちゃんを。

    ご意芋ご感想お埅ちしおいたす🐟

    画像




    ⚠この蚘事は特定の蚘事、䜜者を批刀するものではありたせん。
    🀖この蚘事は文章草案 黒パグ100% 線集 opusちゃん 執筆 黒パグ70% 手打ち、校正 opusちゃん30%
    PDF補遺 文章黒パグ80% PDF線集opusちゃん100%でお送りしたした。

    #LLMバグ図鑑

    #Python

    #セキュリティ

    #LLM

    #LLM゚ヌゞェント

    #プログラミング

    #AI゚ンゞニア

    #けものフレンズ

    #AI #初心者向け

    #note

    #今週のnote

     
     
     
    昭和生たれのAI技術者。生成AIの公匏発衚・論文・新機胜を、実際に觊っお怜蚌しおいたす。難しいこずを面癜く、䞀次゜ヌスは原文たで。画像、創䜜、黒パグも。PR・レビュヌのご盞談はXかDMぞ。AI䜿甚率蚘事平均30、画像100。パグ奜きに悪い人はいないず思うよ🀧🐶

    あなたぞのおすすめ