6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

gradioをshare=Trueで起動してしまい、Defenderに怒られて焦ってるあなたへ

Posted at

導入

Gradioの素晴らしいハンズオン教材を動かしていたら、
「マルウェア検知されました」→「情シスから警告」→「はい、報告書確定です」
という地獄コンボを食らいました。

調べてみたら gradio.launch(share=True) の裏側で Fast Reverse Proxy(FRP)を確立するために、勝手に .exe ファイルをダウンロード&実行していたんですね。
どうりでWindows Defenderさんがシュバってくるわけです。

というわけで今回は、Gradioのshare機能の正体なぜ警告されるのか
そして回避策(share=False)の推奨理由をまとめます。

TL;DR(この記事でわかること)

  • Gradioで share=True にすると、外部からアクセス可能な状態になる
  • その裏では .exe 実行ファイルがダウンロード&実行されている
  • これがセキュリティソフトに「マルウェア疑惑」と誤判定される可能性がある
  • チーム開発や企業環境では、share=False にしておくのが安全

対象読者

  • Gradioを使ってローカルアプリを外部に公開しようとしている人
  • 社内PCや情シス管理下の端末でGradioを動かしている人
  • 「とりあえずハンズオンを写経して怒られた」タイプのエンジニア

gradioをshare=Trueで起動すると起こること

Fast Reverse Proxyという技術を使用して、
ローカルで起動しているgradioアプリケーションをパブリックな環境から使用できるようになります。

正確には、gradio起動時に発行されるURL(例:https://xxxxx.gradio.live/)
からの操作をshareサーバー(HuggingFace管理)を経由して
ローカル端末に伝搬する仕組みです

具体的には、以下の図のようなイメージで動作します。

frp-gradio-diagram.jpeg

https://www.gradio.app/guides/understanding-gradio-share-links

実は .exe が動いている:Fast Reverse Proxy の裏側

実はFast Reverse Proxyを確立するためにgradioソース内で実行ファイルをDLして、実行しているためWindows Defenderにマルウェア判定されてしまいます。

Fast Reverse Proxyを確立するために呼ばれる実行ファイル

問題のコード:
gradio/tunneling.py#L112

具体的な実行ファイルとしては、以下になります。

{省略..}/gradio/frpc/{原本ファイル名}_v{原本バージョン}

例えば、情シスから
「マルウェアと思わしき実行ファイルを検知した。実行ファイルはこちら。」
と言われるファイルは以下のようになります。

{省略..}/gradio/frpc/frpc_windows_amd64_v0.3

大元の実行ファイルは、ライブラリをインストールした時点では入っておらず
gradioでshare=True初回起動時に
https://cdn-media.huggingface.co/
から提供されているのでバイナリをダウンロードしてきます。

https://www.gradio.app/guides/understanding-gradio-share-links#frp-client

危険性

マルウェアかという観点

gradioは生成AI業界でdemoアプリ開発用とでの利用実績が多数ある著名OSSです。
よって、悪意の混入には細心の注意を払っているため
frp確立に動作した実行ファイルはマルウェアではないと言えます。

🔳 マルウェアの定義
悪意のあるソフトウェア(Malicious Software)の総称で、コンピューターやその利用者に危害を及ぼす目的で作成されたプログラム

セキュリティ観点

マルウェアではないものの、外部から自身の端末を間接的に使用させるため以下のリスクが挙げられます。

🔳 狭義
gradio実行時のmainファイルで許可した操作が外部で使用可能になります。

gradio UI上から可能な操作だけでなく、
mainファイル内のdef全てがAPIとして実行可能になっているため、
defで実行可能な操作が全てできてしまう状態になります。

🔳 広義
脆弱性を突かれた場合、狭義のリスク範囲内で収まらない可能性もあります。

外部からローカル端末リソースを使用可能にさせる状態であるため、
実行前と比べ、実行後は ”セキュリティーリスクがとても高い” 状態であると言えます。

【ログの提出による影響範囲証明について】

発行された公開URLを知らないと誰もコールできないわけなので
数分であれば誰もリクエストしてこない可能性が高いです。

しかし、基本的にgradio側でアクセスログを意図して出力していない限りは
外部からのアクセスが来たかどうか明確なログは残りません。

ログ提出を求められても死人の証明になるので、
起動したウィルスソフトの前後ログを確認して後はわからないというしかないです。。。

私の場合は、幸いwindows defenderのログにfrp起動を防いでくれた記録があったので影響なしと報告書が書けました。。。
windows defenderのログ参照方法は以下がわかりやすいです。

https://it-skill-memo.work/2020/04/23/%E3%80%90windows%E3%80%91windows-defender%E3%81%AE%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%AD%E3%82%B0%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%B3%E3%81%AE%E3%83%AD%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97/

おわりに:あなたも他人事じゃないかも

Gradioは神ライブラリですが、企業内やチーム開発ではほんの一行の share=True でセキュリティリスクが爆誕するという罠があります。

他にもこの事象に引っかかる人がいるはずなので、
ぜひこのQiitaを拡散してください 🙇‍♂️

X(旧Twitter)でもこんな話をよくつぶやいてるので、フォローも歓迎です!

@puchan_pig

6
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?