# 一般的なDeFiセキュリティの脆弱性の分析と予防策最近、安全専門家がコミュニティメンバーに分散型金融のセキュリティに関する見解を共有しました。彼は過去1年以上にわたりWeb3業界で発生した重大なセキュリティ事件を振り返り、それらの事件が発生した理由と回避方法を探り、一般的なスマートコントラクトのセキュリティ脆弱性と予防策をまとめ、プロジェクト側とユーザーに対していくつかのセキュリティアドバイスを提供しました。分散型金融分野における一般的な脆弱性の種類には、フラッシュローン、価格操作、関数権限の問題、任意の外部呼び出し、フォールバック関数の問題、ビジネスロジックの脆弱性、秘密鍵の漏洩、再入攻撃などが含まれます。本稿では、フラッシュローン、価格操作、再入攻撃の3種類に重点を置いて説明します。## フラッシュローンフラッシュローンは分散型金融の革新ですが、ハッカーによって利用されることもあります。攻撃者はフラッシュローンを通じて大量の資金を借り出し、価格を操作したりビジネスロジックを攻撃したりします。開発者は、契約の機能が巨額の資金によって異常を引き起こすか、または一度の取引で複数の関数と相互作用して不当な利益を得るために利用されるかどうかを考慮する必要があります。過去2年間、フラッシュローンは多くの問題を引き起こしました。一見高収益に見える分散型金融プロジェクトには、実際には多くの安全上のリスクが存在します。例えば、あるプロジェクトは固定時間に保有量に応じて報酬を配布していますが、攻撃者がフラッシュローンを利用して大量のトークンを購入し、大部分の報酬を得る事例がありました。また、トークンで価格を計算するプロジェクトも、フラッシュローンによって価格に影響を受けやすいです。## 価格操作価格操作の問題はフラッシュローンと密接に関連しており、主に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. 検証済みの再入防止モディファイアを使用してください。重要なのは、無駄に同じことを繰り返さないことであり、業界で既に検証されたベストプラクティスを採用すべきです。## プロジェクトチームの安全に関する提言1. スマートコントラクト開発のベストセキュリティプラクティスに従う。2. コントラクトのアップグレードおよび一時停止機能を実現する。3. タイムロック機構を採用する。4. セキュリティ投資を強化し、完全なセキュリティシステムを構築する。5. すべての従業員のセキュリティ意識を高める。6. 内部の悪行を防ぎ、効率を高めると同時にリスク管理を強化する。7. 第三者を慎重に導入し、"デフォルトでは上下流は安全ではない"という原則に従う。## ユーザーはどのようにスマートコントラクトの安全性を判断するか1. コントラクトがオープンソースであることを確認してください。2. Ownerが分散型のマルチシグ機構を採用しているか確認する。3. 既存の契約の取引状況を確認します。4. 契約が代理契約であるか、アップグレード可能であるか、タイムロックがあるかを理解する。5. 契約が複数の機関による監査を受けたか確認し、オーナーの権限が過大でないか評価する。6. プロジェクトで使用されるオラクルの種類と安全性に注意してください。総じて、分散型金融の分野では、安全性が常に最優先の考慮事項です。プロジェクト側は安全意識と対策を全面的に向上させるべきであり、ユーザーは警戒を怠らず、プロジェクトの安全性を慎重に評価した上で意思決定を行う必要があります。! [Cobo DeFiセキュリティセクション(パートII):D eFiの一般的なセキュリティの脆弱性と防止](https://img-cdn.gateio.im/social/moments-cf2aa755426b31e8f21cbb05cc1fe39a)
DeFiセキュリティの死:一般的な脆弱性と防止戦略
一般的なDeFiセキュリティの脆弱性の分析と予防策
最近、安全専門家がコミュニティメンバーに分散型金融のセキュリティに関する見解を共有しました。彼は過去1年以上にわたりWeb3業界で発生した重大なセキュリティ事件を振り返り、それらの事件が発生した理由と回避方法を探り、一般的なスマートコントラクトのセキュリティ脆弱性と予防策をまとめ、プロジェクト側とユーザーに対していくつかのセキュリティアドバイスを提供しました。
分散型金融分野における一般的な脆弱性の種類には、フラッシュローン、価格操作、関数権限の問題、任意の外部呼び出し、フォールバック関数の問題、ビジネスロジックの脆弱性、秘密鍵の漏洩、再入攻撃などが含まれます。本稿では、フラッシュローン、価格操作、再入攻撃の3種類に重点を置いて説明します。
フラッシュローン
フラッシュローンは分散型金融の革新ですが、ハッカーによって利用されることもあります。攻撃者はフラッシュローンを通じて大量の資金を借り出し、価格を操作したりビジネスロジックを攻撃したりします。開発者は、契約の機能が巨額の資金によって異常を引き起こすか、または一度の取引で複数の関数と相互作用して不当な利益を得るために利用されるかどうかを考慮する必要があります。
過去2年間、フラッシュローンは多くの問題を引き起こしました。一見高収益に見える分散型金融プロジェクトには、実際には多くの安全上のリスクが存在します。例えば、あるプロジェクトは固定時間に保有量に応じて報酬を配布していますが、攻撃者がフラッシュローンを利用して大量のトークンを購入し、大部分の報酬を得る事例がありました。また、トークンで価格を計算するプロジェクトも、フラッシュローンによって価格に影響を受けやすいです。
価格操作
価格操作の問題はフラッシュローンと密接に関連しており、主に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に設定されないため、攻撃者は途中で何度も引き出し関数を呼び出すことができ、繰り返し引き出しが発生します。
重入問題を解決するには、以下の点に注意する必要があります:
重要なのは、無駄に同じことを繰り返さないことであり、業界で既に検証されたベストプラクティスを採用すべきです。
プロジェクトチームの安全に関する提言
ユーザーはどのようにスマートコントラクトの安全性を判断するか
総じて、分散型金融の分野では、安全性が常に最優先の考慮事項です。プロジェクト側は安全意識と対策を全面的に向上させるべきであり、ユーザーは警戒を怠らず、プロジェクトの安全性を慎重に評価した上で意思決定を行う必要があります。
! Cobo DeFiセキュリティセクション(パートII):D eFiの一般的なセキュリティの脆弱性と防止