Slide 1

Slide 1 text

入門ハンズオン CyberChef

Slide 2

Slide 2 text

目 次 ・本資料について ・CyberChef 基礎知識 ・実践編 - ハッシュ値計算 - ファイルタイプ判定 - 文字列抽出 - バイナリ閲覧 - CIDR 計算 - URL 抽出 - URI 分解 - テキスト比較 - Code beautify - 1列→ 1行 - 1行→ 1列 - ハッシュ値抽出 - Base64 デコード - Office ファイルからの URL の抽出 - PDF ファイルからの URL の抽出 - 国際化ドメイン名と Punycode - 分割して処理する ・解答編

Slide 3

Slide 3 text

本資料について

Slide 4

Slide 4 text

本資料について ・本資料は、CyberChef に初めて触れる、または多少使ったことはあるが何ができるのか よく知らない……という方向けに作成したものです ・実際にファイルやテキストを分析しながら、次のことを学んでいただくことを目的として います 公開版では問題ファイルは提供していません。ご了承ください - CyberChef の基本的な使用法 - 簡単で使う機会の多いレシピの使い方 ・場合によっては CyberChef 以外に使えるツールなども併せて紹介します ・入門者を対象としているので、すでにバリバリ使いこなしている方には物足りない内容 となっています。ご了承ください

Slide 5

Slide 5 text

CyberChef 基礎知識 ※ CyberChef を使ったことがある方は飛ばして大丈夫です

Slide 6

Slide 6 text

CyberChef is 何? ・CyberChef (サイバーシェフ) は、英国政府通信本部 (GCHQ) が開発した Web アプリ ケーション ・”The Cyber Swiss Army Knife” を自称する高機能ツール - Swiss Army Knife とはナイフのほか缶切り・栓抜きなど多数の機能を持つマルチツール のこと ・各種エンコード・デコード、データ変換、圧縮解凍、テキスト処理など、行うことができる 処理 (Operations) は数百にのぼる ・オープンソースであり、誰でも無料で使用可能 ・↓の URL にアクセスすればすぐ使える https://gchq.github.io/CyberChef/

Slide 7

Slide 7 text

CyberChef のメリット CyberChef には多くの優れた点がある ・機能が豊富 これさえあれば数百の処理を一元的に行うことができる ・始めやすい 会員登録やインストールが不要 ・直感的に操作できる GUI 操作。事前に文法を覚えたりする必要がない ・処理を繋げられる 前の処理の結果を次の処理に渡せる。複雑な処理も一発で終了

Slide 8

Slide 8 text

CyberChef のメリット ・ブラウザだけで機能する Chrome と Firefox がサポートされている ・オフラインでも使える 事前に DL しておく必要があるが、完全オフラインでも使える※ 隔離された環境でも利用できるし、機微なデータをネットに晒すことなく処理できる ・レシピをセーブ・ロードできる 以前作ったレシピを再利用できる もちろん他の人が作ったレシピを読み込むことも可能 ※ネット環境を必要とする機能もあるがごく一部

Slide 9

Slide 9 text

オンライン版 vs ダウンロード版 ・CyberChef はブラウザ上ですべての処理を行い、外のサーバにデータを送ったりする ことはない ・とはいえ、インターネット上のツールに機微なデータを渡すべきではない ・セキュリティ調査では機微なデータを扱うことも多いので、あらかじめダウンロードし ローカルに保存したものを使うことを推奨 ・ダウンロードは画面左上の “Download CyberChef” から

Slide 10

Slide 10 text

CyberChef の画面

Slide 11

Slide 11 text

Operations 使える機能のリスト 各分類をクリックすると個々の機能が出てくる マウスオーバーすると説明文が読める ダブルクリックするか、中央部の “Recipe” にド ラッグ&ドロップすることでレシピに追加できる

Slide 12

Slide 12 text

Operations “Search…” では機能の検索ができる よく使う機能は名前を覚えておこう しかし、そのものズバリでなくても拾ってくれるの で、とりあえずやりたいことを検索してみるのも手 例えば、いわゆるシーザー暗号は “ROT13” とい う名前だが、それを知らなくても ”caesar” で検索 すればちゃんと見つけることができる

Slide 13

Slide 13 text

Recipe 実行する機能をセットにしたもの ドラッグ&ドロップで機能の順番を入れ替えら れる また、🚫を押して機能を無効化できる 処理の順番は基本的に上からだが、分岐や繰 り返しもできる 図の場合、一番下の “Jump” の次に一番上の “Label” へジャンプし、これを 10回繰り返す (結果として間の “From Base64” が 11回実行される) ゴミ箱のアイコンでレシピをまとめて削除できる (間違って押さないように!)

Slide 14

Slide 14 text

Recipe 中央の “BAKE!” が実行ボタン 左の “STEP” はステップ実行 押すたびに各処理を一つずつ順番に実行して いく 右の “Auto Bake” にチェックを入れていると、 “BAKE!” を押さなくても自動で実行が始まる チェックしていると、ちょっと入力をいじっただけ で再処理が始まってしまうので、時間のかかる 処理を行うときは外しておいた方が無難

Slide 15

Slide 15 text

Recipe フロッピーディスクのアイコンをクリックすると 今セットしているレシピをセーブ (保存) できる フォルダのアイコンをクリックすると 保存済のレシピをロード (読み込み)できる

Slide 16

Slide 16 text

Recipe ここに名前を入力して “SAVE” 自分の作ったレシピのほか、 他の人が作ったレシピも この部分にコピペすれば 一気にロードできる

Slide 17

Slide 17 text

Input 処理する前のデータ (入力) を指定する 入力には次のものが指定できる ・テキスト (白い部分に直接入力もしく はコピペ) ・ファイル ・フォルダ タブを増やして、複数の入力に対して同じレ シピを使うこともできる ゴミ箱のアイコンで入力をまとめて全部削除 できる (間違って押さないように!)

Slide 18

Slide 18 text

