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

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

[- 偽サイト1000超か　海外でも被害、謎深まる―売却目的の可能性も・専門家](https://www.jiji.com/jc/article?k=2020051600131&g=soc)
[- 被害サイト1000サイト以上！　規模の大きさも理由も謎だらけ…史上最大の「偽サイト」事件　三上洋氏に聞く](https://maidonanews.jp/article/13374200)

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

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

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

# 調査対象ドメイン収集編
## Google 検索結果の1ページあたりの件数を増やす

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

「[検索の設定](https://www.google.com/preferences)」を開きます。
「ページあたりの表示件数」のスライダーを100にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/2628e42f-0176-4c83-92bd-bc5143234bcc.png)

「保存」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/5b1f0d12-46ce-dd51-c485-2a5d47cc86ce.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/8eb1d421-e09f-c4d7-be96-9a37bc1616f5.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/59712da3-8251-1fe4-7a18-5e365c35aff6.png)

検索結果が CSV ファイルとしてダウンロードできます。検索結果が複数ページに渡って表示された場合は、それぞれのページで CSV ダウンロードを実行してください。ページごとに CSV ファイルが作成されるので、マージしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/3721ac37-f2f7-2df8-d456-690558962865.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/881dcbc9-388a-a4aa-4814-2af5cd212067.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/cfe0e48d-c094-16ed-3c98-aac012018b42.png)

## シェル実行

シェルを実行すると、各ドメインに対して nslookup を実行します。終わるまでしばらく待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/04d181e6-7acf-437f-9bc6-7575aec28434.png)

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

# Maltego 編

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

Maltego の登録、設定方法はここでは省略します。すいません。
「DNS Name」をグラフエリアにドラッグします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/8ce96f5c-a419-6a89-454a-b7b5b9b6b425.png)

DNS のアイコンをダブルクリックし、aterrexergo.tk と入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/cd35ad57-9b92-043a-ff46-fc8df66a1522.png)


DNS のアイコンを右クリック →「Resolve to IP」の左にある「+」をクリック → 「To IP Address [DNS]」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/a86194cc-507e-1e0f-850b-0e906ca5ebd7.png)


ドメインに紐づく IP アドレスが出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/11394094-382f-13a9-3f84-846cd3d08c5a.png)


IP アドレスを２つとも選択して右クリック → 「PATERVA CTAS CE」の左にある「+」をクリック → 「IP owner detail」の右側にある「>>」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/27164505-0e03-82b3-d33a-f9290afa621d.png)

この IP アドレスに紐づく様々な情報がアイコンとして表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/b7124a06-3283-7961-fb3d-22171ac9d102.png)

**Email の情報から、この IP アドレスのオーナーが CloudFlare であることが分かりました。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/b3024f03-e282-60d6-8d8b-a79e46a8a029.png)

## Domain を調査する

DNS のアイコンを右クリック → 「Change Type」→ 「Infrastructure」→「Domain」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/4a4a7c3d-8fa1-3f39-19ae-163e7853ac8e.png)

アイコンが変化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/5ff95636-290a-6b32-0755-5f3b818b4009.png)

「PATERVA CTAS CE」→「Domain owner detail」の右にある「>>」をクリック 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/388d4706-27ba-bd57-86ac-71fb06d40369.png)

Domain のオーナー情報が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/8d2ef756-7eaf-14d6-aebc-c6e37ef4a2e3.png)

連絡先に「@freenom.com」の文字が見えます。今回の偽サイトが大量に作成される件については、ドメインのオーナーが「@freenom.com」であることが分かっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/23eac5b9-36e4-99db-ce9c-6cbdee853805.png)

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


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

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