我正在寻找一种方法来记录 Active Directory 域控制器的 ldap 访问。我希望能够记录用户名并且源 IP 地址访问 389 和 636(加密)。
简单的数据包捕获可以让我获得源 IP,但无法通过 ldaps 获取用户名,因此我希望 Windows 中有一些内置的审计/调试/日志记录功能可以为我提供这些信息。
答案1
Windows 安全事件日志确实会跟踪此信息,但不容易将其从流水线中提取出来。LDAP 登录的关键标记如下:
- 事件 ID:4624
- 主题用户 SID:S-1-5-18
详细信息隐藏在以下 XML 元素中:
- 目标用户名
- IP地址
如果您正在解码的文本视图中查看内容,则关键标记是:
- 事件 ID:4624
- 网络信息 -> 工作站名称 = LDAP 服务器的名称
详情如下:
- 网络信息 -> 源网络地址
- 新登录 -> 账户名
这些登录事件与常规登录事件的关键区别在于,ldap 绑定实际上是登录到相关域控制器。这就是为什么填写了“工作站名称”字段。
通过措辞搜索来获取这些事件将会非常棘手。
答案2
我知道这是一个老问题,但请看一下 ADInsight:https://technet.microsoft.com/en-us/sysinternals/adinsight.aspx
答案3
仅获取端口信息,
netstat 1 -an | findstr ":389"
或者
netstat 1 -an | findstr ":636"
1 表示 [< 间隔 >]
每隔 Interval 秒重新显示所选信息。按 CTRL+C 可停止重新显示。如果省略此参数,netstat 仅打印一次所选信息。
答案4
您需要用户名。
根据我的经验,解析 Windows 安全事件日志是一项非常卑微的任务。即使与 MS 现场工程师合作,他们有时也不知道某些事件意味着什么。
您可以使用过滤器参数。现在它收集 4624 和 4625 个事件 + sid 长度 >10 个符号的过滤器(以摆脱所谓的众所周知的 SID)并获取最后 100000 条记录(如果您需要“无限制” - 将其更改为 10000000)。我已经在 Windows 2019 Server 上对其进行了测试;效果很好。
脚本如下:
[string]$pathToSaveFiles = $PSScriptRoot +"\"
$PSOobj4CSV = @()
$nrOfLogRecordsToProcess = 10000
$hostname = $env:computername
$CurrDateTimeStr=[DateTime]::Now.ToString("yyyyMMdd-HHmmss")
$pathToCSV = "$($pathToSaveFiles)$($CurrDateTimeStr)_$($hostname)_ldap_users_IPs.csv"
write-host "Fetching records..."
$eventList = Get-WinEvent -FilterHashtable @{logname=’security’; id=4624,4625}| Select-Object -First $nrOfLogRecordsToProcess
$i=1
$recordCount = $eventList.count
foreach($currEvent in $eventList){
if ($currEvent.Properties[4].Value.Value.Length -gt 10) { #if sid more then 10 symbols
$PSOline = [pscustomobject]@{
'Time' = $currEvent.TimeCreated.ToString()
'AccountName' = $currEvent.Properties[5].Value
'IP' = $currEvent.Properties[18].Value
}
write-host "Record $i from $recordCount time: $($currEvent.TimeCreated.ToString()) AccountName: $($currEvent.Properties[5].Value) IP: $($currEvent.Properties[18].Value)"
$PSOobj4CSV += $PSOline
}
$i++
}
$PSOobj4CSV|export-CSV $pathToCSV -NoTypeInformation -append -force
Write-host "Info written to $pathToCSV file"