コマンドラインで分析するフィッシングデータセット(初級編)

7.4K Views

April 20, 22

スライド概要

第1回 スミッシング対策技術勉強会
題目:「コマンドラインで分析するフィッシングデータセット(初級編)」
日時:2022年4月20日(水)

profile-image

セキュリティアナリスト @TrendMicro , 高知高専 副業先生 , Udemyベストセラー 講師 | サイバー犯罪対策、特にオンライン詐欺が専門。2002年よりこの領域で活動。マルウェア解析、インシデントハンドラー等の経験を経て現職。投稿は個人の見解であり、所属組織とは関係ありません。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

コマンドラインで分析する フィッシングデータセット [初級編] Noriaki HAYASHI 第1回 スミッシング対策技術勉強会

2.

Noriaki HAYASHI トレンドマイクロ株式会社 プリンシパルセキュリティアナリスト 高知工業高等専門学校 副業先生 Background 1998年 2002年 2002年 2011年 育英工業高等専門学校 卒業 電気通信大学 卒業 トレンドマイクロ株式会社 入社 金沢工業大学 知的創造システム専攻 修了 サイバー犯罪対策、特にオンライン詐欺を専門に調査・ 研究活動を行う 1 | © 2022 Noriaki HAYASHI

3.

なぜ、コマンドラインなのか コマンドラインで分析するメリット 1. 軽量かつ俊敏である 2. スケーラブルである 3. 至る所で使える 2 | © 2022 Noriaki HAYASHI

4.

OSEMN フレームワーク SCRUB 機械にとって可読性の⾼い フォーマットへデータを整 える OBTAIN 様々ソースからデータの 収集を⾏う 3 | © 2022 Noriaki HAYASHI MODEL 予想のためのモデル構築 EXPLORE 統計的な⼿法により有益な パターンや傾向を⾒つける INTERPRET 結果を有効に活⽤する

5.

データセットの取得 フィッシングURL Feed(PhishStats)からデータセットを 取得します。 curl コマンドを使ってフィードデータをダウンロードする ことができます。 >_ ターミナル 様々なプロトコルでファイル を転送する $ curl [オプション] URL 4 | © 2022 Noriaki HAYASHI ~$ curl https://phishstats.info/phish_score.cs v > phishstats.csv ~$ head ‒n 10 phishstats.csv

7.

データセットの取得 フィッシングURL Feed(PhishStats)からデータセットを 取得します。 curl コマンドを使ってフィードデータをダウンロードする ことができます。 >_ ターミナル 様々なプロトコルでファイル を転送する $ curl [オプション] URL 6 | © 2022 Noriaki HAYASHI ~$ curl https://phishstats.info/phish_score.cs v > phishstats.csv ~$ head ‒n 10 phishstats.csv

8.
[beta]
データの概要確認

PhishStats CSV Feedでは30⽇間のURLを90分間隔で更新
されています。先頭9⾏には次に⽰す説明⽂が記載されてい
ます。
列ごとに1列⽬に⽇付、スコア、URL、IPアドレスにて構成
されています。

######################################################################################
# PhishScore | PhishStats

#

# Score ranges: 0-2 likely 2-4 suspicious 4-6 phishing 6-10 omg phishing!

#

# Ranges may be adjusted without notice. List updated every 90 minutes. Do not crawl #
# too much at the risk of being blocked.

#

# Many Phishing websites are legitimate websites that have been hacked, so keep that #
# in mind before blocking everything. Feed is provided as is, without any warrant.

#

# CSV: Date,Score,URL,IP

#

######################################################################################
"2022-04-10 19:40:45","1.50","h++p://vl{BLOCKED}hu[.]bir{BLOCKED}alo[.]link/","2a02:{BLOCKED}:1d"

7 | © 2022 Noriaki HAYASHI

9.

不要な⾏を削除する PhishStats CSV Feedのデータ分析を⾏う際に不要な説明 ⽂の削除を⾏います。 sed または tail コマンドを使って⾏番号で範囲指定した⾏ (1から9⾏⽬)の削除を⾏います。 >_ ターミナル ファイルの指定した⾏を削除 する ~$ sed '1,9d' phishstats.csv > phishstats_r.csv OR $ sed ʻ開始⾏番号,終了⾏ 番号dʼ ファイル ~$ tail ‒n +10 phishstats.csv > phishstats_r.csv ~$ head ‒n 10 phishstats_r.csv 8 | © 2022 Noriaki HAYASHI

10.

⽂字数や⾏数を数える 対象のデータセットは N⾏4列 で構成されています。そこ で、規模を把握するために、まず⾏数を数えましょう。 wc コマンドを使って指定ファイルの⽂字数や⾏数を数え ることができます。 >_ ターミナル ファイルの改⾏の数を表⽰ ~$ wc phishstats_r.csv 49206 98418 5106149 phishstats_r.csv $ wc ‒l ファイル ~$ wc -l phishstats_r.csv 49206 phishstats_r.csv 9 | © 2022 Noriaki HAYASHI

11.

URLから特徴量の抽出 10 | © 2022 Noriaki HAYASHI URLの⽂字列には様々な意味が隠されています。例えば、 たくさんのドット(過剰なサブドメイン)または、たくさ んのスラッシュ(異常に深いパス)などの特徴量について 抽出することを⽬指します。

12.

探索 ステップ スクラブしたデータの探索 1.RAWデータの性質、特徴 2.統計量を計測する 3.RAWデータを可視化し洞察を得る 11 | © 2022 Noriaki HAYASHI

13.

