LibTP — Threadpool経由でNt APIをプロキシするCrystal Palace用ライブラリ

Security

概要

LibTPは「Crystal Palace」用の共有ライブラリで、Windowsの低レイヤであるNt(Native API)呼び出しをThreadpool(Windowsスレッドプール)経由でプロキシするための小さなC実装です。スレッドプールを仲介にすることにより、呼び出しの実行コンテキストやスケジューリングを制御しやすくなり、通常のユーザーモードスレッドとは異なるパスでNT APIを発火させることが可能です。設計意図は、攻撃シミュレーションや隠蔽・難読化の検証、分析環境での挙動差分を調べるためのツール提供にあります。
GitHub

リポジトリの統計情報

  • スター数: 8
  • フォーク数: 0
  • ウォッチャー数: 8
  • コミット数: 2
  • ファイル数: 6
  • メインの言語: C

主な特徴

  • NT API呼び出しをThreadpoolのタスクとしてプロキシ実行する軽量ライブラリ。
  • Crystal Palace向けに共有ライブラリ化されており、他コンポーネントから容易に呼び出せる。
  • Cで実装され、Makefileでビルド可能なシンプル構成。
  • セキュリティ調査・攻撃シミュレーション用途を念頭に置いた設計(Creditsを明示)。

技術的なポイント

LibTPの中心的なアイデアは「呼び出し経路の切り替え」です。通常のNT API呼び出しは呼び出しスレッドのコンテキストで実行されますが、スレッドプール経由にすることで、スレッド属性(例:優先度、スレッド環境、スレッド固有の状態)や同期の仕組みを間接的に操作できます。これにより、以下のような効果や検証が可能になります。

  • 実行コンテキストの多様化: Threadpoolは内部で管理されたワーカースレッドを使うため、呼び出し元と異なるスタックやスレッドローカルストレージでNT呼び出しが行われ、アンチデバッグやサンドボックス検出ロジックの挙動を検証しやすくなります。
  • タイミングとスケジューリング制御: スレッドプールのキューイングや非同期実行を使えば、API呼び出しのタイミングや並列度を調整でき、競合状態やタイミング依存の振る舞いを誘発または回避できます。
  • 隔離と柔軟なプロキシ: ライブラリとして提供されるため、Crystal PalaceなどのフレームワークからNTレベルの操作を一括して差し替えられます。これにより、攻撃シナリオごとの差分比較や模擬環境の構築が簡便になります。
  • 実装面のシンプルさ: リポジトリはC言語でまとめられ、Makefileでのビルドや配布を想定した軽量構成です。コードは最小限に抑えられており、拡張や統合がしやすい設計になっています。

なお、このアプローチには注意点もあります。Threadpool経由の実行は同期モデルやエラーハンドリングが変わるため、返り値やエラー状態の伝播方法を明確に設計する必要があります。また、検出回避を目的とした手法は誤用されるリスクがあるため、研究・防御改善の目的での利用と法令順守を前提にするべきです。READMEではRaphael MudgeやChetan Nayakらのクレジットが記載されており、研究コミュニティでの知見を基にした実装であることが窺えます。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitattributes: file
  • .gitignore: file
  • LICENSE: file
  • Makefile: file
  • README.md: file

…他 1 ファイル

まとめ

シンプルで実用的なNT APIプロキシ実装、研究用途に最適。

リポジトリ情報:

READMEの抜粋:

LibTP

A shared Crystal Palace library for proxying Nt API calls via the Threadpool.

Credits