私たちの調査を公開し、ExtensionTotal をリリースして以来、素晴らしい企業のセキュリティチームの皆さまとご一緒する機会に恵まれてきました。現在、ExtensionTotal の API は、Visual Studio Code 拡張機能のリスクと戦うために、さまざまな構成で数十の組織に利用されています。
このガイドは、航空会社からディープテック企業、サイバーセキュリティ企業に至るまで、さまざまな組織へ ExtensionTotal を統合してきた私の経験の集大成だと捉えてください。
それでは始めましょう。
私は CISO だが、なぜ気にする必要があるのか?
まだであれば、これ以上読み進める前に、数週間前に公開した調査記事 「偽の VSCode 拡張機能を使って 30 分で数十億ドル企業をハックした方法」 を読んでください。今日の開発者を取り巻く危険性を理解するうえで、必要な背景情報が得られます。
とはいえ、ここでも簡単に触れておきましょう。
Visual Studio Code(VSCode:世界で最も人気のある IDE)の拡張機能は、根本的な境界が欠けた設計になっています。任意のコードを実行でき、子プロセスを生成でき、権限モデルがないまま制限なくシステムリソースへアクセスできます。つまり、拡張機能がどのような操作を行っているのか、ユーザーには可視性がまったくありません。さらに、VSCode Marketplace の統制は最小限であるため、悪意ある拡張機能が容易に信頼性と露出を獲得し、私たちの調査用拡張機能(最初のブログ記事で述べたとおり)は、私たちからの勧誘や大きな労力がほとんどないにもかかわらず、世界最大級のサイバーセキュリティ企業を含む、時価総額が数十億ドル規模の複数企業にまで到達し、数千人の開発者に利用されました。これらの問題は、世界中の組織にとって重大な脅威となります。
CISO として、組織を守るために数多くのセキュリティ製品やレイヤーを購入・導入しているはずですが、残念ながらこの攻撃ベクトルは、それらの大半(場合によってはすべて)を回避し得ることが示されています。結果として、組織内の開発者がさらされる攻撃ベクトルの中でも、最もリスクが高い部類の一つになります。
この危険な攻撃領域のリスクを完全に把握するために、私たちの調査全体を読むことを強くおすすめします —
1/6 | 偽の VSCode 拡張機能を使って 30 分で数十億ドル企業をハックした方法
2/6 | 悪意ある拡張機能を暴く:VS Code Marketplace の衝撃的な統計
3/6 | Microsoft への書簡:Visual Studio Code 拡張機能の設計上の欠陥を明らかにする
なるほど。高リスクで影響も大きい攻撃領域だ。では何ができる?
ExtensionTotal を使ってください。ExtensionTotal は、拡張機能名・ID・URL を与えると、VSCode 拡張機能のリスクを評価できるツールです。
拡張機能を展開して深く解析し、コードおよび依存関係に対する脆弱性チェックを実行し、発行者の背景情報を収集し、拡張機能が外部通信しているかを監視し、漏えいしたシークレットを検出し、さらには AI によるコードインサイトで「そのコードが何をするために作られているか」を理解できるようにします。
ExtensionTotal は、組織が VSCode 拡張機能のリスク評価を自動化するための API を提供しています。現在、この API は毎分、数十の組織で利用されています。
いいね!では、組織に ExtensionTotal を統合するにはどうすればいい?
ExtensionTotal は、組織内でさまざまな方法・構成で利用されています。自社に最も合い、組織のプロファイルに適した方法を選ぶべきです。
よくある構成をいくつか取り上げます —
MDM 経由で ExtensionTotal API を利用する
これはおそらく、組織に ExtensionTotal を統合するうえで最も推奨され、一般的な方法です。
仕組みとしては、MDM を使って全エンドポイント上でスクリプト(Bash/Power-shell)を実行します。スクリプトの目的は、code コマンドを用いてインストール済みの VSCode 拡張機能をすべて収集し、ExtensionTotal の API に照会してリスク情報を取得することです。
MDM で拡張機能一覧だけを収集し、その後 ExtensionTotal の API でリスク評価することもできますし、エンドポイント上で直接リスク評価することもできます。通常、組織向けの API キーにはレート制限がないため、どちらでも大きな差はありません。
以下は、ExtensionTotal の API を利用する JumpCloud スクリプト(MacOS エンドポイント)の例です —
#!/bin/bash
loggedInUser=$(stat -f "%Su" /dev/console)
codePath="/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code"cd /Users/"$loggedInUser"codeExtensions=$(sudo -u "$loggedInUser""$codePath" --list-extensions)
jsonResult="{\"extensions\":["
while IFS= read -r line || [[ -n $line ]]; do content=$(curl -s --location 'https://app.extensiontotal.com/api/getExtensionRisk' \
--header 'Content-Type: application/json' \
--header 'Cookie: SameSite=None' \
--header 'x-api-key: <YOUR_API_KEY>' \
--data "{
\"q\": \"$line\"
}")
jsonResult+="$content," done < <(printf '%s'"$codeExtensions")
jsonResult=${jsonResult%,}
jsonResult+="]}"echo "$jsonResult"
私たちは組織と密に連携し、各社の MDM やユースケースに合わせてスクリプトをカスタマイズしてきました。お気軽に ご連絡 ください。お使いの MDM 向けにスクリプトを適応するお手伝いをします。以下は Windows エンドポイント向けの別例です —
$codeExtensions = $(code --list-extensions)
Write-Output += "チェック対象の拡張機能が $($codeExtensions.Count) 件見つかりました..."$extArray = @()
foreach ($extension in $codeExtensions) {
$headers = @{
"Content-Type" = "application/json""Cookie" = "SameSite=None""X-API-Key" = "API_KEY_HERE" }
$payload = @{
"q" = $extension
}
$response = Invoke-WebRequest -Uri 'https://app.extensiontotal.com/api/getExtensionRisk'`
-Method Post ` -Body $( $payload | ConvertTo-Json) `
-Headers $headers
$responseContent = $response.Content | ConvertFrom-Json
$extArray += $responseContent
Start-Sleep -Seconds 10
}
$extArray | Sort-Object -Property risk -Descending | Format-Table -Property display_name, version, risk, updated_at
FleetDM + Tines を使う
組織で FleetDM と Tines を利用している場合、ユーザーの一人である Dave Herder 氏が、ExtensionTotal を FleetDM と、彼が開発した Tines 連携に統合する方法について LinkedIn 記事を公開しています。記事はこちら —
すべての開発者エンドポイントに ExtensionTotal をインストールする
別の方法として、複数の組織が選択しているのは、すべての開発者に対して ExtensionTotal の VSCode 拡張機能 をインストールするようポリシーを配布することです。
私は、インストール済みの拡張機能を継続的にスキャンして危険な挙動を検出し、見つかった場合に警告する VSCode 用拡張機能を実際に開発しました。これは毎日、数千人の開発者に利用されています。
ここで注意点が 1 つあります。拡張機能を利用するには、各開発者が https://app.extensiontotal.com/profile でアカウントを作成する必要があります。そのため、大規模組織で ExtensionTotal を利用する方法としては、あまり効率的ではありません。
オンプレミス版 ExtensionTotal
大規模組織から、ExtensionTotal をセルフホストしたい、あるいはより正確には、各社のクラウドに ExtensionTotal をデプロイし、私たちがそれを運用管理する形にしたい、という要望をいただいています。ご関心があれば、こちらからご連絡ください。
また、より詳しい支援のために、ドキュメントを読むことも強くおすすめします
素晴らしい。API キーが必要だが、どこで入手できる?
ExtensionTotal は個人利用であれば完全無料で、現在、数千人の開発者が VSCode 環境を守るために ExtensionTotal を利用しています。
大きな感謝を、すでに私たちを支援してくださっている組織の皆さまへ。
私たちは毎日、新しい環境を持つ新しい組織とお話ししており、ExtensionTotal の新しい利用方法が出てくるたびに、ここも更新していきます。独自のユースケースがあり統合の支援が必要な場合は、お気軽に ご連絡 ください。私たちの目標は、セキュリティコミュニティがこの問題を完全に緩和できるよう支援することです。
本記事がこのシリーズの最後の投稿です。この道のりでいただいたすべての反応、フィードバック、支援に感謝しています。今後も皆さまのために、より素晴らしいセキュリティ製品を提供し続けられることを願っています。
ありがとう ❤️ Amit