データを眺める テキストデータの内容を確認するコマンドは様々あります。 cat, head, tail, more … less コマンドを使えば、テキストを1画⾯ずつ表⽰するこ とができます。また、ファイル全体をメモリに読み込みま せん。したがって⼤きなファイルの閲覧でも活躍します。 >_ ターミナル テキストファイルを1画⾯ずつ 表⽰する $ less ‒S ファイル名 12 | © 2022 Noriaki HAYASHI ~$ less -S phishstats_r.csv

14.

対象のデータセットは N⾏4列 で構成されています。4列⽬ にIPアドレスが記載されています。 IPアドレスを抽出 cut コマンドを使ってIPアドレスの抽出を⾏います。 出現頻度についてカウントします。その上でsortで降順に 並べ替え、headを使いワースト 10を表⽰させます。 >_ ターミナル 区切り⽂字に , を指定し 4列⽬ を表⽰ $ cut ‒d”,” ‒f4 ~$ cat phishstats_r.csv | > cut ‒d”,” ‒f4 | > sort | > uniq ‒c | > sort ‒nr | > head ‒n 10 13 | © 2022 Noriaki HAYASHI

15.

URLは、スキーム、サブドメイン、セカンドレベルドメイ ン、トップレベルドメイン、サブディレクトリからなる5つ の要素で構成されています。 URLの構造 これら要素に分解して傾向を把握することが重要です。 スキーム セカンドレベル ドメイン サブ ディレクトリ https://blog.example.com/cmd/ サブドメイン 14 | © 2022 Noriaki HAYASHI トップレベル ドメイン

16.
[beta]
URLからドメインを抽出

対象のデータセットは URL で構成されています。そこで、
ドメイン情報のみ抽出を⾏います。
awk コマンドを使って「”」と「/」を区切り⽂字として指
定し、テキスト処理を⾏います。

>_ ターミナル

区切り⽂字に , を指定し 3列⽬
を表⽰

$ awk ‒F, ʻ{print $3}ʼ

~$ cat phishstats_r.csv | awk -F\"
'{print $6}' | awk -F/ '{print $3}' |
head -n 3
www[.]jr{BLOCKED}tc[.]top
ho{BLOCKED}h24h[.]gc{BLOCKED}re[.]vn
ne{BLOCKED}n2[.]a{BLOCKED}si[.]top
※コマンド結果はリダイレクトし domain.txt に出⼒しておく

15 | © 2022 Noriaki HAYASHI

17.

重複する⾏を削除する URLからドメイン情報を抽出し domain.txt を書き出しまし た。このファイルから重複しているドメインを削除します。 uniq コマンドを使って、重複⾏の削除を⾏います。 >_ ターミナル 重複している⾏を削除する ~$ wc -l domain.txt 49206 domain.txt $ uniq ⼊⼒ファイル ~$ cat domain.txt | uniq | wc -l 41405 ~$ cat domain.txt | uniq > uniq_domain.txt 16 | © 2022 Noriaki HAYASHI

18.

TLD ワースト10を表⽰する grep コマンドを使って、ドメイン情報からTLDを抽出しま す。uniqで重複するTLDを削除し、出現頻度についてカウ ントします。その上でsortで降順に並べ替え、headを使い ワースト 10を表⽰させます。 >_ ターミナル 特定の⽂字列が含まれている ⾏を抽出する $ grep 検索パターン ~$ cat uniq_domain.txt | > grep -ioE '\.[^.]+$ʼ | > sort | > uniq ‒c | > sort ‒nr | > head ‒n 10 17 | © 2022 Noriaki HAYASHI

19.

正規表現 正規表現の検索パターンチェックには、「Regulex」や 「Rubular」などのツールを使うことが有効です。 アービトレーション ID 18 | © 2022 Noriaki HAYASHI

20.

TLD ワースト10を表⽰する grep コマンドを使って、ドメイン情報からTLDを抽出しま す。uniqで重複するTLDを削除し、出現頻度についてカウ ントします。その上でsortで降順に並べ替え、headを使い ワースト 10を表⽰させます。 >_ ターミナル 特定の⽂字列が含まれている ⾏を抽出する $ grep 検索パターン ~$ cat uniq_domain.txt | > grep -ioE '\.[^.]+$ʼ | > sort | > uniq ‒c | > sort ‒nr | > head ‒n 10 19 | © 2022 Noriaki HAYASHI

21.

使いこなしたいコマンド csvkit csvkitはデータをCSV形式に変換して操作するため のコマンドラインツールスイート feedgnuplot コマンドラインのデータプロッタ。Gnuplotのフロ ントエンド。データをパイピングで処理可能 jq JSON形式のデータからデータを抽出、変換、集計、 できるコマンド split ファイルの分割を⾏うコマンド tr 20 | © 2022 Noriaki HAYASHI ⽂字の置き換えを⾏うコマンド

22.

参考⽂献 • Janssens, Jeroen. Data Science at the Command Line. " O'Reilly Media, Inc.", 2021., http://datascienceatthecommandline.com/ • Robert Mesibov, BASHing data, https://www.datafix.com.au/BASHing/ • Pavlo Horbonos, Linux command line utils for Data Scientist, https://towardsdatascience.com/linux-command-line-utils-for-datascientist-efff43a10f3c • Jason Baker, 10 command-line tools for data analysis in Linux, https://opensource.com/article/17/2/command-line-tools-dataanalysis-linux • 『1⽇1問、半年以内に習得シェル・ワンライナー160本ノック』 21 | © 2022 Noriaki HAYASHI