Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
python-haystack — プロセスヒープ解析フレームワーク - Windows/Linux - レコードタイプ推論とフォレンジック | Kitploit
ツール/GitHubGitHub/trolldbois/python-haystack
メモリフォレンジックリバースエンジニアリングフォレンジックデジタルフォレンジックバイナリ解析
GitHubtrolldbois/python-haystack

python-haystack

プロセスヒープ解析フレームワーク - Windows/Linux - レコードタイプ推論とフォレンジック

リポジトリを見る
95339年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
ウェブサイト

python-haystack メモリフォレンジックス

################################

|travis| |coverage| |landscape| |pypi| |docs|

クイックスタート

クイック使用ガイド <docs/Haystack_basic_usage.ipynb>_ (docs/ フォルダ内)

Haystack-reverse CLI <docs/Haystack_reverse_CLI.ipynb>_ (docs/ フォルダ内)

詳細ドキュメント <http://python-haystack.readthedocs.io/en/latest/>_

はじめに

python-haystack は、割り当てられたメモリ内の C 構造体の検索とリバースエンジニアリングに特化したヒープ分析フレームワークです。

最初の機能/API は SEARCH 関数です。プロセスメモリダンプや動作中のプロセスメモリ内で既知のレコードタイプを検索する機能を提供します。

2つ目の機能/API は、拡張機能 python-haystack-reverse <https://github.com/trolldbois/python-haystack-reverse>_ の REVERSE 関数です。アナリストがプロセスヒープに存在するメモリレコードタイプをリバースエンジニアリングするのを支援することを目的としています。メモリから古典的な C 構造体の再構築と分類に焦点を当てています。型定義の再作成を試みます。

スクリプトとメモリハンドラ形式

メモリダンプの形式を処理するためのいくつかのエントリポイントが存在します。

haystack-live-dump によって生成されたメモリダンプフォルダ

  • haystack-find-heap は Windows HEAP の詳細を表示します。
  • haystack-search 検索 CLI
  • haystack-show 特定のアドレスの特定のレコードタイプを表示する CLI

次の URL を使用してメモリハンドラ/ダンプを指定できます:

  • dir:///path/to/my/haystack/fump/folder : haystack ダンプ形式を使用する場合
  • dmp:///path/to/my/minidump/file : minidump 形式を使用する場合 (Microsoft?)
  • frida://name_or_pid_of_process_to_attach_to : frida を使用して動作中のプロセスメモリにアクセスする場合
  • live://name_or_pid_of_process_to_attach_to : ptrace で動作中のプロセスにアクセスする場合
  • rekall:// : rekall イメージをロードする場合
  • volatility:// : volatility イメージをロードする場合
  • cuckoo:// : Cuckoo によって生成されたメモリダンプをロードする場合 (beta, パッチが必要かもしれません)

メモリダンプの取得方法

Windows では、最も簡単なのはミニダンプを取得することです。Microsoft Sysinternals ツール群は、CLI (procdump.exe) または GUI (Process Explorer) を提供しています。これらのいずれか(フルメモリダンプオプション付き)を使用すると、haystack-minidump-xxx エントリポイント群で使用できるファイルが生成されます。

技術的には多くのサードパーティ製ツールを使用できますが、haystack は実際にはメモリマッピング情報を必要とします。そのため、ダンプツール haystack-live-dump が含まれています:

.. code-block:: bash

root@kitploit:~
# haystack-live-dump <pid> myproc.dump

動作中のプロセス向け

  • haystack-live-dump プロセスメモリダンプをフォルダにキャプチャ (haystack 形式)

Rekall メモリダンプ向け

  • haystack-rekall-dump 特定のプロセスを haystack プロセスダンプにダンプ

Volatility メモリダンプ向け

  • haystack-volatility-dump 特定のプロセスを haystack プロセスダンプにダンプ

ダンプの形式は簡単に再現でき、各メモリマップを個別のファイルに含むフォルダ/アーカイブです:

  • メモリ内容: 開始/終了アドレスにちなんだ名前のファイル (例: 0x000700000-0x000800000)
  • 'mappings' ファイル: メモリマッピングのメタデータを含む (mappings)

または、お好みの形式用に haystack.abc.IMemoryMapping の実装をコーディングすることもできます。

あるいは、すでに Volatility または Rekall からのシステムメモリダンプがある場合は、haystack-rekall-xxx または haystack-volatility-xxx のエントリポイント群を使用して、特定のプロセスメモリをファイルに抽出できます。

Windows ヒープ属性の確認

エントリポイント haystack-find-heap は Windows HEAP の詳細を表示します。対応しているのは:

  • Windows XP 32 bits
  • Windows XP 64 bits
  • Windows 7 32 bits
  • Windows 7 64 bits

また、Look Aside List (LAL) および Low Fragmentation Heap (LFH) フロントエンドの詳細を表示します。

驚くかもしれませんが、単一のプロセスが2種類のヒープ (32 ビットと 64 ビット) を混在させることがあります。

既知の構造体の検索

特定のレコードを検索するには、まずそのレコードタイプを定義する必要があります。C ヘッダーファイルから Python ctypes 定義への基本的な手順を説明する[クイック使用ガイド](docs/Haystack basic usage.ipynb) が利用可能です。または、従来の Python ctypes レコードを使用して自分で行うこともできます。

検索 API は haystack-xxx-search スクリプト群を通じて利用可能ですが、API としても提供されているため、独自のコードに検索を組み込むことができます。

