it-swarm-vi.tech

Cách tốt nhất để tìm máy tính mà người dùng đăng nhập lần cuối từ đâu?

Tôi hy vọng rằng một nơi nào đó trong Active Directory, "lần đăng nhập cuối cùng từ [máy tính]" được ghi/lưu trữ, hoặc có một nhật ký nào tôi có thể phân tích được?

Mục đích muốn biết PC cuối cùng đăng nhập là để cung cấp hỗ trợ từ xa qua mạng - người dùng của chúng tôi di chuyển không thường xuyên, nhưng tôi muốn biết rằng bất cứ điều gì tôi tư vấn đều cập nhật vào sáng hôm đó (khi họ đăng nhập , có lẽ) tối thiểu.

Tôi cũng đang xem xét các tập lệnh đăng nhập ghi tên người dùng và máy tính đến một vị trí đã biết mà tôi có thể tham khảo, nhưng một số người dùng của chúng tôi không muốn đăng xuất 15 ngày một lần.

Nếu có một giải pháp tao nhã sử dụng các tập lệnh đăng nhập, chắc chắn đề cập đến nó - nhưng nếu nó xảy ra chỉ để mở khóa trạm, điều đó sẽ còn tốt hơn nữa!

24
Garrett

Là một phần của tập lệnh đăng nhập của chúng tôi, tôi có thông tin đó (và hơn thế nữa) đã đăng nhập vào một chia sẻ ẩn trên máy chủ, với một tệp nhật ký cho mỗi người dùng. Một kịch bản đăng xuất thêm thời gian người dùng đăng xuất vào cùng một tệp nhật ký. Dễ dàng cài đặt, không có chi phí và thông tin có ở định dạng dễ đọc.

26
John Gardeniers

Chúng tôi thực hiện điều này thông qua tập lệnh đăng nhập để cập nhật mô tả của đối tượng máy tính trong AD.

Bạn cần thực hiện một ủy quyền kiểm soát tùy chỉnh để cho phép "Người dùng được xác thực" viết thuộc tính mô tả của các đối tượng máy tính trong miền/s.

Khi đã xong, tất cả những gì bạn cần là một tập lệnh tạo ra bất kỳ thông tin nào bạn muốn và ghi các thuộc tính vào đối tượng máy tính. Tập lệnh này sau đó được gán làm tập lệnh đăng nhập thông qua đối tượng Chính sách nhóm được liên kết với tên miền.

Chúng tôi đặt dấu thời gian, tên người dùng, IP (s) trong trường mô tả. Dấu thời gian xuất hiện đầu tiên vì nó giúp dễ dàng nhìn thấy nhanh các đối tượng máy tính "cũ" bằng cách sắp xếp trên trường mô tả.

Đây là kịch bản tôi đã viết cho điều này nếu bạn muốn sử dụng nó làm điểm bắt đầu:

On Error Resume Next

Set objSysInfo = CreateObject("ADSystemInfo") 'Bind to AD
Set objNet = CreateObject("WScript.Network")

strCompDN = objSysInfo.ComputerName 'DN for computer, e.g. "CN=VISTAWORKSTATION,OU=Child OU Name,OU=Parent OU Name,DC=domain,DC=com"
Set objComp = GetObject("LDAP://" & strCompDN) 'IADsComputer object

strUserDN = objSysInfo.UserName 'DN for user, e.g. "CN=John Smith,OU=Child OU Name,OU=Parent OU Name,DC=domain,DC=com"
Set objUser = GetObject("LDAP://" & strUserDN) 'IADsUser object

strUsrLogin = LCase(objNet.UserName)

strNow = Now
strDateStamp = DatePart("yyyy",strNow) & _
    Right("0" & DatePart("m",strNow), 2) & _
    Right("0" & DatePart("d",strNow), 2) & _
    "@" & _
    Right("0" & DatePart("h",strNow), 2) & _
    Right("0" & DatePart("n",strNow), 2)

'RegExp object used to perform a simple match on IP address
Set objRE = New RegExp
objRE.IgnoreCase = True
'Note this regexp pattern isn't "correct" for matching an IPv4 address properly, but since WMI will return an
'array of IP addresses, this is sufficient to distinguish IPv4 vs IPv6
objRE.Pattern = "^\d+\.\d+\.\d+\.\d+$"

strIP = ""

'Connect to WMI and retreive all network adapters
Set objWMI = GetObject("winmgmts:")
Set colNICs = objWMI.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration")

