こんにちは、Ginco CTOの森下です。
今回はZero Value Transfer Attackの傾向と対策についてです。
この記事は株式会社 Ginco のテックブログとして書いています。
概要
Zero Value Transfer Attack (ゼロ値移転攻撃) はAddress Poisoning Attack (アドレス汚染攻撃) の一つであり、フィッシング詐欺の手法です。この攻撃は約半年前から続いており、直近でも3300万ドル盗まれる事案が発生するほどの脅威を持った攻撃です。
我々の観測上、ここ数ヶ月でZero Value Transfer Attackが増えており、攻撃手法の特性上、暗号資産やWeb3のリテラシーが高い人ほど狙われやすく、オンチェーンで積極的に取引している人がターゲットになっています。
このZero Value Transfer Attackを理解し、ウォレットユーザーおよびウォレット開発者はこの攻撃の内容を理解して、リスクを回避する方法を知ってもらうことで新たな被害者を出さないようにしたいと思っています。
- 概要
- とりあえず知っておいてほしい重要なこと
- Zero Value Transfer Attackとは
- Zero Value Transfer Attackの仕組み
- なりすましアドレスの生成
- Zero Value Transfer Attackの派生
- 1. Small Value Transfer Attack
- 2. Fake Token Transfer Attack
- まとめ
とりあえず知っておいてほしい重要なこと
実際にZero Value Transfer Attackにあったとしても、その時点で資産が詐取されたり、秘密鍵が流出するわけでもありません。あなたのウォレットは安全です。詐取の回避方法はただ単に送金時に送金先のアドレスが正しいか十分に確認すれば良いのです。
Zero Value Transfer Attackとは
Zero Value Transfer Attack (ゼロ値移転攻撃) はAddress Poisoning Attack (アドレス汚染攻撃) の一つであり、フィッシング詐欺の手法です。
攻撃の内容としては悪意あるユーザーが、オンチェーン上で頻繁にやりとりしているアドレスをfromに指定して、ERC20のTransferを使ってゼロの値を送金します。トランザクションだけ見ると一見何の意味があるのかわからないのですが、このトランザクションはEtherscanやウォレットの取引履歴に現れることによって、ユーザーのアドレスになりすますことを目的としています。
多くのユーザーは過去に送ったことがあるアドレスに対して送金する際に、取引履歴から送金アドレスをコピペしたことがあるでしょう。ハッカーはこれを逆手にユーザーのアドレスになりすましたアドレスを取引履歴に残すことによって、ユーザーに意図しないアドレスをコピペさせようとしているのです。
具体的には以下のようにターゲットとなるユーザーのアドレスの最初と最後の4文字が同じアドレスを用意し、そのアドレスに対してユーザーのアドレスから0トークンをTransferします。そうすることでEtherscanのようにアドレスの中間を省略するようなUIを持つExplorerやウォレットを利用しているユーザーにとって自分のアドレスと悪意のあるアドレスの見分けが非常に付きづらい状況を作り出しているのです。
Zero Value Transfer Attackの仕組み
なぜこのようなことができるのかというと、多くのERC20トークンのtransferFromメソッドの実装では以下のようになっています。
ここで重要なのは、送金額がapproveされている金額より少ないかをチェックしているバリデーション部分になります。
transferFromのamountを0としてトランザクションを実行した場合、
require(currentAllowance ≥ amount, “ERC20: ~”)
で0 >= 0
が成立するため、トランザクションが成功してしまうのです。
本質的には残高が変わっていないためオンチェーン上は問題ないのですが、Transferイベントが発火するため、それを利用しているサービスは影響を受ける可能性があります。
Zero Value Transfer Attackはこの仕組みを利用した攻撃なのです。
なりすましアドレスの生成
攻撃に利用されるなりすましアドレスはいわゆるVanity Addressの生成器を利用して作られます。
Vanity Addressとは直訳するとうぬぼれたアドレスという意味になりますが、文字通り自身のハンドルネームのようなアドレスにしたり、人による可読性を上げ区別しやすくするために利用されることが多いです。
Solanaなどのチェーンではトークンアドレスの先頭がトークンのティッカーシンボルのVanity Addressにされていることが多くユーザーにとってわかりやすくなっています。
代表的なツールとしてはprofanityがあり、チェーンによっては標準CLIに組み込まれているものもあります。
Vanity Addressの生成器は過去脆弱性によりハックされているものもあります。利用に関してはよく調べて自己責任で行ってください。
Zero Value Transfer Attackの派生
この攻撃が激化したことにより、EtherscanではZero Value Transferのトランザクションは薄く表示し、目立たなくするUIに変更されました。
これにより騙されにくくなり、ユーザーも安心かと思いきやハッカーは別のアプローチでユーザーのアドレスへなりすますようになりました。
1. Small Value Transfer Attack
Small Value Transfer AttackはZero Valueが目立たなくなるような対策されてしまったので、だったら実際にお金を送り付けてやろうという作戦です。
この場合のなりすまし先はそのアドレスによく送金しているアドレスであり、複数のウォレット間で送金をやりとりしているユーザーがターゲットになります。
なぜか知らないアドレスから少額が送られてきた場合はこの攻撃をされている可能性があります。
(たまにdataへ広告やフィッシングサイトのURLが入っているSpamトランザクションの場合もあります)
2. Fake Token Transfer Attack
最近多くなってきているのがFake Token Transfer Attackです。Small Value Transfer Attackは攻撃コストを抑えるために少額であることにより、ユーザーは騙されにくくなっています。
そこでハッカーは有名なトークンと同名の偽トークンを発行し、それっぽい額をユーザーに対して送り付けます。
するとEtherscan上では、あたかもユーザーは普通に取引しているように見えてしまうため、なりすますことができるわけです。
現在は以下のように赤いアラートマークが付くようになっており見分けがつきやすいですが、対策されるまでは同じトークン名が表示されていたため、非常に騙されやすくなっていました。
まとめ
本記事ではZero Value Transfer Attackおよび直近でのZero Value Transfer Attackの派生した攻撃について説明しました。
一番伝えたいこととしては、ハッカーはユーザーの資産を狙って進化し続けています。
そのため、ユーザーは常に自分の資産を守るために意識とリテラシーをアップデートする必要があるということです。
しかしながら、ハッカーは防御のための情報に対して常に先行しており、ユーザーにとって絶妙なハッキングシチュエーションに出会ってしまった時には回避不可能だと思っています。
我々のような暗号資産に関わるアプリケーションの開発者はこのような攻撃が発生した場合には、ユーザーに対して迅速な注意喚起や適切なUI/UXを提供する必要があります。
一般的なセキュリティ対策のアプローチとは違い、いまもなお進化し続けているブロックチェーンだからこそ必要とされているのです。
株式会社 Ginco ではブロックチェーン業界の最前線でハッカーと戦いたい方を募集しています🔥