This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
DeFiセキュリティインベントリ:一般的な脆弱性の種類と防止ガイド
一般的なDeFiセキュリティの脆弱性と注意事項
最近、安全専門家が分散型金融の安全性に関する見解を共有し、過去1年間にWeb3業界で発生した重大なセキュリティ事件を振り返り、これらの事件が発生した理由と回避方法を探り、一般的なスマートコントラクトのセキュリティ脆弱性と予防策をまとめ、プロジェクト側とユーザーにいくつかの安全に関するアドバイスを提供しました。
一般的な分散型金融の脆弱性には、フラッシュローン、価格操作、関数権限の問題、任意の外部呼び出し、フォールバック関数の問題、ビジネスロジックの脆弱性、プライベートキーの漏洩、再入攻撃などがあります。以下では、フラッシュローン、価格操作、再入攻撃の3つのタイプに重点を置いて説明します。
フラッシュローン
フラッシュローンは分散型金融の一つの革新ですが、ハッカーによって攻撃に利用されることもあります。攻撃者はフラッシュローンを通じて大量の資金を借り出し、価格を操作したり、ビジネスロジックを攻撃したりします。開発者は、契約の機能が巨額の資金によって異常になるか、または不当な報酬を得るために利用される可能性を考慮する必要があります。
多くの分散型金融プロジェクトは高い利益を提供しているように見えますが、実際にはプロジェクトチームのレベルはまちまちです。一部のプロジェクトではコードが購入された可能性があり、コード自体に脆弱性がなくても、論理的に問題が存在する可能性があります。例えば、一部のプロジェクトは固定された時間に保有量に基づいて報酬を支給しますが、攻撃者がフラッシュローンを利用して大量のトークンを購入し、大部分の報酬を取得することがあります。
価格操作
価格操作の問題はフラッシュローンと密接に関連しており、主に価格計算時のパラメータがユーザーによって制御されるためです。一般的な問題のタイプは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; }
ユーザーの残高は関数の最後までゼロにならないため、繰り返し呼び出すことができ、残高を何度も引き出すことができます。
リエントランシーの問題を解決するには、次の点に注意する必要があります。
再入攻撃の手法は多様であり、複数の関数やコントラクトが関与する可能性があるため、解決するのが比較的複雑です。車輪の再発明ではなく、十分に検証されたベストプラクティスを使用することが最善です。
プロジェクト側の安全に関する提案
ユーザーはどのようにスマートコントラクトの安全性を判断するか
総じて、分散型金融の分野では、安全性の問題が特に重要です。プロジェクト側は安全への投資を重視し、ユーザーも警戒を高めて慎重に参加する必要があります。共同の努力があってこそ、より安全で信頼できる分散型金融のエコシステムを構築できるのです。
! Cobo DeFiセキュリティセクション(パートII):D eFiの一般的なセキュリティの脆弱性と防止