(削除済)ジャンクションが脅威となるケース

勘違いだったので削除しました。すみません。
ここで書いていたジャンクションを利用したケースではファイルを開けないので、論点としたかった問題は起こりません。
名無しさんありがとうございます。


以下内容。
低い権限のユーザーが作成したジャンクションを高い権限のユーザーが利用することで低いユーザーは権限を越えてファイルアクセスできる、という趣旨です。
指摘についてはコメントを参照のこと。

続きを読む

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

EXE、TMP、SYS、BAT ——— 何でも一緒だ。マルウェア解析では、どんなものからも目を離してはいけない。

ファイルが削除されようとしたタイミングで、そのファイルをバックアップコピーするフィルタドライバを書いてみました(ScavengerFolk.cab)。よければどうぞー。

続きを読む

NT_ASSERTマクロ

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

ここでは以下にこの文書の要約を示す。

続きを読む

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

この辺眺めながら。個人的には大好きなVT技術なのだけど、ここではハイパーバイザーの存在はそんなに重要でない。ハイパーバイザーを使ったほうが楽に、良いものができるのは間違いないが、同じアーキテクチャにするにしても、drvcopyのようにAPIを使ってドライバのロードを監視して、解析し、#BPハンドラをフックしてフックハンドラ内でディスアセンブラを動かすことによって主要機能が実装できる*1
ハイパーバイザーの効果は、ntoskrnl.exeよりも早く動けることと、マルウェアからの可視性の低減と保護だろうか。


面白いと思ったのはアーキテクチャ自身。特に、

システム初期化時にゲストOSのメモリー上に存在するOSイメージ(ntoskrnl.exeなど)を検査し,カーネル内部で利用されているカーネルAPIとそのアドレスを対応付けたデータベースを作り上げる。

というアプローチ。これは要するにPEヘッダのアドレステーブルを調べ上げて対応表を作ることを指している。これはユーザーモードにも適用できる考え方で、使い勝手が良い結構スマートな方法だと思う。今思いついたけど、この方法でデバッグシンボルを使わずにアドレスの「名前」を得ることもできそうだね。


ちなみに表題は最近思っていることで、むしろ、中途半端にVT技術に依存してしまうと既存のVM上で動かなくなるという点が痛くなってくるのかなと。 

*1:ただし#BP/#DBあたりのハンドラはフックするとデバッグが大変です^^;

われわれはビジネスパーソンであるとともにエンジニアであるので

             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   細部にとことんこだわろうぜ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /


という衝動との葛藤なわけです。こと好きなことに関しては。

ドライバにオレオレ署名を埋め込む

x64 Windowsではデジタル署名されていないドライバはロードすることができないので、自分でビルドしたりその辺から拾ってきたドライバを読ませるときは適当な(オレオレの)署名をする必要がある。
んだけど、よくコマンドを忘れるのでドライバに署名を埋め込む手順をメモ。


ドライバのビルドプロンプトを起動して、

>makecert -r -pe -ss PrivateCertStore -n CN=<発行者名> test.cer
Succeeded

>certmgr /add test.cer /s /r localMachine PrivateCertStore
CertMgr Succeeded

>Signtool sign /v /s PrivateCertStore /n <発行者名> <ドライバファイル名>
The following certificate was selected:
    Issued to: <発行者名>
    Issued by: Root Agency
    Expires:   2040/01/01 8:59:59
    SHA1 hash: 0633C22EA433BE25990CC519CE90E735DC11F8F1

Done Adding Additional Store

Attempting to sign: <ドライバファイル名>
Successfully signed and timestamped: <ドライバファイル名>

Number of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0


でおk。一度certmgrで証明書ストアに登録してしまえば、以降はSigntoolで署名を埋め込む手順だけでいい。こんなバッチを書いておくと楽でしょう。

Signtool sign /v /s PrivateCertStore /n <発行者名> %1
pause


ちなみにこの証明書は >bcdedit /set testsigning on した環境でなければ使えない。

12/24追記

VeriSignのタイムスタンプは購入者用のサービスとのことなので、タイムスタンプを設定する記述を削除しました。(私が扱う範囲内では)タイムスタンプがなくても問題なくロードできました。

コメントしてくれた名無しさん、ありがとうございます。知りませんでした。そしてVeriSignごめんなさい。