Forensic Tools

証跡採取

  • FTK Imager Lite

レジストリ解析

  • WindowsRegistoryRecovery
  • Regshot
  • SAMInside

プロセス監視

  • Process Explorer
  • Process Hacker
    性能は Process Hacker > Process Explorerか
    プロセス情報をリアルタイムで確認できる
    Stringsも確認可能
    署名の確認 Options - Verify Image Signatures
    パッキグプロセスは紫色となる
  • Process Monitor
    レジストリ、ファイル操作、実行コマンド、ネットワークアクセス等の履歴を確認
    noribenと併用
    フィルタを使用する
    フィルタルール
    意味
    Process Name is explorer.exe
    プロセス名指定
    Operation is WriteFile
    ファイル書込み指定
    Operation is SetDisposition InformationFile
    ファイル削除指定
    Operation is RegSetValue
    レジストリ値設定指定
    Category is Write
    書込み全般指定

メモリ解析

  • Volatility
    # メモリイメージプロファイル取得
    $ volatility -f FILE_NAME imageinfo

    # SYSTEMとSAMレジストリアドレスを取得
    $ volatility -f FILE_NAME --profile=Win7SP1x64 hivelist

    # パスワードハッシュを求める
    $ volatility -f FILE_NAME --profile=Win7SP1x64 hashdump -y SYSTEM_ADDRESS -s SAM_ADDRESS

    # プロセスツリーを表示する
    $ volatility -f FILE_NAME --profile=Win7SP1x64 pstree

    # プロセスリストを表示する
    $ volatility -f FILE_NAME --profile=Win7SP1x64 splits

    # ロードDLLリストを表示する
    $ volatility -f FILE_NAME --profile=Win7SP1x64 dlllist

    # ネットワーク情報を表示する}
    $ volatility.exe -f FILE_NAME --profile=Win7SP1x64 netscan

ファイル解析

  • fileコマンド
    $ file FILE_NAME
  • Bulk Extractor
    カービングを実施
  • binwalk
    ファイル展開
    $ binwalk -e FILE_NAME
  • シャドウコピー解析
    vssadminコマンド
    >vssadmin list shadows /for=E:
    >mklink /d E:\shadowcopy \\?\GLOVALROOT...
    >vshadowmount

プログラム表層解析

  • EXE Explorer
  • File Alyzer
  • CFF Explorer
  • Stud_PE
  • Python + PEFile(Pythonライブラリ)

デバッガ

  • Immunity Debugger
  • OllyDbg
  • x64dbg
  • IDA

逆コンパイラ

  • dnSpy
  • ILSpy

DLL実行

  • LoadDll

テキスト抽出

  • BinText
    収集率は良くない
  • stringsコマンド

ウェブ解析

  • Fiddler(ローカルプロキシ)
  • Google Chrome 開発者モード

解析環境

  • 仮想マシン
    VMware
    VirtualBox

擬似サーバ

  • Fakenet
  • FakeDNS
  • INetSim

通信傍受

  • WireShark
  • iptables
    -snat
    -redirect

MacOS

Notes(メモ帳)のsqlite解析

  1. sqliteファイル抽出
    ~「/Library/Group Containers/group.com.apple.notes/NoteStore.sqlite」を取り出す
  2. メモの記録箇所
    「ZICNOTEDATA」テーブル
    「ZDATA」列(BLOB型)
  3. メモの記録内容
    sqlite browser等で確認すると、「ZDATA」列の中は「0x1f 0x8b」で始まる値
    「0x1f 0x8b」はgzipファイルなので、sqlite browserの機能からエクスポートし、解凍することで復元できる

印刷履歴の解析

  • プリンタ設定
    ~/Library/Preferences/org.cups.printers.plist
    /Library/Preferences/org.cups.printers.plist
    /etc/cups/printers.conf
  • 印刷ジョブ
    /private/var/spool/cups
  • 印刷履歴
    /private/var/log/cups/access_log

iPhone

