9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

最近話題の偽サイトを効率良く収集して、Maltegoで見てみる

Last updated at Posted at 2020-05-18

はじめに

2020年5月、1000をも超える偽サイトが作成されているというニュースが流れました。

- 偽サイト1000超か 海外でも被害、謎深まる―売却目的の可能性も・専門家
- 被害サイト1000サイト以上! 規模の大きさも理由も謎だらけ…史上最大の「偽サイト」事件 三上洋氏に聞く

詳細についてはリンク先の記事を御覧いただきたいのですが、作成されている偽サイトには以下の共通点があります。

  • ホスティングサービスが CloudFlare
  • ドメインのオーナーが freenom.com

ここまで分かっているなら、偽サイトらしきサイトを大量に収集し、それが本当に偽サイトかというのを確認してみよう!というのがこの記事の趣旨です。
偽サイトの収集、データクレンジング、Maltego での可視化など、作業が細かくて長いですが、おつきあいください。

調査対象ドメイン収集編

Google 検索結果の1ページあたりの件数を増やす

Google検索の結果をデータソースとして使用するため、1ページあたりの検索結果を最大まで増やします。

検索の設定」を開きます。
「ページあたりの表示件数」のスライダーを100にします。
image.png

「保存」ボタンを押します。
image.png

Google 検索結果をcsv でダウンロードするブックマークレットを作成する

Chrome のブックマークを新規作成し、URLに以下を貼り付けます。名前は何でもいいです。

Javascript
javascript:(()=>{const b=d=>'"'+d.map(g=>g.replace(/"/g,'""')).join('","')+'"',c=new Blob([new Uint8Array([239,187,191]),[b(['href','decoded','title','breadcrumb','date','description'])].concat(Array.from(document.querySelectorAll('div.rc')).map(d=>{const g=d.querySelector.bind(d),h=g('div.r a').href,i=g('div.s span.f'),j=g('div.s span.st');let k=h;try{k=decodeURI(h)}catch(l){}return b([h,k,g('div.r h3').innerText,g('div.r cite').innerText,i?i.innerText.replace(' - ',''):'',j?i?j.innerText.replace(i.innerText,'').trimLeft():j.innerText:''])})).join('\n')],{type:/Chrome|Firefox/.test(navigator.userAgent)?'text/csv':'application/octet-stream'});if(navigator.msSaveOrOpenBlob)navigator.msSaveOrOpenBlob(c,document.title+'.csv');else{const d=URL.createObjectURL(c);location.href=d,setTimeout(()=>URL.revokeObjectURL(d),1e3)}})()

こういうことです。
image.png

偽サイトっぽいサイトを Google 検索

以下の文字列で検索します。
今回の事例では、ドメインが tk, ml, ga, cf, gq などのパターンが見られるため、それらのドメインに絞っています。かつ、企業ページでよくある「会社概要」のページがあるサイトを検索しています。

"会社概要" AND (site:tk OR site:ml OR site:ga OR site:cf OR site:gq)

CSVダウンロード

検索結果が表示されたら、先程保存したブックマークレットを実行します。
image.png

検索結果が CSV ファイルとしてダウンロードできます。検索結果が複数ページに渡って表示された場合は、それぞれのページで CSV ダウンロードを実行してください。ページごとに CSV ファイルが作成されるので、マージしてください。
image.png

スプレッドシートでドメインだけ切り出してコマンド生成

CSV には URL が記載されていますが、ドメイン以外は不要なので、ドメインだけ切り出します。
やり方は何でもいいのですが、私は Google スプレッドシートを使いました(正規表現が使えないのがバレるな)。
A列以外は削除し、B列に以下の関数を貼り付けると、ドメインだけ切り出せます(このあとの作業で必要なコマンドも連結させています)。

SpreadSheet関数
="domain=""" & SUBSTITUTE(MID(A2,FIND("/",A2,FIND("/",A2,1)+1)+1,SEARCH("/",A2,FIND("/",A2,FIND("/",A2,1)+1)+1)-(FIND("/",A2,FIND("/",A2,1)+1)+1)),"www.","") & """; lookup_result=`nslookup $domain`; result_check $lookup_result"

こういうことです
image.png

シェル編

シェルとして保存

B列の値を以下のシェルの下に貼り付けて保存します。

shell
#!/bin/bash
result_check(){
   if [ "`echo $lookup_result | grep 'NXDOMAIN'`" ]; then
     echo "IPアドレスが見つかりませんでした $domain"
   else
     echo "IPアドレスが見つかりました $domain"
     echo "$domain" >> domain_exist.txt
   fi
}

## この下にスプレッドシートのB列の価を貼り付ける
domain="fimomoti.tk"; lookup_result=`nslookup $domain`; result_check $lookup_result
domain="anverachuns.tk"; lookup_result=`nslookup $domain`; result_check $lookup_result
domain="simispsymteochor.ga"; lookup_result=`nslookup $domain`; result_check $lookup_result
domain="terweamamo.tk"; lookup_result=`nslookup $domain`; result_check $lookup_result
domain="pullheadsscapin.tk"; lookup_result=`nslookup $domain`; result_check $lookup_result
domain="nafullduncnar.tk"; lookup_result=`nslookup $domain`; result_check $lookup_result

こういうことです。
image.png

シェル実行

シェルを実行すると、各ドメインに対して nslookup を実行します。終わるまでしばらく待ちます。
image.png

実行結果は、シェルスクリプトのファイルと同じディレクトリに「domain_exist.txt」というファイルに保存されています。見つかったドメインをどれかひとつピックアップしてください。
今回は「aterrexergo.tk」というドメインを調査対象とします。

Maltego 編

IP アドレスのオーナーを調査する

Maltego の登録、設定方法はここでは省略します。すいません。
「DNS Name」をグラフエリアにドラッグします。
image.png

DNS のアイコンをダブルクリックし、aterrexergo.tk と入力します。
image.png

DNS のアイコンを右クリック →「Resolve to IP」の左にある「+」をクリック → 「To IP Address [DNS]」をクリックします。
image.png

ドメインに紐づく IP アドレスが出てきます。
image.png

IP アドレスを2つとも選択して右クリック → 「PATERVA CTAS CE」の左にある「+」をクリック → 「IP owner detail」の右側にある「>>」をクリックします。
image.png

この IP アドレスに紐づく様々な情報がアイコンとして表示されます。
image.png

Email の情報から、この IP アドレスのオーナーが CloudFlare であることが分かりました。
image.png

Domain を調査する

DNS のアイコンを右クリック → 「Change Type」→ 「Infrastructure」→「Domain」をクリック
image.png

アイコンが変化します。
image.png

「PATERVA CTAS CE」→「Domain owner detail」の右にある「>>」をクリック
image.png

Domain のオーナー情報が表示されます。
image.png

連絡先に「@freenom.com」の文字が見えます。今回の偽サイトが大量に作成される件については、ドメインのオーナーが「@freenom.com」であることが分かっています。
image.png

以上のことから、IP アドレスのオーナーが Cloudflare、ドメインのオーナーが freenom であることが判明したため、aterrexergo.tk は偽サイトと判断できます。

最後に

偽サイトのURLを収集したあと、いきなり Maltego で調査することも可能ですが、ドメインが TakeDown されていたり、Parked Domain である場合、IPが紐付かないため作業に無駄が生じます。そのため、シェルスクリプトで複数のドメインをまとめて死活確認し、データをクレンジングした、というのが今回の調査手順のミソです。

よろしければ、参考にしてください。

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?