NTKRNL

OllyBonEを読みます

概要 OllyBonEはページテーブルを操作してメモリの属性を変更することで、ヒューリスティックにアンパックを行うプログラムです。ページテーブル操作によるアンパッキング技法の先駆けとして有名です。ソースは以下からダウンロードできます。 http://www.jo…

仮想化技術によるアンチルートキット

今回は、仮想化技術で隠されたプロセスを検出する、という研究のお話をします。また、これについて試験的にWindows 7(x86)で動くものを実装してみましたので、その実装詳細と評価も交えていきます。実装はこちら。

GetTickCountとtimeGetTime

GetTickCount関数とtimeGetTime関数がどうやって実装されているか確認し、分解能の違いが実現できている理由を読み解きます。[NTKRNL]のタグがついている時点でアレなわけですが「どっちを使うべき」的な情報がほしい方は回れ右。特に明示しない場合、x86 XP…

例外がユーザー空間に落ちてくるまで

しばらくカーネル空間で例外ハンドラをいじって遊んでいたのだけど、ユーザー空間でも似たような遊びができる気がしたので下調べのメモ。常に以下のフローをたどるわけではなく、あくまで発生した例外がユーザー空間に伝播するときのフロー。x86はWindows XP…

削除されようとしたファイルをバックアップコピーするツール

EXE、TMP、SYS、BAT ——— 何でも一緒だ。マルウェア解析では、どんなものからも目を離してはいけない。 ファイルが削除されようとしたタイミングで、そのファイルをバックアップコピーするフィルタドライバを書いてみました(ScavengerFolk.cab)。よければど…

Rootkitのようなデバイスドライバファイルを回収するツール

デバイスドライバがカーネルにロードされたタイミングで、そのファイルをバックアップコピーするデバイスドライバを書いてみました(drvcopy.cab)。よければどうぞー。

NT_ASSERTマクロ

ドライバ開発の際には従来広くASSERTマクロが使われているが、最近のWDKではASSERT定義周辺に、NT_ASSERTというマクロが追加されている。このマクロは現時点では文書化されていないものの、ASSERT Yourself - The New NT_ASSERT Macro in the WDKにおいて、…

VTがなくてもがんばればなんかなる!

この辺眺めながら。個人的には大好きなVT技術なのだけど、ここではハイパーバイザーの存在はそんなに重要でない。ハイパーバイザーを使ったほうが楽に、良いものができるのは間違いないが、同じアーキテクチャにするにしても、drvcopyのようにAPIを使ってド…

ページをまたがる構造体とか

うん、わかるよ、カーネルもカーネル、コアな構造体だからページアウトとか関係ないのはわかるよ。けどさ、 version size(hex byte) size(byte) 2000 SP4 x86 0x7e0 2016 XP SP3 x86 0xb30 2864 Vista SP2 x86 0x2008 8200 7 x86 0x3620 13856 どうかしてる…

興味深いソースがあるサイト

Collaborative RCE Tool Library!というサイトを見つけた。 ここにあるツール、結構面白いものが多く、たとえばDream of every reverserは Engine used to perfrom stealth memory trace of a target. なツールでソースコードが付いている。ソースもPoCのよ…

ネタ

