見出し画像

【NFT】 MetaMaskの資産が盗まれた時に行うべきこと、まとめ

はじめましてのヒトは、はじめまして。
いつもの皆様、こんにちわ。
大葉さんです。

前回のお話

MetaMaskから資産が盗まれる事件が頻発しているようです。ワタクシも、お知り合いの方が被害に遭い、対策と解析を行いました。ただ、いつもワタクシが時間が取れるとも限らず、常にリアルタイムで対応出来る保証もないので、ノウハウをここに書き記しておきます。皆様、自衛方法をぜひ身につけてください。


何故この記事を書いたのか?

MetaMaskの資産が盗まれた後に、何をすれば良いのかを共有したかったからです。この手法に合わせて対応すれば、ある程度はリカバリーできます。

間違い等あればどんどんご指摘ください、随時、修正していきます。

■資産が盗まれたと判明した際に、最初にやるべきこと

ETHアドレスを添えた上で、Twitterで「MetaMaskの資産、盗難されたかも、ヘルプ!」と叫んでください。すっごく有効です。

  • 本人が盗難に気がついた時間帯が、ツイートの発言時刻として残ります。これは後ほど調査を進める上での重要な情報となります。

  • 世界中に点在するブロックチェーン技術廃人が、興味本位で調査をしてくれます。盗難そのものが勘違いの場合、誰かがツッコミしてくれます。

  • 同一犯が複数の対象に攻撃を行った場合、盗難事件の被害は、ある時間帯にまとまって発生する傾向にあります。Twitterで呟くことによって、同じような被害を受けた人を見つけ易くなります。その人と自分自身の共通項を見つけることによって、攻撃元が判明するかもしれません。

■2番目に行うべきこと(新規ETHアドレス取得)

資産退避用の新規ETHアドレスを作成してください。
既存MetaMaskのAccount追加はNGです。
必ず新規ETHアドレスを取得してください。

何回かMetaMask盗難に関する解析を行いましたが、残念ながら、ほぼ100%の確率で、秘密鍵(パスフレーズ)を盗難されていました。一度でも攻撃を受けたETHアドレスは2度と使わないでください。

はい、もちろん秘密鍵が漏れていないケースもあります。ありますが、一度地面に落としてしまった食べ物を、再度、口に運ぶくらい危険な行為です。3秒ルール、5秒ルールは、お腹壊す確率高々です、もったいないけど捨てましょう。

安全第一!

■資産の退避作業(なるべく早く)

はい、ここからが資産の退避作業です。攻撃者は再びあなたのWalletを狙うかも知れないので、なるべく早く行いましょう。

1.怪しいコントラクトを全てrevoke

Revoke.cash等を利用して、自分のWalletに結びついているコントラクトを確認します。以下のようにETHアドレスが直接表示されているコントラクトがあれば、全てrevokeしてください。

revokeが表示される対象は「指定されたETHアドレスが保有するコントラクト(プログラミングによって自動的に実施される契約システム)にtoの前に記載されたアクセス権限を与えます」という意味です。上記の例では「0x2f91…」や「0x4feE…」に対してプログラミングによる全アクセス権(ETHやNFTの送付権限含む)を許可しています。「0x2f91…」や「0x4feE…」の保有者が悪意ある行動すると資産は盗まれます。(※サンプル画像のアドレスはワタクシ自身が保有者と利用用途を把握しているので、あえて残していますが、攻撃を受けた時は全て削除してください)

一方で、アクセス権がETHアドレスがOpenSea、Foundationのような有名なアドレスの場合はリスクが低いので、残していても良いです。リピールが必要なNFT、フリーmintタイプのNFTなど、OpenSea等からアクションを起こして何らかの動作(画像差し替え等)を行う必要があるNFTには最初から付与されているケースもあります。必要となったタイミングで再度アクセス権限を要求されるので、revokeしても良いです。お好みで。

revokeどうやればいいのかについては、こちらの記事を参考。

(2022年9月7日追記)このチェック方法も有効です。

2.「接続済みのサイト」を全て切断

MetaMaskのメニューから、接続済みのサイトの一覧を表示して、全て「切断」にしてください。

具体的なオペレーションはコインチェックがFAQにて公開してます。

3.NFTを新Walletへ退避

ここから資産の退避開始です。まずはgas代がかかるNFTからです。

新Walletに、救済したいNFTを順次送ってください。下準備さえしておけば、コントラクトも接続サーバも存在しないので、攻撃者に割り込まれることはないはずです。

この時、hiddenに送り付けられたスパム系のNFTは移動しないでください。自分で安全と判断できて、かつ、救済したいNFTから順に転送をお願いします。

【重要ポイント】
NFT転送の過程でgas代が足りなくなり、ETHを補充する必要があるかも知れません。この追加ETHがリアルタイムに盗まれることがあります。本動作が確認された場合は「秘密鍵(パスフレーズ)が100%漏れてます」相手と自分のどちらが先にNFTやETHを転送し終えるかのチキンレースになりますが、こればっかりはどうしようもないので、頑張って!!

