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

入門ハンズオン CyberChef

入門ハンズオン CyberChef

CyberChef の基本的な使い方を紹介します。

CyberChef (サイバーシェフ) は 英国政府通信本部 (GCHQ) が開発した万能変換ツールです。
https://gchq.github.io/CyberChef/

am7cinnamon

April 29, 2021
Tweet

More Decks by am7cinnamon

Other Decks in Technology

Transcript

  1. 入門ハンズオン
    CyberChef

    View Slide

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

    View Slide

  3. 本資料について

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. CyberChef の画面

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  21. 実践編

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  40. 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
    ・どんな引数があって何の値が指定されているか一目でわかるようになった

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  51. ハッシュ値抽出
    ・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)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  70. 分割して処理する
    ・”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 デコードしようとしてもうまくいかない
    各ブロックごとにデコードする必要がある

    View Slide

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

    View Slide

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

    View Slide

  73. 解答編

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  93. 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 のプライベートアドレスの範囲

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  119. 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
    ※全部ローカルループバックアドレス (として予約されたアドレス) なので実際にはアクセスしても何も落ちてはこない

    View Slide

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

    View Slide

  121. Make Your Own Recipe!!

    View Slide