原文リンク:https://rekt.news/singularitynet-rekt

出典:SingularityNET、SlowMist、Bitquery、PeckShield、ASI Alliance、Blockaid、Uniswap、Baltex、AMLBot、NuNet、Fetch.ai。

声明:この記事は転載です。読者は原文リンクから、より多くの情報を入手できます。著者が転載の形式に関して異議がある場合は、こちらまでご連絡ください。著者のご要望に従って修正いたします。転載は情報共有のみを目的とし、いかなる投資助言も構成せず、また呉說の見解や立場を代表するものではありません。

SingularityNETは長年にわたり、自律AIエージェントが使用するための市場の普及に取り組んできました。

しかし、9月19日の夜にネット上で最も忙しいのは「スマートエージェント」だったが、それはSingularityNETのチームが書いたものではないスクリプトだった。

攻撃者は、当該プロジェクトのクラウド基盤に侵入して露出した署名権限を取得し、署名を1回行うだけで、イーサリアム上の交換合約内にあったFET流動性を吸い上げた。その後9時間以内に、合計23億枚のAGIX、NTX、WMTX、CGVのトークンを“捏造(突発的に鋳造)”した。報道の一部では盗まれた金額を1,677万ドルとしている。しかし取引を逐次復元すると、攻撃者が実際に得た実現済み資金の総額は約229万ドルであり、大半の増発トークンは売却されていない。署名に使われた鍵はいずれも有効だった。指示を実行する各合約も、予定されたロジックどおりに動いている。

しかし、この攻撃の影響は資金損失だけにとどまらない。数日が経っても、関係者は依然として完全な事後調査レポートを公表していない。

AIプロジェクト連合全体の鍵が同一のクラウド基盤に保管されているとしたら、一体誰がこの“機械”を本当に制御しているのか?

出典:SingularityNET、SlowMist、Bitquery、PeckShield、ASI Alliance、Blockaid、Uniswap、Baltex、AMLBot、NuNet、Fetch.ai。

最初に表面化した資産損失はFETだったが、攻撃はそれだけでは終わらなかった。

9月19日20:21に、攻撃者はFETの移転を完了した。わずか2分24秒後、持ち去られた約870万枚のFETはすべて522.78枚のETHに換えられた。21:40にBlockaidはこのFET資金の流出に警報を出し、同じウォレットがNuNetのデプロイヤーアドレスによって大量に鋳造されたNTXも受け取っていることを示した。Blockaidは当初、Fetch.aiが攻撃された事案だとしたが、SingularityNETはその後、侵害されたのは自社のインフラであると確認した。最初はFetch.aiのみに関わるように見えたこの事案は、当初の想定よりも影響範囲が広い。

9月20日02:47の時点で、SlowMistは攻撃メカニズムを特定した。承認者の鍵をコントロールするだけでクロスチェーンブリッジを吸い上げられる。漏えいした鍵と、それを信頼する合約――そんな話は繰り返し起きている。

FETが転出されることは攻撃の終点ではなかった。29分後、つまり9月19日20:50に、攻撃者はNuNetの鋳造権限を使い、トークン合約上で約4.085億枚のNTXを直接作成した。より大規模な増発は翌日03:13から始まり、攻撃者は1バッチ1,000万枚の規模でAGIXを無許可で鋳造した。03:38に続いてWMTXの違法鋳造も開始された。AGIXの鋳造は04:21まで続き、その後CGVは04:34〜04:38の間に50回の鋳造呼び出しを経た。

夜が明ける頃には、公開された警報によって、事件の範囲が「クロスチェーンブリッジ資金が吸い上げられた」ことに加え、「複数のトークンの権限が侵害された」事態へと拡大した。初期のウォレットスナップショットでは攻撃者保有の名目価値を約1,677万ドルと見積もっていたが、その評価には、市場価格で売れるはずの、直近に鋳造され流動性の深さが十分でないトークンも含まれていた。

攻撃は夜が明けた後も終わっていない。9月20日13:10に、SingularityNETのある支払い合約が、侵害中に空にされていた以前のウォレットへ、全289,575.10枚のUSDC残高を転送した。12秒後、この資金は攻撃者の2つ目の集約ウォレットに入った。

