見出し画像

「ENSの期限切れドメイン名が名前解決できてしまう問題」を調査しました。

今回は、「ENSの期限切れドメイン名が名前解決できてしまう問題」について検証した結果を報告します。

この問題は、ENS の現状をまとめた論文で報告されているセキュリィ問題の 1 つです。

問題の詳細

ENS では、ENS 名が期限切れになったとき、その名前とそのサブドメイン名のレコードは保持され、一部の ENS サポートウォレットはそれらをブロックチェーンアドレスや他のレコードに名前解決できることが分かっています。

ユーザがこれらの期限切れの ENS 名をまだ使用している場合、詐欺に遭う可能性があります。想定される攻撃の一例を上図に示します。レコードを持っている期限切れの名前を攻撃者が再登録し、名前のレコードをあらかじめ自分のアドレスに変更しておくと、この変更に気づかず受取人アドレスを確認しない人が、最終的に攻撃者に送金してしまいます。

検証

この問題について、ENS 公式アプリと Python ライブラリの Web3.py を使用して検証しました。ライブラリについては以下の記事で紹介しています。

記事リンク

ENS公式アプリによる検証

まずは、ENS の公式?アプリから期限切れになっている名前(ammazon.eth)を検索してみます。

登録者やコントーラにアドレスは設定されていないように見えますが、登録日やリゾルバが設定されいるため、この名前は期限切れとなっていると確認できます。個人的には期限切れになっているのかわかりにくい・・・と感じました。

ちなみに、まだ誰にも登録されたことのない名前(例:fikastudio.eth)を検索すると以下のようになります。

どうやら未登録の場合、登録者は 0x0 と表示されるようです。

Web3.py による検証

次にライブラリから API を通してどのような結果が返ってくるのか検証します。Web3.py ライブラリの追加方法については以下の記事を参照してください。

ENS 公式アプリと同様にまず、期限切れの名前を検索してみます。HTTPProvider には、上記の記事で出てきたプロジェクトのエンドポイントを指定しています。

>>> from ens import ENS
>>> from web3 import Web3
>>> w3 = Web3(Web3.HTTPProvider('<infura で作成したプロジェクトのエンドポイント>'))
>>> w3.isConnected()
True
>>> ns = ENS.fromWeb3(w3)
>>> eth_address = ns.address("ammazon.eth")
>>> eth_address
'0xb9530E5e063b0Efc295638dfBD4C966dA0E3F9b5'

期限切れになっている名前を検索すると、前回登録していたであろうイーサリアムアドレスが解決されます。これは、公式アプリとは異なる結果です。

一方で、まだ誰にも登録されていない名前を検索すると以下のように何も返ってきません。

>>> eth_address = ns.address("fikastudio.eth")
>>> eth_address

DNS の期限切れ

DNS のドメイン名も ENS 名と同様に年間契約で更新され、翌年度更新されない場合に期限切れになり、そのドメイン名は使えなくなります。ドメイン名の期限が切れる前に、レジストラは何度かドメイン名の所有者に通知を送る決まりになっています。

また、削除済ドメイン名が他人に再登録される前に、元の登録者が請戻しできる期間(30日間)、「請戻猶予期間(Redemption Grace Period:RGP)」があります。その後に削除保留期間があり、それが経過してしまうと、 他者による再登録が可能な状態となります。

期限切れになったドメイン名を悪意のある第三者が再登録すると、閲覧者が偽のサイトに誘導されフィッシングを行われたり,メールを覗き見られたりする恐れがあります

参考文献

まとめ

ENS には期限切れドメイン名に対するフォローが DNS ほどはないと思います(探しましたが、見つかりませんでした)。そもそも ENS のレジストラはただのスマートコントラクトであるため、ドメイン名が期限切れに近づいた際の注意喚起を行いたければ、スマートコントラクトを修正する必要があります。

このような現状で ENS が流通してしまうと、ドメイン名の期限切れによる影響が多く出てしまうでしょう。ENS の利用者としてこのような被害に遭わないよう気を付けることは、送金先アドレスをしっかり確認することです。

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