4ensiX

4ensiX

Forensics専門でなければ、CTFはDFIRの勉強にほとんど役立たないことをを知ったこの頃

Recycle binのメモ(Windows 7, Vista, XP)

資料を読んで覚えておきたいと思ったRecycle binに関するメモ。

参考

Cyber Dumpster-Diving: $Recycle.Bin Forensics for Windows 7 and Windows Vista

Dumpster diving

フォレンジックで、Windowsのごみ箱を漁ることで良さそうな情報が見つかることもあるかもしれない。
ごみ箱を漁って情報を手に入れる行為(または人)はスカベンジャーとか言われるような気がしていたが、フォレンジック界隈では“Dumpster diving” と言われる?

ごみ箱のロゴの変遷

logos.fandom.com 確かに、いつからかロゴが透明になっていた。

ごみ箱のプロパティ

ごみ箱のプロパティでは、

  1. ごみ箱の設定を反映するドライブの選択
  2. ごみ箱のサイズ
  3. ごみ箱に移動せずに直接削除する

といった設定ができる。
Windows XPでは、全てのドライブに同じ設定を使用するオプションがあるらしい。

RECYCLER(XP) and $Recycle.Bin(7,Vista)

XPと7, Vistaとでごみ箱の実体があるパスが異なる。XPはC:\RECYCLER\であり、7,VistaではC:\$Recycle.Bin\となっている。cmd.exeでC:\にてdir /aで確認することができる。
論理パーティションを含め、複数のドライブを利用している場合はドライブごとにごみ箱の設定ができることから、ドライブごとにフォルダが作成されることが分かる。その場合、OSインストールされたパーティションではフォルダの名前が$Recycle.Binだが、他のパーティションでは$RECYCLE.BINになる。(どうして)

f:id:Zarat:20210713153849p:plain
RECYCLER(XP) vs $Recycle.Bin(7,Vista)

Recycle binの実体のフォルダの名前はSID

Figures 1, 2を見ると、フォルダの中にSから始まる文字列のフォルダがある。フォルダ名は、Security Identifier (SID)に基づき名付けられユーザごとに分かれたごみ箱の中身を示している。ちなみに、ユーザプロファイルが存在しても始めてログインするまでユーザにSIDは振られないらしい。

"S-1-5-21-51003140-4199384537-3980697693-500" について

S → Security Identifier セキュリティ識別子

1 → the Revision Level (This value has always been 1) リビジョンレベル 1以外になるケースは無い?

5 → the identifier for the Authority Level or “IdentifierAuthority” as Microsoft calls it. “5” refers to NT authority.
識別子機関の値、ほとんどは5(NT Authority) だが、Everyone グループの SID では1(世界機関?)

21-51003140-4199384537-3980697693 → the Domain or Local Computer Identifier (or one or more sub-authority values). This is a variable number that identifies which computer (or network) created the number.
ドメイン識別子。

500 → the Relative ID, and in this case, “500” means the user is a system administrator. A user or group that was not created by default will have a Relative ID of 1000 or greater. We see in Figures 1 and 2 that there are two folders that were not created by default (they end in “1000” and “1001”).
500はシステム管理者、Active Directoryドメイン管理者は512。ユーザグループを作らずにユーザを追加すると1000以上になる。ローカルであれば、SAMが管理して勝手に振る。ネットワーク ドメインではActive Directoryの機能が良しなにしてくれる。

セキュリティ識別子 (Windows 10) - Microsoft 365 Security | Microsoft Docs

オペレーティング システムの既知のWindows識別子

現在のSIDのリスト

regeditで、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileListにて確認できる。

管理者以外からは、他のユーザのごみ箱を参照できない

Recycle binの中身はSIDごと、つまりユーザごとに分かれていることは分かった。さらに、管理者権限無しに他のユーザのごみ箱を参照できない。逆にいえば、管理者は他のユーザのごみ箱に対し、ファイルを削除・作成する等自由に弄ることができる。
また、先の話の通りドライブレターが割り当てられたパーティションごとにRecycle binのフォルダが作成され、ユーザごとにフォルダが作成される。このため、3つのユーザが存在し4つのドライブを使った場合ごみ箱のフォルダは12個作られることになる。

Recycle bin内のファイル

Windows XP

先ほどのFigures 1(Windows XPのRecycle bin)を見ると、SIDが100xで終わるユーザのフォルダにはDCから始まるファイルとINFO2がある。例えば、"DC1.txt"のDはドライブ、Cはドライブの識別子を表しており、合わせて"C:\"で削除されたファイルを示している。さらに、"DC1.txt"の"1"はドライブを通した削除時間順の識別子、拡張子は削除前のファイルに合わせたものが付けられる。
Windows XPのでは削除されたファイルの内容以外の情報、すなわちファイル名、ファイルパス、ファイルサイズ、削除された時間等をSIDごとINFO2に保持している。ちなみに、Windows 95ファイルシステムNTFSとなる以前にINFOというファイル名を利用していたからINFO2になったと言われている。

Windows 7, Vista