要するに、haystack の検索はプログラムのメモリのすべてのオフセットを反復処理し、その特定のレコードタイプに対して「有効な」オフセットを見つけようとします。

レコードの有効性は、次のような型制約によって決定されます:

  • ポインタフィールドは有効なアドレス空間値を持つ必要がある
  • ユーザー定義の型制約(下記の「制約ファイル」セクションを参照)
  • など

.. code-block:: bash

$ python haystack/cli.py dir:///home/user/project/python-haystack/test/src/test-ctypes6.32.dump ctypes6_gen32.struct_usual

制約ファイル

次の制約がサポートされています:

  • IgnoreMember: このフィールドの値は無視されます。ポインタフィールドを無視するのに便利です。
  • NotNull: このフィールドの値は 0 であってはなりません。
  • RangeValue(x,y): フィールドは x と y の間の値を持たなければなりません。
  • PerfectMatch('hello world'): フィールド(文字列)は 'hello world' に一致しなければなりません。
  • [1, RangeValue(12,16), 42]: フィールドの値は 1、12-16、または 42 であるべきです。

例:

.. code-block:: python

root@kitploit:~
[struct_name]
myfield: [1,0xff]
ptr_field: NotNull

haystack/allocators/win32/winxpheap32.constraints を参照してください。ここで Windows XP HEAP x32 の制約が定義されています。

明らかに、制約が多いほど結果は良くなります。

動的制約の定義

haystack.abc.interface.IRecordTypeDynamicConstraintsValidator クラスを実装し、それを ModuleConstraints.set_dynamic_constraints に渡すことで、Python コードを使用してより複雑な制約を作成することもできます。

コマンドライン例

sslsnoop リポジトリは v0.30 より新しいリリースと互換性を持たせるために更新が必要です(保留中)

例えば、次のコマンドは session_state 構造体 + ポインタが指す子構造体を、操作可能な Python オブジェクトとしてダンプします。ssh クライアントまたはサーバーの PID が 4042 であると仮定します:

.. code-block:: bash

root@kitploit:~
$ sudo haystack-live-search --pickled 4042 sslsnoop.ctypes_openssh.session_state search > instance.pickled
$ sudo haystack-live-search --pickled 4042 sslsnoop.ctypes_openssh.session_state refresh 0xb8b70d18 > instance.pickled
$ sudo haystack-live-search --pickled <pid> <your ctypes Structure> search

グラフィカルユーザーインターフェース

現在は動作しません

グラフィカル UI の試みもあります python-haystack-gui <https://github.com/trolldbois/python-haystack-gui>_

Python API の例

クイック使用ガイド <docs/Haystack_basic_usage.ipynb>_ を参照してください。

独自の構造体を定義する方法

最も簡単な方法は、ctypeslib を使用して C ヘッダーから ctypes レコードを生成することです。

または、手動で Python ctypes レコードを定義します。

拡張機能の例

@ Pypi リポジトリの sslsnoop を参照してください。openssl と nss の構造体が生成されています。

@ 私の github の ctypes-kernel を参照してください。Linux カーネル構造体がビルドされたカーネルツリーから生成されています。(VMM は厄介です)

あまり FAQ ではない

何をするものですか?

基本機能は、プロセスのメモリ内で特定の C レコードを検索することです。

拡張リバースエンジニアリング機能は、メモリ/ヒープ分析から構造体をリバースエンジニアリングすることを目的としています。

構造体が有効かどうかをどのように判断しますか?

レコードフィールドの期待値にいくつかの制約を追加します。ポインタは常に有効なメモリ空間に制約されます。

アイデアはどこから来ましたか?

もともとは passe-partout <http://www.hsc.fr/ressources/breves/passe-partout.html.fr>_ です。2011年3月に開始して以来、他のいくつかの関連する先行研究を発見しました。

それらのほとんどは docs/ フォルダにあります。

その他の関連作品としては、Immunity の mona.py、Mandiant のいくつかのものなどがあります...

要するに、これはおそらく独創的なアイデアではありません。しかし、sslsnoop PoC のために動作するスタンドアロンライブラリを見つけられなかったので...

関連作品 <https://github.com/trolldbois/python-haystack/wiki/State-of-art-reference>_

依存関係は何ですか?

  • python-ptrace on linux
  • winappdbg on win32 (動作するか不明、フィードバック歓迎)
  • python-numpy
  • python-networkx
  • python-levenshtein
  • その他多数...

その他

http://ntinfo.biz/ xntsv32

.. |pypi| image:: https://img.shields.io/pypi/v/haystack.svg?style=flat-square&label=latest%20stable%20version :target: https://pypi.python.org/pypi/haystack :alt: Latest version released on PyPi

.. |coverage| image:: https://img.shields.io/coveralls/trolldbois/python-haystack/master.svg?style=flat-square&label=coverage :target: https://coveralls.io/github/trolldbois/python-haystack?branch=master :alt: Test coverage

.. |travis| image:: https://img.shields.io/travis/trolldbois/python-haystack/master.svg?style=flat-square&label=travis-ci :target: http://travis-ci.org/trolldbois/python-haystack :alt: Build status of the master branch on Mac/Linux

.. |landscape| image:: https://landscape.io/github/trolldbois/python-haystack/master/landscape.svg?style=flat :target: https://landscape.io/github/trolldbois/python-haystack/master :alt: Code Health

.. |docs| image:: https://readthedocs.org/projects/python-haystack/badge/?version=latest :target: https://readthedocs.org/projects/python-haystack/badge/?version=latest :alt: Documentation status

ツールをダウンロード