多くのスキャナーが渡すのは、深刻度順に並んだ指摘の一覧です。SaferICO はその指摘を、実際にそれらが使われる攻撃連鎖へ組み立て、主張する各段階に証拠を添えます。指摘は 1 行です。攻撃は複数の行の組み合わせです — 私たちが探しているのは後者です。
順序は体裁の都合ではありません。どの層も、前の層が生んだものを消費します。そして各層は、何を捉えられるかと同じだけ、何を捉えられないかによっても定義されます。死角がここに印刷されている理由は、レポートに印刷されている理由と同じです — 自らの射程を隠すツールは、校正のしようがないツールだからです。
201 個の検出ルールが Solidity のソースを走査します。戻り値の未確認、リエントランシーの形、ミントと引き上げの経路、owner の権力、プロキシとアップグレードの経路、そして買いと売りのシミュレーション — ハニーポットにはまる前に見分けるために。エンジンはご自身のマシンで動くので、未公開のコントラクトが読まれるためにアップロードされることはありません。死角:ある経路が、コントラクトが実際に出会う数値のもとで到達可能かどうか。この層は何も実行しませんし、その下のどの層も実行しません。
ソースは 1 つの主張であり、デプロイされたバイトコードが事実です。この層はディスパッチャを読んでコントラクトが本当に公開しているセレクタを得て、シグネチャのコーパスと照合して生の calldata に名前を付け、ライブラリのコードを差し引いて手書きの行だけを残し — 監査人が真っ先に読むべきはそこです — そしてアドレスの資金がどこから来たかを、答えを生んだ名簿の出典つきで報告します。死角:意図、そして誰も読み込んでいない名簿。この製品に制裁リストはコンパイルされていません。ラベルの名簿が読み込まれていないとき、レポートは「選別済み」と誤読されうるきれいな結果を返すのではなく、その旨をそのまま書きます。
各連鎖は 1 つの問い —「シェア 1 枚の価格を、実在の入金がシェア 0 枚しか買えないほど高くできるか」— と、前提条件の一覧、そして各条件が占める重みを伴います。連鎖が発行されるのは、必要な前提条件をスキャンが実際に証明したときだけで、そのそれぞれに証拠が添えられます。コードが連鎖を支えないなら、その連鎖は現れません。死角:オンチェーンのリアルタイムな状態 — 残高、流動性の深さ、秘密鍵を誰が持つか、owner がマルチシグかどうか。ここでの確信度は「証明された前提条件の割合」であって、「攻撃が成功する確率」では決してありません。
モデルの仕事が始まるのは、第 3 層がすでに連鎖を確立したあとだけです。その連鎖を読者自身の言葉で、守る側がふさげる程度まで説明します。シナリオの生成を求められることはなく、追加することもできません — 自信に満ちた反証不能な作り話の攻撃一覧は、たった 1 つの本物の指摘をその下に埋めてしまうからです。死角:意図。特権的な設計が手落ちなのか、誰かが意図して下した判断なのかは、教えられません。
各指摘を、深刻度、証拠、修正方法とともに。引き渡し済みレポートの公開アーカイブ。そして「チェーンから読んだ実況」と「誰かが報告してきたスコア」を厳密に分け、後者には日付を付けるバッジ。さらに、レポートに署名したあともそのアドレスを見張り続ける監視 — コントラクトは、合格した翌週に owner が変わることが十分ありうるからです。含まれないもの:「安全である」という断言。レポートが述べるのは、何を検査し、何が成り立ったかです — 安全を約束するレポートは、疑うべきレポートです。
どの連鎖も、検出ルールの出力からコードが組み立てたものであり、主張する前提条件のそれぞれに証拠が添えられます。AI はすでに存在する連鎖を説明するだけで、1 本を足す能力を一度も持ちません。規模、深さ、抑制は 3 つの別々の主張であり、ここではそれを分けて述べます。
ツール本体(スキャナー、各ダッシュボード、SAFI ワークスペース)のインターフェースは現時点では英語です。これらのページは、その中に入る前にすべてを日本語で説明するためにあります。
ATK-VAULT-INFLATION:受け入れられた 2 つの弱点と、空のプール。これが第 3 層が第 1 層の出力に対して行うことです — 下の 2 つの半分はそれぞれ単体では重大な問題ではなく、まさにそれが、深刻度順に並んだ指摘の一覧がこれを隠してしまう理由です。
Euler Finance は、同じやり方でこじ開けられる会計の仕組みによって 1 億 9,700 万ドルを失いました。
まず最初の預入者になり、シェアをちょうど 1 枚ミントします。次に大きな額をコントラクトへ直接送ると、裏づけとなる資産だけが増え、新しいシェアは生まれません。次の正直な入金は新しい 1 シェアの価格を下回るので、受け取れるシェアは切り捨てで 0 になります。その人の資金は移されたのではありません — 算術に吸い込まれ、あなたの 1 シェアを支えることになったのです。
シェア操作の検出ルールと切り捨ての検出ルールが発火し、しかもこのコントラクトは価値を直接受け取れます。指摘は 3 件、どれも重大ではなく、一覧の別々の場所に散らばって座っています。
関数の表に、MIN_、deadShares、initialMint と名の付くものは存在しません。
デプロイ済みのセレクタを読むことこそが、「存在しない」と「読めなかった」を分ける線です。あのデッドシェア防御は、読めなかったのではなく、欠けています。
必要な前提条件がすべて満たされ、連鎖が発行され、それぞれに証拠が添えられ、確信度がスキャンの証明した割合を正確に示します。
修正:デプロイ時にデッドシェアをミントするか、内部で別に記帳する。シェアの発行の丸め方向を預入者に有利へ変える。シェアが 0 になる入金を拒否する。
上の 4 段を、読者自身の言葉で、この経路をふさげる程度まで。
この工程が最後にあるのは、モデルが関わる唯一の環だからです — そしてそこへの入力は、前の 3 層がすでに証明したものです。
コントラクトアドレスを貼り付ければ、リスクを取る前にオーナー権限、流動性、売却シミュレーションの結果が分かります。1 回ごとに少額の手数料がかかり、金額は署名の前に表示されます — どのプランでも、加入後は無制限に含まれます。