Figures 2(Windows 7, Vista)を見ると、SIDが1000で終わるユーザのフォルダには"$IPTEYOA.txt"と"$RPTEYOA.txt"というファイルがある。
ファイル名は$I or $Rから始まり、6桁の英数字のfileID、拡張子になっている。$Rは削除されたファイルの実体であり、$Iは同じfileIDを持つ$Rから始まるファイルのファイル名、ファイルパス、ファイルサイズ、削除された時間等を保持している。つまり、SIDごとに全てのファイルのメタデータを保持していたINFO2とは異なり、ファイルごとにメタデータを持つファイルが存在する。
6桁の英数字のfileIDは命名規則が明らかになっていない。拡張子は削除前と同じものになっている。ちなみにフォルダーが削除された場合にはファイル拡張子が無い。

実際の$Iファイルの中身(一部)

オフセット0x8にはファイルサイズを表す64ビットの整数、オフセット0x10は128ビットの整数でファイルが削除された時刻、オフセット0x18には、元のファイル名を含む元のファイルパスが含まれる。

f:id:Zarat:20210713175957p:plain
$Iから始まるファイルの中身(一部)
モトローラ/マッキントッシュのハードウェアを除き値はリトルエンディアンであるのでビッグエンディアンに置き換えて読み取る。オフセット0x8は単純にhexからdecに変換する。オフセット0x10は、hexからdec変換した値が1601年1月1日から100ナノ秒単位の経過時間を表す。この計算はhex to decの結果をwinhexが何やらやってくれるようなことが参考文献には書いてあったが、日時計算(始日時+経過時間) - 高精度計算サイトの秒の項目に、ナノ秒から秒に変換した値を入れると計算可能であった。オフセット0x18は単純に"00"区切りでhex to stringのパスになっている。

offset value(little endian) value(big endian) converting
0x8 3E 1C 00 00 1C 3E 7230(bytes) [hex to dec]
0x10 10 84 1E B8 49 47 D5 01 01 D5 47 49 B8 1E 84 10 132090146024490000[hex to dec]
→2019年07月31日 水 02時43分22.449秒(UTC + 9:00)https://keisan.casio.jp/exec/system/1355989418
0x18 00 43 00 3A 00 5C 00 55 00 73 00 65 00 72 00 73 00 5C 00 6D 00 C : \ U s e r s \ m

ファイル名とファイルパスに関しては長いので以下略。ファイル名にunicodeの全角等が入ってくると大変かもしれない。
一応、フォレンジックをやる者として確認しておかないといけないことととして、タイムスタンプはOSの時計が変更されていた場合、メタデータを直接書き換えていた場合等があるので信じすぎない方が良い。

ごみ箱のサイズ

Windows 7/Vistaはごみ箱のサイズをMBで、Windows XPはボリュームの容量に対してパーセンテージで指定する。
WIndows XPでは、ごみ箱のサイズを0%に設定すると1バイトのファイルすらごみ箱に入らない。Windows 7/Vistaはごみ箱のサイズを0MBに設定しようとすると、拒否されて1MBに設定される。つまり、1MB(1,048,576 bytes)以下は設定できない。
ごみ箱に入れるファイルは、最大サイズより1bitでも大きいと入らず、削除するかどうかのメッセージが表示される。 また、ここで見ているサイズは削除されたファイルコンテンツ($Rファイル)のサイズであり、ディスク上のサイズではない。ディスク上のサイズは、コンテンツのサイズよりも少し大きいかもしれない。
Windows 7/Vistaでは、ごみ箱のサイズは$Rファイルの合計サイズであり、$Iの合計は含まれない。XPだとおそらくINFO2は含まれない?
Windows XPでは管理者のみがごみ箱の設定ができる。Windows 7/Vistaでは、それぞれのユーザが設定できる。

ごみ箱からファイルを戻す(ファイルの復元)

Windows 7またはWindows Vistaの場合は、$R-file と $I-file を使用して元のファイルのコピーを作成し、削除前の場所に配置する。 削除されたファイルが、今は存在しないフォルダーにあった場合にはフォルダを再作成する。
また、ごみ箱に送られたファイルは「削除日時」と「作成日時」のタイムスタンプを持つ。これらの値は$Iに記録される。 このファイルが元の場所に戻される、すなわち復元されると「削除日時」のタイムスタンプは失われて、再び「更新日時」と「アクセス日時」が付与される。 ここで、復元されたファイルはごみ箱への移動前のファイルの「作成日時」、「更新日時」、「アクセス日時」となっている。
フォルダも削除されたときには、「削除日時」と「作成日時」のタイムスタンプを持ち、復元時には「削除日時」が消える。
復元されたファイルが再び削除された場合には異なる名前の$I,$Rファイルが作成される。

ボリュームシャドウコピー

Windows ServerではVSS(Volume Shadow copy Service)でバックアップが取れるが、有料で触ったことが無いのでそのうち参考資料を読む。

docs.microsoft.com

Shadow Volume Trash: $Recycle.Bin Forensics for Windows 7 and Windows Vista Shadow Volumes

www.youtube.com

tailscaleでグローバルアドレス無し環境でのリモートアクセスの実現

