概要
2022年8月、Vectraチームは、ローカルまたはリモートのファイルシステムに十分にアクセスできる悪意のあるアクターが、ディスク上にプレーンテキストで保存されているため、Microsoft Teamsから有効なユーザー認証情報を盗むことができる、ポストエクスプロイトの機会を特定しました。このプレーンテキストのクレデンシャル管理は、Windows、Mac、Linux用のすべての商用およびGCC Desktop Teamsクライアントに影響を与えることが判明しました。
メモリからのクレデンシャルハーベスティングは、エクスプロイト後の一般的なステップであるが、クレデンシャルハーベスティングに必要なハードルを、ファイルシステムへの単純な読み取りアクセスまで下げることは、敵の機会を拡大し、タスクを単純化し、盗まれたクレデンシャルが、そうでなければ厄介な多要素認証 (MFA) のスピードバンプに邪魔されることなく、ユーザーアクセスを保持する機会を提供する場合には、特に興味深いことであると我々は信じている。
これらのトークンを使用することで、攻撃者はトークン保持者のアイデンティティを仮定して、Microsoft Teamsクライアントを通じて可能なあらゆるアクションを実行することができます。さらに、これらのトークンはMFAが有効なアカウントでも同様に有効であるため、継続的な使用中にMFAのチェックを回避することができます。
マイクロソフトはこの問題を認識していますが、直ちに対応するための基準には達していないと指摘しています。マイクロソフトがTeams Desktop Applicationのアップデートに着手するまでは、顧客はプレーンテキスト・トークンの保管がもたらすリスクを認識し、ファイルシステムへの異常なアクセスやファイルシステムACLの変更を監視することでリスクを軽減する必要があると考えます。
ハンティングの起源
この調査は、Microsoft Teamsが無効化されたIDを管理する方法について、Vectra の顧客から苦情が寄せられたことから始まった。Teamsアプリケーションでは、クライアントからアカウントを削除するにはサインインする必要があるため、エンドユーザーはUIから無効化されたアカウントを削除できない。もちろん、ユーザーアカウントが無効になっている場合、ユーザーはこれを行うことができません。この問題を解決するために、私たちはTeamsクライアント内のローカル設定データを調べ、その仕組みを解明しました。
エレクトロン - 安全保障上のマイナス要素
Microsoft TeamsはElectronベースのアプリである。Electronは、カスタマイズされたブラウザで動作するウェブアプリケーションを作成することで動作する。これは非常に便利で、開発を迅速かつ容易にします。しかし、アプリケーションのコンテキスト内でウェブブラウザを実行するには、クッキー、セッション文字列、ログなどの従来のブラウザデータが必要です。
Electronは暗号化のような標準的なブラウザコントロールをサポートしておらず、システムで保護されたファイルロケーションはElectronではサポートされていませんが、安全性を維持するためには効果的に管理する必要があります。そのため、Electronのデフォルトの動作方法は、過度に透過的なアプリケーションを作成することを推奨しています。Electronはアプリケーションを作成する際の複雑な部分を難読化するため、開発者の中には自分の設計上の決定がどのような影響を及ぼすのか認識していない人がいると考えてよいでしょう。また、アプリケーションセキュリティの研究者が、重大なセキュリティ上の見落としのためにこのフレームワークの使用を嘆くのをよく耳にします。
構造に飛び込む
私たちはまず、ログインしているアカウントへの参照をすべて削除する方法を検討し始めました。私たちの目標は、古いアカウントを削除し、Teamsにあたかもそのアカウントが存在しないかのように操作させることだった。設定ファイルや初回実行ファイルを修正しようと何度も試みたが、何もできなかった。闇雲に、既知のユーザー・プリンシパル名を検索したところ、2つの重要なファイルがヒットしました。
最初の重要なファイルは、クリアテキストでアクセストークンが記述されたldbファイルであった。検証の結果、これらのアクセストークンはアクティブであり、以前のエラーによる偶発的なダンプではないと判断された。これらのアクセストークンによって、OutlookとSkypeのAPIにアクセスすることができた。Microsoft Teamsアーキテクチャは、Skype、SharePoint、Outlookに依存する多種多様なM365サービスの集合体であることを知っておくことは重要である。
次のファイルは、私たちがどのウェブサイトでも同意している「Cookie」のような、ブラウザのCookieデータベースです(ありがとう、GDPR)。Cookiesは、セッション情報、マーケティングタグ、アカウント情報、そして場合によってはアクセストークンなどのデータを保存する。 (不運なことに)Teams Desktopアプリケーションは、トークンもここに保存している。
クッキーDBを読む最良の方法は、sqlite3データベースクライアントを使うことです。このクライアントを使えば、必要な値だけを取り出すことができます。以下のクエリはトークンの名前とトークンの値を返します。
各トークンをマイクロソフトのjwt検証サービスhttps://jwt.ms。その結果、どのトークンも有効であり、追加認証を必要とせずに動作することがわかった。チームを再インストールしなければならないという最初の問題は、Microsoft Teamsクライアントに潜在的に迫っているID濫用の機会よりもはるかに小さな問題であることに気づき始めました。
何かをしよう
チームはこの知識をもとに、保護されていないクレデンシャルを利用するツールの作成に取りかかった。複数の選択肢を検討した結果、アクセストークンを使ってTeamsを通じてクレデンシャル保持者のアカウントにメッセージを送信することが適切であると判断した。この目標を念頭に置いて、メッセージを送信する際のAPIコールを追跡するためにブラウザでTeamsクライアントを起動したところ、こんな逸品が見つかった:
https://amer.ng.msg.teams.microsoft.com/v1/users/ME/conversations/48:notes/messages
このAPIエンドポイントを使えば、自分自身にメッセージを送ることができる。次にアクセストークンが必要だ。SQLiteエンジンを使った。SQLiteはインストールする必要がないので、ツールはSQLiteをローカル・フォルダにダウンロードし、それを実行してクッキーDBを読み込み、そこでメッセージ送信に必要なSkypeアクセストークンを抽出します。
トークンを手にし、目的地を念頭に置いて、最後のピースはメッセージをまとめることだった。リクエストボディの作成には時間がかかったが、最終的には成功した。重要度フラグを設定し、件名を "You've Been PWND "としてメッセージを送信するように設定した。メッセージ自体はSkype Access Tokenです。
ツールはこの時点でメッセージを送信し、アクセストークンが個人チャットにあることを確認できる。
朝の仕事としては悪くない。
無担保クレデンシャルの意味するもの
マイクロソフトは、デスクトップ・アプリケーション内でシームレスなシングル・サインオン・エクスペリエンスを実現するために、これらの認証情報を保存する。しかし、このようなセキュリティの選択は、実装のハードルを下げてしまう。
この状態で Microsoft Teamsクライアントをインストールして使用すると、Teamsがシャットダウンされている場合でも、Teams UIを通じて実行可能なあらゆるアクションを実行するために必要な資格情報が保存されます。これらのトークンが盗まれると、攻撃者は SharePoint ファイル、Outlookのメールと予定表、および Teamsチャット ファイルを変更できるようになります。攻撃者は、選択的に破壊、流出、または標的型フィッシング攻撃を行うことで、組織内の正当な通信を改ざんできます。
ビッグ・スケアリー -究極のフィッシュ
ここで私たちが本当に恐れているのは、MFA後のユーザートークンが環境全体に拡散することだ。特別なパーミッションや高度なマルウェアを追加する必要のない後続の攻撃によって、内部で大きな損害を被ることが可能になる。十分な数の侵害されたマシンがあれば、攻撃者は組織内のコミュニケーションを指揮することができる。企業の技術責任者、最高経営責任者(CEO)、最高財務責任者(CFO)のような重要な席を完全にコントロールできると仮定すると、攻撃者は組織に損害を与えるタスクを実行するようユーザーを説得することができます。そのためのフィッシュ・テストの実践方法とは?
推奨事項
管理者向け
ベースラインチーム、設定管理、ACL変更の監視
チームをクリティカルなアプリケーションとして扱い、それを保護する ACL を適用する。これらの ACL を変更して、意図したユーザ以外のファイルへの読み取りアクセスを拡張すると、そのユーザの認証情報が、上述した悪意ある行為のいずれかに実質的にさらされることになります。
マイクロソフトがElectron Teamsアプリケーションをアップデートした後も、未承認のTeams Apps、ボット、コネクターなどのインストールを防ぐために、高制限モデルに移行することが重要です。
ファイルアクセスの追跡
システム監視ルールを作成し、機密ファイルにアクセスするプロセスを特定する。具体的な推奨ファイル/フォルダは2つある:
- Windows] %AppData%Microsoft%Teams%Cookies
- Windows] %AppData%Microsoft%Teams%Local Storage%leveldb
- macOS] ~/Library/Application Support/Microsoft/Teams/Cookies
- macOS] ~/Library/Application Support/Microsoft/Teams/Local Storage/leveldb
- Linux] ~/.config/Microsoft/Microsoft Teams/Cookies
- Linux] ~/.config/Microsoft/Microsoft Teams/Local Storage/leveldb
Teams.exe以外のプロセスがこれらのファイルにアクセスした場合、保存されたデータがTeamsアプリケーションのコンテキスト外でアクセスされていることを示します。
代替案としてウェブアプリを検討する
ベースライン化と監視が現実的でない場合は、Microsoft Edge内のWebベースのTeamsクライアントを使用することを検討してください。幸いなことに、TeamsのWebアプリケーションは堅牢で、デスクトップクライアントで利用可能なほとんどの機能をサポートしているため、組織の生産性への影響を最小限に抑えることができます。
Linuxユーザーにとっては、マイクロソフトが2022年12月までにLinux版Teamsのサポートを終了すると発表しているため、この方法が推奨される。
開発者向け
アプリケーションにElectronを使用する必要がある場合は、OAuthトークンを安全に保存してください。このような秘密の保存方法としては、KeyTar パッケージを使用する方法があります。
node-keytarでElectronに機密情報を安全に保存する方法|キャメロン・ノークス|Cameron Nokes|Medium
マイクロソフトへ
トークンを保存しなければならない場合は、暗号化された方法で行い、ファイルシステム上の単純な読み取りアクセスから、メモリへの継続的なアクセスを必要とするようにハードルを上げてください。そして、完全なアンインストール/再インストールを行うことなく、Teamsアプリから無効化されたアカウントを削除できるようにしてください。
セキュリティチームへ
この種のエクスプロイトを活用する攻撃者を阻止するために、チームは、エクスプロイトが活用される前と後の種類のアクションを確認できる脅威検知とレスポンス・ソリューションに投資すべきである。Vectra脅威検知とレスポンスプラットフォームは、このエクスプロイトの前に予想されるコマンド&コントロール戦術や、エクスプロイトの後に発生するネットワーク偵察、横移動、流出を検知します。クラウドでは、Vectra 、Azure AD 内の特権、AWS のような接続されたクラウドサービスプロバイダに対する本格的な攻撃、Exchange、SharePoint、Power Automate を含む他のMicrosoft 365アプリケーションに対する攻撃など、Azure AD 内の侵害された認証情報を使用した攻撃者の活動について警告を発します。
Azure ADの脅威検知とレスポンス
Vectraがどのように脅威を検知し、阻止するかについて詳しくは、https://www.vectra.ai/products/platformをご覧ください。