'Get the IP(s) assigned to whichever network adapter has our default gateway
If colNICs.Count > 0 Then
    For Each objNIC in colNICs
        If IsArray(objNIC.DefaultIPGateway) Then
            arrIP = objNIC.IPAddress
            For i = 0 To UBound(arrip)
                If objRE.Test(arrIP(i)) Then strIP = strIP & " " & arrIP(i)
            Next
            strMAC = objNIC.MACAddress
        End If  
    Next
End If

strIP = Trim(strIP)

objComp.Description = strDateStamp & " " & strUsrLogin & " " & strIP
objComp.Put "extensionAttribute1", strUsrLogin
objComp.Put "extensionAttribute2", strIP
objComp.Put "extensionAttribute3", strMAC

objComp.SetInfo
10
ThatGraemeGuy

Tôi đã phải đạt được kết quả tương tự vì những lý do tương tự; bằng cách nào đó xác định máy nào người dùng cụ thể đăng nhập từ. Tôi muốn biết "trước thực tế" và không thể thay đổi tập lệnh đăng nhập của người dùng như đã thảo luận ở trên.
[.__.] Tôi đã sử dụng powershell trên DC mà người dùng đang xác thực để phân tích nhật ký sự kiện Bảo mật:

get-eventlog "Security" | where {$_.Message -like "*Username*" -AND "Source Network Address"} | export-csv C:\Temp\test.csv

Crack mở .csv bằng Excel hoặc trình soạn thảo fav của bạn và tìm mục nhập gần đây nhất hiển thị cả Tên tài khoản (Tên người dùng) và Địa chỉ mạng nguồn trong cùng một sự kiện.
[.__.] Đây có thể không phải là giải pháp đáng tin cậy 100% (tùy thuộc vào thời gian thuê DHCP, v.v.), nhưng nó hiệu quả với tôi.

6
marcusjv

Bạn có thể bật kiểm toán cho các sự kiện đăng nhập tài khoản. Những sự kiện (bao gồm mở khóa máy trạm) sẽ được lưu trong nhật ký bảo mật của DC.

Ngoài ra còn có các công cụ của bên thứ ba có thể làm cho việc này dễ dàng hơn, chẳng hạn như Đăng nhập cuối cùng thực sự .

6
Adam Brand

Tôi chỉ viết tên người dùng (cũng như thông tin khác, như ngày và giờ, một số phiên bản chương trình, v.v.) vào mô tả máy tính bằng cách sử dụng tập lệnh đăng nhập. Bằng cách đó, tôi có thể lấy tất cả thông tin từ Người dùng & Máy tính AD một cách nhanh chóng và dễ dàng, và như một phần thưởng có một cách tốt để xác định PC nào vẫn còn trong AD không được sử dụng trong một thời gian (và do đó rất có thể là máy chết).

4
Maximus Minimus

ThatGraemeGuy, cảm ơn vì kịch bản xuất sắc! Tôi đã phải viết lại nó trong PowerShell, nhưng nó vẫn hoạt động.

$CompDN = "(&(objectCategory=computer)(objectClass=computer)(cn=$env:COMPUTERNAME))"
$strCompDN = [string]([adsisearcher]$CompDN).FindOne().Properties.distinguishedname
$objComp = [ADSI]("LDAP://"+$strCompDN)

# quit if computer is a server or DC
if (($strCompDN -like '*Controller*') -or ($strCompDN -like '*SERVER*')) { exit }

$strUsrLogin = $env:username
$strDateStamp = Get-Date -f '[email protected]:mm'
$IPPattern = "^\d+\.\d+\.\d+\.\d+$"

$colNICs = gwmi Win32_NetworkAdapterConfiguration
if ($colNICs.Count -gt 0) {
foreach ($objNIC in $colNICs){
        if ($objNIC.DefaultIPGateway) {
            $arrIP = $objNIC.IPAddress
            for ($i=0; $i -lt $colNICs.Count; $i++) { 
            if ($arrIP[$i] -match $IPPattern) { $strIP = $arrIP[$i]; $strMAC = $objNIC.MACAddress }
            }
        }
    }
}

$objComp.Description = $strDateStamp + " - " + $strUsrLogin + " - " + $strIP
$objComp.extensionAttribute1 = $strUsrLogin
$objComp.extensionAttribute2 = $strIP
$objComp.extensionAttribute3 = $strMAC
$objComp.SetInfo()
3
Matvey Solodovnikov

