アドレスポイズニング:あなたが間違ったものをコピーしさえすればいい攻撃

·7 分で読める·SSP Editorial Team 著
SSP Academy カバー:アドレスポイズニングとよく似た暗号資産アドレス

アドレスポイズニング:あなたが間違ったものをコピーしさえすればいい攻撃

暗号資産ユーザーを狙う攻撃のほとんどは、あなたに何かしくじらせる必要があります。リンクを踏ませる、フォームにシードフレーズを打ち込ませる、読んでいないものを承認させる。アドレスポイズニングはそれより少なくて済みます。必要なのは、あなたが自分の取引履歴からアドレスをコピーすることだけです。

マルウェアもなく、フィッシングサイトもなく、だまし取るべき署名もありません。攻撃者の仕事はただ一つ、もっともらしく見える文字列を、あなたが後で手を伸ばす場所に置いておくことです。

どう成り立っているか

それを可能にしているものから始めましょう。誰もアドレスを読んでいません。ビットコインやイーサリアムのアドレスは、意味を持たない三十数文字の base58 か十六進数で、目視で判断できるチェックサムもなければ、頭に入れておく理由もありません。だからどのウォレットも、ブロックエクスプローラーも、取引所も、表示のために短縮します――0x8f3C…9A063――そしてすべての利用者は、見えている両端を確かめ、真ん中を飛ばすことを覚えます。

その習慣こそが、攻撃面のすべてです。

攻撃者は総当たりでアドレスを生成し、あなたが実際に使っているアドレス――たいていは最近送金した相手――と先頭と末尾の数文字が一致するものが出るまで回します。安上がりです。鍵ペアの生成は速く、たとえば先頭四文字と末尾四文字を合わせるのは、ありふれたハードウェアで数秒です。誰も何かを破ってはいません。ただ、見覚えのある数字が出るまでサイコロを振っているだけです。

次に、そのアドレスをあなたの履歴に入れます。よくある手口は次のとおりです。

ダスティング。 よく似たアドレスから、ごく少額――数サトシ、あるいは何かのトークンの一銭にも満たない端数――を送ってきます。これはごく普通の受取取引ですから、ほかのものと同じようにあなたの履歴に着地します。UTXO 系のチェーンでは、そのダストはあなたのウォレット内の使用可能なコインにもなり、これが後で効いてきます。

ゼロ額送金。 EVM 系のチェーンでは、ゼロ枚の ERC-20 transfer も有効な取引です。攻撃者は あなたのアドレスから自分の偽アドレスへ 0 枚を送り、一部のインターフェースはそれを、あなたが行った送金として描きます。あなたの履歴には、選んだ覚えのないアドレスへ送金したように見える記録が残ります。

偽イベント。 悪意あるトークンコントラクトは、起きてもいない Transfer イベントを発することができます。イベントログを信じるエクスプローラーやウォレットはそれを表示します。何も動いていません。その記録は単なる嘘です。

そして待ちます。数日、ときには数か月。攻撃が実を結ぶのは、次に同じ相手へ支払おうとして、履歴を「前回使ったアドレス」を探してさかのぼり、違う行をコピーしたときです。どちらも 0x8f3C…9A063 に見えます。あなたは両端を確かめます。両端は一致します。

なぜ通り一遍の助言では持ちこたえられないのか

「アドレスは必ず二度確認を」は定番の助言ですが、それだけでは失敗します。確認することこそ、この攻撃が織り込み済みの行動だからです。あなたは確認しました。ウォレットが示した六文字と、記憶の中の六文字を見比べ、それは同一でした――攻撃者が同一にしたからです。

検証が効くのは、比べる対象の偽造が高くつくときだけです。四文字や六文字の一致は数秒の値打ちしかありません。十六文字の一致は、盗みで得られるものより高くつきます。勝負はすべて、あなたの習慣がこの曲線のどちら端にあるかで決まります。

UTXO 系のチェーンには第二の罠があります。あのダスト送金は今やあなたのウォレット内のコインであり、ウォレットが入力を自動で集約するなら、後の取引に掃き込まれかねません――ダストを受けたアドレスと、あなたの残りのコインが結びつくのです。これは盗難というよりプライバシーの問題ですが、ダストは片づけるより放っておくほうがよい理由がここにあります。