盗用された署名が、なぜ1回の呼び出しでクロスチェーンブリッジを吸い上げられるのか?そして、なぜオンチェーンにはそれを止める仕組みが何もないのか?

取引を一度も行ったことのない鍵

SingularityNETのクロスチェーンブリッジが対応するトークンは、2つのチェーンにまたがっている。そのうち、対応するCardanoからイーサリアムへの移動経路では、まずCardano上でトークンが焼却され、その後イーサリアム側のクロスチェーンブリッジが対応するトークンを鋳造または解放する。しかし、イーサリアム側の合約はCardanoでの焼却が本当に起きたかを独立に検証するのではなく、あらかじめ設定された承認者が提供した署名を、焼却が完了した証明として扱う。

Bitqueryは影響を受けたクロスチェーンブリッジで、5つの承認者アドレスを集計した。これらのアドレスはそれ以前にオンチェーン取引を一度も送っていない。このパターンは、クロスチェーンブリッジ上で資産解放を承認するためであり、直接取引を開始するためではないオフチェーン署名鍵の用途に一致する。SingularityNETは後に、無許可の第三者が「当社のクラウド基盤の一部にアクセスした」が、相手がどうやってアクセス権を得たのかは説明していない。

この設計により、各クロスチェーンブリッジの信頼が、署名権限を握る側に集中する。

全FET残高を吸い上げたクロスチェーン交換合約:0xab424a430cc09864fa1277a38193111705adf3a3

資金の転出を承認した交換の承認者(署名承認):0x69e5446b07b23de0a76730062c3252152216c85c

8,721,530.40枚のFETを解放した攻撃取引:0xfe12c63b322d52727c615f3342222138d1563400a9880cebb516a9a162ac69e2

AthenaはASI Allianceが作成した鑑定レポートをもとに、今回の転出操作の署名から署名者のアドレスを復元し、それが合約に現在設定されている承認者と一致することを確認した。レポートによれば、この交換合約が2024年9月にデプロイされて以降、承認者は一度も変更されていない。

2つの設計上の選択が、承認権限の侵害による影響を増幅した。第一に、conversionIn()は単一の外部アカウント(EOA)の署名のみを唯一の承認チェックとして用いる。第二に、この関数はconversionOut()で使用されているcheckLimits(amount)の上限チェックを採用していない。そのため、合約設定の100〜100万枚FETの上限はconversionIn()を拘束せず、合約は最終的に約872万枚FETの解放リクエストを受理した。これは表示された最高上限の8.7倍に当たる。

Athenaの鑑定レポートでも、通常のConversionInイベント100件すべてが、SingularityNETバックエンドが生成したUUID形式の識別子を使用していたことが判明した。今回の攻撃で使われた識別子は、非ASCIIの生バイト列であり、唯一の例外だった。この取引は、通常のクロスチェーンブリッジ操作の特徴に合致していない。

NuNet側の攻撃は、より直接的な権限も関わっていた。約4.085億枚のNTXはそもそも交換合約を経由しておらず、NuNetチェーン上の鋳造ロールを持つアドレスが、トークン合約内のmint()関数を直接呼び出して生成していた。

408,532,878.13枚のNTXを鋳造した取引:0xe14442f6171d8a652e79d44336e58c00cdab271bdb69c668493d420e03ee13ab

AGIXのバッチ鋳造はSingularityNETのデプロイヤーアドレスが実行:0xA7A31d206042B8A3E81aa4cf8c68c1B76856eE48

AGIX、WMTX、CGVの交換合約の呼び出しはすべて、通常の一括数量とは異なる鋳造操作で終了していた。このパターンは、自動で鋳造を継続し、何らかの操作制約に到達するまで続ける状況と整合している。

World MobileのWMTX交換合約は確かに単回呼び出しの上限を設定していたが、攻撃を止めたわけではなく、攻撃者に鋳造を503回の呼び出しへ分割させただけだった。その大半の呼び出しはちょうど100万枚のWMTXを鋳造し、1つのブロック内に最大10回現れた。