Mẹo để biết chắc chắn nơi người dùng đăng nhập lần cuối ngoài các đề xuất từ ​​Adam là tổng hợp nhật ký. Nếu bạn có nhiều bộ điều khiển miền, bạn phải kiểm tra tất cả hoặc tập trung ghi nhật ký và sau đó kiểm tra nhật ký đơn.

Một số, thậm chí có thể là hầu hết, các công cụ của bên thứ ba đủ thông minh để truy vấn tất cả các bộ điều khiển miền. Nhưng nếu bạn đang nghĩ đến việc viết một kịch bản để phân tích nó ra thì tôi không thể tranh luận đủ mạnh để tập trung vào nhật ký của bạn.

2
Laura Thomas

Lý tưởng nhất, bạn sẽ nắm bắt những điều sau đây cho Nhóm CSIRT của mình để hỗ trợ cho các cuộc xâm lược.

userid đăng nhập bằng tên máy trạm Địa chỉ MAC Địa chỉ IP Ngày/Dấu thời gian đăng nhập (ndp, tương tác, v.v.)

Sau đó kết xuất nó vào một lệnh sql vào cơ sở dữ liệu mà họ có thể truy vấn. Các bit và mảnh được ghi lại ở khắp mọi nơi, nhưng ghi lại điều này giúp tiết kiệm thời gian lấy dữ liệu từ các máy chủ DHCP/WINS, v.v ...

1
Scott

Tôi sẽ thêm điều này như một nhận xét cho câu trả lời của marcusjv ở trên, nhưng tôi không có tiếng tăm nên một câu trả lời riêng biệt sẽ phải làm:

Trong biểu thức đó -AND "Địa chỉ mạng nguồn" sẽ luôn đánh giá thành TRUE

Tôi nghĩ những gì bạn cần là: get-eventlog "Security" | trong đó {$ . Giống như tin nhắn "* tên người dùng *" -AND $. Message.contains ("Địa chỉ mạng nguồn")}

1
SS64

đăng nhập vào AD

Nhiều lần chúng tôi yêu cầu phải biết liệu đăng nhập cụ thể có phải là một phần của nhóm người dùng quảng cáo hay không. Hoặc đôi khi chúng ta cần biết một nhóm AD và muốn biết ai là người đăng nhập.

Có nhiều cách khác nhau để đạt được điều này.

Tôi làm theo bước này để tạo lối tắt trên màn hình của mình, nơi tôi có thể dễ dàng tìm thấy thông tin đăng nhập Vui lòng làm theo quy trình như

BẮT ĐẦU-> CHẠY -> rundll32 DSquery, OpenQueryWindow

Bạn có thể tìm thấy tất cả các AD bạn là một phần của, sử dụng này.

Bắt đầu-> Cài đặt-> Bảng điều khiển -> Công cụ quản trị viên -> Máy tính và người dùng Active Directory Chọn Miền bạn muốn tìm đăng nhập, nhấp chuột phải vào tên miền đó và chọn tùy chọn Tìm kiếm Tìm kiếm.

0
Lepide

Cách duy nhất để có thông tin mới nhất là thông tin đăng nhập thông qua. Sử dụng một công cụ như Microsoft Operations Manager hoặc công cụ miễn phí như snare để tổng hợp nhật ký sự kiện thú vị từ máy chủ vào vị trí trung tâm (tệp văn bản thông thường hoặc cơ sở dữ liệu SQL) và sau đó sử dụng các công cụ như logparser hoặc truy vấn SQL để tạo báo cáo bạn muốn.

để tìm ID sự kiện khác nhau cho các sự kiện khác nhau, hãy truy cập Từ điển nhật ký sự kiện

Hãy cho tôi biết, nếu bạn muốn theo lộ trình này, tôi có thể giúp bạn tạo các truy vấn phù hợp cho logparser.

0
KAPes

Nếu bạn đang tìm kiếm một tài liệu tham khảo lịch sử, bạn có thể thử công cụ của bên thứ 3 như Trung tâm đăng nhập từ Motivate Systems. Nó ghi lại tất cả các đăng nhập người dùng Active Directory và cung cấp giao diện web để khai thác dữ liệu. Nó cũng bao gồm một số biểu đồ khá tốt giúp chuyển số liệu thống kê đăng nhập sang phần trăm sử dụng.

0
Scott