Cointime

Download App
iOS & Android

SlowMist:Sui-Move契約監査の概要

Validated Project

新興の高性能ブロックチェーン プラットフォームとして、Sui は多くの革新的なテクノロジーと独自性を備えていると同時に、さまざまなアプリケーション シナリオに高速で安全なトランザクション エクスペリエンスを提供することに重点を置いています。 Sai に関する基本的な知識については、「Exploring Sui: Technology and Contract Security Behind High Performance」を参照してください。ブロックチェーンで一般的に使用されている他のプログラミング言語(Solidityなど)とは異なり、SuiはMove言語を使用しており、再入攻撃や整数オーバーフローなど、Solidityによくある脆弱性問題をある程度解決できます。 、二重支出、DoS 攻撃、コンパイラの問題はありますが、開発者がコードにエラーを導入することを防ぐことはできません。したがって、開発者は、スマート コントラクトのセキュリティを確保するために、それらを使用する場合、いくつかの独自の機能や機能を理解し、注意を払う必要があります。

SlowMist セキュリティ チームは、Sui コミュニティが共有するセキュリティ開発プラクティスを統合および吸収し、長年にわたって蓄積された独自のセキュリティ監査経験と組み合わせて、Sui-Move 契約監査入門をリリースしました。これは、開発者がセキュリティ リスクをより深く理解できるようにすることを目的としています。スマート コントラクトを作成し、潜在的なセキュリティ脅威を軽減する実用的なソリューションを提供します。

スペースの制限のため、この記事では、Sui-Move コントラクト監査の概要の一部のみを記載します。GitHub での Watch、Fork、Star を歓迎します: https://github.com/slowmist/Sui-MOVE-Smart-Contract-。 Auditing-Primer/blob/main/README_CN.md。

1. モジュールの宣言と可視性

1.1 「public(friend)」機能(Sui最新版では「public(friend)」が「public(package)」に置き換えられます)

定義: 指定されたフレンド モジュールのみがアクセスできるように関数を宣言するために使用されます。これにより、「パブリック」と「プライベート」の間で、よりきめ細かいアクセス制御が提供されます。

例:

1.2 「エントリー」機能

定義: 「entry」関数はモジュールのエントリ ポイントであり、トランザクション ブロック内からの直接呼び出しを許可します。パラメーターはトランザクション ブロックへの入力から取得する必要があり、ブロック内の以前のトランザクションの結果や変更されたデータにすることはできません。さらに、「entry」関数は「drop」機能を持つ型のみを返すことができます。

例:

定義: 「entry」関数はモジュールのエントリ ポイントであり、トランザクション ブロック内からの直接呼び出しを許可します。パラメーターはトランザクション ブロックへの入力から取得する必要があり、ブロック内の以前のトランザクションの結果や変更されたデータにすることはできません。さらに、「entry」関数は「drop」機能を持つ型のみを返すことができます。

例:

1.3 「パブリック」機能

定義: 「パブリック」関数は、外部対話に適したトランザクション ブロックや他のモジュールから呼び出すことができます。 「エントリ」関数のようなパラメータや戻り値の制限はなく、通常は機能を外部に公開するために使用されます。

例:

2. オブジェクト管理

2.1 オブジェクトの一意性

定義: 各Suiオブジェクトには一意の「objID」があり、チェーン上のオブジェクトの一意性が保証されます。

2.2 梱包と開梱

意味:

  • 直接ラッピング: スイ オブジェクトを別のオブジェクトのフィールドとして使用します。ラッピングを解除するときにラッピング オブジェクトを破棄する必要があります。
  • オブジェクトのパッケージ化: パッケージ化されたオブジェクトは別のオブジェクトの一部となり、独立して存在しなくなります。オブジェクトの ID は、解凍後も変更されません。

2.3 カスタム転送戦略

定義: 「suit::transfer::transfer」を使用してカスタム転送戦略を定義します。「store」機能を持つオブジェクトの場合は、「sui::transfer::public_transfer」を通じて作成できます。

2.4 オブジェクトのプロパティ

定義:Sui オブジェクトのプロパティには、「コピー」、「ドロップ」、「ストア」、および「キー」が含まれ、オブジェクトの動作を決定します。

