- 目次
①dAppsの権限(Permission)
dApps(分散型アプリケーション)を利用するために、「Metamask(メタマスク)」を初めとする暗号資産ウォレットを接続する必要があります。
分散型取引所UniSwapやNFT(非代替性トークン)マーケットプレイスOpenSeaなどを開くと、メタマスクなどのポップアップが表示され、何らかの「権限(Permission)」を要求された経験をした方は多いでしょう。
こうした権限の付与は、dAppにユーザーが保有するトークンへのアクセスを可能にするために必須なプロセスです。dApp上のアクションはトークンの入金・送信に関連しており、ウォレット使用の許可を得なければ何も実行しません。
一方で、悪意のあるコントラクトやdAppに不用意に権限を与えたばかりに、資産の不正流出につながるハッキング事例も多発しています。
この記事では、dAppsの利用時に必要になる「権限(Permission)」について解説。及び、メタマスクのセキュリティ対策についてご紹介します。1-1. ウォレットの接続(Connect)
dAppを使用する際、最初にウォレットと「接続(Connect)」することになります。これは、 DeFi(分散型金融)、ブロックチェーンゲーム、NFT(非代替性トークン)マーケットプレイスも同様です。
接続(Connect)の権限を得たdAppは、ユーザーアドレス(つまり保持している資産内容)を見ることができるようになります。しかし、まだトークンにアクセスして移動することはできません。
dAppsに接続する必要があるのは1回だけであり、過去に接続したサイトは「接続済みサイト(Connected Sites)」で一覧表示されます。接続したサイトの切断方法については、後ほどご紹介します。
1-2. コントラクトの「承認(Approve)」とは
DeFi、ブロックチェーンゲーム、NFT購入を含むdAppsを利用する場合、スマートコントラクトとやり取りするには、トークンへのアクセス権限を承認する必要があります。
「Approve(承認)」トランザクションはその一つで、UniswapやCompoundのようなDeFi(分散型金融)アプリケーションの利用時に、以下のようなポップアップを見た人は多いでしょう。
ユーザーは、トークンへのアクセスを「承認(Approve)」するトランザクションを発行した後、スワップや流動性提供などのトランザクションを発行できるようになります。
つまり、DEX(分散型取引所)で新たにトークンを交換したい時、最低2回のトランザクションを要すので、それだけガス代がかかることになります。(なお、イーサリアム:ETH自体の操作にこの承認は必要ありません。)
1-3. コントラクトの「署名(Sign)」とは?
すべてのトークンが、承認トランザクションを要求するわけではありません。このメカニズムは、 EIP-3009を実装するトークンには不要であり、その代表例がステーブルコイン「USCCoin(USDC)」です。
EIP-3009では、承認(Approval)トランザクションの代わりに、「許可(Pernmit)トランザクション」を使用します。これは、承認と送信を1つのトランザクションにまとめるので、承認のガスコストはかからず、トークンの送信時にのみガスを支払います。
「署名(Sign)」は、前述の承認トランザクションをウォレット内の「メッセージ」データ内の署名に置き換えることで、ユーザーエクスペリエンスを向上します。
承認と同様に、署名(Sign)はユーザーのウォレットからトークンをアンロックするために使用されており、トレードやデポジットに使用されています。
1-4. 承認(Aprove)のリスクと対策
トークンの承認(Aprove)は、詐欺の一般的な攻撃経路となっています。悪意のあるdAppsにトークンの無制限のアクセス許可を与えてしまうと、ユーザーの資産を自由に移動することが出来てしまいます。
これを防ぐ一つの方法は、MetaMaskで表示される承認画面の「Edit Permission」から、上限を調節することです。下図の場合、Uniswapは「stETH」への無制限のアクセスを要求しています。実績の少ないDEXを利用する際などには「Custom Spend Limit」フィールドを使ってこのアクセス権に制限を設けましょう。
このように、メタマスクではトークン数量のアクセス承認を管理できるので、dAppsに必要以上にアクセスを許可したり、新しいプラットフォームを試すために不要なリスクを負う必要はありません。
1-5. 署名(Sign)のリスクと対策
トランザクションを一つカットできる「署名」は便利ですが、資産が盗まれるリスクは承認と同様にあることを覚えておく必要があります。
承認トランザクションをウォレット内の「メッセージ」データへの署名に置き換えているとはいえ、怪しいdAppに無制限のアクセスを許可していれば不正流出のリスクに晒されます。
8月には「署名(Sign)」が原因となって、DeFiトレーダー「Joe (仮名)」のウォレットから約7,000万円(50万ドル)相当のUSDC(USDCoin:米ドル連動型ステーブルコイン)が流出する事例が報告されました。
You can see permit in action when you use 1inch dApp.
— korpi (@korpi87) August 19, 2022
If you want to sell USDC, you don't have to approve it first.
All you need is to sign a message.
This signature grants 1inch the permission to spend all your USDC. 1inch won't do it but a malicious contract could. pic.twitter.com/Dd7ggJFWtl
約7,000万円(50万ドル)相当のUSDCが奪われたJoe (仮名)の場合は、事件の10分前に悪意のあるコントラクトに署名(Sign)した事が、行動履歴から明らかになっています。
ユーザーの署名があれば、攻撃者はPermit関数を用いてターゲットのトークンを送信できてしまいます。これを悪用して、闇市場ではメタマスクを介して簡単なメッセージに署名するだけでウォレットから資産を盗む「NFT Drainerツール」なるものが販売されているそうです。
3/x
— IOE (@CT_IOE) June 8, 2022
In the signature request in the video, you can see a (very daunting) message given by Metamask, showing that this signature could result in account and asset takeover. pic.twitter.com/LaUyObto1S
時々、署名リクエスト画面で「この署名がアカウントと資産の乗っ取りをもたらす可能性がある」とMetamaskによる警告メッセージが表示されることもありますが、万全ではありません。そのため、ユーザーは承認と同様に、新しいdAppに必要以上にアクセスを許可することを避ける方が懸命です。
⑦コントラクト対話時のチェックリスト
dAppsからの「許可リクエスト」は、特定の数量に限定されたものから、完全に無制限のものまで様々です。無制限アクセス自体に問題がある訳ではありません。
大手DEXなどの信頼できるプラットフォームの多くが利便性を高めるためにこの機能を使用しています。問題は、トークンを盗む目的で無制限アクセスを要求するdAppsがあることです。
dAppsにトークンへのアクセス権限を許可する前に、以下のようなチェックリストでリスクを評価しましょう。
- そのプロジェクトの評判は?
- いつから稼働しているか?
- Discord、Telegram、Twitterに正当なコミュニティチャネルがあるか?
- 開発者/オーナーに透明性があり、公に連絡が取れる状態になっているか?
- 第三者によるスマートコントラクト監査を受けているか?
- ブロックエクスプローラーでコントラクトアドレスを確認する。
Hey guys I just wanted to list some of the NFTs I have collected and I get this message to approve from @MetaMask on @opensea 👀
— Kangoo📸 (@lilKangoo) August 19, 2022
Approved asset: All of your NFT
Granted to: 0x1e0049783f008a0085193e00003d00cd54003c71
I checked the address it looks shady. Can someone help out? pic.twitter.com/WEASfRxGQW
許可リクエストに表示された「Granted to」項目から、承認を求めているコントラクトアドレスをコピーし、ブロックエクスプローラーでその正当性を検証することができます。Etherscanなどのエクスプローラでは、ユーザー向けの報告窓口があり、不正なコントラクトに警告フラグを立てられます。
2-1. 接続(Connect)を切断する方法
メタマスクには、ウォレットがこれまでに「接続(Connect)」してきたサイトを一覧表示する機能があり、それらを切断することもできます。
接続を切断しても、そのdAppで行ったトークンの承認は取り消されません。つまり、dAppを切断しても、トークンにアクセスされて移動される可能性があります。承認の取り消しの詳細については以下の項目を参照してください。
2-2. 承認(Approve)を取り消し(Revoke)する方法
Etherscan、BscScan、Polygonscanなどのブロックエクスプローラーにある「承認チェッカー」で、これまでに承認(Approve)してきたdAppsを一覧表示し、それらを取り消し(Revoke)することもできます。
また、次のようなウェブサイトでも同様の作業が可能です。
- REVOKE(イーサリアム)
- Unrekt (複数のネットワーク)
- Approved.zone (イーサリアムメインネット)
- Cointool (複数のネットワーク)
トークンの承認はオンチェーントランザクションで行われるため、承認の取り消しもまたオンチェーンで実行され、ガスコストが発生する点に留意する必要があります。
2-3. 署名(Sign)のパラメータ調整方法
EIP-3009を初め、トークンによって署名(Sign)をサポートしているものとそうでないものがあります。この判別はブロックエクスプローラーの各トークンの「Contract」タブで確認できます。下図は1inchトークンの「Contract」タブであり、7番に「Permit」ファンクションが確認できます。
1inchの場合
署名(Sign)の採用例として、DEXアグリゲーター「1inch」の利用手順と、パラメータの調節方法をご紹介します。
以下の図は、取引したいトークンのペアを設定する場面で、Permit方式をサポートする「You Pay」トークンのアクセス許可を付与する場面です。1inchスマートコントラクトに初めて許可を与える場合、UI上に「permit and swap」オプションが表示されるので、これをクリックします。
署名後、1inchに「You Pay」トークンへのアクセス許可が30分間有効になります。ユーザーはこの時間内にスワップを実行できます。
この許可のパラメータを調整するには、スワップ画面の「設定アイコン」をクリックし、次に「Sign Permit」オプションをクリックします。
次の画面では、3つの許可証のオプションが表示されています。「Ask each time」を選択することで、スワップの度に1inchがアクセスできる数量を設定できます。不必要に多額アクセス許可を提出することなく、1inchを利用できるのです。
③代表的な詐欺の手口
「承認(Approve)」や「署名(Sign)」を踏まえて、詐欺のリスクを防ぐために一般ユーザーができる最も簡単な方法は、悪意のあるコントラクトに接続しないこと。そのためには、不正なサイトの利用を避けるための知識を備えることが重要です。代表的なフィッシング詐欺とDNS詐欺について、ご紹介します。
3-1. フィッシング詐欺
SNSのアカウントIDを偽装した投稿や、なりすましメール内のリンクでユーザーを偽のサイトに誘導し、コントラクトの署名を引き出すフィッシング詐欺の手口が報告されています。
例えば、有力な投資案件や高額給与のオファーをEメールで送付して関心を誘ったり、人気通貨のエアドロップに参加できるとしてリンクをクリックさせて、悪意のあるコントラクトが立ち上がるといった事例が該当します。
関連:ApeCoinエアドロップなど偽装、有名Twitterアカウントを乗っ取るフィッシング詐欺が発生い
フィッシング詐欺自体は個人情報を詐取する目的で、横行してきたサイバー犯罪の手口です。偽リンクから利用者を騙し、偽のホームページに誘導して、認証情報やクレジットカード番号、口座情報(ユーザID、パスワード等)を奪います。
NFT Marketplaces are being bombarded by phishing sites. Protect your wallet information and never enter your seed phrases!
— DomainGuard (@GuardYourDomain) November 24, 2021
Two more targeting @AxieInfinity
Fraud Domain: axieinfinity[.]site
Fraud Domain: axieinfinity[.]ecc[.]com[.]ng pic.twitter.com/Wtb6zwk5yN
ブロックチェーンユーザーがフィッシング詐欺を防ぐため、見知らぬサイトで不用意にコントラクトに署名しないこと、Eネールの送信元アドレス全体を確認すること、不審なメールが届いた際に別のSNSチャネルで公式が関連するアナウンスを行っているかどうか確認することなどが推奨されています。
3-2. DNS詐欺
dAppsのフロントエンドを操作して、ユーザーから資産を奪う盗難被害も増加しています。フロントエンド攻撃は、ウェブサイトがハッキングの対象となるものです。
代表例は、偽のDNSレスポンスをキャッシュさせることで、ユーザーのアクセスを攻撃者が用意したサーバーに誘導する、「DNSキャッシュポイズニング」という手法です。
🛡️✔️ 𝗖𝘆𝗯𝗲𝗿 𝗦𝗲𝗰𝘂𝗿𝗶𝘁𝘆 𝗡𝗲𝘄𝘀 ➡️ SAD DNS — New Flaws Re-Enable DNS Cache Poisoning Attacks https://t.co/1W0aEg9fcF #CyberSecurity #DataProtection pic.twitter.com/FF4hqwl0UY
— eSilo 🛡️ Data Backup (@eSiloDataBackup) November 13, 2020
22年8月には、ステーブルコインを含む同価値資産の取引サービスに特化する「Curve Finance」のフロントエンドサイト「Curve Fi」で、DNSハッキングにより7,500万円相当のETHが不正流出しました(その後バイナンスらが資金の大半を回収しています)。
犯人はドメイン名とIPアドレスを紐づけるDNS(ドメイン・ネーム・システム)を改ざんし、ユーザーを偽サイトへ誘導し、悪意のあるコントラクトを承認させました。
3-3. リカバリーフレーズを要求する事例
ディスコードなどのSNSなどでなりすましのIDを作成し、運営サイドの公式サポートを装って問題を解決するためにリカバリーフレーズや秘密鍵を引き渡すよう求める事例が発生しています。
⚠️🚨 Fake emails like this will attempt to capitalize on fear and urgency, with the goal of turning you into a victim.
— MetaMask 🦊🫰 (@MetaMask) March 12, 2022
Remember: MetaMask will NEVER ask you for your secret recovery phrase. pic.twitter.com/9owjbi2pd7
攻撃者にリカバリーフレーズや秘密鍵を渡してしまえば、ウォレット上の資産をねこそぎ奪われる可能性があります。リカバリーフレーズや秘密鍵は絶対に口外しないことは、Metamask使用上の最低限の基本知識です。
フィッシング詐欺もDNS詐欺も、基本的には攻撃のプロセスです。その時点で資産の流出に直結する訳ではありません。最終的には訪問先のウェブサイトで、リカバリーフレーズを提出したり、不審なコントラクトに接続しないよう気を付けることで資産保護につながります。
関連:「MetaMask(メタマスク)」とは|月間2000万人超が利用の仮想通貨ウォレット
ビットコイン投資の始め方はこちらをチェック
詳細を確認しよう
様々な仮想通貨を購入したい方は、取引所別の取り扱い銘柄を確認してみてください。
投資家向けCoinPostアプリに「ヒートマップ」機能を導入しました!
— CoinPost(仮想通貨メディア) (@coin_post) December 21, 2023
仮想通貨の重要ニュースはもちろん、ドル円などの為替情報やコインベースなど株式市場の暗号資産関連銘柄の値動きも一目瞭然です。
■iOS版、Android版のDLはこちら
https://t.co/9g8XugH5JJ pic.twitter.com/bpSk57VDrU