サブドメインテイクオーバーに注意(CNAMEレコード等DNSエントリを確認・削除する)
サブドメインテイクオーバーは、WEBサイトの「サブドメイン」を乗っ取られる被害です。
過去にクラウドサービスを利用していたWEBサイトがドメインのCNAMEレコード設定を残したままにしている事が原因です。
現状サブドメインとつながったままの解約アカウントがハッカーにより調査・再作成できるようになっています。
常にドメインのDNSエントリを確認し、無効な外部リソースがあれば削除するべきです。
サブドメインテイクオーバーとは
サブドメインテイクオーバーとは、WEBサイトの「サブドメイン」部分のコントロールを攻撃者に奪われるセキュリティ攻撃です。
テイクオーバー(takeover)と言われる通り、サブドメインを乗っ取る行為ですね。
Amazonの「AWS」、Microsoftの「Azure」などの「クラウドサービス」を利用した経験のあるWEBサイトが、この攻撃を受ける可能性を持ちます。
この攻撃はクラウドサービスの解約後に起きやすい
既に上記クラウドサービスは解約してアカウントを削除しているにもかかわらず、サブドメインと解約アカウントがつながれたままになっている事が原因です。
解約したアカウントと同名アカウントを悪意ある第三者に作られてしまうと、サブドメインのコンテンツが第三者にコントロールできる状態になりますよね。
この仕組みを悪用する攻撃者のターゲットに
実は最初から悪用する目的で、この「サブドメインとつながったまま解約されたアカウント」を探している輩がいます。
被害を受けないためには、ドメインのDNSエントリに過去の紐づけが残っていないかをチェックする必要があります。
サブドメインテイクオーバーの流れ
サブドメインテイクオーバーが起きる流れを詳細に見ていきましょう。
クラウドサービスによる円滑なリソース活用
現在のWEBサービスは非常に充実していますので、CDNなどの問題も考慮し、要所要所をクラウドサービスで賄う形態が主流になっています。
一から構築をしなくても高性能なサービスを提供してもらえるし、解約も簡単ですからね。
自社のドメインに対してCNAMEレコードを設定し、サブドメインの区画で外部のクラウドサービスを使うケースはしばしばあります。
クラウドサービスプロバイダの利用にはアカウントが必須
今回は、blog.example.comサブドメインでGitHubのブログ機能リソースを利用した場合を例に取りましょう。
GitHubのブログ機能サービスを利用する場合は、当然アカウントを登録する必要があります。
例えばそのアカウント名を「hogehoge.github.io」としましょう。
このアカウントを通じて、ブログサービスの提供を受ける訳です。
サブドメインとGitHubを紐づける
この時、自社サイトの中ではexample.comのサブドメイン「blog.example.com」を設けます。
そしてドメインのCNAMEレコードを変更し、ブログサービスがあるGitHubサーバーを表示させるように紐づけします。
DNSエントリ内のCNAMEレコード記述
blog.example.com. IN CNAME hogehoge.github.io.
同様にクラウドサービス側でもアカウントを表示させるドメイン名を設定する欄があります。
GitHub内ドメイン設定
hogehoge.github.io = blog.example.com
という紐づけ設定をおこなう訳です。
GitHubドメイン設定画面
上記の赤枠欄がドメイン設定されている部分です。
サービスを利用しなくなったら解約
ではしばらく運営した後、このブログ機能「hogehoge.github.io」を使わなくなったとします。
Wordpressなどで自社サイト内にブログを導入する様方向転換した、という事もありえます。
であれば解約となりますので、当然hogehogeのGitHubブログを削除する事になりますね。
それにより「hogehoge.github.io」アカウントの存在自体は消える事になります。
アカウントは削除してもCNAMEレコードの設定は忘れる事が多い
ところが、GitHubのコンテンツおよびアカウントを消しただけでは不十分です。
クラウドサービス内…hogehoge.github.io = blog.example.com
DNSエントリ内…blog.example.com. IN CNAME hogehoge.github.io.
両者の紐づけ設定が残ったままになるのです。
上の欄のクラウドサービスは大抵の場合、アカウント解約時にこの紐づけ設定まで消す事ができません。
なので下の欄にあるドメイン側のDNS設定を確認して、CNAMEレコード設定を削除する必要があるのです。
クラウドサービスの解約に集中
クラウドサービスでのホスティングには費用がかかりますが、ドメインのDNSエントリ(紐づけ設定)は基本無料です。
なのでアカウントを削除する事を優先にしますが、DNSの紐づけ解除は忘れられがちなのです。
本来は、このCNAMEの設定削除まで任意でおこなわなければなりません。
攻撃者による解約アカウント調査
悪意ある第三者がサブドメインと紐づけされたままの解約アカウントを常に探しています。
これはたまたまではありません。最初から意図的にサブドメインを乗っ取るつもりでいるのです。
そして「hogehoge」を探し出し、同じ名前でGitHubアカウントを登録します。
一度利用された事のあるアカウントですが制限はありませんので、解約されていれば再度利用できます。
他社サイトのサブドメイン内を自由にできる
そうするとblog.example.comのエリア内に、第三者の構成したhogehoge.github.ioが表示される事になります。
example.comドメインのCNAMEレコード設定が「紐づいたまま」になっているためですね。
攻撃者によってはhogehoge.github.ioの中に悪意あるコードを埋め込んで、ユーザーがアクセスするのを待ちます。
たまたまblog.example.comを訪れたユーザーがマルウェア・ランサムウェア等の被害に遭ったり、次の攻撃の媒介になったりするという訳です。
これがサブドメインテイクオーバー攻撃の流れです。
サブドメインとは
例えば「llpeg.info」のWEBサイトがあった場合
・job.llpeg.info
・mail.llpeg.info
などドメインの前に別の名前(jobやmail)が付くのがサブドメインです。
本筋のサービスとは違うコンテンツを入れて複数のブランディングを構成したり、外部グループサイトのような扱いで展開する場合が多いですよね。
サブディレクトリを構成するのとは少し意味合いが違います。
サブドメインseoはこちら
サブドメインでは自社サイト内の別コンテンツ以外に、先述したようにクラウドサービスなどの外部コンテンツを見せる事もできます。
CNAMEレコードとは(DNSエントリ)
CNAMEレコードとは、DNSで定義されるそのドメインについての情報、いわゆる「DNSエントリ」の種類の一つです。
ドメイン名やホスト名の別名(エイリアスとも呼ばれる)を定義するものです。
サブドメインやホスト名(例えばA)と、定義された名前(例えばB)とは「同等のもの」と扱われます。
要はAとBそれぞれ別々の2つの場所(URL)を 一つに紐づける事ができると考えて下さい。 AとBどちらも同じデータが表示されるようになります。
CNAMEレコードの記述
例えば「www.example.jp」というホスト名に対して
mobile.example.com. IN CNAME www.example.com.
上記のように指定すると、「www」と「mobile」が同じホストを指し示します。
つまり、www.example.comとmobile.example.comは同じデータを表示させる事になります。
この時指し示す先は、自社の管理下ではない別ドメインのホスト名でも構いません。
right.aaa.jp. IN CNAME left.bbb.com.
この場合外部サイトであるleft.bbb.comのデータが、right.aaa.jpで表示される事になります。
このようにドメイン内のあるホスト名を「別ドメインへの転送アドレス」として設定する事もできます。
DNSエントリの画面例
お名前.comドメインCNAMEレコード変更画面
AレコードよりもCNAMEレコードが管理しやすい
この時、複数のホスト名をAレコードで同じIPアドレスに設定する事でも設定は実現できます。
しかし、AレコードでIPアドレスに一つを結びつけてその別名をCNAMEレコードで定義しておくのが普通です。
そうすればIPアドレスが変わった場合も一箇所を変更するだけで済むからです。
サブドメインテイクオーバーが起きやすい例
期限切れのドメインでの例
ドメイン所有者(truedomain.com)が、別のドメイン(falsedomain.com)も所有していたとします。
そしてCNAMEレコード(wwwのサブドメイン部分)で、もう一つ別のドメインを参照する設定にしていたとしましょう。
www.truedomain.com = falsedomain.com
ドメイン解約
ある時点でfalsedomain.comの有効期限が切れてしまい、誰もが再登録できるような状態になったとします。
さらにCNAMEレコードの情報はtruedomain.comのDNSゾーンから削除されず、忘れたままになっています。
上記CNAMEレコード設定が存在する限り、falsedomain.comドメインの新たな所有者がwww.truedomain.comのサブドメインをコントロールできる事になりますね。
サードパーティサービスの例
この様なサブドメインテイクオーバー攻撃は、サードパーティのサービスでアクセスされるWEBリソースが含まれている場合も発生しやすくなります。
例えば、GitHubでホストされているJavaScriptファイルをヘッダーで読み込んでいるWEBサイトってありますよね。
自作ではなく、完成済みファイルをGitHubを通して利用している状態です。
これも先述と同様に、Javascriptの開発者がGitHubアカウントを取得してその中でファイルを公開している訳です。
開発者ソースの消失
仮にこの開発者が解約をして、このGitHubユーザー名が削除された場合はどうなるでしょう。
悪意ある攻撃者であればその解約したアカウント名を調べ上げ、同じアカウント名でJavascriptを公開できるようにします。
そして悪意あるJavascriptコードに置き換えることができます。
リソースを利用しているだけのWEBサイト管理者はその事に気づくはずがないので、知らぬ間にWEBサイトが汚染されているという事になるのです。
ソーシャルメディアの例
サブドメインテイクオーバーはソーシャルメディアでも同様の事が起こりえます。
これはよく「リンク切れハイジャック」と呼ばれています。
リンク切れハイジャック
会社が展開するソーシャルメディアのアカウントがあり、それをCNAMEレコードで自社サイトのサブドメインに紐づけしている状態です。
その後このアカウントが削除された場合、それを指しているDNSエントリ(紐づけ)を削除しないと危険になります。
ハッカーはリンク切れを起こしているアカウントを総ざらいして探し出します。
そして同じアカウント名で再作成すれば、そのサブドメインに自分のコンテンツを投稿する事ができるようになりますよね。
どのような被害が起きるか
様々なハッカー攻撃が可能に
サブドメインのコンテンツは丸ごと相手側の自由な領域な訳です。
本家サイトと同じようなサイトデザインにして、ログインフォーム等を設けるかも知れません。
そこで入力した情報を盗んで「なりすまし」をしたり、パソコンをウイルス感染させる等様々な攻撃が考えられます。
クッキーを利用したセッションハイジャック
SSOでクッキーにIDとパスワードを記憶させておいて、サブドメインにも許可させてあれば情報が盗まれる可能性があります。
最悪の場合、document.cookieからセッションハイジャックも可能だと思います。
他にもXSS攻撃などを含む様々なハッカー攻撃が予想されます。
サブドメインテイクオーバーへの対策
DNSエントリの確認・削除
サブドメインの乗っ取りに対する最善の防御策は、未使用となっているCNAMEレコードなどのDNSエントリを削除する事です。
何と言ってもこれに尽きます。
理想なのは、運営者が各サブドメインが使用されている場所を定期的に監視・テストする事でしょう。
全てのWEBリソース状態を定期的にチェックし、WEBページから無効なWEBリソースが参照されないようにしましょう。
そうすればサブドメインのテイクオーバー攻撃に遭う事はありません。
DNSエントリの確認方法
通常DNSをテストするWindows標準ツールといえば「nslookup」コマンドですね。
しかし一般的には、より高機能な「dig」コマンドの利用が推奨されています。
「dig」コマンドを使えば、IPアドレスやドメインのDNSエントリ情報の詳細を確認する事ができます。
「dig」ツール
ただ、Windowsではこの「dig」を利用するにはインストールが必要になりますので、簡単にネット上でドメインの「dig」を実行できるツールをご紹介します。
下記サイトで対象ドメインを入力し「dig実行」を押すと、データを確認する事ができます。
リンク先: nslookup(dig)テスト【DNSサーバ接続確認】
ドメインのDNS情報の表示例
このように誰でもDNS情報は調べる事ができますので、注意が必要ですね。
クラウドサービス側の対応策
サブドメインテイクオーバーが起きやすいクラウドサービス
ポイントになるのは紐づけ設定がされたままとなる脆弱性を持つクラウドサービスの存在です。
様々なサービスが出回っていますが、このようなサブドメインテイクオーバーを起こしやすいサービス名が下記サイトに紹介されています。
リンク先:GitHub
今のところ有名どころも名を連ねている状態ですが、情報は常に更新されます。
将来的にはこういった解約アカウントのドメイン設定を解除する設定が導入されるのではないでしょうか。
バグ懸賞金サービスを展開
Microsoftの「Azure」など多くのクラウドサービスは、これまで説明したサブドメイン・解約アカウント・それ以外の「バグ」を見つけた人に報奨金を出すサービスを展開しています。
苦労して探し出したアカウントやバグをよろしくない事に使うより、情報提供してお金に変えませんか?という提案ですね。
実際にサブドメインやバグを探し出して報奨金をもらっている人がたくさんいるようです。
MicrsoftAzureのバグ懸賞金ページ
まとめ
クラウドサービスは使い勝手が良く、莫大な設備投資をせずとも高品質なリソースが活用できる点で大きなメリットです。
同時にサービスの切替・停止・乗り換えも簡単なため、それが頻繁におこなわれる事も事実ですね。
利用していた時のDNSエントリを削除せずに、解約したアカウントを別の人間に利用される事で、このサブドメインテイクオーバー攻撃の機会は発生します。
まずはドメインのDNS情報を定期的にチェックして、外部サービスを利用した痕跡は消すように心がけてましょう。
利用している外部サービスは永遠に続く訳ではないものとし、常に相手先の存在確認をする事が重要です。