kapieciiのブログ

日々学んだことを残しておくためのブログです。このブログはGoogle Analyticsを利用しています。

Herokuで罠サイトを作ってアクセスログを確認した

f:id:kapiecii:20190214000820p:plain

こちらの記事でやりたかったことの続きです。

kapiecii.hatenablog.com

これまで、Firebase Hosting, Netlifyで試してみましたが、どちらも公開しているWebアプリのアクセスログを確認することができませんでした。
ということで今回は、アクセスログを確認できるHerokuで罠用Webアプリを公開し、アクセスログを確認するところまで試してみました。

目次

やりたかったこと

先日、「iTunesカードの窃取」を狙ったメッセージを受信しました(最終的にはいたずらでしたが)。
アカウントを乗っ取られた可能性のある友人の助けになるため、罠サイトを作成して、アカウントを乗っ取った犯人に罠サイトを踏ませることで、犯人のアクセス元IPアドレスを取得することを考えました。
この方法は、以前参加したSECCONの問題で使われていたものです。SECCONの問題もまた、実際の事件を元にして作られているらしいです。

tomesuke.hatenablog.com

環境

Ubuntu 16.04

罠サイト公開までの手順

Herokuのアカウント作成

Herokuにアクセスし、アカウントを作成します。

クラウド・アプリケーション・プラットフォーム | Heroku

f:id:kapiecii:20190212002404p:plain

アカウント作成が完了したら、作成したアカウントでログインしておきます。

各種ツールのインストール

Heroku CLI

Heroku CLIは、コマンドラインからHerokuを操作するためのツールです。
Herokuの環境をgitで操作したり、ローカルに開発用Webサーバを起動したりすることができます。

The Heroku CLI | Heroku Dev Center

$ sudo snap install heroku --classic
sudo: snap: command not found

Ubuntuのバージョンを上げていなかったので、snapが入っていませんでした。
ということでsnapdをインストールするところから。

$ sudo apt-get install snapd
$ sudo snap install heroku --classic

無事インストールできたので、Heroku CLIでログインしておきます。

$ heroku login

pipenv

今回はHeroku上でflaskを使ってWebアプリを動かそうと思います。pipenvが入っていない場合はインストールしておきます。

$ pip install pipenv

pipenvの使い方などはこちら

kapiecii.hatenablog.com

pythonのバージョンを指定し、pipenvの仮想環境を作ります。

$  pipenv install --three

flask、gunicorn

pipenvの環境に、flaskとgunicornを追加します。
flaskは、pythonで使える軽量のWebアプリケーションフレームワークで、gunicornはWebサーバーです。

$  pipenv install flask
$  pipenv install gunicorn

必要なもののインストールが終わったので、罠コンテンツを作成します。

罠コンテンツ作成&ローカルで確認

今回はitunesカードが表示されているだけの、シンプルな静的ページを準備します。 コンテンツの装飾には、以前から1度使ってみようと思っていたBulmaを使いました。

bulma.io

構成は下記のようになっています。

$ tree .
.
├── Pipfile
├── Pipfile.lock
├── Procfile
├── static
│   ├── css
│   │   └── bulma.css
│   └── images
│       └── card.png
├── templates
│   └── index.html
└── trap-app.py

Herokuで必要となるProcfileは下記のようになっています。

$ cat Procfile 
web: gunicorn trap-app:app --log-file=-(trap-app) 

コンテンツが完成したら、ローカルでWebサーバを起動して確認してみます。
今回はpipenv環境にflaskを入れているので、pipenv環境のshellに入ってからHeroku CLIでローカルWebサーバを起動します。

$ pipenv shell
$ heroku local web
23:43:52 web.1   |  [2019-02-11 23:43:52 +0900] [8587] [INFO] Starting gunicorn 19.9.0
23:43:52 web.1   |  [2019-02-11 23:43:52 +0900] [8587] [INFO] Listening at: http://0.0.0.0:5000 (8587)
23:43:52 web.1   |  [2019-02-11 23:43:52 +0900] [8587] [INFO] Using worker: sync
23:43:52 web.1   |  [2019-02-11 23:43:52 +0900] [8590] [INFO] Booting worker with pid: 8590

ブラウザでアクセスしてみます。

f:id:kapiecii:20190212003128p:plain

Herokuにpush

gitリポジトリを作成します。

$ git init
$ git add .
$ git commit -m "init."

Heroku上にアプリを作成し、pushします。

$ heroku create {アプリ名}
$ git push heroku master

罠サイトにアクセスしてアクセスログを確認

ターミナルで下記のコマンドを実行します。

$ heroku logs --tail

Heroku上にdeployした環境にアクセスします。

f:id:kapiecii:20190212003335p:plain

アクセスログを見ると、「{IPアドレス}」の部分にアクセス元のIPアドレスが表示されていることが確認できました。
(IPアドレスやidは適当にマスクしてます。)

2019-02-11T15:00:26.415703+00:00 heroku[router]: at=info method=GET path="/" host=XXXXX.herokuapp.com request_id={id} fwd="{IPアドレス}" dyno=web.1 connect=1ms service=9ms status=200 bytes=772 protocol=https
2019-02-11T15:00:26.414844+00:00 app[web.1]: YYY.YYY.YYY.YYY - - [11/Feb/2019:15:00:26 +0000] "GET / HTTP/1.1" 200 611 "-" "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Mobile Safari/537.36"

後は、「$ heroku create {アプリ名}」の時にそれらしき名前をつけたり、bit.lyなどでURLを短縮すれば犯人にアクセスしてもらう可能性が上がるかもしれません。

その他

他の端末にHerokuで作ったアプリケーションをgit clone

$ heroku git:clone -a {アプリ名}

で、Heroku上のアプリをgit cloneしてくることができます。

感想

以前はVPSを契約していたのですが、作っていたWebアプリの公開をやめたので解約していました。今回Herokuを初めて使ったのですが、無料で簡単にWebアプリを公開できるのは、とてもありがたいですね。

ブログを書きながら「MediaDevices.getUserMedia()を使って、犯人の写真を保存できるようにしたら、もっと役に立つかも」と思ったので、またの機会に試してみようと思います。

kapieciiのブログについてお問い合わせがある場合、下記のフォームからご連絡をお願い致します。
お問い合わせはこちら