lastLogon vs. lastLogonTimestamp in Active Directory

Zyg*_*ygD 14 windows login active-directory

An employee left the company. I try to find out when his AD account was logged in for the last time - if it was before the dismissal or after.

用户属性窗口中有这 2 个属性:lastLogonlastLogonTimestamplastLogon日期早于解雇日期,但lastLogonTimestamp日期晚于解雇日期(因此在这种情况下我们会遇到安全问题)。

如何知道,这些属性中的哪一个显示了实际的上次 AD 帐户登录时间?它们之间有什么区别?

用户属性 - 属性编辑器

Gre*_*kew 15

使用最新的属性。

Lastlogon 仅在执行身份验证的域控制器上更新,不会被复制。

LastLogontimestamp 被复制,但默认情况下仅当它比以前的值早 14 天或更长时间。

http://social.technet.microsoft.com/wiki/contents/articles/22461.understanding-the-ad-account-attributes-lastlogon-lastlogontimestamp-and-lastlogondate.aspx


Res*_*uez 9

其他答案遗漏了一个重要细节,但在调查问题中提到的案件时,这一细节可能至关重要。

即使没有执行实际登录,LastLogonTimeStamp也可以更新

例如,您可以在检查具有足够旧的 LastLogonTimestamp 值的帐户的“有效权限”后立即查看 LastLogonTimeStamp 属性如何更新。

当您遇到类似屏幕截图中的情况时,您会看到某人帐户的相对较新的 LastLogonTimestamp,则应检查所有域控制器的 LastLogon 属性值。

如果它们都早于 LastLogonTimestamp,那么这可能意味着没有“真人输入”,我的意思是有人登录到工作站或远程桌面会话。

但同时,您不能 100% 确定,因此您应该检查所有可用日志,以确保该帐户没有用于任何其他目的(从移动设备同步邮件或类似的目的)...

最后,您应该仅将lastLogon 和lastLogonTimestamp 视为查找过时帐户的方法。

并且出于安全原因,您必须提前设置所有必要的审核设置,然后使用审核日志进行调查。

不要管最后的登录!


Dre*_*pin 8

TL;DR - 如果您想要最准确的登录时间,您必须lastLogon从所有域控制器查询属性。如果可以接受 ±19 天的容差,那么您可以lastLogonTimestamp从最近的域控制器中读取数据。


最后登录

此属性不会被复制,而是在域中的每个域控制器上单独维护。要获取域中用户上次登录的准确值,必须从域中的每个域控制器中检索用户的 Last-Logon 属性。检索到的最大值是该用户的真实上次登录时间。

https://docs.microsoft.com/en-us/windows/desktop/adschema/a-lastlogon#remarks


上次登录时间戳

每当用户登录时,都会从 DC 读取此属性的值。如果值较旧 [ current_time - msDS-LogonTimeSyncInterval],则更新该值。域功能级别提升后的初始更新计算为 14 天减去 5 天的随机百分比。

https://docs.microsoft.com/en-us/windows/desktop/adschema/a-lastlogontimestamp


笔记:

  1. 如果您以编程方式检索它们,这两个日期都存储为FILETIME(Int64在 .Net/PowerShell 中)。
  2. PowerShell 还提供了一个LastLogonDate属性。我更愿意提供 Microsoft 特定的文档来确认这一点,但大多数消息来源都说并且我的测试证实它已lastLogonTimestamp转换为 al?o?c?a?l? DateTime价值。


KER*_*ERR 6

我使用这个 Powershell 单行查询所有 DC 以获取用户的 LastLogon。然后您可以使用最新的结果作为最近的登录

Get-ADDomaincontroller -Filter * | % {$DC = $_.name ; Get-ADuser jimbo -properties * -Server $_.name | select @{n="LastLogon";e={[datetime]::FromFileTime($_.lastlogon)}},@{n="DC";e={$DC}} } 
Run Code Online (Sandbox Code Playgroud)