2.5 オブジェクトの権限チェック

  • アドレス所有オブジェクト

定義: 特定のアドレス (アカウント アドレスまたはオブジェクト ID) によって所有されるオブジェクト。オブジェクトの所有者のみがこれらのオブジェクトにアクセスして操作できます。

  • 不変オブジェクト

定義: 不変オブジェクトは変更または転送できず、誰でもアクセスできます。グローバル アクセスが必要だが変更する必要はないデータに適しています。

  • 共有オブジェクト

定義: 共有オブジェクトは複数のユーザーがアクセスして操作でき、分散アプリケーションなどのシナリオに適していますが、コンセンサスが必要なため、操作コストが高くなります。

  • ラップされたオブジェクト

定義: オブジェクトのラップとは、あるオブジェクトを別のオブジェクトに埋め込むことです。ラップされたオブジェクトは独立して存在しないため、ラッピング オブジェクトを通じてアクセスする必要があります。

3. セキュリティチェック

3.1 数値オーバーフローチェック

定義: オブジェクトのラップとは、あるオブジェクトを別のオブジェクトに埋め込むことです。ラップされたオブジェクトは独立して存在しないため、ラッピング オブジェクトを通じてアクセスする必要があります。

3. セキュリティチェック

3.1 数値オーバーフローチェック

Sui のスマート コントラクトは、デフォルトで数値オーバーフロー チェックを実行します。

3.2 再入チェック

いわゆるリエントランシー攻撃は、通常のコントラクト コール トランザクションに予期しない (外部) コールを挿入する行為で、これによりビジネス コール プロセス全体が変更され、違法な利益が得られます。外部コントラクト呼び出しが関与する場合は常に、潜在的な再入リスクが存在する可能性があります。現在のリエントランシーの問題は、単一機能のリエントランシー、クロスファンクションのリエントランシー、クロスコントラクトのリエントランシーの 3 つのカテゴリに分類できます。 Move 言語のいくつかの機能は、再入攻撃に対する自然な保護を提供します。

  • Move には動的呼び出しはなく、すべての外部呼び出しは最初に使用を通じてインポートする必要があります。つまり、外部呼び出しは予期され、決定されます。
  • ネイティブ トークン転送がない場合、フォールバック機能がトリガーされます。
  • Move では、リソース モデルにより、一度に 1 つの実行コンテキストのみがリソースにアクセスできることが保証されます。これは、関数の実行が完了しない場合、実行が完了するまで他の関数は同じリソースにアクセスできないことを意味します。

1. オーバーフロー監査

注: Move は、数学的演算を実行するときにオーバーフロー チェックを実行します。演算がオーバーフローすると、トランザクションは失敗します。ただし、Move はビット操作のオーバーフロー チェックを実行しないことに注意してください。

位置特定: コード内でビット演算が実行される位置を見つけ、オーバーフローの危険性があるかどうかを確認します。

2. 算術精度エラー監査

注: Move には浮動小数点型はありません。したがって、算術演算を実行する場合、演算結果を浮動小数点数で表現する必要がある場合、精度誤差が発生する可能性があります。精度誤差を完全に回避するのは場合によっては困難ですが、最適化と合理的な設計によってその影響を軽減できます。

位置付け: 算術演算、特に精度誤差を引き起こす可能性のある計算を含むコードのすべての部分をレビューし、これらの演算が契約ロジックや数値精度に悪影響を与えないことを確認し、精度誤差を軽減するための最適化の推奨事項を作成します。

3. 条件付き競争監査

注:Sui のバリデーターは、ユーザーが送信したトランザクションを並べ替えることもできるため、監査では、同じブロック内のトランザクションの並べ替えによる利益の問題に依然として注意を払う必要があります。

位置:

  • 関数が呼び出される前に、コントラクトのデータ状態を管理することは期待されていますか?
  • 関数実行中にコントラクトデータの状態を管理する必要があるかどうか。
  • 関数呼び出し後にコントラクトデータの状態を管理することは期待されていますか?

4. アクセス制御監査

