2023年12月25日、当社の監視システムはTelcoinを標的とした一連の悪意あるアクティビティを検出しました。当社はTelcoinチームのウォレットコントラクトの不適切な初期化が根本原因であることを特定するのを支援しました。これは、ウォレットの実際のインプリメンテーションとその対応するプロキシとの間の不整合から生じました。本レポートは、インシデントを完全に理解するための徹底的な分析を提供することを目的としています。
0x0:基本設計
脆弱性を調べる前に、まず関連するスマートコントラクト間の関係を理解することが重要です。本質的に、これらはCloneFactory、CloneableProxy、BeaconProxyパターンの組み合わせに抽象化でき、次の図に示されています。

0x1:脆弱性分析
脆弱性はウォレットコントラクトの不適切な初期化に起因しており、これはウォレットの実際のインプリメンテーションとその対応するプロキシとの間の不一致によるものです。具体的には、初期化プロセス中に、プロキシはストレージ場所の最下位ビットに書き込むことにより、ストレージスロット0をゼロ以外の状態に初期化しました。その後、ウォレットコードもストレージスロット0に書き込み、最下位ビットのプロキシの初期値を上書きしました。この問題は、スマートコントラクトのいずれかの固有の脆弱性に起因するものではなく、むしろ両者の相互作用によるものです。
以下に、提供されているトランザクショントレースに基づいて詳細を説明します。

具体的には、CloneableProxy:Proxy.initialize()関数内で、Wallet.initialize()関数を呼び出すdelegatecallがあります。この呼び出しは、CloneableProxy:Implementation.initialize()関数へのdelegatecallを介して行われます。その結果、Wallet.initialize()関数によって行われたストレージへのあらゆる変更は、CloneableProxy:Proxyコントラクトのストレージに反映されます。
その影響を完全に理解するには、CloneableProxy:Proxyコントラクトのストレージレイアウトを調べる必要があります。このコントラクトの定義は次のように概説されています。

ProxyもERC1967Upgradeもストレージ変数を持っていないため、スロット0はInitializableコントラクトから継承された2つのストレージ変数、_initializedと_initializingの両方に使用されます。

次に、Walletコントラクトを調べましょう。Wallet.initialize()関数内では、スロット0xaaが初期化フラグとして使用されていることは明らかです。これは、行3-4および11-12の次のコードスニペットによって強調されています。

行21に示すように、スロット0は、関数セレクタの後のcalldataから次の32バイトを格納する_stateに割り当てられています。詳細については、Walletコントラクトの冒頭のコメントを参照してください。

スロット0の使用に関して、明確な不一致があります。CloneableProxy:Proxyコントラクトはそれを初期化フラグとして解釈しますが、Wallet:initialize()関数はそれをウォレットの状態として扱います。
その結果、初期化プロセスの後、スロット0の最下位2バイトはゼロにリセットされます。これにより、_initializedと_initializingの両方がゼロに設定されます。その結果、CloneableProxy:Proxyコントラクトは、initializer修飾子の保護を回避できるため、initialize()関数を介した再初期化に対して脆弱になります。

明らかに、悪用の可能性はウォレットの状態に依存します。ゼロ以外の値に更新されると、ウォレットの状態はこれ以上のコントラクトの再初期化を防ぎます。初期化後、ウォレットの状態はトランザクションごとに更新されるため、スロット0の最下位2バイトがゼロ以外になる可能性が高まり、これによりウォレットは再初期化から効果的に保護されます。これが、脆弱なウォレットの大部分がトランザクション履歴がほとんどないかまったくないため、攻撃にさらされていた理由を説明しています。
0x2:攻撃分析
攻撃者は、脆弱なCloneableProxy:Proxyコントラクトを再初期化してBeaconコントラクトのアドレスを変更することから始めました。その後、攻撃者は以下に詳述するように、CloneableProxy:Proxyコントラクトに含まれる資産を転送しました。

複数の脆弱なコントラクトが単一のトランザクションで侵害され、攻撃者はこの戦略を繰り返し実行したことに注意してください。
0x3:攻撃の概要
6つの異なるアカウントによって実行された合計4,958件の攻撃が観察されました。

0x4:修正と推奨事項
当社の調査により、中心的な問題はストレージスロット0の一貫性のない使用に起因し、脆弱なコントラクトの再初期化の可能性につながることが明らかになりました。明らかに、修正にはストレージ割り当ての慎重な管理が含まれます。
このインシデントから、いくつかの重要な洞察を得ました。
-
インラインアセンブリでストレージスロットを操作する際は、細心の注意を払ってください。エラーは重大な脆弱性につながる可能性があります。
-
コントラクトのステータスを注意深く監視してください。迅速に対応できるかどうかは、タイムリーなアラートの受信にかかっています。
-
コントラクト内に一時停止メカニズムを実装し、侵害が検出された場合にアクティビティを即座に停止できるようにします。
さらに、このインシデントにはさまざまなウォレットコントラクトを標的とした複数の攻撃トランザクションが関与していたという事実は、Phalconのような脅威監視および攻撃ブロックソリューションの差し迫った必要性を浮き彫りにしています。このようなツールは、将来のリスクを軽減し、潜在的な損失から保護するために不可欠です。
0x5:イベントのタイムライン
午前9時23分(太平洋標準時)、12月25日:当社のシステムは、Polygonネットワークで最初のエラートランザクションを検出しました。

