# 一般的なDeFiセキュリティの脆弱性と注意事項最近、あるセキュリティ専門家がネットワークシェアリング会議でWeb3業界が過去1年以上にわたり遭遇した重大なセキュリティ事件について議論し、これらの事件が発生した原因とその回避方法を分析し、一般的なスマートコントラクトのセキュリティ脆弱性と予防策をまとめ、プロジェクト側と一般ユーザーに対していくつかのセキュリティアドバイスを提供しました。一般的な分散型金融の脆弱性タイプには、フラッシュローン、価格操作、関数権限の問題、任意の外部呼び出し、フォールバック関数の問題、ビジネスロジックの脆弱性、秘密鍵の漏洩、および再入攻撃などが含まれます。その中でも、フラッシュローン、価格操作、再入攻撃は特に典型的なものです。## フラッシュローンフラッシュローン自体は分散型金融の一種の革新ですが、ハッカーによってもよく利用されています。攻撃者はフラッシュローンを通じて大量の資金を借り出し、価格を操作したりビジネスロジックを攻撃したりします。開発者は、契約機能が巨額の資金によって異常を引き起こす可能性があるか、または一回の取引で複数の関数と相互作用して不正な利益を得るために利用される可能性があるかを考慮する必要があります。過去2年間、多くの分散型金融プロジェクトがフラッシュローンの問題により攻撃を受けました。いくつかのプロジェクトは、固定された時間に保有量に応じて報酬を配布していますが、攻撃者はフラッシュローンを利用して大量のトークンを購入し、報酬配布時に大部分の利益を得ました。また、トークンを用いて価格を計算するプロジェクトもフラッシュローンの影響を受けやすいです。## 価格操作 価格操作の問題はフラッシュローンと密接に関連しており、主に2種類あります:1. 価格を計算する際に第三者のデータを使用するが、使用方法が正しくないか、確認が欠如しているため、価格が悪意を持って操作される。2. 特定のアドレスのトークン数量を計算変数として使用し、これらのアドレスのトークン残高は一時的に増減可能です。## リエントランシー攻撃外部コントラクトを呼び出す主なリスクの1つは、それらが制御フローを引き継ぎ、データに予期しない変更を加える可能性があることです。典型的な再入攻撃の例は以下の通りです:ソリディティマッピング (address => uint) private userBalances;関数 withdrawBalance() public { uint amountToWithdraw = userBalances[msg.sender]; 成功(bool、) = msg.sender.call.value(amountToWithdraw)("" ); require(success); userBalances[msg.sender] = 0;}ユーザーの残高は関数の最後まで0に設定されないため、繰り返し呼び出すと残高を引き出すことが成功します。リエントランシーの問題を解決するには、次の点に注意する必要があります。1. 単一の関数の再入を防ぐだけでなく2. Checks-Effects-Interactionsパターンに従う 3. 検証済みの再入防止モディファイアを使用する## プロジェクトチームの安全に関する提案1. 契約開発においてベストセキュリティプラクティスに従う2. コントラクトのアップグレードおよび一時停止機能を実現する3. タイムロック機構を採用4. セキュリティへの投資を増やし、完璧なセキュリティシステムを構築する5. すべての従業員の安全意識を高める6. 内部の悪行を防止し、効率を向上させると同時にリスク管理を強化する7. 第三者を慎重に導入する、デフォルトでは上下流は安全ではない## ユーザーがスマートコントラクトの安全性を判断する方法1. コントラクトがオープンソースであることを確認する2. Ownerが分散型のマルチシグを採用しているか確認する3. 契約の既存の取引を確認する 4. コントラクトがアップグレード可能かどうか、タイムロックがあるかどうかを確認する5. 複数の機関による監査を受けたか、Owner権限が過大でないかを確認する6. オラクルの使用状況に注意する総じて、分散型金融の安全はシステム的な問題であり、プロジェクト側とユーザーが共に重視し、包括的な安全対策を講じる必要があります。そうすることで、リスクを効果的に低減することができます。! [Cobo DeFiセキュリティセクション(パートII):D eFiの一般的なセキュリティの脆弱性と防止](https://img-cdn.gateio.im/social/moments-cf2aa755426b31e8f21cbb05cc1fe39a)
一般的なDeFiセキュリティの脆弱性と予防策の完全な分析
一般的なDeFiセキュリティの脆弱性と注意事項
最近、あるセキュリティ専門家がネットワークシェアリング会議でWeb3業界が過去1年以上にわたり遭遇した重大なセキュリティ事件について議論し、これらの事件が発生した原因とその回避方法を分析し、一般的なスマートコントラクトのセキュリティ脆弱性と予防策をまとめ、プロジェクト側と一般ユーザーに対していくつかのセキュリティアドバイスを提供しました。
一般的な分散型金融の脆弱性タイプには、フラッシュローン、価格操作、関数権限の問題、任意の外部呼び出し、フォールバック関数の問題、ビジネスロジックの脆弱性、秘密鍵の漏洩、および再入攻撃などが含まれます。その中でも、フラッシュローン、価格操作、再入攻撃は特に典型的なものです。
フラッシュローン
フラッシュローン自体は分散型金融の一種の革新ですが、ハッカーによってもよく利用されています。攻撃者はフラッシュローンを通じて大量の資金を借り出し、価格を操作したりビジネスロジックを攻撃したりします。開発者は、契約機能が巨額の資金によって異常を引き起こす可能性があるか、または一回の取引で複数の関数と相互作用して不正な利益を得るために利用される可能性があるかを考慮する必要があります。
過去2年間、多くの分散型金融プロジェクトがフラッシュローンの問題により攻撃を受けました。いくつかのプロジェクトは、固定された時間に保有量に応じて報酬を配布していますが、攻撃者はフラッシュローンを利用して大量のトークンを購入し、報酬配布時に大部分の利益を得ました。また、トークンを用いて価格を計算するプロジェクトもフラッシュローンの影響を受けやすいです。
価格操作
価格操作の問題はフラッシュローンと密接に関連しており、主に2種類あります:
価格を計算する際に第三者のデータを使用するが、使用方法が正しくないか、確認が欠如しているため、価格が悪意を持って操作される。
特定のアドレスのトークン数量を計算変数として使用し、これらのアドレスのトークン残高は一時的に増減可能です。
リエントランシー攻撃
外部コントラクトを呼び出す主なリスクの1つは、それらが制御フローを引き継ぎ、データに予期しない変更を加える可能性があることです。典型的な再入攻撃の例は以下の通りです:
ソリディティ マッピング (address => uint) private userBalances;
関数 withdrawBalance() public { uint amountToWithdraw = userBalances[msg.sender]; 成功(bool、) = msg.sender.call.value(amountToWithdraw)("" ); require(success); userBalances[msg.sender] = 0; }
ユーザーの残高は関数の最後まで0に設定されないため、繰り返し呼び出すと残高を引き出すことが成功します。
リエントランシーの問題を解決するには、次の点に注意する必要があります。
プロジェクトチームの安全に関する提案
ユーザーがスマートコントラクトの安全性を判断する方法
総じて、分散型金融の安全はシステム的な問題であり、プロジェクト側とユーザーが共に重視し、包括的な安全対策を講じる必要があります。そうすることで、リスクを効果的に低減することができます。
! Cobo DeFiセキュリティセクション(パートII):D eFiの一般的なセキュリティの脆弱性と防止