注: ユーザーの入金額を直接更新できる機能など、契約内の特定の主要な機能は内部呼び出しに限定する必要があります。これらの機能が誤って外部に公開されると、権限制御がバイパスされ、セキュリティ上の脆弱性が発生したり、資産が損失したりする可能性があります。したがって、アクセス許可を厳密に設定して、承認されたロールまたはモジュールのみがこれらの関数を呼び出せるようにするか、関数が内部でのみ使用できるようにする必要があります。

位置付け: すべての関数、特に外部に公開すべきではない関数のアクセス制御設定をチェックして、それらの関数が内部でのみ呼び出せることを確認する必要があります。公開すべきではない機能インターフェイスが公開されていることが判明した場合は、高リスクとしてマークされ、修正提案が行われなければなりません。

5. オブジェクト管理監査

注:Sui では、オブジェクトを共有オブジェクト (共有オブジェクト) に変換できます。これは、オブジェクトのアクセス権がプライベートからパブリックに変更される可能性があることを意味します。したがって、使用されるすべてのオブジェクトを精査して、各オブジェクトが静的であるか共有であるかを判断する必要があります。オブジェクトがプライベート オブジェクトから共有オブジェクトに誤って変換されていないか特に注意してください。これにより、権限のないユーザーがこれらのオブジェクトにアクセスし、潜在的なセキュリティ リスクが生じる可能性があります。

位置付け: モジュールに関係するすべてのオブジェクトを整理および分析し、オブジェクトのタイプと権限設定を確認して、オブジェクトの権限がビジネス要件と一致していることを確認します。プライベート オブジェクトが誤って共有オブジェクトに変換されたことが判明した場合は、潜在的なリスクとしてフラグを立て、修正を推奨する必要があります。

6. トークン消費の監査

位置付け: モジュールに関係するすべてのオブジェクトを整理および分析し、オブジェクトのタイプと権限設定を確認して、オブジェクトの権限がビジネス要件と一致していることを確認します。プライベート オブジェクトが誤って共有オブジェクトに変換されたことが判明した場合は、潜在的なリスクとしてフラグを立て、修正を推奨する必要があります。

6. トークン消費の監査

注:Sui のトークン モデルは他のチェーンのトークン モデルとは異なります。 Sui では、オブジェクトがトークンを保持できるようになり、トークン オブジェクトを他のオブジェクト内にネストして分割することができます。したがって、トークンの消費が関係するシナリオでは、セキュリティの問題や予期せぬ損失を避けるために、トークンの管理と流通に特別な注意を払う必要があります。

位置:

  • 消費量が正確であることを確認してください。
  • トークンオブジェクトが正しく転送されたことを確認してください。
  • トークンの分割と結合が正当であるかどうかを確認します。
  • オブジェクトへのトークンのバインドを確認します。

7. フラッシュローン攻撃の監査

注:Sui's Moveにはフラッシュローン(ホットポテト)の使用法もあります。ユーザーは一度の取引で多額の資金を借り入れて好きなだけ利用することができ、取引内で資金を返却するだけで済みます。悪意のあるユーザーは通常、フラッシュ ローンを使用して自分の資金を拡大し、価格操作などの大規模な資金攻撃を実行します。

ポジショニング: プロトコル自体のアルゴリズム (報酬、金利など) とオラクル マシンへの依存が合理的かどうかを分析します。

8. 権限の脆弱性監査

注:Sui の Move コントラクトでは、パーミッションの抜け穴はビジネス ニーズと機能設計に密接に関係しているため、より複雑なモジュールに遭遇した場合は、各メソッドの呼び出しパーミッションをプロジェクト パーティに確認する必要があります (ここでのパーミッションは通常、関数を指します)。可視性と関数呼び出しの権限)。

位置:

  • すべての関数メソッドの可視性と呼び出し権限をチェックして確認します。プロジェクトの評価段階で、プロジェクト当事者は設計ドキュメントの提供を要求され、設計ドキュメントの記述に基づいて権限が確認されます。
  • プロジェクト チームのロールの権限の範囲を整理します。プロジェクト チームのロールの権限がユーザーの資産に影響を与える場合、権限が過剰になる可能性があります。
  • 外部関数で渡されたオブジェクトのタイプを分析します。それが何らかの特権関数である場合、一部の特権オブジェクトが参加する必要があります。

9. 契約アップグレードのセキュリティ監査