午前10時28分(太平洋標準時)、12月25日:Telcoinサポートチームが内部コミュニケーションチャネルでインシデントを報告しました。
午前10時32分〜午前10時37分(太平洋標準時)、12月25日:TelcoinチームメンバーがTelcoin Discordコミュニティに通知し、関連する主要チームメンバー全員との緊急電話会議を作成しました。
午前10時45分(太平洋標準時)、12月25日:Webアプリケーションファイアウォールルールが実装され、Telcoinインフラストラクチャへのすべてのアクセスが制限されました。
午前11時02分(太平洋標準時)、12月25日:TelcoinチームはSeal 911との交渉を開始しました。
午前11時11分(太平洋標準時)、12月25日:Telcoinチームと他のセキュリティメンバーによって、根本原因を特定し、攻撃をブロックするための潜在的なソリューションを議論するためのウォー・ルームが設置されました。
午後1時14分(太平洋標準時)、12月25日:TelcoinチームはX(Twitter)を通じてユーザーにアラートを公開しました。
午後3時39分(太平洋標準時)、12月25日:TelcoinはChainalysis & Slowmistに連絡し、盗難された資金の調査に協力し、盗難されたウォレットとアドレスを特定して取引所に共有しました。

午後10時35分(太平洋標準時)、12月25日:Telcoinチームからの招待を受けて、当社はウォー・ルームに参加し、分析を共有して根本原因を特定しました。
午後11時00分(太平洋標準時)、12月25日〜午前2時06分(太平洋標準時)、12月26日:根本原因を特定した後、Telcoinチームは、安全に実装された新しいビーコンと一致するようにウォレットプロキシを再初期化することによって、緩和戦略を策定しました。このエクスプロイトは一度きりの機会であったため、Telcoinはウォレット構成を事前に更新でき、攻撃者がこれらの脆弱性をさらに悪用する能力を無効にできます。
午前2時07分(太平洋標準時)、12月26日〜午前2時14分(太平洋標準時)、12月26日:Telcoinチームは、包括的なカバレッジを確保するために、以前に侵害されていなかったすべてのウォレットに緩和プロセスを実装しました。迅速かつ効率的な展開のために、プロセスは厳密に定義された時間枠内でバッチで実行されました。その後、Telcoinは、影響を受けたすべてのウォレットの完全な復旧とすべてのウォレットの永続的な修正のための修復計画の準備と内部テストを開始しました。
午後4時52分(太平洋標準時)、12月26日:Telcoinと当社チームは、次のトピックについて協議を開始しました。
-
インシデントの概要
-
イベントのタイムライン:インシデントの経緯を時系列で記録したもの。
-
根本原因分析:インシデントの根本原因の詳細な分析。
-
改善のための推奨事項
-
コード監査
午後12時27分(太平洋標準時)、12月29日:数回の協議の後、当社はTelcoinチームと協力して、事後分析レポートの作成と修復の監査を開始しました。
2024年1月3日:事後分析のドラフトが提供されました。
2024年1月4日:特定された問題と推奨事項を含む当社の監査結果が提示されました。
1月4日~1月10日:当社はTelcoinチームと協力して事後分析を最終決定し、修正を確認しました。
また、12月25日から現在に至るまで、Telcoinはインシデントに関してブロックチェーン調査会社および法執行機関と緊密に連携して積極的に取り組んできたことも注目に値します。
BlockSecについて
BlockSecは、世界的に著名なセキュリティ専門家グループによって2021年に設立された先駆的なブロックチェーンセキュリティ企業です。同社は、Web3の出現を強化するセキュリティと使いやすさを向上させることに専念しており、その大量採用を促進します。この目的のために、BlockSecはスマートコントラクトおよびEVMチェーンセキュリティ監査サービス、セキュリティ開発と脅威のプロアクティブなブロックのためのPhalconプラットフォーム、資金追跡と調査のためのMetaSleuthプラットフォーム、およびWeb3ビルダーが仮想通貨の世界を効率的にサーフィンするためのMetaDock拡張機能を提供します。
現在までに、同社はMetaMask、Uniswap Foundation、Compound、Forta、PancakeSwapなど300社以上の著名なクライアントにサービスを提供し、Matrix Partners、Vitalbridge Capital、Fenbushi Capitalを含む著名な投資家から2回の資金調達ラウンドで数千万米ドルの資金を受け取っています。
ウェブサイト:https://blocksec.com/