Bitqueryによれば、いかなるトークンが鋳造される前に、16のウォレットが21分以内に空にされており、同じ時間帯に関連するBNB Chain上の活動も確認された。アドレスディレクトリによると、そのうち4つのウォレットにはSingularityNETまたはNuNetの従業員ラベルが付いており、さらに2022年に関連する交換合約をデプロイしたアカウントも含まれる。これは、影響を受けたプロジェクトに対して複数の承認経路が関与していることを示唆する。

あるリカバリアドレスがNuNet、Cogito、Rejuveの交換合約の承認者設定を変更し、その後NTXを凍結した。Bitqueryによれば、AGIXとWMTXの交換合約は、同じ方法ではタイムリーに処理できなかった。オーナーがそれぞれ、Gnosis Safeのマルチシグウォレットと、4名の署名者のうち3名の承認が必要なSafeマルチシグウォレットだったためだ。権限の引き継ぎ処理の間も、AGIXとWMTXの鋳造は約1時間継続した。

SingularityNETは「私たちのシステムは定期的に監査を受け、業界の安全基準に従っています」と書いた。監査はスマートコントラクトのコードを評価できるが、監査だけでは、署名を生成したり署名権限を行使したりするために使われるオフチェーンのシステムおよび秘密鍵が安全であることは証明できない。影響を受けたプロジェクトに関係する承認鍵が有効な署名を提供できたため、大量の追加トークンが生成された。

では、報道されている巨額の損失のうち、実際に流動性資産へ転化したのはどれだけで、残りは市場がそもそも消化できない可能性が高い新規鋳造トークンなのだろうか?

帳簿上の数百万ドル

この記事における異なる数値は、そもそも異なるものを測っている。無許可で合約からトークンが転出された場合は直接の資産損失であり、無許可でトークンが鋳造された場合はトークン供給の毀損となる。攻撃者に帰属するアドレスが、トークンの売却または資産の直接引き出しによって得たETHとステーブルコインこそが、実現済みの利益に当たる。トークン市場の価格で換算したウォレット残高は、現金に自動的に等しいわけでも、回収可能な価値に自動的に等しいわけでもない。初期報道はこれらの概念を何度も混同していた。

23億枚ものトークンを鋳造するのは簡単だが、買い手を見つけるのは簡単ではない。クロスチェーンブリッジから持ち去られたFETは、確認できた最大の単発換金行為を構成している。MetaMask経由で行われた1回の交換では、このルートで見える手数料を差し引いた後、これらのFETを522.78枚のETHに換えている。

約872万枚のFETが522.78枚のETHに交換された取引:0x98f6e59b54fd4d2c086cc7cab4e7070edff6410210a1bf1fbaffd62da3b76d1c

2つのアドレスが、確認できた利益および増発トークンの大部分を受け取っている。攻撃者の主要な集約アドレスは、持ち去られたFETと新しく鋳造されたNTXを受け取った。今回の取引復元によれば、これは90回のAGIX鋳造呼び出しのうち前半26回と、503回のWMTX鋳造呼び出しのうち前半54回の受取先でもある。

攻撃者の主要な集約アドレス:0x2dcc1085fdcf418b421e45e86e4e54637cc21dfe

2つ目のウォレットは、残りの64回のAGIX鋳造呼び出し、449回のWMTX鋳造呼び出し、全50回のCGV鋳造呼び出しによって生成されたトークン、および支払い合約からのUSDCを受け取った。

2つ目のウォレットアドレス:0x83f4424a401a9bb75f90314f21adaea6a9ce09c5

Bitqueryは、主要な集約アドレスの初期資金の出所をChangeNOWまで遡っている。

ChangeNOWが資金を提供した取引:0xa99a8b71bd90d295db305639fc976339a057812c2693f3e44ae9288e5c13ebe1

当該集約アドレスのイーサリアム履歴からは、9月1日にAcrossクロスチェーンブリッジを介した納品取引があったことも分かっている。

9月1日のAcrossクロスチェーン送達取引:0xb56d3b900b5ac694d56d6efb9552a89fc0a14641eceefa7e16107cb8ccb0ea6d

9月20日04:04に、2つ目のウォレットはGas支払い用のETHを受け取り、約1分後に代替えの売却を開始した。

2つ目のウォレットがGas資金を受け取った取引:0x4e8894823caaf8fefaf0849cf69b30148ae5ddcee9e7f9bd0c1be0dae0c720c2