前置きはせずに本題からいくと、Tailscaleを利用すればChrome remote desktopのように環境を気にせずにリモートアクセスの環境が整えられる。

Tailscaleでリモートアクセス

とにかく、使い方も簡単でOSごとのアプリケーションをインストールして、ログインが必要と言われて出てきたURLをブラウザに入力して適当なGoogleアカウントでログインするだけ。これだけで、自分のtailscaleネットワークにマシンを追加できるのでリモートアクセスする側される側を追加しておけばリモートアクセスができてしまう。
また、他のtailscaleユーザと自分のネットワークごとではなく、tailscaleネットワークに参加しているマシン単位でのアクセス共有ができる。これは、tailscaleのadmin consoleからmachinesにリストされている共有したいマシンを選んで、ラベルを指定して発行したURLに相手がアクセスするだけ。プライベートゲームサーバーの共有時の利用も良さそう。URLを共有するだけでマシンの共有ができてしまう。(恐ろしいけどスゴイ便利)

参考までに自分の環境の使用例

元々自分は家にあるデスクトップPCを出先からでもいつでも利用できるようにするためにChrome remote desktopを利用していたが、デスクトップPCの電源を常につけておくのことが嫌なのでどうにか遠隔から電源を入れられないかというところから始まった。
Wake on lanを利用しようと思っていたが、これでもやはり同じプライベートネットワークに電源を入れっぱなしにしておく端末が必要である。
そこでまず、rasberry pi 3 model A+を購入した。rasberry piなら必要電力も少なくて済むので今までより圧倒的に省エネになる。

余談

始めはrasberry piにChrome remote desktopを入れて電源を入れっぱなしにして、そこからWolしようと思っていたがarm版のchromeではChrome remote desktopがリモートアクセスされる側として利用できない。
~閑話休題~

購入したrasberry piにtailscaleを導入して、wakeonlanをインストールしてマジックパケットを発射できるようにしておく。
次に、デスクトップPCがWolを利用できるように設定する。
[参考]
【リモートワーク自由自在】Windows 10 Wake On LAN(WoL)入門:WoLでPCを起動(1/2 ページ) - @IT
Wake on Lan で Windows 10 の PC を遠隔で起動する - Qiita
Wake on LANによるWindows10遠隔起動の設定方法
WakeOnLan - Debian Wiki
こうして、Wolの設定をしてやれば、出先からtaislscaleでrasberry piにアクセスして家のPCに電源を入れて予め設定をしてあるChrome remote desktopでデスクトップPCにアクセスできる。

余談2

実はterminalだけでchrome remote desktopの設定ができる。
https://remotedesktop.google.com/headlessにアクセスするとファイルDLとインストールの指示、アクセスするアカウント選択後に設定に必要なコマンドが発行されて、それをterminalで実行してやることでterminalのみのマシンにremote desktop アクセスできる。
ただ、描画のためにxserverやら入れろってエラーが出るかもしれない。

Technical - ENISA を読んだ覚書

 以前に、Forensics学ぶならTechnical - ENISAが良いというようなことを聞いていて遂に取り組む時が来た。以下は、インシデントレスポンス未経験な学生が取り組んだ覚書である。ときどき、取り組むタイミングによってモチベに差があったので本当に適当になってしまっている部分はご了承ください。正直、バリバリ解析するみたいなものではなく、管理ツールの使い方のようなトレーニングはあまり真面目に取り組んでいません。

取り組む前にやるべきこと

Handbookは事前にDLしといた方が良い

見たいときに見れるように手元にあった方が良いし、リンク踏んでページ移動した場合とか一々読み込むよりは良いかと。

資料は取り組む20時間前にはDL始めとく

Technical - ENISAの資料、特にハンズオンのためのovaがある場所はDLめっちゃ時間かかるのでDLは早めに。参考までに、自分の環境だと一番重かったovaが19hくらい。個々のネット環境の差の所為もあるかもしれないが、自分の場合はpingで平均295ms。ブラウザでのダウンロードは全く上手くいかず、wgetでユーザエージェントをOpera 11.0にするのが一番安定した。何故!?

失敗したときのために、こまめに仮想マシンのsnapshotを取る

割と容量喰うので不要なものは消した方が良いが、あるときと無い時の絶望感の差はハンパない。

Technicalのリスト

レーニングはこの順番で進めていくことが前提となっている。後半に進むに連れて、テキストにある通りに上手くいかない度が増していく気がする。

  1. Building artifact handling and analysis environment
  2. Processing and storing artifacts
  3. Artefact analysis fundamentals
  4. Advanced artefact handling
  5. Introduction to advanced artefact analysis
  6. Dynamic analysis of artefacts
  7. Static analysis of artefacts
  8. Forensic analysis: Local incident response
  9. Forensic analysis: Network incident response
  10. Forensic analysis: Webserver analysis
  11. Developing Countermeasures
  12. Common framework for artefact analysis
  13. Using indicators to enhance defence capabilities
  14. Identification and handling of electronic evidence
  15. Digital forensics
  16. Mobile threats incident handling
  17. Mobile threats incident handling (Part II)
  18. Proactive incident detection
  19. Automation in incident handling
  20. Orchestration of CSIRT Tools New
  21. Introduction to network forensics
  22. Honeypots
  23. Vulnerability handling
  24. Presenting, correlating and filtering various feeds