注: Move では、外部モジュールは use キーワードを通じてインポートされます。スイの契約はアップグレード可能ですが、公開された契約パッケージは不変オブジェクトであり、一度公開すると取り消したり変更したりすることはできないことに注意してください。契約アップグレードの本質は、更新された契約を新しいアドレスで再発行し、古いバージョンの契約のデータを新しい契約に移行することです。したがって、契約のアップグレード プロセス中は特別な注意を払う必要があります。

  • 「init」関数: 「init」関数は、契約が初めてリリースされるときにのみ実行され、その後の契約のアップグレードが発生したときに再度トリガーされることはありません。
  • コントラクトをアップグレードしても依存関係は自動的に更新されません。コントラクト パッケージが外部パッケージに依存している場合、外部パッケージがアップグレードされても、契約パッケージはアップグレードされたコントラクト アドレスを自動的に指しません。したがって、新しい依存関係を指定するには、契約パッケージを手動でアップグレードする必要があります。

位置付け: 契約のアップグレード プロセス中にデータ移行ロジックの詳細な検査を実施し、移行操作が安全かつ正確であることを確認し、重要なデータの欠落や更新への依存の問題を回避する必要があります。

10. 外部通話のセキュリティ監査

注: 外部モジュールの使用状況の監査項目と同様に、Move での外部呼び出しでは最初に外部モジュールをインポートする必要があるため、理論上、外部呼び出しの結果は開発者が期待するものであり、主に必要なのは外部モジュールの安定性です。

位置付け: 外部からインポートされたライブラリをチェックする必要があります。

11. 戻り値の確認

注: 他のスマート コントラクト言語と同様に、Move コントラクトでは、特定の関数の戻り値をチェックする必要があります。これらの戻り値の処理を無視すると、キーロジックが正しく実行されず、セキュリティ上の問題が発生する可能性があります。

位置付け: コード内のすべての関数呼び出しの戻り値、特に外部呼び出しや重要なステータス更新を伴う関数呼び出しの戻り値を確認する必要があります。戻り値が処理または検証されない場合、予期しない動作が発生する可能性があるため、潜在的なリスク ポイントとしてマークする必要があります。

12. サービス拒否監査

注: サービス拒否 (DoS) 攻撃は、コード ロジック エラー、互換性の問題、またはその他のセキュリティの脆弱性によって引き起こされる可能性があり、スマート コントラクトが適切に機能しなくなることがあります。このような問題は、契約の可用性に影響を与えたり、契約を完全に麻痺させたりする可能性があります。

12. サービス拒否監査

注: サービス拒否 (DoS) 攻撃は、コード ロジック エラー、互換性の問題、またはその他のセキュリティ脆弱性によって引き起こされる可能性があり、スマート コントラクトが適切に機能しなくなることがあります。このような問題は、契約の可用性に影響を与えたり、契約を完全に麻痺させたりする可能性があります。

位置:

  • ビジネス ロジックの堅牢性をチェックして、さまざまな状況下で正常に実行できること、およびエラーや抜け穴によって契約が中断されないことを確認することに重点を置きます。
  • 外部モジュールと対話する部分に注意し、それらの互換性を確保して、外部依存関係の問題によるサービスの中断を防ぎます。

13. ガス最適化監査

注: Ethereum と同様に、Sui にも Gas メカニズムがあり、モジュール スクリプトの呼び出しはすべて Gas を消費します。したがって、長くて複雑なコードを最適化する必要があります。

位置:

  • 分離できるかどうかを確認するための複雑な呼び出しが必要です。
  • 関数の内部実行の効率を最適化できるかどうかを確認するために、高頻度の呼び出しが必要になります。

14. 設計ロジックの監査

注: 設計ロジック監査の焦点は、ビジネス プロセスとコードの実装をチェックして、設計上の欠陥や期待からの逸脱がないかどうかを確認することです。予期されるロジックと一致しないコード実装は、予期しない動作やセキュリティ リスクにつながる可能性があります。

位置:

  • さまざまな役割の権限と範囲に基づいて、ビジネス プロセス内で考えられる呼び出しパスを分類します。
  • 各ビジネス プロセスに関係するデータの範囲を決定し、データ操作がビジネス設計と一貫していることを確認します。
  • 実際のコール パスと予想されるビジネス プロセスを比較し、予期しない結果につながる可能性のあるコール状況を特定して分析します。

