# 一般的なDeFiセキュリティの脆弱性と注意事項最近、安全専門家がコミュニティメンバーのために分散型金融のセキュリティ講座を共有しました。専門家は、過去1年以上にわたってWeb3業界で発生した重大なセキュリティ事件を振り返り、これらの事件が発生した理由や回避方法を探求し、一般的なスマートコントラクトのセキュリティの脆弱性と予防策をまとめ、プロジェクトチームと一般ユーザーに対していくつかのセキュリティアドバイスを提供しました。一般的な分散型金融の脆弱性の種類には、フラッシュローン、価格操作、関数権限の問題、任意の外部呼び出し、フォールバック関数の問題、ビジネスロジックの脆弱性、秘密鍵の漏洩、再入攻撃が含まれます。この記事では、フラッシュローン、価格操作、再入攻撃の3つのタイプに焦点を当てて説明します。! [Cobo DeFiセキュリティセクション(パートII):D eFiの一般的なセキュリティの脆弱性と防止](https://img-cdn.gateio.im/social/moments-cf2aa755426b31e8f21cbb05cc1fe39a)## フラッシュローンフラッシュローンは分散型金融の一種の革新ですが、攻撃者によって利用されることもよくあります。攻撃者はフラッシュローンを通じて大量の資金を借り出し、価格を操作したり、ビジネスロジックを攻撃したりします。開発者は、契約の機能が巨額の資金によって異常を引き起こすか、または不正な利益を得るために利用されるかどうかを考慮する必要があります。多くの分散型金融プロジェクトは高い利益があるように見えますが、実際にはプロジェクトのレベルはまちまちです。いくつかのプロジェクトのコードは購入されたものであり、コード自体に脆弱性がなくても、論理的には問題が存在する可能性があります。例えば、いくつかのプロジェクトは固定された時間に保有者のトークンの数量に基づいて報酬を配布しますが、攻撃者がフラッシュローンを利用して大量のトークンを購入し、報酬が配布される際に大部分の利益を得ることがあります。## 価格操作価格操作の問題はフラッシュローンと密接に関連しており、主に価格計算時の特定のパラメータがユーザーによって制御されるためです。一般的な問題の種類は2つあります:1. 価格を計算する際に第三者のデータを使用しますが、その使用方法が正しくないか、チェックが不足しているため、価格が悪意を持って操作されることがあります。2. 一部のアドレスのトークン数量を計算変数として使用し、これらのアドレスのトークン残高は一時的に増減することができます。## リエントランシー攻撃再入攻撃は、外部契約を呼び出す際に直面する可能性のある主要な危険の一つです。攻撃者は制御フローを引き継ぎ、データに予期しない変更を加える可能性があります。例えば:ソリディティマッピング (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. 時間的に検証された再入防止モディファイアを使用する。再入攻撃の典型的なケースはOmni Protocol事件です。この攻撃では、脆弱性を発見した攻撃者が提出した取引が他のハッカーに捕らえられ、先に実行されてしまい、元の攻撃者は部分的な利益しか得られませんでした。これはWeb3エコシステムにおける"ダークフォレスト"の特性を浮き彫りにし、攻撃者同士が互いに獲物となる可能性があることを示しています。## セキュリティの提案### プロジェクトチームの安全に関する提案1. 最良のセキュリティプラクティスに従って契約を開発する。2. コントラクトのアップグレードと一時停止機能を実現する。3. タイムロックメカニズムを採用する。4. セキュリティへの投資を拡大し、完全なセキュリティシステムを構築する。5. すべての従業員の安全意識を高める。6. 内部の悪行を防ぎ、効率を高めると同時にリスク管理を強化する。7. 第三者サービスの導入には慎重を期し、「デフォルトで上流・下流は安全ではない」という原則に従ってください。### ユーザー/LP はスマートコントラクトが安全かどうかをどのように判断するか1. コントラクトがオープンソースかどうかを確認してください。2. Ownerが分散型のマルチシグ機構を採用しているかを検証する。3. 契約の既存の取引状況を確認します。4. 契約が代理契約であるか、アップグレード可能であるか、時間ロックがあるかを確認してください。5. コントラクトが複数の機関による監査を受けたかどうかを確認し、オーナーの権限が過剰でないか評価します。6. オラクルの選択と使用に注意してください。結局として、分散型金融の分野では、安全問題が常に最も重要な考慮事項の一つです。プロジェクト側も一般ユーザーも、高い警戒心を持ち、リスクを低減し、資産の安全を確保するために適切な安全対策を講じる必要があります。
分散型金融のセキュリティ脆弱性の総点検:フラッシュローン、価格操作、再入攻撃リスクの解析
一般的なDeFiセキュリティの脆弱性と注意事項
最近、安全専門家がコミュニティメンバーのために分散型金融のセキュリティ講座を共有しました。専門家は、過去1年以上にわたってWeb3業界で発生した重大なセキュリティ事件を振り返り、これらの事件が発生した理由や回避方法を探求し、一般的なスマートコントラクトのセキュリティの脆弱性と予防策をまとめ、プロジェクトチームと一般ユーザーに対していくつかのセキュリティアドバイスを提供しました。
一般的な分散型金融の脆弱性の種類には、フラッシュローン、価格操作、関数権限の問題、任意の外部呼び出し、フォールバック関数の問題、ビジネスロジックの脆弱性、秘密鍵の漏洩、再入攻撃が含まれます。この記事では、フラッシュローン、価格操作、再入攻撃の3つのタイプに焦点を当てて説明します。
! Cobo DeFiセキュリティセクション(パートII):D eFiの一般的なセキュリティの脆弱性と防止
フラッシュローン
フラッシュローンは分散型金融の一種の革新ですが、攻撃者によって利用されることもよくあります。攻撃者はフラッシュローンを通じて大量の資金を借り出し、価格を操作したり、ビジネスロジックを攻撃したりします。開発者は、契約の機能が巨額の資金によって異常を引き起こすか、または不正な利益を得るために利用されるかどうかを考慮する必要があります。
多くの分散型金融プロジェクトは高い利益があるように見えますが、実際にはプロジェクトのレベルはまちまちです。いくつかのプロジェクトのコードは購入されたものであり、コード自体に脆弱性がなくても、論理的には問題が存在する可能性があります。例えば、いくつかのプロジェクトは固定された時間に保有者のトークンの数量に基づいて報酬を配布しますが、攻撃者がフラッシュローンを利用して大量のトークンを購入し、報酬が配布される際に大部分の利益を得ることがあります。
価格操作
価格操作の問題はフラッシュローンと密接に関連しており、主に価格計算時の特定のパラメータがユーザーによって制御されるためです。一般的な問題の種類は2つあります:
リエントランシー攻撃
再入攻撃は、外部契約を呼び出す際に直面する可能性のある主要な危険の一つです。攻撃者は制御フローを引き継ぎ、データに予期しない変更を加える可能性があります。例えば:
ソリディティ マッピング (address => uint) private userBalances;
関数 withdrawBalance() public { uint amountToWithdraw = userBalances[msg.sender]; 成功(bool、) = msg.sender.call.value(amountToWithdraw)("" ); require(success); userBalances[msg.sender] = 0; }
この例では、ユーザーの残高が関数の最後まで 0 に設定されないため、攻撃者は最初の呼び出しが成功した後に再度その関数を呼び出し、残高を何度も引き出すことができます。
重入問題を解決するには、以下の点に注意する必要があります:
再入攻撃の典型的なケースはOmni Protocol事件です。この攻撃では、脆弱性を発見した攻撃者が提出した取引が他のハッカーに捕らえられ、先に実行されてしまい、元の攻撃者は部分的な利益しか得られませんでした。これはWeb3エコシステムにおける"ダークフォレスト"の特性を浮き彫りにし、攻撃者同士が互いに獲物となる可能性があることを示しています。
セキュリティの提案
プロジェクトチームの安全に関する提案
ユーザー/LP はスマートコントラクトが安全かどうかをどのように判断するか
結局として、分散型金融の分野では、安全問題が常に最も重要な考慮事項の一つです。プロジェクト側も一般ユーザーも、高い警戒心を持ち、リスクを低減し、資産の安全を確保するために適切な安全対策を講じる必要があります。