> 今回の事件の原因は、コミュニティが提案書をチェックする際に提案書のリスクを発見できず、提案書契約のコードにセキュリティ上の脆弱性があるかどうかを慎重に検証しなかったことにあります。**作成者: SharkTeam**北京時間の2023年5月20日、Tornado.Cashは提案攻撃を受け、攻撃者は約68万米ドルの利益を得た。 SharkTeamは、このインシデントの技術分析を初めて実施し、セキュリティ上の注意事項をまとめ、その後のプロジェクトがこのインシデントから学び、ブロックチェーン業界のセキュリティ防御線を構築できることを期待しました。## 1. イベント分析攻撃者のアドレス:0x092123663804f8801b9b086b03B98D706f77bD590x592340957eBC9e4Afb0E9Af221d06fDDDF789de9攻撃契約:0xAF54612427d97489707332efe0b6290F129DbAcb0x03ecf0d22f9ccd21144a7d492cf63b471916497a0x7dc86183274b28e9f1a100a0152dac975361353d (導入契約)0xc503893b3e3c0c6b909222b45f2a3a259a52752d (偽の提案契約)攻撃された契約:0x5efda50f22d34F262c29268506C5Fa42cB56A1Ceプロポーザルトランザクションを開始します。0x34605f1d6463a48b818157f7b26d040f8dd329273702a0618e9e74fe350e6e0d攻撃トランザクション:0x3274b6090685b842aca80b304a4dcee0f61ef8b6afee10b7c7533c32fb75486d攻撃プロセス:(1) まず、攻撃者 (0x08e80ecb) は、攻撃対象のコントラクト (0x5efda50f) に対する提案を開始し、この提案は提案 16 の補足であると主張します。(2) しかし実際には、この提案には追加の自爆機能が含まれています。(3) 残念ながら、コミュニティはこの提案に何の問題も発見せず、ほとんどのメンバーがこの提案を可決することに投票しました。(4) 攻撃者はトークンの転送を実行するために多くのコントラクトを作成しました。(5) 攻撃者 (0x08e80ecb) は、提案コントラクト (0xc503893b) と作成コントラクト (0x7dc86183) を破棄します。その後、攻撃コントラクト (0xc503893b) が同じアドレスに再展開されました。(6) 攻撃者(0x08e80ecb)は、プロポーザルコントラクトを変更した後、プロポーザルを実行し、管理下のコントラクトアドレスのトークンロック量を10000に変更します。(7) プロポーザルが実行された後、攻撃者 (0x08e80ecb) はトークンを自分のアドレスに転送し、攻撃されたコントラクトの所有権を取得します。脆弱性分析: プロポーザル コントラクト (0xc503893b) の作成コントラクト (0x7dc86183) は creat2 を通じてデプロイされるため、2 つのコントラクトが破棄された後、新しいロジック コントラクトが同じアドレスにデプロイされ、次の形式でプロポーザルの実行が呼び出されます。攻撃コントラクトは、攻撃コントラクト内の値を任意に変更できます。インシデントの概要: このインシデントの原因は、コミュニティがプロポーザルをチェックする際にプロポーザル内のリスクを発見できず、プロポーザル契約のコードにセキュリティ上の脆弱性があるかどうかを慎重に検証しなかったことです。## 2. セキュリティに関する推奨事項この攻撃に対応するには、開発プロセス中に次の予防措置に従う必要があります。※提案の設計にあたっては、提案の仕組みの安全性を十分に考慮し、提案が集中管理されるリスクを最小限に抑えるとともに、攻撃価値の低減、議決権取得コストの増加、攻撃実行コストの増加等を考慮した設計を行ってください。* 提案に投票する前に、コミュニティは契約コードにバックドアがあるかどうかを慎重に確認する必要があります。* 提案が承認される前に、第三者のセキュリティ監査会社に連絡して、契約ロジック コードのセキュリティ監査を実施することができます。
SharkTeam: Tornado.Cash Proposal 攻撃原理の分析
作成者: SharkTeam
北京時間の2023年5月20日、Tornado.Cashは提案攻撃を受け、攻撃者は約68万米ドルの利益を得た。 SharkTeamは、このインシデントの技術分析を初めて実施し、セキュリティ上の注意事項をまとめ、その後のプロジェクトがこのインシデントから学び、ブロックチェーン業界のセキュリティ防御線を構築できることを期待しました。
1. イベント分析
攻撃者のアドレス:
0x092123663804f8801b9b086b03B98D706f77bD59
0x592340957eBC9e4Afb0E9Af221d06fDDDF789de9
攻撃契約:
0xAF54612427d97489707332efe0b6290F129DbAcb
0x03ecf0d22f9ccd21144a7d492cf63b471916497a
0x7dc86183274b28e9f1a100a0152dac975361353d (導入契約)
0xc503893b3e3c0c6b909222b45f2a3a259a52752d (偽の提案契約)
攻撃された契約:
0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce
プロポーザルトランザクションを開始します。
0x34605f1d6463a48b818157f7b26d040f8dd329273702a0618e9e74fe350e6e0d
攻撃トランザクション:
0x3274b6090685b842aca80b304a4dcee0f61ef8b6afee10b7c7533c32fb75486d
攻撃プロセス:
(1) まず、攻撃者 (0x08e80ecb) は、攻撃対象のコントラクト (0x5efda50f) に対する提案を開始し、この提案は提案 16 の補足であると主張します。
(2) しかし実際には、この提案には追加の自爆機能が含まれています。
(3) 残念ながら、コミュニティはこの提案に何の問題も発見せず、ほとんどのメンバーがこの提案を可決することに投票しました。
(4) 攻撃者はトークンの転送を実行するために多くのコントラクトを作成しました。
(5) 攻撃者 (0x08e80ecb) は、提案コントラクト (0xc503893b) と作成コントラクト (0x7dc86183) を破棄します。その後、攻撃コントラクト (0xc503893b) が同じアドレスに再展開されました。
(6) 攻撃者(0x08e80ecb)は、プロポーザルコントラクトを変更した後、プロポーザルを実行し、管理下のコントラクトアドレスのトークンロック量を10000に変更します。
(7) プロポーザルが実行された後、攻撃者 (0x08e80ecb) はトークンを自分のアドレスに転送し、攻撃されたコントラクトの所有権を取得します。
脆弱性分析: プロポーザル コントラクト (0xc503893b) の作成コントラクト (0x7dc86183) は creat2 を通じてデプロイされるため、2 つのコントラクトが破棄された後、新しいロジック コントラクトが同じアドレスにデプロイされ、次の形式でプロポーザルの実行が呼び出されます。攻撃コントラクトは、攻撃コントラクト内の値を任意に変更できます。
インシデントの概要: このインシデントの原因は、コミュニティがプロポーザルをチェックする際にプロポーザル内のリスクを発見できず、プロポーザル契約のコードにセキュリティ上の脆弱性があるかどうかを慎重に検証しなかったことです。
2. セキュリティに関する推奨事項
この攻撃に対応するには、開発プロセス中に次の予防措置に従う必要があります。
※提案の設計にあたっては、提案の仕組みの安全性を十分に考慮し、提案が集中管理されるリスクを最小限に抑えるとともに、攻撃価値の低減、議決権取得コストの増加、攻撃実行コストの増加等を考慮した設計を行ってください。