Screen_unlock


概要

Screen_unlockは、LSASSプロセスのmsv1_0.dllにパッチをあてることで、ログオンスクリーンにおけるユーザ認証をバイパスさせるproof of conceptツールです。このツールを実行するためには管理者権限またはシステム権限が必要です。

説明

サスペンドまたはハイバネーション状態になっているWindowsマシンが手元にあり、ユーザがログオンしていた状態に復帰したいんだけど、ユーザのログオンパスワードがわからない、といった状況下で役に立つ(かも知れない)ツールがこのScreen_unlockです。もしFireWire(IEEE1394)のポートがそのPCに付いていれば、Winlockpwnを使うことでスクリーンのアンロックが可能ですが、すべてのPCにFireWireポートが付いているわけではありません。このScreen_unlockは、簡単にいえばWinlockpwnをローカルで実行するツールです。

ユーザのログオン状態に復帰することは、フォレンジック調査などでも大いに役立ちます。ログオン状態に復帰することでそのユーザのEFSファイルにアクセスできるようになりますし、Syskeyの設定を強化(Syskey=2)していた場合でもパスワードハッシュやLSAシークレットを抽出可能になります。

さて、それではログオンスクリーン上でどうやってこのプログラムを実行するのでしょうか?

通常のログオン状態でのウィンドウ操作と同様に、ログオンスクリーン上でも「ウィンドウキー + U」でユーティリティマネージャを起動し、そこから「拡大鏡(magnify.exe)」や「スクリーンキーボード(osk.exe)」を実行することができます。これらの起動されたプログラムはシステム権限で動作します。つまり例えばmagnify.exeをscreen_unlock.exeで置き換えられれば、ログオンスクリーンでscreen_unlock.exeをシステム権限で起動できることになります。

サスペンドやハイバネーション状態のハードディスクは、別OSからマウントしてファイルコピーすることはできません(できるかも知れませんが、やらない方がよいでしょう)。ですのでハードディスクを別OSに接続し、書き換えたいプログラムファイル(例えばmagnify.exe)のディスク・クラスタのみを正しくオーバーライトする必要があります。以下は、The Sleuth Kitのistatでクラスタ番号を列挙し、ddで1クラスタずつ書き換えるコマンドラインの例です。書き換え先のファイルサイズが小さくない限り、これでうまくいくと思います。

その後ハードディスクを元のPCに戻し、電源を入れ、ログオンスクリーンでユーティリティマネージャから実行すれば、screen_unlock.exeが起動してLSASSプロセスにパッチをあててくれます。実行中のプロセスに対するパッチですので、リブートすればLSASSは元に戻ります。



なお、過去に書き換え先プログラム(magnify.exe等)を起動したことがある場合、書き換えたscreen_unlock.exeが正しく実行しないケースがあります。Prefetchフォルダを参照して、書き換え先プログラムが起動した形跡がないことを確認した上で書き換えた方がよいでしょう。またVista以降で試す際には、SuperFetchサービスを停止した方が確実です。さらにパッチをあてる場所はmsv1_0.dllのバージョンによって異なりますので、ツールが対応していないバージョンについてはパッチの位置を調べて、ソースコードに反映させる必要があります(一応、現時点(2010年7月)で最新のXP SP3やWindows 7には対応しています)。

ちなみにScreen_unlockは、主として前述のWinlockpwnおよびMetasploitのscreen_unlock.rbを参考に、またlsadump2のソースコードを一部拝借して作成しました。

注意事項

本ソフトウェアはGPLに基づき、自由に再配布や改変ができます。なおddによるハードディスクへの書き込みや、LSASSプロセスに対するメモリパッチは、システムに重大な影響を与える可能性があります。リスクを十分に理解した上でご使用ください。本ソフトウェアや上記手法の使用により万一、不具合が発生した場合でも、作者は一切責任を負いません。また当然のことですが、ご自身の管理下にないコンピュータに対してこのツールを使用することはおやめください。

ダウンロード


このページに関するお問い合わせは、shio@st.rim.or.jp までお願いします。