Input ① ② ③ ④ ⑤ ① タブを追加 ② フォルダを入力として指定 ③ ファイルを入力として指定 ④ ゴミ箱。入力として指定されているすべてを削除 ⑤ ペインレイアウトをリセット (使い方がよくわからない……)

Slide 19

Slide 19 text

Output 処理結果が出てくる ファイルとして保存したり、クリップボードにコ ピーすることができる 表示した時点から入力もしくはレシピが変化 しており、「表示が最新の状態ではない場 合」には “Output” の文字の隣に時計のアイ コンが出現する

Slide 20

Slide 20 text

Output ① ② ③ ④ ⑤ ① ファイルとして保存 ② クリップボードにコピー ③ 入力を出力で置き換える (異様に時間かかるので使わない方がいい) ④ 元に戻す ⑤ “Output” ペインを最大化

Slide 21

Slide 21 text

実践編

Slide 22

Slide 22 text

ハッシュ値計算 ・CyberChef はハッシュ値の計算を得意としており、およそ必要となりそうなハッシュ値は なんでも計算できる ・セキュリティ調査目的では MD5、SHA-1、SHA-256 がよく用いられている しかも困ったことに人や組織によってインジケータにどれを使うかがまちまちなので、 結局 3種類とも計算し調べることになる ・そこで便利なのが “Generate all hashes”。上記の 3種類をはじめとするすべてのハッシュ 値をまとめて計算してくれる ただ相応に時間がかかるのが欠点

Slide 23

Slide 23 text

ハッシュ値計算 – ハンズオン ・Q1: Hash me! ・Q01 のフォルダに入っている “Hashme.bin” の MD5、SHA-1、SHA-256 ハッシュ値を 計算してください ・まとめて一度に計算してもいいし、それぞれ別個に計算しても構いません

Slide 24

Slide 24 text

ハッシュ値取得 – 代替ツール ・右クリックメニューの「プロパティ」にタブ「ハッシュ値」を追加する “HashTab” や複数 ファイルのハッシュ値をまとめて計算できる “HashMyFiles” “HashSum” などのツールが 使える ・CyberChef は「入力 (1つ)→レシピ→出力」という構造上、複数ファイルについて計算して 結果を比較するような使い方には向いていない その点では専用ツールに優位性がある

Slide 25

Slide 25 text

ファイルタイプ判定 ・ファイルタイプについてはバイナリエディタでマジックナンバーを見ることで判別できる 拡張子は偽装されている場合もあるのであまり信用できない ・有名なマジックナンバー (4D 5A = MZ など) は覚えておくと便利だが、何百種類もある マジックナンバーを丸暗記するのは現実的ではない ・そこで専用ツールが用いられることが多いが、CyberChef でも “Detect File Type” で ファイルタイプを判定できる

Slide 26

Slide 26 text

ファイルタイプ判定 – ハンズオン ・Q02: Detect me! ・Q02 のフォルダに入っている “00~05.nanikore” のファイルタイプを判定してください ・一部 “Detect File Type” だけでは正確にわからないファイルも含まれています 適宜調査して本当は何なのか特定してください

Slide 27

Slide 27 text

ファイルタイプ判定 – 代替ツール ・Windows 環境では、”TrID” およびその GUI 版である “TrIDNet” (要.NET Framework) が有名 ・うさみみハリケーン同梱の「青い空を見上げればいつもそこに白い猫」も標準で TrID と 同等の判別能力がある (ほかにもいろいろできるが……) ・Linux なら “file” コマンドが使える

Slide 28

Slide 28 text

文字列抽出 ・ファイルによっては、役立つ情報が文字列という形でファイル内に格納されている ことがある ・例えば通信先や呼び出す API の名称など ・CyberChef では “Strings” でできる デフォルトでは “Minimum length” が 4になっているが、これでは短すぎてゴミが大量に 出てくるので、とりあえず 7~8文字程度でスタートするとよい ・”Display Total” にチェックを入れると “Total found: xx” と見つかった文字列の数を教えて くれる

Slide 29

Slide 29 text

文字列抽出 – ハンズオン ・Q03: picoCTF 2019 から “Glory of the Garden” ・Q03 のフォルダに入っている “garden.jpg” からフラグを見つけてください フラグの形式は “picoCTF{xxxxxx}” です ・本問はカーネギーメロン大学が実施している picoCTF からお借りしました https://picoctf.org/

Slide 30

Slide 30 text

文字列抽出 – 代替ツール ・Windows の場合 “Bintext” が有名 ・「青い空を見上げればいつもそこに白い猫」も使える。日本語に強い ・Linux なら “strings” コマンドが有効

Slide 31

Slide 31 text

バイナリ閲覧 ・ファイルを 16進数の塊として確認するには、通常バイナリエディタ (ヘキサエディタ) と 呼ばれるツールが必要になるが、見るだけならば CyberChef でも可能 ・”To Hexdump” がそれ。通常のバイナリエディタのように「アドレス」「コード」「対応する 文字」の順に表示してくれる ・ただし、文字の表示形式の都合で、一部のマジックナンバーは日本でよく知られた 見た目と違うので注意 例えば .xls など、MS Office 2003 以前のファイルのマジックナンバー ”D0 CF 11 E0 A1 B1 1A E1”は、Windows ANSI では “ミマ.爍ア.・” だが CyberChef では “ÐÏ.ࡱ.á” になる

Slide 32

Slide 32 text

バイナリ閲覧 – ハンズオン ・Q04: Message from Hex ・Q04 のフォルダ内にある “hex.nanikore” に隠されたメッセージを解読してください

Slide 33

Slide 33 text

バイナリ閲覧 - 代替ツール ・基本的に専用のバイナリエディタの使用を推奨 ただ、バイナリエディタを導入できない環境などでは CyberChef が役立つ ・国産のバイナリエディタとして “Sterling” “Binary Editor BZ” などが有名 ・海外製では、PE や OLE のデータ構造に対応した “McAfee FileInsight” などが有用