15. その他

上記表現に反映されていない内容。

開発者にとって、これらのベスト プラクティスに従うことで、スマート コントラクトのセキュリティを効果的に向上させ、潜在的なセキュリティ リスクを軽減できます。このベストプラクティスが、より多くの開発者が安全で信頼できるスマートコントラクトを作成し、ブロックチェーンテクノロジーの健全な発展を促進するのに役立つことが期待されています。

参照:

[1] https://intro.sui-book.com/

[2] https://docs.sui.io/

[3] https://move-dao.github.io/move-book-zh/introduction.html

著者 | 勝利!

編集者リサ

コメント

全てのコメント

Recommended for you

  • スリナム大統領候補マヤ・パルボー氏:大統領に選出されればビットコインが法定通貨に指定される

    南米スリナムの国大統領候補であるマヤ・パルボー氏は、エルサルバドルよりも仮想通貨に深く根ざしたビットコイン国家を創設するという野心的なビジョンを持っている。ビットコインとNOSTRベースのサービス会社であるダイダロス・ラボのCEOでもあるパルボー氏は、来るべき2025年の選挙で勝利することを条件に、汚職と闘い、ビットコイン標準を採用することで国民に実質的な利益を提供するという大胆な計画を打ち出した。 彼女の最優先事項は、就任後にビットコイン(BTC)を法定通貨として確立することだ。彼女は1年以内にスリナムドルをビットコインの最小単位であるサトシに徐々に置き換え、すべての給与がBTCで支払われるようにする予定だ。

  • OpenTrade、AlbionVC主導による400万ドルのシード拡大ラウンドの完了を発表

    OpenTradeは、RWA支援融資とステーブルコイン利回り商品を構築するための400万ドルのシード拡大ラウンドの終了を発表した。この資金調達ラウンドはAlbionVCが主導し、a16z CryptoとCMCC Globalが参加した。 OpenTrade は、この資金を事業の拡大と製品機能の強化に使用する予定です。

  • VanEck、HODL 手数料ゼロを 2026 年 1 月まで延長

    VanEckは、VanEckビットコインETF(HODL)の手数料ゼロ期間を2026年1月まで延長すると発表した。

  • DEXX 創設者: ハッカーが 48 時間以内に率先して連絡を取った場合、彼はまだ通信する意思がありますが、そうでない場合は最後まで追求します。

    11月25日のニュースによると、DEXXの創設者ロイ氏はソーシャルメディアに、DEXXは現在に至るまでチームのメンバーを一人も解雇しておらず、日々の運営に超高コストを維持していると投稿したと信じている人々はすでにこのニュースを広めている。 、チームのコスト、さまざまなノード サービス プロバイダーのコスト、および資本コストの構成は実際に膨大であり、今週、ハッカーの資金を回収するために巨額の資本コストを支払いました。私たちは最後まで責任を持って言動に一貫性を持たせ、これからもDEXXを成仏させていきたいと思っています。 1. 私たちは法執行機関や複数のセキュリティ会社と協力してハッカーを捜査し、標的にしており、盗まれた資金を取り戻すことを決意しています。 2. 私たちは、苦楽を共にし、最も困難な時期にも DEXX を離れることなく協力してくれたパートナーに非常に感謝しています。現在に至るまで、このプラットフォームは依然として取引と利益を生み出しています。過去 1 週間で約 200 万ドル近い取引高が発生し、20,000 ドル近い利益が得られました。 3. チームはすでに多くのセキュリティ専門家と協力して、ユーザーのその後の資産のセキュリティを確保するための資産セキュリティ ソリューションの再構築とアップグレードに取り組んでいます。 4. チームは現在、被害を受けたユーザーに対する補償計画を策定中です。すべての住所と送金された資金を慎重に確認します。 ハッカーが 48 時間以内に積極的に私たちに連絡してきた場合、私たちは解決策を講じる姿勢でコミュニケーションを取るつもりですが、そうでない場合は最後まで問題を追求します。

  • モルガン・スタンレー:米ドルは年末までにピークに達し、2025年には「弱気相場パターン」に入るだろう

    モルガン・スタンレーは、ドル高は年末までにピークに達し、その後「弱気相場パターン」に入り、2025年には緩やかに下落すると予想している。同銀行は、日本銀行が金利を引き上げ、オーストラリア準備銀行の緩和措置が段階的であることを考慮すると、来年は日本円と豪ドルが最も上昇する可能性が最も高いと考えている。

  • Equation News はバイナンスを「ネズミ倉庫」と呼んでいます: あなたは取引市場のセンチメントを破壊しています

    11月25日のニュースによると、Equation Newsは、バイナンスの永久契約の上場に参加したインサイダートレーダーに対し、次回はゆっくりチップを売ってほしいとの記事を発表した。 あなたが引き起こしたこの WHY と CHEEMS の崩壊は、トレードに関わるすべての人にとって 100% マイナスであり、あなたはトレードの感情を破壊しています。 本日初めに、Binance は 1000WHYUSDT と 1000CHEEMSUSDT の無期限契約を開始すると発表しました。これがその後、WHY と CHEEMS の短期的な急落を引き起こし、コミュニティでの激しい議論を引き起こしました。

  • Fundstratのデジタル資産戦略責任者:現在のキムチプレミアムは約0%であり、BTCにはまだ上昇の余地があることを示している可能性がある

    ショーン氏、Fundstra デジタル資産戦略責任者ファレル氏は最新の顧客ノートで、「友人や家族」が再び仮想通貨について尋ね始めており、定量化可能な市場指標に基づくと、現在の状況は3月の上昇相場や2021年後半の景気循環のピークのようなバブルではないようだと述べた。現在の韓国市場のキムチプレミアム指標データは約0%であり、通常、市場がピークに達するとキムチプレミアムは10%以上に急騰し、韓国のトレーダーの間で過度の興奮がなくなっていることを示しています。過去 1 週間を単に性的繁栄とみなすべきではないが、ビットコインにはまだ上昇の余地があるかもしれない。

  • ソラナ・リアンチュアン氏はソラナは常にZKより速いと発言、Matter Labs CEOは反論

    Solana の共同創設者 toly 氏は Responded でネチズンへの返信で「ZK は常に Solana よりも優れています」と述べた。バリデーターではなく数学によって保護されるため高速です。つまり、(冗長性のため) 1 つまたは少数のバリデーターで十分であり、数千のノード間の合意を待つ必要がありません。」

  • マイク・フラッド米国下院議員:次期SEC議長と協力して反仮想通貨銀行政策SAB 121を撤回することを楽しみにしている

    米国下院のマイク・フラッド議員は最近、「広範な反対にもかかわらず、SAB 121は通常の行政手続法の手続きを経ていないにもかかわらず、法律として効果的に機能し続けている。フラッド議員と協力することを楽しみにしている」と述べた。ゲーリー・ゲンスラー委員長が自ら辞任するか、あるいはトランプ大統領が約束(ゲンスラー解任)を実行するかにかかわらず、新政権にはSAB 121の取り消しに向けて次期SEC委員長に協力する絶好の機会がある。ゲンスラー氏は退任する。」さらに、「今年初めに超党派で下院を通過したデジタル資産規制の枠組みに、民主党の指導者が上院が拒否したにもかかわらず、民主党議員71人が下院共和党に加わって反対したことは驚くべきことではない。それは受け入れられるが、これは仮想通貨にとって画期的な瞬間を表しており、来年1月に始まる次の議会の統一共和党政権の取り組みに影響を与える可能性がある。」

  • インドの億万長者アダニ氏、贈収賄事件での立場を説明するため米国証券取引委員会に呼び出される

    インドの億万長者ゴータム・アダニ氏とその甥のサーガル・アダニ氏は、太陽光発電契約を獲得するために2億5000万ドル以上の賄賂を支払った疑いで、米証券取引委員会(SEC)から召喚状を出され、説明を求められた。インド・プレス・トラスト(PTI)によると、インド西部の都市アーメダバードにあるアダニ一家の住居に召喚状が送達され、21日以内に返答するよう求められた。 PTIは、11月21日にニューヨーク東部地方裁判所を通じて出された通知文を引用し、アダニ一家が期限までに応答しなかった場合、彼らに対して不履行判決が下されると述べた。