2つ目のウォレットがMetaMask Swap Routerに対して100,000枚WMTXを承認する取引:0x8fcaa005da0c1a5ab138898571e2974ba8aa8f0b9864381e5b2b98b81e702da9

2つ目のウォレットが初めてWMTXを売却した取引:表示されているMetaMask手数料を差し引いた後、100,000枚のWMTXを0.832455441枚のETHに交換した:0xcf4b119f38d0da10dccac787234e05c6cabe3440dfe303f4f407daa92ab8829e

資産が2つのウォレットに分散していたため、報道での集計はより複雑になった。PeckShieldの初期警報では、攻撃者の資産評価を1,677万ドルとみなし、内訳は1.983億枚のAGIX、649枚のETH、3,353.8万枚のWMTXだった。

実際の販売結果は、帳簿上の評価額と換金能力の違いを明らかにした。MetaMask経由でルーティングし、Mayanで実行されたある交換により、1,000万枚のNTXが940.39枚のUSDTに換えられた。一方で2つ目のウォレットはUniswapXの注文を使用し、第三者の注文実行者がETHの対価を提供している。決済記録だけでは、これらの実行者が資金をどのように用立てたのか、どうヘッジしたのか、また最終的に受領したWMTXをどう扱ったのかは説明できない。

MetaMask/Mayan経路でNTXが交換された取引:投入10,000,000枚のNTX。940.5087枚のUSDTが、BNB Chain上で決済するために、Mayanのイーサリアム上のソースチェーン合約へ到達:0xb6ecca4deeb2a616507a3f5779cb12db4fd986e5ee37c1832237fae2a1f1258f

CGVは最も極端な例だ。2.462億枚のCGVをCogitoのUniswapプールに売り込んだが、返ってきたのは0.0123枚のETHだけだった。

246,200,000枚のCGVが0.0123枚のETHに交換された取引:0x69a28fb152b2b1b4158ec3db17f7baf565b644859a5150c38729bbb2d198bfad

さらに、支払い合約が転出した289,575.10枚のUSDCは最終的に2つ目のウォレットへ入り、別の大口ステーブルコイン収入となった。この資金は、増発トークンを売却して得る必要がない。

支払い合約が中継アドレスへ289,575.1047枚のUSDCを送った取引:0x869343d87a137a52aebce119c8c35e2fc3500205bf7a8c574ec2e8f4ab677c18

中継アドレスが289,575.1047枚のUSDCを2つ目のウォレットへ転入した取引:0xca9facda3f3629fa72ff98b4c8e663d3b415011979d749fab96ed9eda287e66f

9月22日時点で、今回の逐次的な取引の復元により、主要な2つのアドレスが合計で約742.7枚のETH相当の資産と、362,075ドル相当のステーブルコインを受け取っていたことが判明した。この集計には、まだ売却されていないAGIX、WMTX、CGV、NTXは含まれていない。WETHとETHは1対1で換算し、計測は総収入であって純利益ではない。

流動性資産のかなりの部分は、この2つの主要ウォレットに残っていない。最も遅くとも9月21日00:00までに、3つの異なるウォレットがそれぞれChainflipへ75,000枚のUSDC、Baltexへ75,000枚のUSDC、そしてChainflipへ118,015.16枚のUSDCを入金した。

Baltexは、自社サービスはKYC不要だと説明し、モネロ币(XMR)に関わる「プライバシー」交換ルートを宣伝していた。さらにAMLBotの開示によると、ChainflipのあるブローカーがETHの入金を拒否し、AMLBotはその入金を同一の攻撃者に帰している。

Chainflipへ75,000枚のUSDCを入金した取引:0x3c8b12fedf147d82c8a5506edf3fcad4b7e25c8b96e4fb13b10cf2915aba0076

Baltexへ75,000枚のUSDCを入金した取引:0x05d6d42c75356900e523116d34892b480e9f9134ba195db698d7b1448e0b0696

最後のChainflipへの118,015.16枚のUSDC入金取引:0xea254b148da1a6d028050f3a59f87845e3dc177ca37ef6441c7eb6cff47eb8ed

