永久先物DEXにおけるDrainer署名:仕組みと見分け方
Drainer攻撃は、DeFiエコシステムで大きな損失を生む攻撃手法の一つになっています。Chainalysisの最新研究でも、Drainer-as-a-Service(Drainerのサービス化)エコシステムが高度に産業化しており、攻撃者は既製のツールキットを購読するだけで、永久先物DEXユーザーを狙った巧妙な署名詐欺を実行できる状況が指摘されています。
Hyperliquid、dYdX、GMXなどでアクティブに取引しているユーザーにとって、Drainer署名がどのように機能するのかを理解することは、自分の資産を守るための第一歩です。
Drainer署名攻撃とは
Drainer署名攻撃の本質は、ソーシャルエンジニアリングやフィッシングによって、ユーザーに「一見無害に見えるが、実際には資産移転を許可する」署名リクエストへ署名させることです。
秘密鍵を直接盗む攻撃とは異なり、Drainer攻撃はEthereum系エコシステムに存在する正規の認可メカニズムを悪用します。
- ERC-20トークンのApprove機能(第三者アドレスに指定数量のトークン移転を許可する)
- EIP-2612 Permit署名(オンチェーンのApproveトランザクションなしで、オフチェーン署名により認可する)
- EIP-712構造化データ署名(各種の構造化された操作を承認するために使われる)
- EIP-4337アカウント抽象化に関連するバッチ操作の承認
これらの仕組みは、本来の利用においては合理的で必要なものです。しかしDrainer攻撃者は、その技術的な複雑さを利用し、悪意ある認可を通常のDApp操作に見せかけます。
永久先物DEXに特有のリスク
高頻度の操作がリスクの隙を生む
永久先物トレーダーは、ポジションの建て増し、証拠金調整、資金調達率関連の操作など、DEXコントラクトと頻繁にやり取りします。署名の回数が多いほど、ユーザーは署名リクエストを反射的に承認しやすくなり、不自然なリクエストへの警戒心が下がります。
大口USDCの承認が主な標的になる
Hyperliquidなどの永久先物DEXでは、ユーザーが大きな金額のUSDCをDEXコントラクトに承認する場面があります。Drainer攻撃者はフィッシングページ上で似たような承認リクエストを偽装し、承認先アドレスを攻撃者が管理するアドレスに差し替えます。
ユーザーが「USDCの承認」という表示だけを見て、対象コントラクトアドレスを確認せずに承認してしまうと、大きな資金を攻撃者に移転可能な状態にしてしまう可能性があります。
Permit署名の危険性
EIP-2612 Permitは、オンチェーンのApproveトランザクションではなく、オフチェーン署名によってトークンの承認を行える仕組みです。つまり、次のような特徴があります。
- 署名時点ではオンチェーントランザクションが発生せず、Gasも不要で、ウォレット上に分かりやすい「承認履歴」が残りません
- 攻撃者は署名を入手した後、自分でオンチェーンにトランザクションを送信し、トークンをユーザーのウォレットから移転できます
- ユーザーの視点では、資産が移動するまで、有効な承認署名を渡してしまったことに気づけない場合があります
Permit署名は見た目が通常のDAppログイン署名、たとえばSign-In With Ethereumに似ていることがあり、一般ユーザーにとって最も見抜きにくいDrainer手法の一つです。
Drainer署名の技術的な構造
典型的なEIP-712形式のDrainer署名リクエストには、以下のようなフィールドが含まれます。
タイプ:EIP-712 構造化データ署名
Domain:
name: [偽装されたプロトコル名]
version: 1
chainId: 1(または 42161 など対象チェーン)
verifyingContract: [Drainerコントラクトアドレス。DEXコントラクトに見せかける]
Message:
owner: [被害者のアドレス]
spender: [Drainer攻撃用コントラクトアドレス]
value: [ユーザー残高の全額または大部分]
deadline: [将来のタイムスタンプ]
nonce: [自動取得された現在のnonce]
ウォレットがこれらのフィールドを人間に読みやすい形式で表示していれば、verifyingContractやspenderが正規プロトコルのコントラクトアドレスと一致していないことに気づけます。一方、ウォレットが生の16進数データだけを表示する場合、一般ユーザーが違いを見抜くのはほぼ不可能です。
Drainer署名を見分けるための実践チェックリスト
署名する前に、少なくとも次の点を確認してください。
verifyingContractアドレス:利用しているDEXの公式コントラクトアドレスと完全に一致しているか。1文字単位で確認しますspenderアドレス:Permit形式の署名では、spenderが自分で把握し信頼しているコントラクトかを確認しますvalueフィールド:今回の操作に必要な金額を超えていないか。特に全残高に近い金額には注意が必要ですdeadlineフィールド:有効期限が妥当か。通常の操作では数分程度であることが多く、何年も先の期限は不自然です- 操作の発生元:自分が公式サイト上で能動的に開始した署名か、それとも突然ポップアップした署名かを確認します
OneKeyのDrainer対策
OneKeyウォレットには、Drainer攻撃への対策として役立つ機能があります。
- EIP-712署名内容の可視化:構造化署名データを自動解析し、
owner、spender、valueなどの重要項目を、生の16進数ではなく読みやすい形式で表示します - コントラクトアドレスのリスク表示:既知の悪意あるコントラクトアドレスに対して警告を表示します
- トランザクションシミュレーション:オンチェーンのApprove操作について、署名前に実行結果をシミュレーションし、「どのアドレスに、どれだけのUSDCを承認するか」を確認しやすくします
- 大口承認の警告:承認金額が保有額に対して大きい場合、追加の警告を表示します
- オープンソースによる検証:OneKeyのGitHubリポジトリにより、セキュリティ研究者が保護ロジックの実装を独立して確認できます
Drainer対策において、ハードウェアウォレットも重要な役割を果たします。攻撃者は、デバイス画面での物理的な確認なしに署名を自動化することはできません。また、ハードウェアウォレットの画面に表示される内容は、PCやブラウザ側のマルウェアによって改ざんされにくいという利点があります。
さらに、Revoke.cashを定期的に使い、各DEXに残っている過去の承認を確認し、不要な承認を取り消すことで、Drainer攻撃に悪用される余地を減らせます。
既知の高リスクなDrainer攻撃経路
Drainer攻撃は、主に「正規サービスに見える入口」から始まります。特に、検索広告やSNS投稿、Discord・TelegramのDM、偽のエアドロップページ、偽サポートサイト、クローンされたDEXフロントエンドには注意が必要です。
永久先物DEXを利用する場合は、ブックマーク済みの公式URLからアクセスし、ウォレット接続や署名を求められたときに、表示されているドメイン、コントラクトアドレス、承認内容を必ず確認してください。
よくある質問
Q1:Permit署名と通常の承認(Approve)は何が違いますか?
Approveはオンチェーントランザクションであり、Gasが必要です。実行後はオンチェーンで承認履歴を確認できます。Permitはオフチェーン署名であり、Gasを消費せず、署名後に相手がオンチェーン操作を送信します。そのため、自分のウォレット履歴に「自分が送信した」記録が残らず、発見や取り消しが遅れやすくなります。どちらも資産安全性に対するリスクは重大です。
Q2:不審な署名をしてしまった場合、どうすればよいですか?
Approveタイプであれば、すぐにRevoke.cashなどで承認を取り消してください。Permitタイプの場合、すでにオフチェーンで有効な署名を渡しているため、取り消しだけでは間に合わない可能性があります。関連するトークンを速やかに新しいアドレスへ移すことを検討してください。対応速度が非常に重要で、猶予は数分しかない場合があります。
Q3:OneKeyハードウェアウォレットを使えば、Drainer攻撃は成功しませんか?
ハードウェアウォレットはDrainer攻撃の難度を大きく上げます。各署名にはデバイス画面上での確認が必要で、表示内容はPC側のマルウェアに改ざんされにくいためです。ただし、ユーザーが内容を理解しないままデバイス上で承認すれば、攻撃が成功する可能性は残ります。最終的な防御力は、表示内容を確認し理解するユーザーの行動に左右されます。
Q4:Drainer-as-a-Serviceとは何ですか?
Drainer攻撃ツールキットを商用サービスとして提供するモデルです。攻撃者は自分でコードを書かなくても、ツールを購読し、盗取額に応じた分配を行う形で、特定のプラットフォームを狙ったDrainer攻撃を展開できます。このモデルにより攻撃者の技術的ハードルが下がり、近年Drainer攻撃の頻度が増えています。詳細はChainalysisの研究レポートも参考になります。
Q5:永久先物DEXのプラットフォーム側はDrainer攻撃を防いでくれますか?
正規の永久先物DEXは、公式フロントエンド上で既知の悪意あるアドレスをフィルタリングする場合があります。しかし攻撃者は、多くの場合、自分で用意したフィッシングページ上で操作を行わせるため、プラットフォーム側のフロントエンド保護を回避します。OneKeyの署名解析のようなウォレット層の保護は、アクセス経路にかかわらず機能する重要な防御レイヤーです。
まとめ:すべての署名を読めることが、本当の安全につながります
Drainer攻撃が成功する根本的な理由は、ユーザーが内容を理解しないまま署名リクエストを承認してしまうことです。技術的なツールは署名内容を読みやすくする助けになりますが、最終的な防御は、ユーザー自身が一つひとつの署名を確認する姿勢にあります。
OneKeyウォレットをダウンロードし、署名解析やトランザクションシミュレーション機能を活用して、署名内容を確認する習慣を身につけてください。永久先物DEXを利用する場合は、OneKey Perpsを使い、より高いセキュリティ意識を持って取引することをおすすめします。
リスクに関する注意:本記事は教育目的の情報提供であり、投資助言、法律・税務助言、またはセキュリティ保証ではありません。Drainer攻撃の手法は継続的に変化しており、本記事で紹介した対策が完全な保護を保証するものではありません。オンチェーン資産は盗難後に取り戻せない場合が多いため、十分にリスクを理解したうえで慎重に操作してください。暗号資産取引には高い市場リスクがあり、レバレッジ取引では元本を超える損失が発生する可能性があります。



