Filecoin「Double Flower」ストーリーとレビュー
Cobo钱包
2021-03-19 05:05
本文约1713字,阅读全文需要约7分钟
Cobo Custody 技術チームは、この Filecoin セキュリティ インシデントに細心の注意を払い、詳細な調査を実施しました。

3月19日早朝、一部のコミュニティユーザーがファイルコインメインネットで二重支出の危険性があると報告、バイナンスやOKexなどの取引所はファイルコインメインネットトークンFILのリチャージ機能を閉鎖し、コボカストディも即時リチャージを停止した。そしてコインを引き出します。

副題

ファイルコインの「二重支払い」の話

Filfox と FileStar の Filecoin マイナーからのフィードバックによると、水曜日、Binance は数百万ドルの FIL 二重支払いリチャージ攻撃に遭遇しました。

その理由は、61,000 FIL (約 460 万米ドル) のトランザクションが記録されるまでに時間がかかりすぎたため、Filfox と FileStar マイナーがスピードを上げるために RBF トランザクションを開始したためです。 RBF トランザクションの結果、Binance アカウントに 2 回入金され、最終的に 120,000 FIL が入金されました。その後、Filfox と FileStar の開発者は、Filecoin の RPC コードに「重大な抜け穴」があると回答しました。この脆弱性により、Binance は 2 つの競合するトランザクションを確認した後、同時に入金することを選択しました。

FilFoxとFileStarの開発者はできるだけ早くBinanceに連絡し、できるだけ早くFilecoin公式に通知しました。

副題

技術的な詳細のレビュー

取引所や集中ウォレットなどの集中管理機関は、チェーン上の送金動作に応じてユーザーにクレジットを付与するため、チェーン上の送金動作をいかに効率的、正確かつタイムリーに分析するかが非常に重要です。ブロック内のすべてのトランザクション ID を取得し、トランザクションIDに基づいて、対応するトランザクションの内容とトランザクションの実行結果が表示されます。

Filecoinのロータスノードはチェーン上のトランザクションを取得するためのAPIを複数提供しており、例えばChainGetBlockMessagesは指定ブロック内の全トランザクション内容を取得でき、StateGetReceiptは指定トランザクションIDに対応する実行結果を取得することができ、今回攻撃された取引所はこの手法を採用していた2 つの API を使用してチェーン上の転送動作を分析し、これに基づいてユーザーのアカウントを入力します。

しかし、StateGetReceiptインターフェースが従来の論理的思考に従わない設計になっていることに気付かず、つまり、指定されたトランザクションIDの実行結果を取得する際に、そのトランザクションがRBFに置き換えられた場合(手数料に置き換えられた場合)、最終的な RBF 成功 (そのトランザクションの実行結果) が返されます。戻り値には、これが RBF 後のトランザクションの実行結果であることは示されません。

攻撃者が最初に TX1 を送信し、対応するトランザクション ID が TXID1 であり、次に攻撃者が TX1 で RBF を実行して TX2 を生成し、対応するトランザクション ID が TXID2 で、最後に TX2 がチェーンに正常にアップロードされたとします。このとき、StateGetReceipt を通じて TXID1 と TXID2 をそれぞれ問い合わせると、どちらも正しい実行結果が得られます。

攻撃発生後、Filecoin の公式開発者は API に補足説明を行い、StateGetReceipt の返却ロジックを明確にし、v1 バージョン以降はこの API を破棄する予定です。

https://github.com/filecoin-project/lotus/pull/5838/files

Cobo Custody 技術チームは、Filecoin に接続するプロセスで上記の問題を発見しました。そのため、ChainGetBlockMessages と StateGetReceipt を使用してチェーン上の転送動作を取得する代わりに、ChainGetParentMessages と ChainGetParentReceipts を使用してチェーンに正常にアップロードされたトランザクションを取得します。 , これにより、二重支払いリチャージのリスクが回避されるため、この二重支払いリチャージ攻撃の影響を受けません。

ChainGetParentMessages と ChainGetParentReceipts を使用する過程で、Cobo Custody 技術チームは、ロータス ノードの一部の戻り値が従来の論理的思考とあまり一致していないことを発見しました。たとえば、空のブロックの処理にいくつかの問題があります。 Cobo Custody 技術チームはこれに適切に対処しており、他の集中保管機関に対し、他の二重支払いリチャージ攻撃を避けるために関連するドッキング コードを注意深く確認するよう注意を喚起します。

二重支払いとは、以前のトランザクションのトークンを使用して再度トランザクションを実行し、不正なトランザクションが発生することです。

2018 年、ビットコイン ゴールド (BTG) はマイナーによる悪意のある攻撃を受け、マイナーは一時的に BTG ブロックチェーンを制御し、取引所にリチャージした後すぐにコインを引き出し、その後ブロックを反転して二重支払い攻撃を実行することに成功しました。攻撃者は 388,200 BTG (1,860 万ドル相当) 以上を盗み、これはブロックチェーンの歴史の中で最も有名な二重支払い攻撃の 1 つでもありました。

Cobo钱包
作者文库