UTCの深夜直前、2つ目のウォレットはある受取アドレスへ93.70枚のETHを送った。この記事で引用された公開情報はすべて、そのアドレスの所有者を確認していない。約40分後、攻撃者の主要な集約ウォレットがさらに2件の送金を開始し、各送金はちょうど100枚のETHだった。

2つ目のウォレットが93.70枚のETHを転出した取引:0x605d803890ae4eddc684f82f6de1a82c49a6a3f5646295c1a01fd897fa2a7577

受取ウォレット:0x2fD3285C93437077EF5FA6cecc367FD24d0fF726

攻撃者の主要な集約ウォレットが転出した最初の100枚ETHの取引:0xa8511628388c330db78fcdcfe7af5577e1f300adee795b578508fb21203b4756

攻撃者の主要な集約ウォレットが転出した2つ目の100枚ETHの取引:0x14399c61687de491461f76e961a91d2c0dcda4c6bb00ba332ec18b19d394822f

AMLBotはその後、各100枚ETHの独立した資金移動が2件あったと説明した。うち1つは約266,000枚のUSDCに交換され、さらにCCTP、Arbitrum、Hyperliquidを経由して「FXMR」に送られたとされる。もう1つはChainflipのブローカーに拒否された後、THORChainを通じて約3.28枚のBTCに交換されたとされる。AMLBotはこれら資金の出所アドレスを公表していない。

さらに2つのウォレットでは、小額の「撒き銘(ダスト)」送金や、偽造されたトークン送金記録も見られた。送信元アドレスは、先行する取引相手のアドレスを意図的に模倣しており、アドレス汚染攻撃の特徴に合致する。もしそれが目的であったなら、誰かが攻撃者の資金をもう一度盗もうとした可能性がある。

9月25日時点で、攻撃者の主要な集約ウォレットは約433枚のETH、15.94枚のWETH、52,395枚のmUSDを保有しており、これはAMLBotが前日に報告した約433枚のETH残高と一致する。さらに同ウォレットは約1.983億枚のAGIXと3,354万枚のWMTXも保有している。2つ目のウォレットは約18,109枚のUSDC、6.2586億枚のAGIX、1.6649億枚のWMTX、2.46億枚のCGVを保有している。

これらのトークンに表示される価値は、実際に売れる価値とは等しくない。このような大規模な保有が一度売却されれば、流動性不足や深刻な価格インパクトに直面する可能性がある。真の問題は残高画面がいくらを表示しているかではなく、市場を壊さずに結局どれだけ売れるかにある。

今回の取引復元によれば、攻撃によって生じた実現済みの流動性資産の総額は約229万ドル。実現済み資金は移動できる一方で、残る約12.7億枚のトークンは同じように実現しにくい。もしこれらの保有が最終的に売却されるなら、そのコストを誰が負担するのか?

7割のトークンは違法増発によるもの

価格は回復し得ても、供給構造は自力では元に戻らない。

Bitqueryはクロスチェーンの照合で、約12.8億枚のAGIXを計上し、そのうち約8.9596億枚は攻撃期間中に鋳造されたもので、集計総量の70.1%を占める。残り約3.8265億枚は攻撃前の供給から追跡可能だった。同分析では、無許可で鋳造されたトークンが、集計されたCGV供給量の81.1%、WMTX供給量の32.4%、およびNTX供給量の29.0%をそれぞれ占めていることも示された。

今回のNTXの増発により、統計上のクロスチェーン総供給量は約14.1億枚となり、NuNetのドキュメントで定められた10億枚の供給量を超えた。約4,010万枚の不正に増発されたNTXがクロスチェーンでCardanoへ渡り、そのうち約4,000万枚が通常の流動性プールに流入している。取引記録からこれらのトークンの経路は追跡できるが、いったんそれらがプール内に入ると、流動性プールは正規に発行されたNTXと不正に増発されたNTXを区別できない。

FETの問題は違法な増発そのものではなく、クロスチェーンブリッジがそれを償還できるかどうかだ。Cardanoからクロスチェーンで渡されたFETを解放するためのイーサリアム側の交換合約は空にされてしまい、Cardanoには依然として約8.7億枚のFETがある。この分析によれば、資金が持ち去られて以降、誰もFETをCardanoからイーサリアムへ送ろうとする試みをしていないため、交換合約の残高が尽きて償還待ちになるユーザーの状況はまだ起きていない。

