Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

入門ハンズオン 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 基礎知識 ・実践編 - ハッシュ値計算 - ファイルタイプ判定

    - 文字列抽出 - バイナリ閲覧 - CIDR 計算 - URL 抽出 - URI 分解 - テキスト比較 - Code beautify - 1列→ 1行 - 1行→ 1列 - ハッシュ値抽出 - Base64 デコード - Office ファイルからの URL の抽出 - PDF ファイルからの URL の抽出 - 国際化ドメイン名と Punycode - 分割して処理する ・解答編
  2. 本資料について ・本資料は、CyberChef に初めて触れる、または多少使ったことはあるが何ができるのか よく知らない……という方向けに作成したものです ・実際にファイルやテキストを分析しながら、次のことを学んでいただくことを目的として います 公開版では問題ファイルは提供していません。ご了承ください - CyberChef の基本的な使用法

    - 簡単で使う機会の多いレシピの使い方 ・場合によっては CyberChef 以外に使えるツールなども併せて紹介します ・入門者を対象としているので、すでにバリバリ使いこなしている方には物足りない内容 となっています。ご了承ください
  3. CyberChef is 何? ・CyberChef (サイバーシェフ) は、英国政府通信本部 (GCHQ) が開発した Web アプリ

    ケーション ・”The Cyber Swiss Army Knife” を自称する高機能ツール - Swiss Army Knife とはナイフのほか缶切り・栓抜きなど多数の機能を持つマルチツール のこと ・各種エンコード・デコード、データ変換、圧縮解凍、テキスト処理など、行うことができる 処理 (Operations) は数百にのぼる ・オープンソースであり、誰でも無料で使用可能 ・↓の URL にアクセスすればすぐ使える https://gchq.github.io/CyberChef/
  4. CyberChef のメリット CyberChef には多くの優れた点がある ・機能が豊富 これさえあれば数百の処理を一元的に行うことができる ・始めやすい 会員登録やインストールが不要 ・直感的に操作できる GUI

    操作。事前に文法を覚えたりする必要がない ・処理を繋げられる 前の処理の結果を次の処理に渡せる。複雑な処理も一発で終了
  5. CyberChef のメリット ・ブラウザだけで機能する Chrome と Firefox がサポートされている ・オフラインでも使える 事前に DL

    しておく必要があるが、完全オフラインでも使える※ 隔離された環境でも利用できるし、機微なデータをネットに晒すことなく処理できる ・レシピをセーブ・ロードできる 以前作ったレシピを再利用できる もちろん他の人が作ったレシピを読み込むことも可能 ※ネット環境を必要とする機能もあるがごく一部
  6. Recipe 実行する機能をセットにしたもの ドラッグ&ドロップで機能の順番を入れ替えら れる また、🚫を押して機能を無効化できる 処理の順番は基本的に上からだが、分岐や繰 り返しもできる 図の場合、一番下の “Jump” の次に一番上の

    “Label” へジャンプし、これを 10回繰り返す (結果として間の “From Base64” が 11回実行される) ゴミ箱のアイコンでレシピをまとめて削除できる (間違って押さないように!)
  7. Recipe 中央の “BAKE!” が実行ボタン 左の “STEP” はステップ実行 押すたびに各処理を一つずつ順番に実行して いく 右の

    “Auto Bake” にチェックを入れていると、 “BAKE!” を押さなくても自動で実行が始まる チェックしていると、ちょっと入力をいじっただけ で再処理が始まってしまうので、時間のかかる 処理を行うときは外しておいた方が無難
  8. Input 処理する前のデータ (入力) を指定する 入力には次のものが指定できる ・テキスト (白い部分に直接入力もしく はコピペ) ・ファイル ・フォルダ

    タブを増やして、複数の入力に対して同じレ シピを使うこともできる ゴミ箱のアイコンで入力をまとめて全部削除 できる (間違って押さないように!)
  9. Input ① ② ③ ④ ⑤ ① タブを追加 ② フォルダを入力として指定

    ③ ファイルを入力として指定 ④ ゴミ箱。入力として指定されているすべてを削除 ⑤ ペインレイアウトをリセット (使い方がよくわからない……)
  10. Output ① ② ③ ④ ⑤ ① ファイルとして保存 ② クリップボードにコピー

    ③ 入力を出力で置き換える (異様に時間かかるので使わない方がいい) ④ 元に戻す ⑤ “Output” ペインを最大化
  11. ハッシュ値計算 – ハンズオン ・Q1: Hash me! ・Q01 のフォルダに入っている “Hashme.bin” の

    MD5、SHA-1、SHA-256 ハッシュ値を 計算してください ・まとめて一度に計算してもいいし、それぞれ別個に計算しても構いません
  12. ハッシュ値取得 – 代替ツール ・右クリックメニューの「プロパティ」にタブ「ハッシュ値」を追加する “HashTab” や複数 ファイルのハッシュ値をまとめて計算できる “HashMyFiles” “HashSum” などのツールが

    使える ・CyberChef は「入力 (1つ)→レシピ→出力」という構造上、複数ファイルについて計算して 結果を比較するような使い方には向いていない その点では専用ツールに優位性がある
  13. ファイルタイプ判定 – ハンズオン ・Q02: Detect me! ・Q02 のフォルダに入っている “00~05.nanikore” のファイルタイプを判定してください

    ・一部 “Detect File Type” だけでは正確にわからないファイルも含まれています 適宜調査して本当は何なのか特定してください
  14. ファイルタイプ判定 – 代替ツール ・Windows 環境では、”TrID” およびその GUI 版である “TrIDNet” (要.NET

    Framework) が有名 ・うさみみハリケーン同梱の「青い空を見上げればいつもそこに白い猫」も標準で TrID と 同等の判別能力がある (ほかにもいろいろできるが……) ・Linux なら “file” コマンドが使える
  15. 文字列抽出 ・ファイルによっては、役立つ情報が文字列という形でファイル内に格納されている ことがある ・例えば通信先や呼び出す API の名称など ・CyberChef では “Strings” でできる

    デフォルトでは “Minimum length” が 4になっているが、これでは短すぎてゴミが大量に 出てくるので、とりあえず 7~8文字程度でスタートするとよい ・”Display Total” にチェックを入れると “Total found: xx” と見つかった文字列の数を教えて くれる
  16. 文字列抽出 – ハンズオン ・Q03: picoCTF 2019 から “Glory of the

    Garden” ・Q03 のフォルダに入っている “garden.jpg” からフラグを見つけてください フラグの形式は “picoCTF{xxxxxx}” です ・本問はカーネギーメロン大学が実施している picoCTF からお借りしました https://picoctf.org/
  17. バイナリ閲覧 ・ファイルを 16進数の塊として確認するには、通常バイナリエディタ (ヘキサエディタ) と 呼ばれるツールが必要になるが、見るだけならば CyberChef でも可能 ・”To Hexdump”

    がそれ。通常のバイナリエディタのように「アドレス」「コード」「対応する 文字」の順に表示してくれる ・ただし、文字の表示形式の都合で、一部のマジックナンバーは日本でよく知られた 見た目と違うので注意 例えば .xls など、MS Office 2003 以前のファイルのマジックナンバー ”D0 CF 11 E0 A1 B1 1A E1”は、Windows ANSI では “ミマ.爍ア.・” だが CyberChef では “ÐÏ.ࡱ.á” になる
  18. CIDR 計算 ・現代の TCP/IP では、サブネットの範囲を CIDR 表記と呼ばれる表現で表すのが一般的 (例: 192.168.0.0/16) ・/

    に続く数字が 8の倍数であれば、その範囲がわかりやすいが、それ以外の場合は いちいち計算するのが面倒 ・CyberChef なら CIDR 表記から IP アドレスの範囲を一発で計算してくれる “Parse IP range” がそれ
  19. CIDR 計算 – ハンズオン ・Q05: Private or Public ・IPv4 アドレス

    172.30.1.1 が 172.16.0.0/12 の範囲に含まれるか調べてください
  20. URL 抽出 ・”Extract URLs” で、入力に含まれる URL (http:// や https:// などで始まるもの)

    を抽出して 表示する ・いちいち自分で正規表現を書いたりする必要がなく簡単に使える。非常に便利 ・”Extract IP addresses” も使える v4・v6 に対応しているほか、ローカル IP アドレスを除外するオプションも付いている ・”Extract domains” は微妙。”index.html” のようなものもドメイン扱いしてしまう ・そのほか、日付、メールアドレスなどを抽出可能
  21. URL 抽出 ・”Extract URLs” をはじめとする抽出系と相性のいい Operation をいくつかご紹介 ・”Filter” : ある語句

    (正規表現で指定) を含むものだけに絞る “Invert condition” にチェックを入れれば「ある語句を含まない」ものに絞ることも可能 ・”Sort” : 並べ替え ・”Unique” : 重複を削除 ・CyberChef はログ分析の類にはあまり適していないが (というか容量の大きなファイル 自体苦手)、ごく簡単な処理ならこれらでできることもある
  22. 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 ・どんな引数があって何の値が指定されているか一目でわかるようになった
  23. テキスト比較 ・大部分一緒なのだが、細部が違う 2つのテキストの差分を知りたい場合がある ・CyberChef では “Diff” が使える ・”Input” に境界 (Sample

    delimiter) で区切られた 2つのテキストを入力して BAKE! 境界は任意に指定できるので、テキスト中になさそうな文字 (列) を指定するといい
  24. テキスト比較 – ハンズオン ・Q06: Moby Dick ・Q06 のフォルダを開き、中にある “MD.txt” “MD2.txt”

    の内容を比較して差分を調べて ください ・差分の文字をまとめるとメッセージが現れます。そのメッセージが答えです
  25. Code beautify – ハンズオン ・Q07: Deobfuscate it ・Q07 のフォルダにある Javascript

    コード “JS.txt” を解読し、その動作を明らかにして ください JS.txt の中身
  26. Code beautify – 代替ツール ・オンラインツールがいろいろ出回っているようだ Javascript なら、例えば “Online JavaScript Beautifier”

    https://beautifier.io/ ・「◦◦ beautifier」などで検索すると出てくるかも ただしオンラインツールには機微なコード (インシデント関係など) を上げるべきではない
  27. 1列→1行 ・例えば、”,” (カンマ) で区切る場合は、改行を , に置換すればいい ・”Find / Replace” をレシピにセット、”Find”

    に “¥n” (¥ はバックスラッシュ) ※を入力 このとき、右端の “REGEX (正規表現)” を変更しないこと ・”Replace” には “,” を入力すれば OK ※うまくいかない場合、¥n を ¥r¥n に変えればうまくいくことがある
  28. 1列→1行 – ハンズオン ・Q08: Many many IoCs ・マルウェアの通信先ドメインのリストを入手しました (という設定) Q08

    のフォルダ内の “IoC.txt” がそれ 全部で 400個もあります ・これらをまとめてフィルタリングソフトにぶち込んでブロックしたい フィルタリングソフトは (禁止ドメイン 1),(禁止ドメイン 2), … と、カンマで区切ってやれば 何個でも一気に設定できるものとします ・設定を一度で終わらせるため、ドメイン名のリストをカンマで区切られた 1行の形式に 変換してください
  29. ハッシュ値抽出 ・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)
  30. Base64 デコード ・CyberChef では様々なエンコード・デコードを行えるが、中でもよく使うのが Base64 ・エンコードは “To Base64” で、デコードは “From

    Base64” でそれぞれ行える ・例えば “5YWl6ZaA44OP44Oz44K644Kq44OzQ3liZXJDaGVm” を Base64 デコードすると “入門ハンズオンCyberChef” になる
  31. Base64 デコード ・Base64 は大小英数字と “+”, “/”, “=” からなる文字列 それを利用して正規表現にマッチさせることができる ・具体的には

    ”Regular expression” で次のように設定する [0-9a-zA-Z+/=]{30,} これが Base64 の基本形 ・{30,} の部分は「30文字以上」を表す。この数字は適宜調節する {30,100} のように上限を設けることもできる ・これを応用すれば、いろいろ入り混じったデータの中から Base64 部分だけを取り出す ことができる ・場合によって細かい調整が必要になる場合がある
  32. Base64 デコード ・レシピに ”Regular expression” を追加、添付ファイル部分にマッチさせる マッチした部分の確認のため、とりあえず “Output format” を

    “Highlight matches” (マッチした部分の色を変えて強調) に設定 ・改行で分かれた部分が全部別物扱いされてしまっていることが色分けからわかる
  33. Base64 デコード ・先頭の “kmmqhwyu0” は関係ないのでマッチしないようにしたい 正規表現の先頭に “^” (¥b でも可) を追加する

    完成した正規表現は ^[0-9a-zA-Z+/=¥r¥n]{100,} ※青字は基本形から変更した部分 ・”Output format” を “List matches” (マッチした部分を抽出) に変更 ※先頭に変な改行が残っているが、後の “From Base64” はデフォルトで改行を除去する設定になっているので、デコードに支障はない
  34. Base64 デコード ・先頭の “PK..” から ZIP ファイルの仲間であることが推測できる ダメ押しに “Detect File

    Type” すると MS Office (2007~) ファイルであることが判明 ・他にもハッシュ値を計算したり文字列や URL などを抽出したり…… ファイルを保存せず CyberChef 上だけでもいろいろできることがわかる
  35. Base64 デコード – ハンズオン ・Q09: Egg, bacon, sausage and SPAM

    ・不審なファイルが添付された怪しいメールを受信しました (という設定) Q09 のフォルダに入っている “suspicious-mail.eml” がそれです ・添付ファイルを CyberChef 上で取り出してください (メーラーで開いて保存すればすぐですが、不審なファイルをむやみに保存したくない ですよね……?) ・なおこのファイルは、見た目はともかく中身はマルウェアでも何でもないので保存して しまっても害はありません
  36. Office ファイルからの URL の抽出 ・MS Office 2007 以降のファイルフォーマット (.docx、.xlsx、.pptx など)

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

    などを簡単に抽出できる ・実際にやってみると大量に出てくるが、ほとんどはファイルフォーマットに起因する 怪しくない URL (microsoft.com や openxmlformats.org など)
  38. Office ファイルからの URL の抽出 ・これらの正規 URL は分析の邪魔になるのでフィルタ (“Filter”) で除外してしまう ・除外リスト

    - http://schemas.openxmlformats.org - http://schemas.microsoft.com - http://purl.org - http://www.w3.org ・”Invert condition” にチェックを入れること また、”.” はバックスラッシュでエスケープすること (エスケープしないと、”.” は「任意の一文字」に マッチしてしまう)
  39. Office ファイルからの URL の抽出 – ハンズオン ・Q10: Unknown Remarkable Literals

    ・Q09 で取り出した添付ファイルから URL を抽出して、不審な URL を見つけてください ・Q09 を事前に実施していない方は Q10 のフォルダに “Suspicious.xlsm” があるのでそれ を使ってください
  40. PDF ファイルからの URL の抽出 ・PDF ファイルは Unzip の必要がなくそのまま抽出できる (実はなんでも抽出できるわけではないが、話が長くなるのでここでは触れない) ・Office

    ファイルと同様多くの PDF ファイルにはファイルフォーマット由来の URL が含まれ るので、 フィルタで除外することを推奨 - http://www.w3.org - http://ns.adobe.com - http://purl.org ・これらのファイルをよく扱うなら、あらかじめ “Extract URLs” と “Filter” をセットしたレシピ を作って保存しておくといい
  41. 国際化ドメイン名と Punycode – ハンズオン ・Q11: Puny puny ・Q10 で” Suspicious.xlsm”

    から抽出した不審な URL は Punycode で表現されています これを元のドメイン名 (国際化ドメイン名) に変換し、怪しいサイトかどうか評価して ください ・Q10 を事前に実施していない方は、Q11 のフォルダに “URL.txt” があるのでそれに記載 の URL を使ってください
  42. 分割して処理する ・”Fork” は「指定した区切り文字によって入力を分割し、分割後を 1単位として以後の 処理を実施させる」働きを持つ Operation ・”Split delimiter” で分割のための区切り文字を、”Merge delimiter”

    で出力時の区切り 文字をそれぞれ指定する ・例えば “Split delimiter” に “¥n” (改行) を指定すれば、1行ごとに次の処理を行わせるこ とができる ・”Fork” で分割されたものを再度まとめるには “Merge” を用いる
  43. 分割して処理する ・”Fork” をレシピにセット、”Split delimiter” に “*”、“Merge delimiter” に “¥n” (改行)

    を それぞれ指定 ・続いて “From Base64” をセットするとブロックごとにデコードできる
  44. 分割して処理する – ハンズオン ・Q12: The fork in the left hand

    ・マルウェア (ダウンローダ) が実行する PowerShell スクリプトを 10種類入手しました (という設定) Q12 のフォルダに入っている “ps.txt” がそれです ・このスクリプトを解読し、マルウェアの通信先 URL をすべて特定してください ・PowerShell のオプション “-enc” は “-EncodedCommand” を省略して表現したもので、 Base64 エンコードされた文字列をコマンドとして実行する働きをもちます
  45. Q01 – Hash me! ・もちろん専用の Operation で個別に求めてもいい ・解答 MD5: f221a4ccafec690101c59f726c95b646

    SHA-1: 2098e4b62eaab213cbee73ba40fe4f1b8901a782 SHA-256: 94aa32a2c9c1d2db78318d9c68262c2f834abe26b6e9a661700324b55fdd5709
  46. Q02 – Detect me! ・解答 00.nanikore: PE (Portable Executable, Windows

    実行ファイル) マジックナンバー “4D 5A” (MZ) が目印
  47. Q02 – Detect me! ・01.nanikore “Detect File Type” では MS

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

    XML ファイルが複数見つかる ことから、MS Word で作成されたことがわかる 解答: DOCX ファイル (MS Word 2007~)
  49. Q02 – Detect me! ・02.nanikore “Detect File Type” してみると、これまた MS

    Office (~2003) ファイルのいずれかという ことまでしかわからない
  50. Q02 – Detect me! ・余談 (というかどうでもいい話) 01.nanikore と 02.nanikore の拡張子をそれぞれ

    .docx、.doc に変更して Word などの ソフトで見るとわかるが、実は両者は文書としての見た目はまったく同じもの しかしファイルフォーマットはまったく異なる いくつも問題ファイルを作るのが面倒だったので流用しただけ 01.docx 02.doc
  51. Q02 – Detect me! ・解答 03.nanikore: PDF マジックナンバー “25 50

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

    4E 47 0D 0A 1A 0A” (.PNG….) は SHIFT-JIS では “臼NG….” になる
  53. Q02 – Detect me! ・余談 ”Render Image” をレシピに入れれば画像を描画できる “Play Media”

    なら動画や音声ファイルも再生可能 (ただし容量のデカいファイルは苦手) 右下はオープンソースのセキュリティアニメ「こうしす!」の CM※ を再生したところ ※ https://www.nicovideo.jp/watch/so30343184 面白いし勉強にもなるので個人的におすすめのシリーズ
  54. Q03 – picoCTF 2019 から “Glory of the Garden” ・フラグを見つけるの自体はごく簡単で、”Strings”

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

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

    JPEG ファイルは “FF D8” から始まり “FF D9” で終わるように定められている (らしい) (“FF D9” 以降にデータを記録することもできるが画像ビューアには無視される) 本ファイルのフラグが隠されているのはまさに “FF D9” の直後からなので、本来の画像 の後ろに後から付け足したということ そのため画像ビューアで見ても何も見つからないのだが、本来不自然な状態ではある ので、それを検出できるツールもある 青い空を見上げればいつもそこに白い猫
  57. 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 のプライベートアドレスの範囲
  58. Q06 – Moby Dick ・”MD.txt” の中身を “Input” にコピペした後、境界となる任意の文字列を置いて ”MD2.txt” の中身を再びコピペ

    (順番は逆でもOK) し ”Diff” をレシピにセット ・境界文字列は何でもいいが、同じ文字列がテキスト中に存在すると失敗してしまうので、 なるべく「なさそう」なものを設定しよう 図では “====” にした
  59. Q07 – Deobfuscate it ・関数 “hi()” は配列 “_0xcb2d” の要素を使って定義しているが、要するに “console.log(‘Hello

    World!’)” という処理をしているだけのようだ ・”console.log” は渡された値をブラウザのコンソールに表示するメソッド (ググればわかる) 解答: ブラウザのコンソールに “Hello World!” という文字列を表示する
  60. Q08 – Many many IoCs ・テキストとして Input した場合 レシピに “Find

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

    / Replace” を追加、”Find” に “¥r¥n”、”Replace” に “,” をそれぞれ設定 解答:長すぎ(ry
  62. Q09 – Egg, bacon, sausage and SPAM ・添付ファイルは Base64 でエンコードされている

    “ms-excel.sheet.macroEnabled” とか “filename=”Suspicious.xlsm“” とかのメタデータから MS Excel のマクロ有効化ブックっぽいなと当たりがつけられる 添付ファイルのデータ
  63. Q09 – Egg, bacon, sausage and SPAM ・”Regular expressuion” を使って正規表現で

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

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

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

    Base64” でデコード 解答: 下画像の “Output” 部分に見えてるやつ ・Q10 に続く……
  67. Q09 – Egg, bacon, sausage and SPAM ・余談 (というかどうでもいい話) ・”suspicious-mail.eml”

    をメーラーで開いた状態 控えめに言って怪しさしかない
  68. Q10 – Unknown Remarkable Literals ・Q09 の続き (用意されたファイルを使っても OK) ・デコードした添付ファイルは

    MS Office (2007~) である (ファイルの先頭が “PK..” である ことからも、ZIP 系のファイルであることがわかる) これはデコード前にメタデータから推測したことと整合的である
  69. Q10 – Unknown Remarkable Literals ・MS Office (2007~) であれば “Unzip”

    で中身の XML ファイルなどを取り出せる ・さらに “Extract URLs” で URL を抽出
  70. Q10 – Unknown Remarkable Literals ・出てきた URL の大部分は、openxmlformats.org などファイルフォーマットに起因する 不審でない

    URL。これらを “Filter” で除くと楽 ・Filter なり目 grep なり使って探すと、正体不明の URL が1個だけ発見できる 解答: http://xn--ihq082e.site/maliciouspage.php ・Q11 に続く……
  71. Q11 – Puny puny ・Q10 の続き(用意された URL を使っても OK) ・Q10

    で発見された謎の URL はドメイン名が “xn--” で始まることから、Punycode で表現 されていることがわかる 国際化ドメイン名に直せば何か情報が得られるかもしれない
  72. Q11 – Puny puny ・”Head” で 1行目だけ取り出す “Head” は “Tail”

    の逆で、先頭から n 行を取り出す Operation 今回は先頭行だけ残したいので、”Number” には 1 を設定
  73. Q11 – Puny puny ・”From Punycode” をレシピに追加 “Internationalised domain name”

    に必ずチェックを入れること ・”xn--ihq082e.site” は “不正.site” という国際化ドメイン名になることがわかる まあ、名前的に不正サイトなんでしょうね※…… 解答: 不正.site (不正サイトという設定) ※実際には “不正.site” はこういうときの例示用に取得されたドメインで、本物の不正サイトではなくアクセスしても無害
  74. Q11 – Puny puny ・余談 この不審な URL がどこに書き込まれていたのかというと、実は VBA コード中のコメント

    よってユーザの意図に反してこの URL にアクセスすることは基本的にない ・URL 抽出は簡単で強力だが、「抽出されたものがどこにある何でどういう働きをする のか」はきちんと確認すべき マルウェアの場合、わざと目につきやすいところにダミーアドレスが混ぜてあることも あるそうだ コメントなので、プログラムとして動作しない
  75. Q12 – The fork in the left hand ・”ps.txt” には

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

    (delimiter は両方とも “¥n” ) ・続いて ”From Base64” でデコードすると難読化されたコマンド列が出てくる
  77. Q12 – The fork in the left hand ・難読化のためにやたらと挿入されている「`」と「”+”」 を

    “Find / Replace” で削除 ・個別に消してもいいが、今回は置換先の文字列が同じ (というか「ない」) なので、 正規表現を用いて “(`|”¥+”)” と指定すれば一発で全部消すことができる
  78. 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 ※全部ローカルループバックアドレス (として予約されたアドレス) なので実際にはアクセスしても何も落ちてはこない