web-dev-qa-db-ja.com

ローカルユーザーアカウントの作成日を確認する方法

ローカルユーザーアカウントの作成日を取得したい(重要な場合はWin 7)。私は次のWMIオブジェクト(そしてもちろんgoogle)を見てきました:

Win32_UserAccountWin32_NetworkLoginProfile

NetworkLoginProfileから返されるオブジェクトには、最終ログイン時刻がありますが、作成日はありません。プロファイルフォルダーのDate Createdプロパティを確認すると、folderが作成された日付が示されるだけで、必ずしもアカウント自体が示されるわけではありません。

8
MDMoore313

データはSAMにありますが、Microsoftによって公に文書化されているようには見えません。また、それを取得するための公式のAPIが見つかりません。 chntpw utilityソースコードを見ると、値が各アカウントの "F"レジストリキーに格納されていることがわかります。ソースコードを止める:

#define USER_F_PATH "\\SAM\\Domains\\Account\\Users\\%08X\\F"

struct user_F {
  ...
  char t_creation[8]; /* Time of account creation */
  ...
}

[////] regripper forensicsプロジェクトには、アカウントの作成日を報告するプラグイン samparse があります。

科学捜査ツールはおそらく望んでいるものではありませんが、Microsoftが容易にしていないようです。


これを調査したところ、 Microsoft MVPがアカウント作成データがSAM に保存されていることを認識していなかったことが面白いとわかりました。彼の利益のために、おそらく彼はchntpwユーティリティを離れていません。そこで、私はドキュメント化されていないSAM構造に関する情報の検索を始めました。

10
Evan Anderson

実際に知る唯一の方法は、アカウントの作成時に コンピューティングでアカウント管理監査を有効にする rを設定することです。次に、作成日にイベントログにEventID 4720が表示されます。 (この記事ではActive Directoryについて説明していますが、ローカルアカウントにも同じことが当てはまります。確認しました。)

それがなければ、ユーザーのレジストリHive、ntuser.datファイル、ユーザープロファイルフォルダーなどですが、コメントに記載されているように、これはユーザーの最初のログオンに関してのみ正確です。

残念ながら、これは「ログに記録しなかった場合、その情報は存在しません」というケースです。

3
HopelessN00b

作成時間を抽出して解析するPOC PowerShellスクリプトを提供しようとしていましたが、chntpwのロジックが正しくないことに気付きました。作成時間と呼ばれる値は、実際には最後に設定されたパスワードですが、これらの値は最初のアカウント作成時と同じです。 SAMの詳細な説明については こちら を参照してください。

samparseのEvanの2番目のリンクは、正しくなる可能性があります。実際に見てみるとうまくいきます。そのソースを見ると here 、99行目:

$c_date = $create->get_timestamp();

perlのget_timestampからParse::Win32Registryを呼び出すことがわかります。それが実際にキーの最後の書き込み時間であると確信しています。特定のキー(HKLM\SAM\SAM\Domains\Account\Users\Names\<USERNAME>)は対応するRIDキーへのポインタのみを保持しているように見えるため、作成後に変更してはならず、最後の書き込み時間は作成時間と同じになります。

さらに組み込みのツールを使い続けたいので、PowerShellを介してその方法を説明する一連のScripting Guyの記事を次に示します。

PowerShellを使用してレジストリの最終変更タイムスタンプにアクセス

PowerShellレジストリタイムスタンプコードの再利用

レジストリキーのタイムスタンプを表示するプロキシ関数を作成する

PowerShell経由でレジストリキーのタイムスタンプを利用

1
charleswj81