このブログは、数年前にN高等学校を卒業し株式会社Armorisにやってきたアルバイト Kaepi が書いています。
あるもりすぶろぐの内容は個人の意見です。
概要
今回はフィッシングサイトの情報について、twitterで投稿をしている2つのアカウントからデータを取得し、IPや地域情報などの様々な要素の傾向を調べるために、elasticsearch+kibanaでデータの分析と可視化をしてみました。
また、今回は記事を3回に分けて投稿します。
1. フィッシングサイトの調査をしてみた - データ収集とパース編
2. フィッシングサイトの調査をしてみた - elasticsearch+kibanaを使ってデータの可視化(この記事)
3. フィッシングサイトの調査をしてみた - 可視化したデータの分析
この記事は2回目になります。
・前回の内容まとめ
前回はtwitterからツイートを収集して、データの追加とパース・elasticsearchに投入するところまでをnode.jsを使って自動化しました。
情報元にさせていただいたアカウント
@secbird1
@pingineer_jp
目次
- elasticsearch+kibanaのインストール
- elasticsearchの基本操作
- kibanaのdashboardを使ったデータの可視化
- まとめ
elasticsearch+kibanaのインストール
elasticsearchのインストール
$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - $ echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list $ sudo apt-get update && sudo apt-get install elasticsearch $ sudo systemctl start elasticsearch
動作確認
$ curl http://localhost:9200 { "name" : "test", "cluster_name" : "elasticsearch", "cluster_uuid" : "███████████████", "version" : { "number" : "7.15.1", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "83c34f456ae29d60e94d886e455e6a3409bba9ed", "build_date" : "2021-10-07T21:56:19.031608185Z", "build_snapshot" : false, "lucene_version" : "8.9.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
kibanaのインストール
$ sudo apt-get install kibana $ sudo vim /etc/kibana/kibana.yml # The default is 'localhost', which usually means remote machines will not be able to connect. # To allow connections from remote users, set this parameter to a non-loopback address. server.host: 0.0.0.0 $ sudo systemctl start kibana
http://ubuntuのip:5601
でkibanaの画面を開くことができれば構築は完了です。
elasticsearchの基本操作
Indexの作成
elasticsearchの操作はcurlなどで行うこともできますが、kibanaのDev Toolsでも同じことができます。
PUT /indexの名前?pretty
上記の内容をelasticsearchに送ることでindexが作成されます。
mappingについて
mappingとは、Indexに入るデータの構造を設定することを指します。
基本的には、名前とデータ型がセットになっていてjsonに似ています。
こちらは今回の調査で作成したindexです。
PUT /secbird1/_mapping { "properties" : { "country" : { "type" : "keyword" }, "created_at" : { "type" : "date" }, "ip" : { "type" : "keyword" }, "whois": { "type" : "text" }, "location" : { "type" : "geo_point" }, "name" : { "type" : "keyword" }, "org" : { "type" : "keyword" }, "url" : { "type" : "keyword" } } }
ここで注意しないといけないことは、keyword
とtext
の違いです。
どちらも文字列が入りますが、後述のdashboardを使ったグラフの作成にはtext
は使うことができません。
また、可視化することを踏まえて座標データが入るようにするなどの工夫をしました。
kibanaのdashboardを使ったデータの可視化
左側にあるハンバーガーメニューを開くとAnalyticsの項目の下にDashboardがあります。
Dashboardを開くと右側にCreate dashboardのボタンがあり、ここからDashboardを作成することができます。
Create visualizationをクリックするとグラフを作成する画面になります。
グラフの作成は非常に簡単で、グラフにしたいデータをドラッグアンドドロップするだけで作成できます。
グラフの種類は下に表示されているサジェスト以外にも、上にあるプルダウンメニューから使用できるタイプを選ぶことができます。
このような機能を使って、今回収集したデータを可視化してみました。
それぞれのパネルは、
- Table
- Pie
- Map
- Area stacked
というvisualizationを使用しています。
Tableには名前を騙られたサービスを報告が多い順に並べて表示しています。
地域情報(国名)と、フィッシングサイトをホストしているサービス名の比率がわかりやすいようにPie(円グラフ)を選択しました。
また、フィッシングサイトがどこでホストされているのかがわかりやすいようにMapを使って投入された座標データの地点にマークを表示させ、Heat mapで分布がわかりやすくなるようにしました。
最後のArea stackedは、取得したツイートの数を時間ごとに表示しています。
まとめ
今回はelasticsearch・kibanaの構築と前回用意したデータの可視化をしました。
自分で構築やデータの投入・可視化をするのは初めてだったので、調べながら手探りで可視化までできましたが、慣れるといろいろなデータの分析が簡単にできそうな便利なツールなので、勉強しておいて損はないと思いました。
次の記事では今回可視化したデータについて分析した結果について書くので、次回もよろしくお願いします。