| | { ! _,, -ェェュ、 | ィ彡三ミヽ `ヽ ,ィハミミミミミミミミミヽ、| 彡'⌒ヾミヽ `ー /ililハilミilミliliミliliミ| ヾ、 /iiiiイ!ヾヾミ、ミニ=ー-ミ| _ `ー―' i!ハ:.:.\\_::::::::::::::/:.| このアドレスは 彡三ミミヽ i! ヽ:.:.:.:冫': : :::/,,∠| 彡' ヾ、 _ノ i!::: ̄二ー…

LDR_DATA_TABLE_ENTRY にパッチを行う

ここでいってること。チェックは以下のシーケンスになっている。 PsSetCreateProcessNotifyRoutineEx(Routine, IsRemove) +-PspSetCreateProcessNotifyRoutine(Routine, IsRemove, 1) +-MmVerifyCallbackFunction(Routine) 関数を登録する際にMmVerifyCallba…

プロダクションの場合どうやってんだろ?

カーネルで何かやろうとするとすぐに、文書化された方法がない(ように思われる)状況になる。PoCやら趣味やらのコードであれば、泥臭い方法で逃げれることが多いのだけど、プロダクションの場合そうもいかないだろう。文書化されていない方法ってのは、良い…

フィルタドライバメモ

ドライバファイルはsystem32以下でなくてもOK。 ドライバサービスをインストールするだけで開始する必要はない。 開始する(フィルタドライバがメモリにロードされ正しく機能しはじめる)ためには、レジストリにフィルタドライバとしてサービス名を登録し、W…

GsDriverEntryを読む

普通にドライバをビルドすると、ドライバモジュールのエントリーポイントはDriverEntryではなく、暗黙的にGsDriverEntryになる。この関数はその名前の通りVCコンパイラの /GS オプションに関係する。 以下は、そのGsDriverEntry関数のアセンブルコードを読ん…

Intel VT-xを使ってみた

id:rootkitの人に会うのに手ぶらで行けるわけがない! というわけで(?)私もvmxcpuをリファクタリングして、Intel VTを使った仮想マシンモニタのコア部分を書いてみました。独自性のないデモとソース(動作環境:私のPC!)です。 嬉しいのでエントリーに…

Intel VT-xを使ってみた(経過)

Intel VT-xを利用して基礎的なVMMを書いてみた日記。アセンブラの話題でも、Windowsの話題でもないのでカテゴリ選択が非常に微妙(笑) 02/27 久しぶりにVT勉強してみる気になってきたから、vmxcpuを読んだり弄ったりしはじめている。

Vista SP1とWindows7βのシステムコール(x86)

見事な仕事だと関心はするがどこもおかしくはない。 というか含蓄がない。 いつの間にかシンボルサーバから7βのシンボルが取れるようになっていたので、とりあえずやってみたが、最近は英語で遊んでるほうが楽しいので深入りしていない。 以下は無機質なテー…

少しキモイドライバのロード方法

Trojan.Ascessoのテクニカルレポートに初めて見るドライバのロード技法が使われていた。 Trojan.Ascesso は、実行されると、最初にカーネルメモリー内に自身のドライバをロードしようと試みます。 (中略) スタートアップ時に実行され、また現在カーネルメ…

デバッグメッセージの読み取りとフィルタリング

最近、なぜか唐突に和訳の楽しさに目覚めたので、URLカテゴリで英語の記事を紹介するとともに日本語に訳すことがあるかもしれない。 というわけでDbgPrintExの働きについての文書、Reading and Filtering Debugging Messagesで和訳の練習。これで休日丸1日か…

文字列バッファとIRQL

IRQL > PASSIVE_LEVELにおける文字列操作についての記事。A Hole In My Head - String buffers and IRQLで和訳の練習。

Bypassing PatchGuard

おお、ターゲットマシンをいじっていたらコード0x00000109(CRITICAL_STRUCTURE_CORRUPTION)でBugcheckしたぞ。どうもこれがPatchGuard*1の働きらしい。 でまあ、ググるわけで。 当然のように記事が出てくるわけで。 Bypassing PatchGuard 3 2005年にはすでに…

Shadow Walkerを実装してみた 2/2

仮想メモリを隠蔽するShadow Walkerの動作説明の続き(→前回)。仮想メモリへのアクセスをフィルタリングしているフック後のページフォルトハンドラ関数を見ていく。 ちなみに本文中で頻繁に引用しているのは、すべてIA-32 インテル(R) アーキテクチャ・ソフ…

Shadow Walkerを実装してみた 1/2

Shadow Walkerとは、仮想メモリへのアクセスの種類を「実行」と「それ以外(参照・変更)」とでフィルタリングすることで実装される技法。 仮想メモリへのアクセスの種類が「実行」の時のみ正しい仮想メモリを参照させ、「参照・変更」の時には無関係な仮想…

プロセッサ数の取得とアフィニティ

プロセッサ数の取得は、Vista SP1や2008より前はntoskrnl.exeのエクスポート済み変数KeNumberProcessorsで正しかったが、Vista SP1や2008からは非推奨となった。代わりにKeQueryActiveProcessorsを使うべきである。

Gain Exclusivityを実装してみる

Gain Exclusivityはカーネルモードにおいて、自身以外のプロセッサの動作を一時的にロックする処理。他のプロセッサがロックされている間に共有リソースを編集するコードを実行することで、書き換え中の不完全な状態でアクセスされたり、書き換え中に別の変…

第1回ローレイヤー勉強会いってきた

Windowsカーネルハックというネタでしゃべってきたのでその資料をアップ(llbenkyo1_win.cab)。よく知っている人には「それはどうなのよ」というところがあると思うので、その辺は突っ込んでもらえるとうれしいです。以下にデモごとの主要な動作・コンセプ…

イメージからのSDTリストア

ntoskrnl.exeをディスクから開き、PEヘッダを解析してプロセスメモリにマッピングした後、コードセクションを読み取りカーネルメモリと比較することでフックを検出する技法がある。これの発展系として、SDT RestoreではKeServiceDescriptorTableを比較し異常…

BSOD Properties NT公開

ブルースクリーン(Blue Screen Of Death = BSOD)の色を変更するGUIツールです。よければどうぞー(BSOD_Properties_NT.cab / Readme)。

いつか読む

そこ、暗に読まないと言ってる、とかつっこまない。7月の連休にひとつぐらいは手を出したかったんだけどなぁ。 Dokanライブラリ ファイルシステムを作成するためのライブラリ。レジストリなんかは極めて直感的にDokanライブラリに適合させられるんじゃないか…