NTXには別の問題がある。約4,000万枚の違法に増発されたトークンがCardanoの通常の流動性プールにすでに入っているにもかかわらず、出所が無許可であっても、プールは他のNTXと同様にそれらを扱ってしまう。

SingularityNETは、侵害されたアクセス権限を取り消し、影響を受けたクロスチェーンブリッジおよび交換合約を停止し、イーサリアム上のAGIXとNTXの送金を一時停止したと述べた。プロジェクト側によれば、関連するクロスチェーンブリッジは独立した安全性監査で安全に復旧できることが確認されるまでオフラインのまま維持されるという。Bitqueryは、9月20日時点で5つの承認者鍵のうち3つが未だに変更されていないことを発見している。クロスチェーンブリッジが閉じられた状態でも、これらの鍵が依然として悪用可能かどうかは、運用を復旧して初めて実際に検証される。

AGIX保有者に対し、SingularityNETは当初「条件を満たす保有者に対して、合法で検証済みの“後続処理ルート”を用意している」と述べた。その後、プロジェクト側は元のAGIXトークンを停止し、影響を受けた保有者に代替トークンを発行すると発表したが、誰が資格を有するのかはまだ説明されておらず、代替トークンがどのように配分されるのかも示されていない。イーサリアム上のAGIX送金は引き続き停止中だ。

集計されたAGIXのうち、約10枚につき7枚が攻撃期間中に鋳造されたため、資格認定はなおも最も難しい問題である。どの代替案でも、違法な増発の後に行われた通常の市場取引で流通してしまった保有分を、どう扱うかを決めなければならない。

Fetch.aiは、自社の合約は影響を受けていないと述べた。ASI Allianceは、交換合約から価値156万ドルのFETが転出されたことを確認し、完全なレポートを公開すると約束した。しかし原文公開時点でも、そのレポートはまだ登場しておらず、保有者向けの案内や、実際の資金で違法に増発されたトークンを買った注文実行者および流動性提供者への補償策も公表されていない。

クロスチェーンブリッジ合約が受け取る署名は、実際に有効なものだった。合約は署名を検証し、指示を実行しているが、署名が主張するクロスチェーン上のイベントが本当に起きたかどうかは確認していない。NuNetのNTX鋳造は別の経路だった。攻撃者はトークン自体の鋳造権限を直接使っていた。

分散型AIを目指すというビジョンの連合でありながら、4種類のトークンの鋳造権限と、交換合約からFETを解放する権限が、1つのインフラ侵害で到達し得る範囲に露出してしまっていた。

もし、これらのプロジェクトが描く未来が自律稼働するソフトウェアだとするなら、その鍵を握るソフトウェアは誰が監督するのか?

クロスチェーンブリッジおよび交換合約は、指定された承認者の署名を受け取った。クロスチェーンの鋳造プロセスでは、合約はこれらの署名を、別チェーン上で該当イベントが発生したという証明として扱い、自らはその事実を検証しなかった。NTXの鋳造はこれとは異なり、攻撃者は鋳造権限を使ってトークン合約内のmint()関数を直接呼び出した。

SingularityNETは、無許可の第三者が同社のクラウド基盤の一部にアクセスし、その結果、クロスチェーンブリッジの基盤を通じてトークンを鋳造し、資産を引き出したと述べた。Fetch.aiは、自社の合約は影響を受けていないとした。しかし公開声明は、攻撃者がどうやってアクセス権を得たのかを説明せず、各種権限がどう露出したのかも正確に示していない。

オンチェーン上の記録は、これらの権限が解放した取引を追跡できるが、攻撃者がどうやってアクセス権を得たのかを証明することはできず、背後で誰が安全上の判断を下したのかも特定できない。Bitqueryは、5つのクロスチェーンブリッジの承認者アドレスが、それ以前に取引を行ったことがないことを発見した。これは、それらがオフチェーンでのメッセージ署名に使われていた用途と整合している。合約は署名を検証している。

署名が証明として扱われるとき、誰がその署名が証明している事柄の真実性を確認するのか?