iSafePlayのパスワード解析

  1. パスワードファイル抽出
    net.fanship.iSafePlay\Library\Preferences\net.fanship.iSafePlay.plist
  2. パスワード記載箇所
    <key>isafepw</key>
    <string>(パスワードハッシュ)</string>
  3. パスワードハッシュはBase64でエンコードされているため、デコードを実施
  4. デコードした値(16進数)はMD5ハッシュであるため、パスワード解析ソフト等により解析を実施

※version 10.26で確認

iTunesバックアップの保存場所変更

  1. iTunesバックアップのデフォルトの保存場所(以下のいずれか)
    - C:\Users\[user name]\AppData\Roaming\Apple Computer\MobileSync\Backup
    - C:\Users\[user name]\Apple\MobileSync
  2. デフォルト保存場所にある「Backup」フォルダの名前を変更するか削除する
  3. 変更先のフォルダを作成する
  4. デフォルトの保存場所から「Backup」として変更先フォルダに向けたシンボリックリンクを作成
    mklink /d "C:/Users/[user name]/AppData\Roaming/Apple Computer/MobileSync/Backup" "D:\Backup"
    ※「D:\Backup」は変更先のフォルダ
  5. iPhone入力サジェストの解析

    • 入力サジェストの保存場所
      /private/var/mobile/Library/Keyboard/DynamicBigramPharseLexion_ja_JP.db

    IoT

    UART(Universal Asynchronous Receiver Transmitter)

    • 調歩同期方式のシリアル通信装置で、マイコン等で使用されることが多い
    • 最も単純な構成は[GND][TX][RX]の3線構成
    • [TX]は送信、[TR]は受信
    • 他の機器と接続する際は、[GND-GND][TX-TR][TR-TX]のようにクロス接続する
    • 同期速度(ボーレート)を設定する必要がある
      110bps,150bps,300bps,600bps,1200bps,4800bps,9600bps,19200bps,38400bps,57600bps,115200bpsなど

    IoT機器のUARTとPCの通信方法

    1. UARTと思われる4ピンから、テスタ等で抵抗値を測定し、導通している箇所が[GND]
    2. 機器の電源投入後テスタで各ピンの電圧を測定する
    3. 3.3V(5V)で安定しているピンが[VCC]、電圧が変動するピンが[TX]、他が[TR]
    4. USB-Serial変換機とIoT機器の[TX][TR][GND]をそれぞれ接続する
    5. PCのターミナル等でボーレートを設定する
    6. IoT機器の電源を投入すると起動時のメッセージが確認できる

    フラッシュメモリ

    • 記載予定

    バイトオーダー

    ビッグエンディアン

    • バイト列をバイトの上位から順番に並べる方法
    • 「1234ABCD」をビッグエンディアンで並べると「12 34 AB CD」となる
    • メモリに格納した場合は、メモリアドレスの低い番地番地に「12」が格納され、メモリアドレスの高い番地に「CD」が格納される順番となる
    • ネットワーク上ではビッグエンディアンでデータが送信される

    リトルエンディアン

    • バイト列をバイトの下位から順番に並べる方法
    • 「1234ABCD」をリトルエンディアンで並べると「CD AB 34 12」となる
    • メモリに格納した場合は、メモリアドレスの低い番地番地に「CD」が格納され、メモリアドレスの高い番地に「12」が格納される順番となる
    • Intel互換のCPUではリトルエンディアンでデータが格納される

    プログラミングにおける留意事項

    • ネットワークプログラミングにおいてデータ送信順序に関係する
    • C言語ではネットワークとホストのバイトオーダーを変換するために以下の関数がある
    関数
    説明
    ntons()
    network to host short
    ネットワークバイトオーダーからホストバイトオーダーへ変換(16bit)
    ntonl()
    network to host long
    ネットワークバイトオーダーからホストバイトオーダーへ変換(32bit)
    htons()
    host to network short
    ホストバイトオーダーからネットワークバイトオーダーへ変換(16bit)
    htonl()
    host to network long
    ホストバイトオーダーからネットワークバイトオーダーへ変換(32bit)