実際に守ってくれるもの

取引履歴からアドレスを取ってこないこと。 これが唯一、意味のある変更です。あなたの履歴は起きたことの記録であって、信頼している相手の一覧ではありません――そして世界中の誰もがそこに書き込めます。アドレスは相手方から、なりすましなら気づけるような経路で受け取るか、自分で埋めたアドレス帳から取りましょう。

アドレス全体を比べるか、アドレス全体を要約したものを比べること。 四十二文字すべてを読むのは現実的ではありません。アイデンティコン――文字列全体から決定的に生成される小さな画像――を見比べるのは現実的です。真ん中のどこかが違う偽アドレスは、目に見えて違う絵になるからです。あなたの忍耐がやらない仕事を、目が肩代わりしてくれます。

保存した連絡先を使うこと。 一度検証した出所から一度保存したアドレスは、後から汚染されません。アドレス帳はそのためにあり、SSP が連絡先をサーバーではなく端末に持つのもそのためです。連絡先一覧は、ほかの誰にも編集できないときにだけ信頼に値します。

高額の送金や初めての相手にはテスト送金を。 少額を送り、受取を別経路で確認してから残りを送る。手数料のせいで面倒ですが、失いたくない支払いにとってはそれでも正しいやり方です。

ダストは無視すること。 使わない、「片づけ」ない。プライバシーを気にするなら自動集約にも注意してください。

SSP はこれにどう向き合っているか

アドレスポイズニングは安全性の問題であると同時に描画の問題でもあるので、答えの一部はアドレスの描かれ方に宿ります。

SSP はアドレスを、多くのインターフェースが使う三文字や四文字ではなく、先頭六文字と末尾六文字で短縮します――0x8f3C4b…9A0631。これは見た目の選択ではありません。一文字増えるごとに一致を作る総当たりのコストは跳ね上がり、十二文字が見えていれば、説得力のある偽アドレスは片手間の生成では到底届かない範囲に出ていきます。

真ん中は削られるのではなく、抑えられます。展開表示では、ウォレットは文字列全体を示し、両端を太字に、真ん中を淡い色にします。攻撃者があなたに飛ばしてほしい部分は、何を隠しているか分からない省略記号に置き換えられるのではなく、物理的に画面上に残り続けます。

同じコードが両方のアプリで動いています。SSP WalletsplitAddressForDisplaySSP Key のものを直接移植したもので、ブラウザでも電話でもアドレスが同じに見えるよう、意図的に同一に保たれています。これが効いてくるのは、SSP が二台の端末で取引を二度あなたに見せるからです――二度目の確認が本当の検査になるのは、両方の画面が同じものを同じやり方で描いているときだけ。短縮の仕方が二通りあれば、食い違いはその差の中に隠れられてしまいます。

SSP Key の承認画面では、受取先が完全なアドレスから生成されたアイデンティコンとともに、短縮テキストの隣に表示され、触れるとアドレス全体が選択可能なテキストとして開きます。文字列中央のすり替えを打ち破るのは、このアイデンティコンです。攻撃者は先頭と末尾を合わせられても、すべての文字から導かれた絵を合わせるには、はるかに難しい問題を解かねばなりません。

これらのどれも保証ではありません。汚染されたアドレスを貼り付け、両方の端末で承認すれば、SSP はそれに署名します――それが、あなたの判断を疑ってかかる保管者ではなく、あなたが制御するウォレットであるということです。2-of-2 マルチシグは他人があなたのコインを動かすのを止めますが、あなたが意図して間違った相手に払うのは止められません。あなたに行動させることで成り立つあらゆる攻撃と同じで、防御は署名の最中ではなく、署名より前に効いていなければならないのです。

短くまとめると

アドレスポイズニングが効くのは、あなたが四十二文字ではなく六文字を見比べていて、攻撃者はそれがどの六文字かを知っているからです。防御はより注意深くなることではありません。攻撃者が書き込める場所からアドレスを取ってこないこと、そして飛ばしてしまう部分をもう一度目の前に置いてくれる道具を使うこと。それが防御です。

この記事をシェアする

関連記事