1. Building artifact handling and analysis environment

 様々な解析を行うための環境を整える。Handbookの通りFigure1のような環境を構築していく。Styxマシンはstyx32.ovaとして配布されるが、winboxとなるwindows7は自分でイメージを取得する必要がある。GetMyOSあたりが良いのではないだろうか。ちなみにハンズオンの想定はwindows7の32bitである。

f:id:Zarat:20200721161852p:plain
画像は(Building artifact handling and analysis environmentのHandbook)より抜粋
資料には特に記載が無いが、winboxは拡張子の表示やwindows updateの停止等の設定を施すとやりやすい。
 初めは勘違いしていたが、ここでの設定を完璧に終えなければ追々のトレーニングが全く進められない訳ではない。完璧にできれば、良いに越した事は無いがモノによってはトレーニングの一節でちょっと使うだけのものもある。本当に行き詰ってしまった場合は一度styx32が配布資料に含まれていないものに取り組んでみたりすることで気分転換も良いかと。
 基本的には資料通り設定すれば問題ないが、ときどきタイポがあるので注意。あと、Adobe Acrobat Readerでhandbookを開くと表示倍率によっては_が出ないことがあった。

気になった点

i. DNSの設定関連

 netsimとtorの設定を済ませたあたりで起動時にエラーが出る。おそらく、netsimとtorのDNSが競合してるのだと考える。なんとなく、netsimの方が優先度高めな気がしたのでtorrcを気休めで変更した。全く分かっていないので、気になることがあれば教えてください。

(snip)
VirtualAddrNetworkIPv4 10.192.0.0/10
AutomapHostsOnResolve 1
TransPort 9040
TransListenAddress 127.0.0.1
TransListenAddress 10.0.0.1
#DNSPort 53
#DNSListenAddress 127.0.0.1
#DNSListenAddress 10.0.0.1


ii. Cuckooの設定

 結論から言うと諦めた。とりあえず、cuckooのwinboxとの連携が全く上手くいかなかった。自分が調べた限りでは二つの問題により上手くいかなかったと考える。

  • 設定時に記述されているipが間違っている。
    タイポ
  • libvirtvirtualboxのバージョン
     このハンズオンでは、libvirtを通してvirtualbox apiでwinboxを操作する設定を行う。ここで、styx32のlibvirtと今自分が利用しているvirtualboxのバージョンが対応しているものでなければ動作しない。じゃあ、バージョン合わせればいいじゃないかと思われるでしょう。まず、この資料が作成されたのは2014年らしい。つまり、色々当時の最新設定が想定なので最新のvirtualboxに合わせて最新のlibvirtを入れるとなるとライブラリの更新であったり何か他の依存関係ぶっ壊しそうでよく分からなかった。(調査不足)
    ではvirtualboxのダウングレードはどうかというと、自分は複数のマシンでExtension Pack使用民なのでメンドイでした。
     結局、後のトレーニング資料を見るとちょっとしか使わないじゃんっと思ったので放棄。

2. Processing and storing artifacts

 styx32にspam honeypotのShivaマルウェアスクリプトの管理を行うViperを設定して、簡単なspamメールの解析を行う。
 管理ネットワークに、自前のメールサーバがあればspam mailから脅威を事前に検知するというのもあるらしい。攻撃検知であったり侵入検知であったりも何らかの手がかりは残りそう。

3. Artefact analysis fundamentals

 用意されたマルウェアの簡単な静的解析、動的解析、ネットワーク解析、自動解析を行う。
 静的解析では、アンパックから始まり、読み取れる文字列等から機能の推測を行う。デコンパイラ等を使うまで深いところまでは踏み込まない。
 動的解析では、プロセスを監視しながら実際にマルウェアを実行することでどのような影響をもたらすのかを見ていく。デバッガ等を用いる解析は行わない。
 ネットワーク解析では、マルウェア実行中のパケットキャプチャ等からマルウェアの影響を確認する。
 自動解析はCuckooを用いて行う。自分は、やってない。ちなみにこれ以降Cuckooは出てこない。

4. Advanced artefact handling

 volatilityでメモリフォレンジック!  メモリダンプの取得から始まり、与えられたwindowslinuxのメモリダンプの解析を行う。説明は丁寧だが、ハンズオンで行うことは何だか中途半端な気が。

気になった点

i. winpmemをwinboxで試してファイルを転送するとき

 netcatで転送するみたいなことが書いてあったが、winbox⇔styx32間では上手くいかなかったのでファイル転送はlabスクリプトftpを使用した。

ii. 2.2.2.3 Task 1.2.3 Building a Volatility profileにて

 記憶が確かなら、 /usr/src/volatility-tools/linuxではなく、 /home/exercise/volatility-tools/linuxだった。

iii. volatilityのプロファイル追加

 プロファイルのディレクトリは/usr/lib/python2.7/dist-packages/volatility/plugins/overlays/linux