4.残ETHを新Walletへ退避

gas代がかかるNFTの転送が終わったら、残っているETH資産を全て、新Walletに転送しましょう。

5.攻撃を受けたWalletのサインアウト

何故攻撃を受けたのかの調査は、主にブロックチェーンの記録をベースに進みます。今後、攻撃を受けたWalletに接続する必要はないので、攻撃を受けたWalletは全てサインアウトしましょう。

【ちょっとしたテクニック】
複数PCにMetaMaksを入れている場合は、ついうっかりサインアウト漏れ、があり得ます。力技ですが、Chrome拡張から一旦MetaMaskをアンインストールして、再インストール&新Walletのパスフレーズで復元、が確実です。また、モバイルWalletを指紋認証ログインにしている場合、Wallet切り替え、忘れがちなので気をつけてください。

攻撃を受けたWalletの秘密鍵(パスフレーズ)について、✌️🐷✌️様( https://twitter.com/PigThePersona/ )から、以下のご指摘がありました。いつもありがとうございます。

クリエイターや有名人の場合、旧アドレスでなりすましのリスクがあるので、旧アドレスのコントロールは残しましょう、例えばfoundationにログインしてプロフィールに「このアカウントはハックされた」と宣言できます

出典:✌️🐷✌️様コメント

6.【重要】OpenSeaのサポートに、Walletが攻撃を受けた旨を伝える

忘れがちですが重要です。旧Walletの凍結(OpenSea上から見えなくするだけですが)やコメント変更、コレクションの管理権限の移動などを行ってくれるので、必ず連絡を入れておきましょう。

ETHアドレスと、攻撃に気が付いた時間(※Twitterでヘルプって叫んだ時間を伝えれば良い)保有しているコレクション名、管理権限を引き継ぎたい新ETHアドレスを伝えれば良いのかなって思います。

あと、一案件だけ「OpenSeaサポートへの英文メールも書いてください(無償)」って依頼もありましたが、Google翻訳でいいので、それは自分でやろうね???

【補足】2022年8月11日、OpenSea方針変更

盗難を受けたら警察に届け出を出しておきましょうってことみたいですね。

7.【オプション】ENSに紐づいているETHアドレスの変更

ENSを利用している場合、紐づいているETHアドレスを退避用ETHアドレスに変更しておきましょう。以下の記事の「■入手したENSと自分のETHアドレスを紐付ける手続き」項目部分です。

設定修正を忘れている場合、ENS名宛に送付したETH/NFTが攻撃を受けたWallet宛に送られてしまいます。見落としがちなので、ご注意!!

ここまで、出来うる限り早く実施してください!

以後の原因追求には時間がかかります。まず、資産を安全なところに移してから、じっくり時間をかけて調べましょう。


ここからは解析フェーズ

■原因追求その1:関係者へのヒアリング

すっごく重要なフェーズです。ブロックチェーンで詳細解析する前に、必ず実施してください。私が遭遇した案件の2割がここで解決しています。

Q1.攻撃を受けた日から遡って10日間の間に以下の行動を取ったか?

  • 知らない人からのDM/メールに添付されたZIPを開いた。

  • 海外からの新規仕事(イラスト依頼等)が舞い込み、添付ZIPを開いた。

  • 共有PCでMetaMaskを操作した。

  • (困った事によくあるんですが)Windows7など、サポートが終わったOSが搭載されたクライアントPCに、Chromeとメタマスクを入れて操作している。ウィルスバスターが入っているから、きっと大丈夫!(※全然大丈夫じゃない)

  • 私は絵描きだけどパソコンよく分からないから、信頼できる人にメタマスクのパスワードを教えて、作業代行してもらっている。

【その他、こんなパターンも】

上記のいづれかを行なっていた場合、暗号鍵(パスフレーズ)が漏れている可能性が高いです。

Q2.攻撃を受けた日から遡って10日間の間に以下の行動を取ったか?

  • Twitterであまり話題になっていないNFTをフリーミントした。

  • OpenSeaやFNDに、メールのリンクからジャンプしてサインインした。

  • 給付金目当てに、DeFiのキャンペーンに応募した。

【例:フリーミントによる攻撃は、こんなパターン】

上記を行なっていた場合、知らず知らずのうちに、不正なコントラクトを契約してしまったかも知れません。

Q3.資産が盗難された当時、自分自身がMetaMaskを操作していたか?

  • YES:
    フィッシング詐欺の可能性、大。
    検索サイトから誤って偽物サイトにアクセスしていないか?
    送金を許可する偽コントラクトに「OK」とクリック承認しなかったか?

  • NO:
    もし本当なら暗号鍵(パスフレーズ)漏れている最悪の事態。資産が盗まれた時間を確実にメモ。

■原因追求その2:ブロックチェーンによる調査

【大切な前置き】
残念ながらブロックチェーンの調査だけで解決したことはないです。どちらかと言うと、ヒアリングで聞いた内容をブロックチェーンで確かめる、と言う感じです。一案件だけ「私の攻撃を受けたアドレスに関する全てのブロックチェーン取引の内容をチェックして欲しい(無償)」って依頼がありましたが、こちらの時間も有限なので、マジで辞めて頂きたいです。

Verify YourSelf

ではどうやって確認すれば良いのか、については、ここで解説します。
誰でも簡単に出来るよ!

1.基礎知識

偉大なるFAO様の記事をご一読ください。

重要な所をかいつまんで説明すると「トランザクション」「インターナルトランザクション」の二つの取引結果を合わせると、該当ETHアドレスの全取引になります。

2.解析に必要なブロックチェーン取引の一覧をCSVでダウンロード

Ethrescanには全ての通信結果が載っていますが、膨大な量になるので、一旦「トランザクション」「インターナルトランザクション」をCSV形式でローカルPCに落としてきましょう。

トランザクション

インターナルトランザクション

ここからは、Web上のEtherscanを確認しつつ、手元に落としてきたCSVデータに色を付けて、一つ一つチェックしていきます。

3.資産が盗難されたトランザクションを「トランザクション」「インターナルトランザクション」の中から見つける

資産が盗難された際の取引記録は「トランザクション」「インターナルトランザクション」のどこかに必ず記録されています。Twitterでヘルプを求めた時間帯前後から過去に遡って調べていってください。UTC表記なので「+9時間」すると日本時刻になります。

ほとんどのケースでは「トランザクション」に記録されています。もし「インターナルトランザクション」に盗難記録が残っていた場合は「revoke」したいづれかの怪しげアドレスによる犯行で確定です。

4.「インターナルトランザクション」の調査

こちらの方がボリューム少ないので、先にやってしまいます。赤マークで囲んだような「FROM項目で、ETHアドレスが名前変換されていない」取引を全てマークして、自分が意図した取引かどうかを突き合わせていってください。

「インターナルトランザクション」は、スマコンによる自動取引の結果一覧です。「FromがEtherScanにて名前変換されない」という事は、一般的に有名でないETHアドレスの持ち主がスマコンを通じて、あなたのWalletを操作した証拠になります。

アドレスの保有者が独コンを運営している駆け出しのプロジェクトだったりするケースもあるので(※私が残している契約は、このパターン)全て悪とは決めつけられないのですが、必ずチェックする項目です。

怪しげなコントラクトが見つかった、その時は???

5.「トランザクション」の「Method」にて、「Set Approval For ALL」調査

調査対象を「トランザクション」に移して、「Method」項目の「Set Approval For ALL」を全てマーキングしてください。

SetApprobalForALLの詳細はこちら。全NFTに対する移動権限許可です。

意図してセットしているのであればOKですが、意図していない時間帯に勝手に付与されているようなら、その前後で何らかの悪意あるオペレーションを仕込まれた可能性があります。

ただ、リピールや定期的にイラストが変更されるジェネラティブアートの一部、フリーミントのNFTを配布するサイト等で(ここまでの権限は正直、必要ないのですが)プログラミングの利便性優先で、なんとなく「SetApprobalForALL」を付けちゃっているケースも見受けられます。

なので、知っている人のプロジェクトだった場合は、無言でrevokeするのもありかも知れません。さじ加減むずかしいです、ほんと。

ワタクシの個人的な線引きとしては「OpenSea」「Foundation」に対する「SetApprobalForALL」は見逃しています。いったん全部切ってしまって、必要な時に再契約の方が安全かなとは思い始めてはいますが…(未だ結論なし)

6.「トランザクション」の「Method」を手がかりに、操作履歴をすべて追跡

主に「Method」をベースにトランザクションを区分けし、記憶にある取引かどうかを一つずつ確認していきます。気が遠くなるような操作になりますので、どこまでやるかは各自でご判断ください。

■もし怪しげな取引がブロックチェーン上で確認できなかった場合は?

残念ながら、何らかの理由により「秘密鍵(パスフレーズ)」が盗まれています。

  • ブロックチェーン上は不正が行われていない

  • 事実として資産が盗まれている

この二つが揃っている場合は、リアル生活のどこかでパスフレーズが漏れたとしか考えられません。ヒアリング結果と食い違っていたとしても、起きてしまった事実が全てです。

私が遭遇した案件の、なんと8割がこれです。

従って、原因追求を始める前に、新しいETH Walletに資産を退避させるオペレーションを、強く強くお勧めいたします。


間違い等あればどんどんご指摘ください、随時、修正していきます。


本日はここまでです。
ではでは!!


次のお話


この記事が気に入ったらサポートをしてみませんか?