Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

Avatar for Noriaki Hayashi

Noriaki Hayashi

April 20, 2022
Tweet

More Decks by Noriaki Hayashi

Other Decks in Technology

Transcript

  1. /PSJBLJ )":"4)* トレンドマイクロ株式会社 プリンシパルセキュリティアナリスト 高知工業高等専門学校 副業先生 #BDLHSPVOE 1998年 育英工業高等専門学校 卒業

    2002年 電気通信大学 卒業 2002年 トレンドマイクロ株式会社 入社 2011年 金沢工業大学 知的創造システム専攻 修了 サイバー犯罪対策、特にオンライン詐欺を専門に調査・ 研究活動を行う 1 | © 2022 Noriaki HAYASHI
  2. OSEMN フレームワーク OBTAIN 様々ソースからデータの 収集を⾏う SCRUB 機械にとって可読性の⾼い フォーマットへデータを整 える EXPLORE

    統計的な⼿法により有益な パターンや傾向を⾒つける MODEL 予想のためのモデル構築 INTERPRET 結果を有効に活⽤する 3 | © 2022 Noriaki HAYASHI
  3. データセットの取得 フィッシングURL Feed(PhishStats)からデータセットを 取得します。 curl コマンドを使ってフィードデータをダウンロードする ことができます。 >_ ターミナル $

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

    curl [オプション] URL ~$ curl https://phishstats.info/phish_score.cs v > phishstats.csv ~$ head ‒n 10 phishstats.csv 6 | © 2022 Noriaki HAYASHI 様々なプロトコルでファイル を転送する
  5. ###################################################################################### # 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" データの概要確認 PhishStats CSV Feedでは30⽇間のURLを90分間隔で更新 されています。先頭9⾏には次に⽰す説明⽂が記載されてい ます。 列ごとに1列⽬に⽇付、スコア、URL、IPアドレスにて構成 されています。 7 | © 2022 Noriaki HAYASHI
  6. 不要な⾏を削除する PhishStats CSV Feedのデータ分析を⾏う際に不要な説明 ⽂の削除を⾏います。 sed または tail コマンドを使って⾏番号で範囲指定した⾏ (1から9⾏⽬)の削除を⾏います。

    >_ ターミナル $ sed ʻ開始⾏番号,終了⾏ 番号dʼ ファイル ~$ sed '1,9d' phishstats.csv > phishstats_r.csv OR ~$ tail ‒n +10 phishstats.csv > phishstats_r.csv ~$ head ‒n 10 phishstats_r.csv 8 | © 2022 Noriaki HAYASHI ファイルの指定した⾏を削除 する
  7. データを眺める テキストデータの内容を確認するコマンドは様々あります。 cat, head, tail, more … less コマンドを使えば、テキストを1画⾯ずつ表⽰するこ とができます。また、ファイル全体をメモリに読み込みま

    せん。したがって⼤きなファイルの閲覧でも活躍します。 >_ ターミナル $ less ‒S ファイル名 ~$ less -S phishstats_r.csv 12 | © 2022 Noriaki HAYASHI テキストファイルを1画⾯ずつ 表⽰する
  8. URLの構造 14 | © 2022 Noriaki HAYASHI URLは、スキーム、サブドメイン、セカンドレベルドメイ ン、トップレベルドメイン、サブディレクトリからなる5つ の要素で構成されています。

    これら要素に分解して傾向を把握することが重要です。 https://blog.example.com/cmd/ スキーム サブドメイン セカンドレベル ドメイン トップレベル ドメイン サブ ディレクトリ
  9. URLからドメインを抽出 対象のデータセットは URL で構成されています。そこで、 ドメイン情報のみ抽出を⾏います。 awk コマンドを使って「”」と「/」を区切り⽂字として指 定し、テキスト処理を⾏います。 $ awk

    ‒F, ʻ{print $3}ʼ 15 | © 2022 Noriaki HAYASHI 区切り⽂字に , を指定し 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 に出⼒しておく
  10. 重複する⾏を削除する URLからドメイン情報を抽出し domain.txt を書き出しまし た。このファイルから重複しているドメインを削除します。 uniq コマンドを使って、重複⾏の削除を⾏います。 >_ ターミナル $

    uniq ⼊⼒ファイル ~$ wc -l domain.txt 49206 domain.txt ~$ cat domain.txt | uniq | wc -l 41405 ~$ cat domain.txt | uniq > uniq_domain.txt 16 | © 2022 Noriaki HAYASHI 重複している⾏を削除する
  11. 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 特定の⽂字列が含まれている ⾏を抽出する
  12. 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 特定の⽂字列が含まれている ⾏を抽出する
  13. 参考⽂献 • 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-data- scientist-efff43a10f3c • Jason Baker, 10 command-line tools for data analysis in Linux, https://opensource.com/article/17/2/command-line-tools-data- analysis-linux • 『1⽇1問、半年以内に習得シェル・ワンライナー160本ノック』 21 | © 2022 Noriaki HAYASHI