余談だが、volatilityのOSプロファイルをいくらか公式が公開している。
volatilityfoundation/profiles: Volatility profiles for Linux and Mac OS X

 確か、/home/enisa/enisa/ex4/vol-profilesにすでにハンズオン用のプロファイルがあったような気がする。

5. Introduction to advanced artefact analysis

x86の基本知識が色々学べる。レジスタであったり、命令であったり様々。ついでに、ツールの名前だけ紹介されている。ここで挙がっていたツールは、OllyDbg, Immunity Debugger, WinDbg, WinAppDbg, IDA, radare2.

6. Dynamic analysis of artefacts

 基本的にはOllyDbgの動的解析における使い方講座。それに絡めて、簡単な手動アンパックであったり、アンチデバッグの紐解き方、プロセスインジェクションについて触れている。急に難易度上がった感。マルウェアを取ってきて、一緒に解析してみようというようなハンズオンの部分は取得方法が分からなかったのでやっていない。所々言われているものが見つからず辛い。

7. Static analysis of artefacts

 静的解析におけるIDAの使い方講座。call graphsやcross referencesを眺めながら解析していくのが面白い。 典型的なanti-disassemmbly techniqueが施されているプログラム解析の紹介は最も面白いところだったが、どこかでプログラムが配布されているのか・見るだけなのか分からないが手元で解析したかった。やっぱり全体的に、テキストで言われている場所と一致するものを手元で見つけるのが辛い。

8. Forensic analysis: Local incident response

 あるデータ漏洩が発生したシナリオが用意され、8. Forensic analysis: Local incident response,9. Forensic analysis: Network incident response,10. Forensic analysis: Webserver analysisと三部構成で調査を行っていく。  第一部のこちらでは、問題が確認されたworkstation1のメモリフォレンジック、ディスクフォレンジックから感染源となったサイトの特定等を行う。

9. Forensic analysis: Network incident response

 インシデント調査の第二部であるこちらでは、ネットフローダンプやdhcpサーバの解析から他の影響を探っていく。

10. Forensic analysis: Webserver analysis

 インシデント調査の第三部であるこちらでは、三つのwebサーバの調査を行う。最終的に見えてきた全貌はなんだが納得いかないような、ご都合主義なような気がするがシナリオを通して実践的なフォレンジック調査の流れを学べたのはとても良かった。

11. Developing Countermeasures

 Snortシグネチャ作成とYaraルールの作成が学べる。Snortシグネチャを作成してテストしているが、資料に書いてあるものはシグネチャが作成上手くいくためのテストケースを作成しているような気がする。

気になった点

作成したSnortルールの適用

ルールを適用するために/home/enisa/enisa/ex5/snort/snort.test.confにて$RULES_PATH=/home/enisa/enisa/ex5/snortと設定しないと上手くいかなかった。

12. Common framework for artefact analysis

 MANTISCRITsの基本的な使い方を学ぶ。こういう収集した情報を分析して脅威の監視を行うようなツールは初めて触ったのでとても新鮮であった。実際の現場でもこのようなもので情報共有が行われているのだろうか。何か色々上手くいかなかった気がするが覚えていない。

13. Using indicators to enhance defence capabilities

 再びCRITsの登場。上手くいったり、上手くいかなかったところが所々あった気が。

14. Identification and handling of electronic evidence

 デジタルフォレンジックに関して理論的な概要説明。

15. Digital forensics

 銀行システムでの顧客対応の一環を例に挙げたデジタルフォレンジック演習。webサーバのアクセスログの解析やZeusに感染したPCのメモリフォレンジックを行う。VM How Toのリンクにあるように、/home/enisa/setup.shを走らせてから/home/enisa/Desktop/Training-Material/Dig_For_and_Handl_Evにハンズオンのための資料が現れる。

気になった点

i. 5 Task 2 – Identify other attacked customers based on these characteristics

  1. $ for i in `cat access.log | cut -f 1 -d ' '`;do geoiplookup $i;done|sort|uniq| wc -lにて ' 'の間は半角スペース在り。
  2. 薄々勘づかれていた通り、$ grep Mozilla access.log | grep 'ru;' | grep \"\'$ cat access.log | grep 'ru;' | grep \"\'の結果が等しい。

ii. 6 Task 3 – Hands-on analysis of memory process dump

  1. volatilityはコマンドとして登録されており、volatilityコマンドで利用できる。
  2. zeusscanプラグインはすでに導入されており、例えばココでは $ volatility -f memdump.raw zeusscan1 のように利用可能
  3. key.txtの変換が以下のようにしないと上手くいかなかった。
    $ cat key.txt | cut -d ' ' -f 2-19 | xxd -r -p > key.bin
    ' 'は半角スペース在り。

    余談

     今回の演習で出てきたUser-Agentは何か色々怪しすぎてオカシイでしょとか思っていたが、今のChromeの場合 Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Mobile Safari/537.36であったし、今後Chromeではバージョン、OS問わず同じUser-Agentを返すようになるらしい。詳細はおググりください。