Slide 34

Slide 34 text

CIDR 計算 ・現代の TCP/IP では、サブネットの範囲を CIDR 表記と呼ばれる表現で表すのが一般的 (例: 192.168.0.0/16) ・/ に続く数字が 8の倍数であれば、その範囲がわかりやすいが、それ以外の場合は いちいち計算するのが面倒 ・CyberChef なら CIDR 表記から IP アドレスの範囲を一発で計算してくれる “Parse IP range” がそれ

Slide 35

Slide 35 text

CIDR 計算 – ハンズオン ・Q05: Private or Public ・IPv4 アドレス 172.30.1.1 が 172.16.0.0/12 の範囲に含まれるか調べてください

Slide 36

Slide 36 text

CIDR 計算 – 代替ツール ・インターネット上には計算ツールが多数ある 2つ紹介するが他に好みのものがあればそれでも構わない ・ネットワーク計算ツール https://www.softel.co.jp/labs/tools/network/ ・CMAN サブネットマスク電卓 https://note.cman.jp/network/subnetmask.cgi

Slide 37

Slide 37 text

URL 抽出 ・”Extract URLs” で、入力に含まれる URL (http:// や https:// などで始まるもの) を抽出して 表示する ・いちいち自分で正規表現を書いたりする必要がなく簡単に使える。非常に便利 ・”Extract IP addresses” も使える v4・v6 に対応しているほか、ローカル IP アドレスを除外するオプションも付いている ・”Extract domains” は微妙。”index.html” のようなものもドメイン扱いしてしまう ・そのほか、日付、メールアドレスなどを抽出可能

Slide 38

Slide 38 text

URL 抽出 ・”Extract URLs” をはじめとする抽出系と相性のいい Operation をいくつかご紹介 ・”Filter” : ある語句 (正規表現で指定) を含むものだけに絞る “Invert condition” にチェックを入れれば「ある語句を含まない」ものに絞ることも可能 ・”Sort” : 並べ替え ・”Unique” : 重複を削除 ・CyberChef はログ分析の類にはあまり適していないが (というか容量の大きなファイル 自体苦手)、ごく簡単な処理ならこれらでできることもある

Slide 39

Slide 39 text

URI 分解 ・やたらと長くて大量の引数が付いた URI はそのままでは何だかわかりにくい ・”Parse URI” を使えば複雑な URI を分解できる ・パーセントエンコードも自動で直してくれる

Slide 40

Slide 40 text

URI 分解 ・実際に使ってみたところ。元の URI はこれ↓ https://elaws.e- gov.go.jp/result?allDocument=0&searchTargetAll=1&searchTextBox=%E7%A0%B4%E7%94%A3&serchSelect=and&searchTarget_array=Constitution%2CAct%2CCabinetOrder%2CImperialOrder%2CMinisterialOrdinance%2CRule&classification_array=%E6%86%B2%E6%B3%95%2C%E5%88%91%E4%BA%8B%2C%E8%B2%A 1%E5%8B%99%E9%80%9A%E5%89%87%2C%E6%B0%B4%E7%94%A3%E6%A5%AD%2C%E8%A6%B3%E5%85%89%2C%E5%9B%BD%E4%BC%9A%2C%E8%AD%A6%E5%AF%9F%2C%E5%9B%BD%E6%9C%89%E8%B2%A1%E7%94%A3%2C%E9%89%B1%E6%A5%AD%2C%E9%83%B5%E5%8B%99%2C%E8%A1%8C%E6%94%BF% E7%B5%84%E7%B9%94%2C%E6%B6%88%E9%98%B2%2C%E5%9B%BD%E7%A8%8E%2C%E5%B7%A5%E6%A5%AD%2C%E9%9B%BB%E6%B0%97%E9%80%9A%E4%BF%A1%2C%E5%9B%BD%E5%AE%B6%E5%85%AC%E5%8B%99%E5%93%A1%2C%E5%9B%BD%E5%9C%9F%E9%96%8B%E7%99%BA%2C%E4%BA%8B%E6%A5 %AD%2C%E5%95%86%E6%A5%AD%2C%E5%8A%B4%E5%83%8D%2C%E8%A1%8C%E6%94%BF%E6%89%8B%E7%B6%9A%2C%E5%9C%9F%E5%9C%B0%2C%E5%9B%BD%E5%82%B5%2C%E9%87%91%E8%9E%8D%E3%83%BB%E4%BF%9D%E9%99%BA%2C%E7%92%B0%E5%A2%83%E4%BF%9D%E5%85%A8%2C%E7%B5%B 1%E8%A8%88%2C%E9%83%BD%E5%B8%82%E8%A8%88%E7%94%BB%2C%E6%95%99%E8%82%B2%2C%E5%A4%96%E5%9B%BD%E7%82%BA%E6%9B%BF%E3%83%BB%E8%B2%BF%E6%98%93%2C%E5%8E%9A%E7%94%9F%2C%E5%9C%B0%E6%96%B9%E8%87%AA%E6%B2%BB%2C%E9%81%93%E8%B7%AF%2C%E6%9 6%87%E5%8C%96%2C%E9%99%B8%E9%81%8B%2C%E7%A4%BE%E4%BC%9A%E7%A6%8F%E7%A5%89%2C%E5%9C%B0%E6%96%B9%E8%B2%A1%E6%94%BF%2C%E6%B2%B3%E5%B7%9D%2C%E7%94%A3%E6%A5%AD%E9%80%9A%E5%89%87%2C%E6%B5%B7%E9%81%8B%2C%E7%A4%BE%E4%BC%9A%E4%BF%9D% E9%99%BA%2C%E5%8F%B8%E6%B3%95%2C%E7%81%BD%E5%AE%B3%E5%AF%BE%E7%AD%96%2C%E8%BE%B2%E6%A5%AD%2C%E8%88%AA%E7%A9%BA%2C%E9%98%B2%E8%A1%9B%2C%E6%B0%91%E4%BA%8B%2C%E5%BB%BA%E7%AF%89%E3%83%BB%E4%BD%8F%E5%AE%85%2C%E6%9E%97%E6%A5%AD%2 C%E8%B2%A8%E7%89%A9%E9%81%8B%E9%80%81%2C%E5%A4%96%E4%BA%8B&lawNo1=&lawNo2=&lawNo3=&lawNo4=&dayPromulgation1_0=&dayPromulgation1_1=&dayPromulgation1_2=&dayPromulgation1_3=&dayPromulgation2_0=&dayPromulgation2_1=&dayPromulgation2_2=&dayPromulgation2_3=&day Promulgation1=&dayPromulgation2=&lawDayFrom1=0&selectMenu=0&searchBtn=1 ・どんな引数があって何の値が指定されているか一目でわかるようになった

Slide 41

Slide 41 text

テキスト比較 ・大部分一緒なのだが、細部が違う 2つのテキストの差分を知りたい場合がある ・CyberChef では “Diff” が使える ・”Input” に境界 (Sample delimiter) で区切られた 2つのテキストを入力して BAKE! 境界は任意に指定できるので、テキスト中になさそうな文字 (列) を指定するといい

Slide 42

Slide 42 text

テキスト比較 – ハンズオン ・Q06: Moby Dick ・Q06 のフォルダを開き、中にある “MD.txt” “MD2.txt” の内容を比較して差分を調べて ください ・差分の文字をまとめるとメッセージが現れます。そのメッセージが答えです

Slide 43

Slide 43 text

テキスト比較 – 代替ツール ・Windows 環境では “WinMerge” が有名 ・オンラインでは ”difff” がシンプルで使いやすい https://difff.jp/

Slide 44

Slide 44 text

Code beautify ・調査対象のコードが難読化されている場合、力ずくで解読するのは難しい ・CyberChef ではコードを読みやすくするため、いくつかの言語について “(○○) beautify” が搭載されている ・”Syntax highlighter” も併用するとさらに読みやすくなる

Slide 45

Slide 45 text

Code beautify – ハンズオン ・Q07: Deobfuscate it ・Q07 のフォルダにある Javascript コード “JS.txt” を解読し、その動作を明らかにして ください JS.txt の中身

Slide 46

Slide 46 text

Code beautify – 代替ツール ・オンラインツールがいろいろ出回っているようだ Javascript なら、例えば “Online JavaScript Beautifier” https://beautifier.io/ ・「○○ beautifier」などで検索すると出てくるかも ただしオンラインツールには機微なコード (インシデント関係など) を上げるべきではない

Slide 47

Slide 47 text

1列→1行 ・表計算ソフトなどで列 (縦方向) に整理した大量のデータを、1行 (横方向) に並べたい 場合がある データの量によっては手作業でやるのは大変 ・“Fild / Replace” を使えば一瞬で終了!

Slide 48

Slide 48 text

1列→1行 ・例えば、”,” (カンマ) で区切る場合は、改行を , に置換すればいい ・”Find / Replace” をレシピにセット、”Find” に “¥n” (¥ はバックスラッシュ) ※を入力 このとき、右端の “REGEX (正規表現)” を変更しないこと ・”Replace” には “,” を入力すれば OK ※うまくいかない場合、¥n を ¥r¥n に変えればうまくいくことがある

Slide 49

Slide 49 text

1列→1行 – ハンズオン ・Q08: Many many IoCs ・マルウェアの通信先ドメインのリストを入手しました (という設定) Q08 のフォルダ内の “IoC.txt” がそれ 全部で 400個もあります ・これらをまとめてフィルタリングソフトにぶち込んでブロックしたい フィルタリングソフトは (禁止ドメイン 1),(禁止ドメイン 2), … と、カンマで区切ってやれば 何個でも一気に設定できるものとします ・設定を一度で終わらせるため、ドメイン名のリストをカンマで区切られた 1行の形式に 変換してください

Slide 50

Slide 50 text

1行→1列 ・逆に「特定の文字で区切られた 1行のデータを列に並べなおす」こともできる ・やり方は一緒で、”Find / Replace” で区切り文字を改行に変換するだけ ・いったん並べてしまえば、”Sort” で並べ替え、”Unique” で重複の削除などもできる

Slide 51

Slide 51 text

ハッシュ値抽出 ・URL や IP アドレスと違い、ハッシュ値を抽出するのには少し工夫が必要 正規表現 (“Regular expression”) の力を借りる必要がある ・MD5・SHA-1・SHA-256 の 3種類のハッシュ値にマッチする正規表現は次のとおり (¥b[0-9a-zA-Z]{32}¥b|¥b[0-9a-zA-Z]{40}¥b|¥b[0-9a-zA-Z]{64}¥b)

Slide 52

Slide 52 text

Base64 デコード ・CyberChef では様々なエンコード・デコードを行えるが、中でもよく使うのが Base64 ・エンコードは “To Base64” で、デコードは “From Base64” でそれぞれ行える ・例えば “5YWl6ZaA44OP44Oz44K644Kq44OzQ3liZXJDaGVm” を Base64 デコードすると “入門ハンズオンCyberChef” になる

Slide 53

Slide 53 text

Base64 デコード ・Base64 は大小英数字と “+”, “/”, “=” からなる文字列 それを利用して正規表現にマッチさせることができる ・具体的には ”Regular expression” で次のように設定する [0-9a-zA-Z+/=]{30,} これが Base64 の基本形 ・{30,} の部分は「30文字以上」を表す。この数字は適宜調節する {30,100} のように上限を設けることもできる ・これを応用すれば、いろいろ入り混じったデータの中から Base64 部分だけを取り出す ことができる ・場合によって細かい調整が必要になる場合がある

Slide 54

Slide 54 text

Base64 デコード ・例としてメールデータから添付ファイルを取り出してみる ・↓の枠内の部分がエンコードされた添付ファイル。矢印部分から、Base64 エンコードで あることがわかる

Slide 55

Slide 55 text

Base64 デコード ・レシピに ”Regular expression” を追加、添付ファイル部分にマッチさせる マッチした部分の確認のため、とりあえず “Output format” を “Highlight matches” (マッチした部分の色を変えて強調) に設定 ・改行で分かれた部分が全部別物扱いされてしまっていることが色分けからわかる

Slide 56

Slide 56 text

Base64 デコード ・正規表現を [0-9a-zA-Z+/=¥r¥n]{30,} に書き換える (改行を含む文字列にマッチさせる) と改行の問題は解決する ・30文字以上では短すぎて関係ない部分にもあちこちマッチしてしまうので、100文字 (もっと大きくても大丈夫) に増やす

Slide 57

Slide 57 text

Base64 デコード ・先頭の “kmmqhwyu0” は関係ないのでマッチしないようにしたい 正規表現の先頭に “^” (¥b でも可) を追加する 完成した正規表現は ^[0-9a-zA-Z+/=¥r¥n]{100,} ※青字は基本形から変更した部分 ・”Output format” を “List matches” (マッチした部分を抽出) に変更 ※先頭に変な改行が残っているが、後の “From Base64” はデフォルトで改行を除去する設定になっているので、デコードに支障はない

Slide 58

Slide 58 text

Base64 デコード ・満を持して ”From Base64” を追加するとデコード成功! ・フロッピーディスクのアイコンからファイルとして保存もできるし、そのまま CyberChef で 分析してもいい

Slide 59

Slide 59 text

Base64 デコード ・先頭の “PK..” から ZIP ファイルの仲間であることが推測できる ダメ押しに “Detect File Type” すると MS Office (2007~) ファイルであることが判明 ・他にもハッシュ値を計算したり文字列や URL などを抽出したり…… ファイルを保存せず CyberChef 上だけでもいろいろできることがわかる

Slide 60

Slide 60 text

Base64 デコード – ハンズオン ・Q09: Egg, bacon, sausage and SPAM ・不審なファイルが添付された怪しいメールを受信しました (という設定) Q09 のフォルダに入っている “suspicious-mail.eml” がそれです ・添付ファイルを CyberChef 上で取り出してください (メーラーで開いて保存すればすぐですが、不審なファイルをむやみに保存したくない ですよね……?) ・なおこのファイルは、見た目はともかく中身はマルウェアでも何でもないので保存して しまっても害はありません

Slide 61

Slide 61 text

Office ファイルからの URL の抽出 ・MS Office 2007 以降のファイルフォーマット (.docx、.xlsx、.pptx など) は、XML 文書と 関連ファイルを ZIP 圧縮したもの (2003 以前のファイル形式は OLE2 でまったく異なる) ・そのため各種解凍ソフトなどで解凍して直接中身の文書を見たり編集したりできる CyberChef でも “Unzip” で解凍して中身を表示できる

Slide 62

Slide 62 text

Office ファイルからの URL の抽出 ・中身の多くは XML ファイル (≒テキストファイル) なので URL などを簡単に抽出できる ・実際にやってみると大量に出てくるが、ほとんどはファイルフォーマットに起因する 怪しくない URL (microsoft.com や openxmlformats.org など)

Slide 63

Slide 63 text

Office ファイルからの URL の抽出 ・これらの正規 URL は分析の邪魔になるのでフィルタ (“Filter”) で除外してしまう ・除外リスト - http://schemas.openxmlformats.org - http://schemas.microsoft.com - http://purl.org - http://www.w3.org ・”Invert condition” にチェックを入れること また、”.” はバックスラッシュでエスケープすること (エスケープしないと、”.” は「任意の一文字」に マッチしてしまう)

Slide 64

Slide 64 text

Office ファイルからの URL の抽出 ・フィルタリング後に残った URL はファイルフォーマットに起因する URL ではないので、 調査する価値がある このように、調査対象を絞り込むことが可能

Slide 65

Slide 65 text

Office ファイルからの URL の抽出 – ハンズオン ・Q10: Unknown Remarkable Literals ・Q09 で取り出した添付ファイルから URL を抽出して、不審な URL を見つけてください ・Q09 を事前に実施していない方は Q10 のフォルダに “Suspicious.xlsm” があるのでそれ を使ってください

Slide 66

Slide 66 text

PDF ファイルからの URL の抽出 ・PDF ファイルは Unzip の必要がなくそのまま抽出できる (実はなんでも抽出できるわけではないが、話が長くなるのでここでは触れない) ・Office ファイルと同様多くの PDF ファイルにはファイルフォーマット由来の URL が含まれ るので、 フィルタで除外することを推奨 - http://www.w3.org - http://ns.adobe.com - http://purl.org ・これらのファイルをよく扱うなら、あらかじめ “Extract URLs” と “Filter” をセットしたレシピ を作って保存しておくといい

Slide 67

Slide 67 text

国際化ドメイン名と Punycode ・従来ドメイン名はアルファベット、数字、ハイフン、ドットのみで表現されていたが、 “ドメイン名例.jp” のようにそれ以外の文字、例えば仮名や漢字も使えるようになった これを国際化ドメイン名という ・国際化ドメイン名はそのままでは DNS が対応できないので、アルファベットや数字の 文字列に変換する必要がある その変換形式が “Punycode” ・CyberChef は国際化ドメイン名と Punycode でのドメイン名を互いに変換できる “From Punycode” ”To Punycode” を使う どちらも “Internationalised domain name” にチェックを入れておくこと

Slide 68

Slide 68 text

国際化ドメイン名と Punycode – ハンズオン ・Q11: Puny puny ・Q10 で” Suspicious.xlsm” から抽出した不審な URL は Punycode で表現されています これを元のドメイン名 (国際化ドメイン名) に変換し、怪しいサイトかどうか評価して ください ・Q10 を事前に実施していない方は、Q11 のフォルダに “URL.txt” があるのでそれに記載 の URL を使ってください

Slide 69

Slide 69 text

分割して処理する ・”Fork” は「指定した区切り文字によって入力を分割し、分割後を 1単位として以後の 処理を実施させる」働きを持つ Operation ・”Split delimiter” で分割のための区切り文字を、”Merge delimiter” で出力時の区切り 文字をそれぞれ指定する ・例えば “Split delimiter” に “¥n” (改行) を指定すれば、1行ごとに次の処理を行わせるこ とができる ・”Fork” で分割されたものを再度まとめるには “Merge” を用いる

Slide 70

Slide 70 text

分割して処理する ・”Fork” は応用の利く機能でいろいろな使い方が考えられるが、例として↓の文字列を デコードしてみよう 44GT44KM44GvMeWAi+ebruOBruODluODreODg+OCr+OBp+OBmeOCiA==*44GT44KM44GvMuWAi+ebruOBruODluODreODg+OCr+OBoOOCiA==*44GT44KM44GvM+WAi+ebruOBruODluODre ODg+OCr+OBp+OBlOOBluOBhOOBvuOBmQ==*44GT44KM44GvNOWAi+ebruOBruODluODreODg+OCr+OBoOOBnA==*44GT44KM44GvNeWAi+ebruOBruODluODreODg+OCr+OBoOOBo+OBpu OBlQ==*44GT44KM44GvNuWAi+ebruOBruODluODreODg+OCr+OBoOOCuuODqQ==*44GT44KM44GvN+WAi+ebruOBruODluODreODg+OCr+OBoOOBo+OBpuOBsA==*44GT44KM44GvOOWAi+ ebruOBruODluODreODg+OCr+OBp+OBguOCiw==*44GT44KM44GvOeWAi+ebruOBruODluODreODg+OCr+OBp+OBlOOCj+OBmQ==*44GT44KM44GvMTDlgIvnm67jga7jg5bjg63jg4Pjgq/jgojjgIHli 5jpgZXjgYTjgZfjgarjgYTjgafjgojjga3vvIE= ・この文字列は Base64 エンコードされた各ブロックが “*” で連結されているもの そのまま Base64 デコードしようとしてもうまくいかない 各ブロックごとにデコードする必要がある

Slide 71

Slide 71 text

分割して処理する ・”Fork” をレシピにセット、”Split delimiter” に “*”、“Merge delimiter” に “¥n” (改行) を それぞれ指定 ・続いて “From Base64” をセットするとブロックごとにデコードできる

Slide 72

Slide 72 text

分割して処理する – ハンズオン ・Q12: The fork in the left hand ・マルウェア (ダウンローダ) が実行する PowerShell スクリプトを 10種類入手しました (という設定) Q12 のフォルダに入っている “ps.txt” がそれです ・このスクリプトを解読し、マルウェアの通信先 URL をすべて特定してください ・PowerShell のオプション “-enc” は “-EncodedCommand” を省略して表現したもので、 Base64 エンコードされた文字列をコマンドとして実行する働きをもちます

Slide 73

Slide 73 text

解答編

Slide 74

Slide 74 text

Q01 – Hash me! ・”Generate all hashes” を使うのが簡単

Slide 75

Slide 75 text

Q01 – Hash me! ・もちろん専用の Operation で個別に求めてもいい ・解答 MD5: f221a4ccafec690101c59f726c95b646 SHA-1: 2098e4b62eaab213cbee73ba40fe4f1b8901a782 SHA-256: 94aa32a2c9c1d2db78318d9c68262c2f834abe26b6e9a661700324b55fdd5709

Slide 76

Slide 76 text

Q02 – Detect me! ・解答 00.nanikore: PE (Portable Executable, Windows 実行ファイル) マジックナンバー “4D 5A” (MZ) が目印

Slide 77

Slide 77 text

Q02 – Detect me! ・余談 (というかどうでもいい話) ハッシュ値を計算して調べるとわかるが、これは Windows 標準の “Notepad.exe”

Slide 78

Slide 78 text

Q02 – Detect me! ・01.nanikore “Detect File Type” では MS Office (2007~) ファイルのいずれかというところまでしか わからない (他の判定ツールの中にはズバリで特定できるものもあるので各自試してみてください)

Slide 79

Slide 79 text

Q02 – Detect me! ・01.nanikore 試しに “Unzip” してみると “word/(なんとか).xml” という XML ファイルが複数見つかる ことから、MS Word で作成されたことがわかる 解答: DOCX ファイル (MS Word 2007~)

Slide 80

Slide 80 text

Q02 – Detect me! ・02.nanikore “Detect File Type” してみると、これまた MS Office (~2003) ファイルのいずれかという ことまでしかわからない

Slide 81

Slide 81 text

Q02 – Detect me! ・02.nanikore 手がかりを得るため “Strings” をかけてみると、作成したソフトの名前がそのまま記載 されているのが見つかる 解答: DOC ファイル (MS Word ~2003)

Slide 82

Slide 82 text

Q02 – Detect me! ・余談 (というかどうでもいい話) 01.nanikore と 02.nanikore の拡張子をそれぞれ .docx、.doc に変更して Word などの ソフトで見るとわかるが、実は両者は文書としての見た目はまったく同じもの しかしファイルフォーマットはまったく異なる いくつも問題ファイルを作るのが面倒だったので流用しただけ 01.docx 02.doc

Slide 83

Slide 83 text

Q02 – Detect me! ・解答 03.nanikore: PDF マジックナンバー “25 50 44 46” (%PDF) があるので直接見てもわかりやすい

Slide 84

Slide 84 text

Q02 – Detect me! ・解答 04.nanikore: PNG マジックナンバー “89 50 4E 47 0D 0A 1A 0A” (.PNG….) は SHIFT-JIS では “臼NG….” になる

Slide 85

Slide 85 text

Q02 – Detect me! ・余談 ”Render Image” をレシピに入れれば画像を描画できる “Play Media” なら動画や音声ファイルも再生可能 (ただし容量のデカいファイルは苦手) 右下はオープンソースのセキュリティアニメ「こうしす!」の CM※ を再生したところ ※ https://www.nicovideo.jp/watch/so30343184 面白いし勉強にもなるので個人的におすすめのシリーズ

Slide 86

Slide 86 text

Q02 – Detect me! ・05.nanikore “Detect File Type” は何も見つけられず、「暗号化か圧縮されてるんじゃね」的なことを 言ってるがまずは落ち着いて中身を見てみよう

Slide 87

Slide 87 text

Q02 – Detect me! ・05.nanikore 実際の中身はこれだけ 最初の “!#/bin/bash” はシェルスクリプトの先頭に記載される「シバン」というもの (知らなくてもググればすぐわかる) 解答: シェルスクリプト (テキストファイルでも間違いではないが、△)

Slide 88

Slide 88 text

Q03 – picoCTF 2019 から “Glory of the Garden” ・一見単なる庭の写真だが、このファイルの中にフラグが隠されている

Slide 89

Slide 89 text

Q03 – picoCTF 2019 から “Glory of the Garden” ・フラグを見つけるの自体はごく簡単で、”Strings” の結果の最後に含まれている フラグの書式から、”picoCTF{}” の 9文字+中身で 10文字以上になることがわかっている ので、最初からある程度大きな文字数で調べることができる (図では 12文字) 解答:picoCTF{more_than_m33ts_the_3y3eBdBd2cc}

Slide 90

Slide 90 text

Q03 – picoCTF 2019 から “Glory of the Garden” ・TIPS フラグの形式が最初から分かっているので、それで “Filter” してしまえば目 grep も必要 なくて楽

Slide 91

Slide 91 text

Q03 – picoCTF 2019 から “Glory of the Garden” ・余談 JPEG ファイルは “FF D8” から始まり “FF D9” で終わるように定められている (らしい) (“FF D9” 以降にデータを記録することもできるが画像ビューアには無視される) 本ファイルのフラグが隠されているのはまさに “FF D9” の直後からなので、本来の画像 の後ろに後から付け足したということ そのため画像ビューアで見ても何も見つからないのだが、本来不自然な状態ではある ので、それを検出できるツールもある 青い空を見上げればいつもそこに白い猫

Slide 92

Slide 92 text

Q04 – Message from Hex ・”To Hexdump” を使うと答えが見える。Strings などではダメ 解答: リア充爆発

Slide 93

Slide 93 text

Q05 – Private or Public ・”Parse IP range” を使うと、172.16.0.0/12 の範囲は 172.16.0.0 から 172.31.255.255 の間とわかる。172.30.1.1 はこの範囲内である 解答: 含まれる ・172.16.0.0/12 はクラス B のプライベートアドレスの範囲

Slide 94

Slide 94 text

Q06 – Moby Dick ・”MD.txt” の中身を “Input” にコピペした後、境界となる任意の文字列を置いて ”MD2.txt” の中身を再びコピペ (順番は逆でもOK) し ”Diff” をレシピにセット ・境界文字列は何でもいいが、同じ文字列がテキスト中に存在すると失敗してしまうので、 なるべく「なさそう」なものを設定しよう 図では “====” にした

Slide 95

Slide 95 text

Q06 – Moby Dick ・2つのテキストの差分にあたる文字には色が付いている 上から抜き出せばそのまま答えになっている 解答: Diff is useful.

Slide 96

Slide 96 text

Q07 – Deobfuscate it ・元のコードは短いが、ワンライナーで構造がつかみにくいうえ、文字が 16進数に変換 されており、人間が読むにはちょっと苦しい ・”Javascript Beautify” と “Syntax highlighter” を使うとぐっと読みやすくなる

Slide 97

Slide 97 text

Q07 – Deobfuscate it ・整形後のコードは、大雑把に言って 3つの部分に分かれている - 配列 “_0xcb2d” の定義 - 関数 “hi()” の定義 - 関数 “hi()” を実行

Slide 98

Slide 98 text

Q07 – Deobfuscate it ・関数 “hi()” は配列 “_0xcb2d” の要素を使って定義しているが、要するに “console.log(‘Hello World!’)” という処理をしているだけのようだ ・”console.log” は渡された値をブラウザのコンソールに表示するメソッド (ググればわかる) 解答: ブラウザのコンソールに “Hello World!” という文字列を表示する

Slide 99

Slide 99 text

Q07 – Deobfuscate it ・余談 (というかどうでもいい話) ・難読化する前のコードはこれ

Slide 100

Slide 100 text

Q08 – Many many IoCs ・テキストとして Input した場合 レシピに “Find / Replace” を追加、”Find” に “¥n”、”Replace” に “,” をそれぞれ設定 解答:長すぎるので略

Slide 101

Slide 101 text

Q08 – Many many IoCs ・ファイルそのものを Input した場合 レシピに “Find / Replace” を追加、”Find” に “¥r¥n”、”Replace” に “,” をそれぞれ設定 解答:長すぎ(ry

Slide 102

Slide 102 text

Q09 – Egg, bacon, sausage and SPAM ・添付ファイルは Base64 でエンコードされている “ms-excel.sheet.macroEnabled” とか “filename=”Suspicious.xlsm“” とかのメタデータから MS Excel のマクロ有効化ブックっぽいなと当たりがつけられる 添付ファイルのデータ

Slide 103

Slide 103 text

Q09 – Egg, bacon, sausage and SPAM ・”Regular expressuion” を使って正規表現で Base64 部分を抽出するのは実践編と一緒 まったく一緒でも芸がないのでここでは先頭に残ってしまった余計なデータを除去する 別の方法をご紹介 この部分が残ってしまった……

Slide 104

Slide 104 text

Q09 – Egg, bacon, sausage and SPAM ・方法1 “Drop bytes” で無理矢理余計な部分を削除する “Length” には 13※ を設定する ※改行コードが残っててもデコードに支障はないので、9~12 でも可

Slide 105

Slide 105 text

Q09 – Egg, bacon, sausage and SPAM ・方法2 “Tail” を使う “Tail” は本来最後の n 行を取り出す Operation だが、”Number” にマイナスの値 (-n) を 設定すると、先頭の n 行以外の部分を取り出すことができる これを利用して、-2※ を設定すると余計な部分を除去できる ※改行コードが残っててもデコードに支障はないので、-1 でも可

Slide 106

Slide 106 text

Q09 – Egg, bacon, sausage and SPAM ・どれかしらの方法で過不足なく Base64 エンコード部分を抽出できたら、”From Base64” でデコード 解答: 下画像の “Output” 部分に見えてるやつ ・Q10 に続く……

Slide 107

Slide 107 text

Q09 – Egg, bacon, sausage and SPAM ・余談 (というかどうでもいい話) ・”suspicious-mail.eml” をメーラーで開いた状態 控えめに言って怪しさしかない

Slide 108

Slide 108 text

Q10 – Unknown Remarkable Literals ・Q09 の続き (用意されたファイルを使っても OK) ・デコードした添付ファイルは MS Office (2007~) である (ファイルの先頭が “PK..” である ことからも、ZIP 系のファイルであることがわかる) これはデコード前にメタデータから推測したことと整合的である

Slide 109

Slide 109 text

Q10 – Unknown Remarkable Literals ・MS Office (2007~) であれば “Unzip” で中身の XML ファイルなどを取り出せる ・さらに “Extract URLs” で URL を抽出

Slide 110

Slide 110 text

Q10 – Unknown Remarkable Literals ・出てきた URL の大部分は、openxmlformats.org などファイルフォーマットに起因する 不審でない URL。これらを “Filter” で除くと楽 ・Filter なり目 grep なり使って探すと、正体不明の URL が1個だけ発見できる 解答: http://xn--ihq082e.site/maliciouspage.php ・Q11 に続く……

Slide 111

Slide 111 text

Q11 – Puny puny ・Q10 の続き(用意された URL を使っても OK) ・Q10 で発見された謎の URL はドメイン名が “xn--” で始まることから、Punycode で表現 されていることがわかる 国際化ドメイン名に直せば何か情報が得られるかもしれない

Slide 112

Slide 112 text

Q11 – Puny puny ・後の処理のためにドメイン名部分だけを取り出す。コピペして新しく Input に入れても OK だが、ここでは前回のレシピにそのままつなげるためちょっと工夫する やり方は一例で、他にもいろいろ方法はあるはず ・”Extract domains” でドメイン名を取り出す。ところが、ドメイン名ではない部分 “maliciouspage.php” も取り出されてしまう この部分はいらない……

Slide 113

Slide 113 text

Q11 – Puny puny ・”Head” で 1行目だけ取り出す “Head” は “Tail” の逆で、先頭から n 行を取り出す Operation 今回は先頭行だけ残したいので、”Number” には 1 を設定

Slide 114

Slide 114 text

Q11 – Puny puny ・”From Punycode” をレシピに追加 “Internationalised domain name” に必ずチェックを入れること ・”xn--ihq082e.site” は “不正.site” という国際化ドメイン名になることがわかる まあ、名前的に不正サイトなんでしょうね※…… 解答: 不正.site (不正サイトという設定) ※実際には “不正.site” はこういうときの例示用に取得されたドメインで、本物の不正サイトではなくアクセスしても無害

Slide 115

Slide 115 text

Q11 – Puny puny ・余談 この不審な URL がどこに書き込まれていたのかというと、実は VBA コード中のコメント よってユーザの意図に反してこの URL にアクセスすることは基本的にない ・URL 抽出は簡単で強力だが、「抽出されたものがどこにある何でどういう働きをする のか」はきちんと確認すべき マルウェアの場合、わざと目につきやすいところにダミーアドレスが混ぜてあることも あるそうだ コメントなので、プログラムとして動作しない

Slide 116

Slide 116 text

Q12 – The fork in the left hand ・”ps.txt” には “Powershell -w hidden -enc (Base64 エンコードされたコマンド)” のコマンド 列が 10個入っている Base64 エンコードされている部分をまずデコードする必要がある ・当該部分を力ずくでコピペしてもいいが、”Regular expression” で Base64 部分を取り出す と楽 ※図では Input にファイル”ps.txt” を指定しているが、内容を Input にコピペしても OK

Slide 117

Slide 117 text

Q12 – The fork in the left hand ・1行ごとにデコードするため、”Fork” をレシピにセット (delimiter は両方とも “¥n” ) ・続いて ”From Base64” でデコードすると難読化されたコマンド列が出てくる

Slide 118

Slide 118 text

Q12 – The fork in the left hand ・難読化のためにやたらと挿入されている「`」と「”+”」 を “Find / Replace” で削除 ・個別に消してもいいが、今回は置換先の文字列が同じ (というか「ない」) なので、 正規表現を用いて “(`|”¥+”)” と指定すれば一発で全部消すことができる

Slide 119

Slide 119 text

Q12 – The fork in the left hand ・あとは “Extract URLs” で抽出すれば終了 解答: http://127.0.0.1/virus.exe http://127.0.0.2/malicious.exe http://127.0.0.3/iwas.exe http://127.0.0.4/verytired.exe http://127.0.0.5/tomake.exe http://127.0.0.6/this.exe http://127.0.0.7/sample.exe http://127.0.0.8/question.exe http://127.0.0.9/tsukareta.exe http://127.0.0.10/otsukaresamadeshita.exe ※全部ローカルループバックアドレス (として予約されたアドレス) なので実際にはアクセスしても何も落ちてはこない

Slide 120

Slide 120 text

まとめ ・CyberChef は誰でも気軽に使えるうえ、工夫次第でいろいろできる強力なツール ・本資料では小技の類に終始したが、使いこなせば本格的なマルウェアの難読化など にも対処できる ・ぜひ各自で創意工夫のうえ、いいレシピができたら共有してください

Slide 121

Slide 121 text

Make Your Own Recipe!!