记录 Active Directory 的 LDAP 访问

记录 Active Directory 的 LDAP 访问

我正在寻找一种方法来记录 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"

相关内容