16. Mobile threats incident handling

 モバイルのフォレンジックで、apkファイルの解析の基本について学べる。
 AVDで動かして、apkをデコードして少し機能を弄ってみたり、ビルドして再び動かしネットワークトラフィックを見たりした上でdexからjar変換してapk解析等を行う。

気になった点

i. [3.5.1.1 Open Android SDK Manager]
Android SDK ManagerのPackagesのUpdates/Installedに関して

 Handbookの方では、API15を利用していたので同じようにこれを導入。さらに、Toolsについては文句言われたので色々必要なものを導入。

ii. 3.5.1.5 Create an AVD named “SimpleLockerAVD” using avd manager

 Deviceの作成時に容量が足りなく作成できない状態になってしまった。/home/enisa/setup.shを実行すると、仮想マシン[enisa-main.ova]は他のトレーニングの資料も作成される。取り組む前に別のトレーニングのファイルは消しておいた方が良い。
 さらに、AVD作成時のRAMが少ない所為か上手くいかなかったのでAVDのRAMを1024MBし、その上で改めてVM自体のメモリを4096MBに増やした。

iii. 3.5.1.6 Add Hardware and open AVDs

 大抵の人は必要だと思われるが、64bitマシンを利用している場合 ./emulatorの引数には-force-32bitが必要となるらしい。

17. Mobile threats incident handling (Part II)

 モバイルフォレンジックに関してAndoroidに加え、軽くiosの解析のハンズオンも行う。内容としては、モバイルの脅威やRooting、Jail-breaking等モバイルの様々な知識にも触れられる。
 スマホのメモリフォレンジックもあるが話だけでほとんど触れない。iosのバックアップからファイルの解析があるが、イメージの取得のような方法が見てみたかった。
 マルウェアアプリの解析があるが、浅すぎて物足りないと感じた。

気になった点

system.imgの取得からfile carving

 Deviceが事前に用意されていればよかったが自分で作らないといけなさそう。自分が探した限りでは見つからなかったので誰か見つけたら教えてください。自分で作ったイメージを使うということはfile carvingは同じように上手くいかないしjpegがイメージ内に無いといけない。 そりゃそうか。

18. Proactive incident detection

 公開情報から脅威に関する情報を収集する方法に関する話。AbuseHelperの使い方について学ぶ。
 ここら辺から、資料通りの演習の再現が上手くできなくなってくる。仮想マシンのパスワードが分からないのでUbuntu 18.04: 忘れたパスワードを再設定する - Narrow Escapeのように再設定する。

19. Automation in incident handling

 ログを見る時はgrep,awk,sort,wcのようなコマンドを使って解析してみよう。

20. Orchestration of CSIRT Tools New

 [12.Common framework for artefact analysis]よりも話を広げたもの。MISP,Elasticsearch,TheHive,IntelMQ等の基本的な使い方についてのトレーニング。正直個人的にあまり気乗りしていなかったので、IntelMQが上手くいかなかった時点で止めてしまった。
 MISP,Elasticsearchに関しては起動を確認したが、IntelMQは起動できず、TheHiveは確認すらしていないので分からない。

気になった点

4.4.2 Adding data to the cluster

 Elasticsearchにデータを追加するためのコマンドを実行すると

{"error":"Content-Type header [application/x-www-form-urlencoded] is not support

となってしまった。何故かContent-Typeが上手くしていできていない模様。なので、

$ curl -XPOST http://elasticsearch.enisa.ex/logs/request/1 -H "Content-Type: application/json" -d @r1.txt

r1.txtにrequestをテキストファイルに書き込んでやると上手くいく。

21. Introduction to network forensics

 ネットワークの証拠収集についてハード・ソフトを通した話、証拠保全のための設定や情報収集に有効なログ等ネットワークフォレンジックに関わる知識、ツール、ハンズオンを含め盛りだくさんなトレーニング。
 ハンズオンは3種類あり、ICS/SCADA環境での独自の通信プロトコルDNS exfiltration、VPNを介したアクセスの解析を行う。とにかく楽しい。

気になった点

i. ICS/SCADA環境での解析

  1. normal.pcap/home/exercise/traffic/normal.pcapであり、以降も/trraffic以下にファイルがある。
  2. INF5.1.ovaは、まさかのドイツ語キーボード。zとyが逆?ハイフンは/,スラッシュはshift+7,イコールはshift+0,シングルクォーテーションはshift+]

ii. DNS exfiltration

  • squid.confの設定にて  変な改行があるように見えるが
http_port 0.0.0.0:3128 ssl-bump cert=/usr/local/squid/ssl_cert/squid.pem generate-host-certificates=on dynamic_cert_mem_cache_size=4MB
sslcrtd_program /usr/local/squid/libexec/ssl_crtd -s /var/lib/ssl_db -M 4MB
acl step1 at_step SslBump1
acl exceptions ssl::server_name .10.1.1.1
ssl_bump splice exceptions
ssl_bump peek step1
ssl_bump bump all

 これが正しい。

iii. [5.2.6.5 MISP Web Interface]

 MISPの [Search Attributes]の[Containing the following expressions]に

