はじめに
サプライチェーンアタックでマルウェアを仕込まれたり、悪意の有無はさておきAIエージェントが開発者端末で任意コードを実行したり、以前よりもローカル開発環境に求められるセキュリティの要求水準が上がってきました。
ガチガチの設定を強制して何もできないようにするのは本末転倒だけど、最低限の自衛手段も知らずにノーガード戦法で戦うには治安が悪すぎます。
というわけで、なるべく地雷を踏まないようにするという観点と、踏んだ場合のダメージを減らすという観点で、いくつか対策を書き溜めていますが、記事が増えてきたので、まとめリンク集を作りました。
開発環境は人それぞれだし、もちろん網羅的なリストにはなり得ないのだけど、部分的にでも誰かの参考になるとよいのではなかろうか。
なるべく地雷を踏まないようにする
できれば踏まないに越したことはないので、まずはなるべく踏まないようにするという観点で、できる自衛手段を考えます。
依存ライブラリや開発ツールの棚卸し
とりあえず便利そうなので入れてみたけど、実はあんまり使ってないブラウザ拡張やエディタ拡張などないでしょうか?この機会に棚卸しして、不要なものは削除しましょう。拡張プラグインの作者の信用度合いとは関係なく、間接依存でマルウェアが混入する可能性もあります。攻撃表面を小さく保つことと利便性はトレードオフではありますが、お試しで入れたけど忘れてたレベルのものは少なくとも消せるはず。
拡張に限らず、App StoreやHomebrew経由などでインストールしたその他開発ツールも、この機会に棚卸しして断捨離しましょう。
min-release-age(cooldown)設定
依存ライブラリにマルウェアが仕込まれた場合、影響の大きいライブラリだと数時間以内に発見され、1〜2日以内に問題が収束することが多いです。もちろん完璧ではないけど、例えばcooldown期間として7日ぐらい寝かせておけば、多くの問題を踏まずに回避できるというコスパのよい経験則があります。
プロキシでマルウェアをブロックする
みんながcooldownを設定したら発見が遅れるだけで意味ないのではないかと思うかもしれませんが、セキュリティ企業は新しくリリースされたライブラリを自動スキャンしており、セキュリティ研究者にマルウェアを解析する時間的猶予を与えます。そしてマルウェアと判定されたものはデータベースに登録されます。
そして、このような既知のマルウェアはプロキシを挟むことでブロックできます。0-dayを踏むのは運が悪かったと言い訳できますが、既知のものを踏むのはカッコ悪いじゃないですか。
踏んだ場合のダメージを減らす
踏まないようにするのも大切ですが、可能性がゼロではないので、踏んだ場合のダメージを減らす対策も重要です。
ローカルから平文クレデンシャルを撲滅
パスワードやAPIキーなどのクレデンシャルをGitにコミットするなというのはもはや常識だと思いますが、.envなどの環境変数ファイルに切り出して.gitignoreしておくだけでは不十分です。
マルウェアの多くはクレデンシャルを狙っているので、ローカルにクレデンシャルを平文で置いておくべきではありませんし、うっかりAIエージェントが勝手に読み込んでどこかに投げてしまうかもしれません。
1Passwordなどのパスワード管理ツールで暗号化して保存し、必要最小限だけ都度渡すようにしましょう。
ところでニッチでなトピックですが、copilot.vim(GitHub CopilotのVim拡張) はOAuthトークンを平文で保存しちゃう問題があるので、Vimmerのみなさんは注意して下さい。
スコープを絞った短命なGitHubトークンを使う
マルウェアはいろんなクレデンシャルを狙っていますが、その中でも特に注意が必要なのはGitHubトークンです。GitHub公式のghコマンドがデフォルトで発行するGitHubトークンは権限が強く、有効期限も絞られていないので、結果的にサプライチェーンアタックの連鎖につながって被害が拡大しがちです。攻撃者から見てコスパがよく非常に魅力的です。またAIエージェントにghコマンドを許可すると、悪意の有無はさておき誤爆リスクがあります。
現状の技術的な制約の元で一番マシそうな解決策は、GitHub App の Device Flowを使ってスコープを絞った短命なGitHubトークンを生成することです。
サンドボックスに隔離する
AIエージェントは任意コード実行するという観点では、悪意の有無はさておきマルウェアと似たようなものです。AIエージェントが読み書きできるファイルや実行できるコマンドをAIエージェント設定でDenyしてブロックするのは、気休めにはなりますがセキュリティの観点では抜け穴だらけです。
MicroVMを使ったサンドボックスに隔離することで、そもそも仕組みとしてできないようにガードレールを整備する方が堅いです。また開発でこのようなサンドボックス環境を普段遣いしていると、AIエージェントに関係なく、運悪くマルウェアを踏んだ時の防御になります。触れるファイルや通信先を制限できるだけでも圧倒的な安心感があるので、試してみてね。
おわりに
ローカル開発環境のセキュリティ対策について、なるべく踏まないようにするという観点と、踏んだ場合のダメージを減らすという観点で、いくつか対策を紹介しました。
牧歌的な時代に育った自分としては、なんだか生きづらい世の中になってしまったなと、もんにょり(´・ω・`)していますが、嘆いても仕方ないので自衛していきましょう。