$ awk -F, '{print $20}' firewall.log | grep -v "10.*" | sort | uniq

 の結果を張り付ける。

iv. sargへのアクセスはsarg.localへ

v. [p176]にて

egrep "[a-zA-Z0-9\\]{30,63}" bind.log.2 | wc -l | uniq

は間違い。

egrep "[a-zA-Z0-9\\]{40,63}" bind.log.2 | wc -l | uniq

これが正しい。 何故40から30に減った?

22. Honeypots

 ブラウザエミュレータのようなThug- Client-side honeypot、マルウェア収集に使われるらしいDionaea - Server-side honeypot、wowhoneypot見たいなHTTPアクセスを観測するGlastopf - Server-side honeypotに触れる。
 実際に運用するわけではないので、特にドキドキもなく物足りないのは仕方がない。学生であれば、HoneypotはAzure for Students – 無料アカウント クレジット | Microsoft Azureで試すのがおススメ。

23. Vulnerability handling

 運用しているサービスで脆弱性が見つかった場合どのような対応を取るかに関して理論的な話。

24. Presenting, correlating and filtering various feeds

 Elasticsearchを使う。何度も同じようなトレーニングをやるということは重要なことなのだろうか。

個人的に楽しかったトレーニング(満足度順)

  1. Introduction to network forensics
  2. Mobile threats incident handling (Part II)
  3. Advanced artefact handling
  4. Artefact analysis fundamentals
  5. Forensic analysis: Local incident response
  6. Forensic analysis: Webserver analysis
  7. Mobile threats incident handling
  8. Static analysis of artefact
  9. Dynamic analysis of artefacts
  10. Forensic analysis: Network incident response
  11. Developing Countermeasures
  12. Digital forensics
  13. Processing and storing artifacts
  14. Building artifact handling and analysis environment
  15. Introduction to advanced artefact analysis
  16. Identification and handling of electronic evidence

感想

 Technical - ENISAの魅力は解析技術だけではなく、インシデント情報の管理であったりDF単体でなくDFIR全体に触れることができるところだと思います。まあ、そもそもCERT staffのための資料なのであたりまえと言えばあたりまえですが。
 Handbookは全て、提供された資料を用いて資料をトレーニングを行う場合はこのようにやってくださいというような体で書かれていると思います。そのおかげで「ココではこのような問いかけをしてください」というような説明があり、そこではそのような考え方を持てば良い等と学ぶことができますし、解答もついているので一石二鳥な気がします。しかし、後半の資料では何だか上手くいかないことが少し残念です。自分の力不足の所為でもありますがね。
 余すところ無くトレーニングから学びを得るためには参照リンクを沢山チェックするのがおススメです。

proxmoxにvirtualboxのマシンをインポートする

ある日、仮想化基盤をやってみたいと思いました。なのでproxmoxを入れました。

www.proxmox.com


設定はここら辺で。

Proxmox VE 6.1をインストールしてみた | fefcc.net

ProxmoxVEのセットアップと利用 - Qiita

自分の場合は、物理マシンにインストールしました。RAIDは使っておらず、ファイルシステムはデフォルトで、プライベートipは静的で設定.

条件

このインポートの方法はqemuの機能を使うので、CPUのTypeがkvmのマシンでないとできないと思います。

virtualboxからproxmoxへの移植

結論から言うと、やることはvirtualboxのイメージの実体(vdi,vmdk)ファイルをqmの管理下にインポートする。

1. virtualboxの移したいVMovaファイルを作成

virtualboxマネージャーの[ファイル]->[仮想アプライアンスのエクスポート]を選択。

f:id:Zarat:20200606235150p:plain
[ファイル]->[仮想アプライアンスのエクスポート]
そこから、目的のVMを選択。エクスポートのフォーマットはovaの[Virtualization Format 1.0]を選択する。新しい2.0の方が良さそうな気がしなくも無いが、どこで2.0はエラー吐いて環境によってインポートできないというような話を聞いたので......。詳細はご自身でおググりください。
f:id:Zarat:20200606234939p:plain
ovaファイルのエクスポート

追記

結局はマシンの実体ファイル(vmdk,vdi)がどこにあるか分かれば良いが、ovaファイル ならイメージの実体やマニフェストファイルを書き出すことができるので、イメージの実体ファイルの場所が分からなくても取り出せるし移植先でVMが起動しない場合にマニフェストファイルを見てvirtualboxの設定との比較ができると思うので、ovaファイルのエクスポートがおススメ。

2. proxmoxへファイルを移動

基本的にはsftpやscpでファイル転送がいいでしょう。自分の場合、転送前に解凍しておいて.vmdkか.vdiのみ転送した。解凍時に出てくるマニフェストファイルは、vmを設定したときにエラーが出たときの設定変更の参考にする。

3. インポート

virtual boxのイメージをそのままproxmoxに登録する方法は、今のところ無さそう(2020/06/26)。なので、一度vmを立ててそこにqmを使ってimportする方法を取る。

ストレージの容量以外は、importしたいvirtualboxvmに合わせて他のproxmoxのvmを立てるときのように設定する。 ストレージだけは、適当で良い。

vmを立てた後、ハードウェアの設定でハードディスクを[Detach]して,[Remove]する。

f:id:Zarat:20200626174301p:plain
ハードディスクをDetach

f:id:Zarat:20200626174519p:plain
Remove

ここまでこればimportの準備が整った。importのコマンドはコチラ

$ qm importdisk <vmid> <import_disk> local-lvm -format [raw/qcow2]

vmid......vmを作ったときに割り当てたid
import_disk......importするvirtualboxのイメージファイル(vmdk,vdi)
-format [raw/qcow2]......指定しなくても良いらしい。自分の環境ではデフォルトでrawイメージで、vmのイメージが保存されているようなのでraw変換を選択した。

importコマンド例はコチラ。

$ qm importdisk 5000 vm.vmdk local-lvm -format raw

ここでイメージのimportに成功したら、ハードウェアの設定に未使用のディスクが追加される。この追加されたディスクを選択して、編集画面を開きディスクの設定が問題無ければ追加 f:id:Zarat:20200626195101p:plain 起動しなければ、virtualboxの設定と見比べてみる。大体はSCSIじゃなくて、SATAとかIDEとかにしてないことで問題が起こるような気がする。あとは、イメージ転送ミスとかだろうか。
起動すれば、proxmoxにvirtualbox移植完了

参考

Import OVA as Proxmox VM | It's full of stars!

Another way to move Virtualbox VDI to Proxmox VE | David Yin's Blog

twitterのキーワード検索結果を割とタイムリーに[slack/discord]botで通知する

いつもと全く毛色は異なるが、せっかく調べたのでまとめておく。

プロローグ

twitterのキーワード検索をbotに通知して貰いたいと考えていたのが始まりである。今までtwitterハッシュタグの検索をどうにかtwitterを開かずに観測したいと思っていたが、RT botを作ってくれるような有名なサービスは無くなったようだし、twitter apiをサーバで動かすしか無いと思っていた。
しかし、IFTTTというサービスを利用すればtwitter api無しで! 無料で! 情報の方から寄ってくる生活を体験することができる。

slack botの方は上手くいっていないので、webhookではなくIFTTTで提供されているslackへの投稿を利用した方が良さそうです。(検証中)

bot作成

slack/discordのwebhookを作成

これを行うにはdiscordサーバーの管理者である必要があるので、個人で管理できる場を用意する。
slackの方は管理者ではない立場でめちゃくちゃしたことが無いので、管理者ではない立場で可能かどうかは未検証。

slackの場合

https://api.slack.com/appsにアクセスし、アプリを作成を選択。
アプリ名,ワークスペースを指定してアプリを作成。
機能一覧の[Incoming Webhook]を選択し、この機能を[ON]にする。
webhookを追加すると、botに投稿させるチャンネルを指定した後にwebhookのURLのコピーが可能になる。

参考

Slack での Incoming Webhook の利用 | Slack

slackのIncoming webhookが新しくなっていたのでまとめてみた - Qiita

discordの場合

[サーバの設定]や[チャンネルの設定]にある[ウェブフック]の項目にある[ウェブフックの作成]で簡単に作成する。
botの名前、botの投稿するチャンネルを指定して作成する。
作成後は、ウェブフックのそれぞれのbotの編集からwebhookのURLをチェックできる。

参考
タイトル: Webhooksへの序章 – Discord

IFTTTの設定

まずは、アクセスしてアカウントを作成する。 ログイン後には、アイコンを押すことで表示される[Create]から、大きく表示される[This]で何のサービスからの取得か指定する。

f:id:Zarat:20200515213503p:plain
createボタン
f:id:Zarat:20200515213911p:plain

twitterを検索して、下に出てくる[New tweet from search]を選択。 観測したいキーワードを指定。

f:id:Zarat:20200515214403p:plain
観測するキーワード検索の指定
[Create trigger]を押した後に、今度は[That]を選択した後、webhookを検索する。
f:id:Zarat:20200515214732p:plain
webhookの検索
webhookの[Make a web request]を選び、bot通知の設定を行う。
上から、[URL]には利用するbotのwebbhookのURLを入力。
f:id:Zarat:20200515215224p:plain
botの設定
投稿なので[Method]はPOSTで、[Conctent Type]についてはapplication/jsonにしている。[Body]に関してはtweetのリンクだけ通知して貰えば良いと考えているので[Add indiegrent]からLinkToTweetのみ選択している。
[Create action]を押して、エラーっぽい赤文字が出なければ上手くいっている。最後の画面では、登録時のメールアドレスに動いたときに通知を行うかどうかの確認があるので適宜設定する。

設定完了

使用感

  • 更新頻度はややムラがあるような気がする。しかし、検索結果が更新されていれば、おおよそ1時間以内、早くて2,3分おきに通知が来る。
  • フィルタのようなものが無いので、RTとツイートを判別できず、複数人がRTしたものは元ツイートを含めて繰り返し通知されてしまう。

    今後の展望

  • rssの無いwebの更新を何等の方法で検知してbotに通知させたい
  • サーバ立てて自由にやりたい