इस लेख में, हम वर्णन करेंगे कि विंडोज़ में आरडीपी कनेक्शन लॉग कैसे प्राप्त करें और ऑडिट करें। आरडीपी कनेक्शन लॉग आरडीएस टर्मिनल सर्वर प्रशासकों को यह जानकारी प्राप्त करने की अनुमति देता है कि किस उपयोगकर्ता ने सर्वर पर लॉग ऑन किया जब एक विशिष्ट आरडीपी उपयोगकर्ता ने लॉग ऑन किया और सत्र समाप्त किया, और किस डिवाइस (डीएनएस नाम या आईपी पता) से उपयोगकर्ता ने लॉग ऑन किया।
यह आलेख Windows Server 2022/2019/2016/2012R2 और डेस्कटॉप संस्करण (Windows 11, 10, और 8.1) दोनों के लिए RDP लॉग का विश्लेषण करते समय लागू होता है।
Windows ईवेंट व्यूअर में RDP कनेक्शन ईवेंट
जब कोई उपयोगकर्ता रिमोट डेस्कटॉप-सक्षम या आरडीएस होस्ट से जुड़ता है, तो इन घटनाओं के बारे में जानकारी इवेंट व्यूअर लॉग (eventvwr.msc
) में संग्रहीत की जाती है। ) इवेंट व्यूअर में RDP कनेक्शन और संबंधित घटनाओं के मुख्य चरणों पर विचार करें, जो व्यवस्थापक के लिए रुचिकर हो सकते हैं
- नेटवर्क कनेक्शन;
- प्रमाणीकरण;
- लॉगऑन;
- सत्र डिस्कनेक्ट/फिर से कनेक्ट करें;
- लॉगऑफ़.
नेटवर्क कनेक्शन - उपयोगकर्ता के RDP क्लाइंट से सर्वर से नेटवर्क कनेक्शन स्थापित करना। यह EventID वाला इवेंट है 1149 (Remote Desktop Services: User authentication succeeded
) यदि यह घटना पाई जाती है, तो इसका मतलब यह नहीं है कि उपयोगकर्ता प्रमाणीकरण सफल रहा है। यह लॉग "एप्लिकेशन और सेवा लॉग -> माइक्रोसॉफ्ट -> विंडोज़ -> टर्मिनल-सर्विसेज-रिमोटकनेक्शन मैनेजर में स्थित है।> ऑपरेशनल"। इस ईवेंट के लिए लॉग फ़िल्टर सक्षम करें (लॉग पर राइट-क्लिक करें -> वर्तमान लॉग फ़िल्टर करें -> EventId 1149 )।
आप PowerShell के साथ सभी RDP कनेक्शन प्रयासों को सूचीबद्ध कर सकते हैं:
$RDPAuths = Get-WinEvent -LogName 'Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational' -FilterXPath '<QueryList><Query Id="0"><Select>*[System[EventID=1149]]</Select></Query></QueryList>'
चुनें>'
[xml[]]$xml=$RDPAuths|Foreach{$_.ToXml()}
$EventData = Foreach ($event in $xml.Event)
{ New-Object PSObject -Property @{
TimeCreated = (Get-Date ($event.System.TimeCreated.SystemTime) -Format 'yyyy-MM-dd hh:mm:ss K')
User = $event.UserData.EventXML.Param1
Domain = $event.UserData.EventXML.Param2
Client = $event.UserData.EventXML.Param3
}
} $EventData | FT
[xml[]]$xml=$RDPAuths|Foreach{$_.ToXml()}
$EventData =Foreach ($xml में इवेंट। इवेंट)
{ न्यू-ऑब्जेक्ट PSObject -प्रॉपर्टी @{
टाइमक्रिएटेड =(गेट-डेट ($event.System.TimeCreated.SystemTime) -फॉर्मेट 'yyyy-MM-dd hh:mm:ss K' )
उपयोगकर्ता =$event.UserData.EventXML.Param1
डोमेन =$event.UserData.EventXML.Param2
Client =$event.UserData.EventXML.Param3
}
} $इवेंटडेटा | एफटी
फिर आपको इस सर्वर से सभी RDP कनेक्शन के इतिहास के साथ एक ईवेंट सूची मिलेगी। लॉग एक उपयोगकर्ता नाम, एक डोमेन प्रदान करते हैं (इस मामले में नेटवर्क स्तर प्रमाणीकरण का उपयोग किया जाता है; यदि एनएलए अक्षम है, तो घटना विवरण अलग दिखता है), और उपयोगकर्ता के कंप्यूटर का आईपी पता।
<मजबूत>
प्रमाणीकरण दिखाता है कि एक RDP उपयोगकर्ता को सर्वर पर सफलतापूर्वक प्रमाणित किया गया है या नहीं। लॉग विंडोज -> सुरक्षा के तहत स्थित है। इसलिए, EventID 4624 . के साथ ईवेंट में आपकी रुचि हो सकती है (An account was successfully logged on
) या 4625 (An account failed to log on
)।
कृपया, लॉगऑनटाइप . पर ध्यान दें घटना विवरण में मूल्य।
- लॉगऑन टाइप =10 या 3 — यदि लॉग ऑन के दौरान एक नया सत्र बनाने के लिए दूरस्थ डेस्कटॉप सेवा का उपयोग किया गया है;
- लॉगऑन टाइप =7 , का अर्थ है कि उपयोगकर्ता ने मौजूदा RDP सत्र से पुनः कनेक्ट किया है;
- लॉगऑन टाइप =5 - सर्वर कंसोल से RDP कनेक्शन (mstsc.exe /admin मोड में)।
इस मामले में, उपयोगकर्ता नाम घटना विवरण में खाता नाम . में निहित है फ़ील्ड, कंप्यूटर का नाम वर्कस्टेशन नाम . में , और उपयोगकर्ता आईपी स्रोत नेटवर्क पता . में ।
कृपया, LogonID . के मान पर ध्यान दें खेत। यह एक अद्वितीय उपयोगकर्ता RDP सत्र पहचानकर्ता है जो उपयोगकर्ता की आगे की गतिविधि को ट्रैक करने में मदद करता है। हालाँकि, यदि कोई RDP सत्र डिस्कनेक्ट हो जाता है और कोई उपयोगकर्ता इससे फिर से जुड़ता है, तो उपयोगकर्ता को एक नया LogonID सौंपा जाएगा (हालाँकि RDP सत्र वही रहता है)।आप इस PowerShell कमांड का उपयोग करके सफल RDP प्रमाणीकरण ईवेंट (EventID 4624) की सूची प्राप्त कर सकते हैं:
Get-EventLog security -after (Get-date -hour 0 -minute 0 -second 0) | ?{$_.eventid -eq 4624 -and $_.Message -match 'logon type:\s+(10)\s'} | Out-GridView
<मजबूत>
लॉगऑन विंडोज़ में आरडीपी लॉगिन को संदर्भित करता है। EventID 21 - यह घटना किसी उपयोगकर्ता के सफलतापूर्वक प्रमाणित होने के बाद प्रकट होती है (Remote Desktop Services: Session logon succeeded
) यह ईवेंट "एप्लिकेशन और सेवा लॉग -> माइक्रोसॉफ्ट -> विंडोज़ -> टर्मिनल सर्विसेज-लोकल सत्र प्रबंधक में स्थित हैं। -> परिचालन"। जैसा कि आप देख सकते हैं, यहां आप एक उपयोगकर्ता आरडीपी सत्र की आईडी पा सकते हैं — सत्र आईडी ।
EventID - 21 (Remote Desktop Services: Shell start notification received
) इंगित करता है कि एक्सप्लोरर शेल सफलतापूर्वक शुरू हो गया है (विंडोज डेस्कटॉप उपयोगकर्ता के आरडीपी सत्र में दिखाई देता है)।
सत्र डिस्कनेक्ट/पुनः कनेक्ट करें - सेशन डिस्कनेक्शन और रीकनेक्शन इवेंट्स में अलग-अलग आईडी होते हैं, जो इस बात पर निर्भर करता है कि यूजर डिस्कनेक्शन किस कारण से हुआ (आरडीपी सेशन के लिए टाइमआउट में निष्क्रियता के कारण डिसकनेक्शन सेट किया गया है, सत्र में उपयोगकर्ता द्वारा डिस्कनेक्ट विकल्प का चयन किया गया है, आरडीपी सत्र किसी अन्य उपयोगकर्ता या व्यवस्थापक द्वारा समाप्त किया गया है, आदि।)। आप "एप्लिकेशन और सेवा लॉग -> माइक्रोसॉफ्ट -> विंडोज -> टर्मिनल सर्विसेज-लोकलसेशन मैनेजर -> ऑपरेशनल" के तहत इवेंट व्यूअर में इन घटनाओं को पा सकते हैं। आइए उन आरडीपी इवेंट आईडी पर विचार करें जो उपयोगी हो सकती हैं:
- EventID - 24 (
Remote Desktop Services: Session has been disconnected
) -एक उपयोगकर्ता ने आरडीपी सत्र से डिस्कनेक्ट कर दिया है; - EventID - 25 (
Remote Desktop Services: Session reconnection succeeded
) - एक उपयोगकर्ता ने सर्वर पर मौजूदा RDP सत्र से पुनः कनेक्ट किया है; - EventID - 39 (
Session <A> has been disconnected by session <B>
. द्वारा डिस्कनेक्ट कर दिया गया है ) - एक उपयोगकर्ता ने संबंधित मेनू विकल्प (केवल RDP क्लाइंट विंडो को बंद करने के बजाय) का चयन करके RDP सत्र से डिस्कनेक्ट कर दिया है। यदि सत्र आईडी भिन्न हैं, तो उपयोगकर्ता को किसी अन्य उपयोगकर्ता (या व्यवस्थापक) द्वारा डिस्कनेक्ट कर दिया गया है; - EventID - 40 (
Session <A> has been disconnected, reason code <B>
) यहां आपको घटना विवरण में डिस्कनेक्शन कारण कोड की जांच करनी होगी। उदाहरण के लिए:- कारण कोड 0 (
No additional information is available
) का अर्थ है कि उपयोगकर्ता ने अभी-अभी RDP क्लाइंट विंडो बंद की है; - कारण कोड 5 (
The client’s connection was replaced by another connection
) का अर्थ है कि उपयोगकर्ता ने पिछले RDP सत्र से पुनः कनेक्ट किया है; - कारण कोड 11 (
User activity has initiated the disconnect
) उपयोगकर्ता ने प्रारंभ मेनू में डिस्कनेक्ट बटन पर क्लिक किया है।
- कारण कोड 0 (
EventID 4778 विंडोज़ में -> सुरक्षा लॉग (एक सत्र को विंडो स्टेशन से दोबारा जोड़ा गया था)। एक उपयोगकर्ता ने RDP सत्र से पुनः कनेक्ट किया है (उपयोगकर्ता को एक नया LogonID असाइन किया गया है)।
EventID 4779 "Windows -> सुरक्षा" लॉग में (A session was disconnected from a Window Station
) एक उपयोगकर्ता को RDP सत्र से डिस्कनेक्ट कर दिया गया है।
लॉगऑफ़ उपयोगकर्ता सत्र के अंत को संदर्भित करता है। इसे EventID 23 . के साथ ईवेंट के रूप में लॉग किया गया है (Remote Desktop Services: Session logoff succeeded
) "एप्लिकेशन और सेवा लॉग -> माइक्रोसॉफ्ट -> विंडोज़ -> TerminalServices-LocalSessionManager -> Operational" के अंतर्गत।
उसी समय EventID 4634 (An account was logged off
) सुरक्षा लॉग में दिखाई देता है।
EventID 9009 (The Desktop Window Manager has exited with code <X>
code कोड के साथ बाहर निकल गया है ) सिस्टम लॉग में इसका मतलब है कि उपयोगकर्ता ने आरडीपी सत्र से लॉगऑफ़ शुरू किया है और उपयोगकर्ता के ग्राफ़िक शेल विंडो और दोनों को समाप्त कर दिया गया है।
EventID 4647 — उपयोगकर्ता द्वारा शुरू किया गया लॉगऑफ़
पावरशेल के साथ दूरस्थ डेस्कटॉप लॉगिन इतिहास प्राप्त करना
यहां एक छोटी पावरशेल स्क्रिप्ट है जो टर्मिनल आरडीएस सर्वर इवेंट लॉग से वर्तमान दिन के लिए सभी आरडीपी कनेक्शन के इतिहास को सूचीबद्ध करती है। परिणामी तालिका कनेक्शन समय, क्लाइंट का IP पता (DNS कंप्यूटरनाम), और दूरस्थ उपयोगकर्ता नाम (यदि आवश्यक हो, तो आप रिपोर्ट में अन्य LogonTypes शामिल कर सकते हैं) दिखाती है।
Get-EventLog -LogName Security -after (Get-date -hour 0 -minute 0 -second 0)| ?{(4624,4778) -contains $_.EventID -and $_.Message -match 'logon type:\s+(10)\s'}| %{
(new-object -Type PSObject -Property @{
TimeGenerated = $_.TimeGenerated
ClientIP = $_.Message -replace '(?smi).*Source Network Address:\s+([^\s]+)\s+.*','$1'
UserName = $_.Message -replace '(?smi).*\s\sAccount Name:\s+([^\s]+)\s+.*','$1'
UserDomain = $_.Message -replace '(?smi).*\s\sAccount Domain:\s+([^\s]+)\s+.*','$1'
LogonType = $_.Message -replace '(?smi).*Logon Type:\s+([^\s]+)\s+.*','$1'
})
} | sort TimeGenerated -Descending | Select TimeGenerated, ClientIP `
, @{N='Username';E={'{0}\{1}' -f $_.UserDomain,$_.UserName}} `
, @{N='LogType';E={
switch ($_.LogonType) {
2 {'Interactive - local logon'}
3 {'Network connection to shared folder)'}
4 {'Batch'}
5 {'Service'}
7 {'Unlock (after screensaver)'}
8 {'NetworkCleartext'}
9 {'NewCredentials (local impersonation process under existing connection)'}
10 {'RDP'}
11 {'CachedInteractive'}
default {"LogType Not Recognised: $($_.LogonType)"}
}
}}
यह विधि आपको एक स्टैंडअलोन आरडीएसएच सर्वर पर आरडीपी कनेक्शन लॉग एकत्र और पार्स करने की अनुमति देती है। यदि आपके पास RDS फ़ार्म में कई सर्वर हैं, तो आप उनमें से प्रत्येक को इस स्क्रिप्ट से क्वेरी कर सकते हैं, या दूरस्थ डेस्कटॉप कनेक्शन ब्रोकर भूमिका वाले प्रबंधन सर्वर से लॉग प्राप्त कर सकते हैं।
आप इवेंट व्यूअर से RDP कनेक्शन लॉग को CSV फ़ाइल में निर्यात कर सकते हैं (एक्सेल स्प्रेडशीट में आगे के विश्लेषण के लिए)। आप इवेंट व्यूअर GUI से लॉग निर्यात कर सकते हैं (यह मानते हुए कि इवेंट व्यूअर लॉग साफ़ नहीं किए गए हैं) या कमांड प्रॉम्प्ट के माध्यम से:
WEVTUtil query-events Security > c:\ps\rdp_security_log.txt
या पावरशेल के साथ:
get-winevent -logname "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational" | Export-Csv c:\ps\rdp_connection_log.txt -Encoding UTF8
यदि आपके उपयोगकर्ता दूरस्थ डेस्कटॉप गेटवे के माध्यम से कॉर्पोरेट RDS होस्ट से जुड़ते हैं, तो आप Microsoft-Windows-TerminalServices-Gateway में उपयोगकर्ता कनेक्शन लॉग की जांच कर सकते हैं। EventID द्वारा लॉग करें 302 . उदाहरण के लिए, निम्न पावरशेल स्क्रिप्ट आरडी गेटवे के माध्यम से निर्दिष्ट उपयोगकर्ता के कनेक्शन इतिहास को प्रदर्शित करेगी:
$rdpusername="b.smith"
$properties = @(
@{n='User';e={$_.Properties[0].Value}},
@{n='Source IP Adress';e={$_.Properties[1].Value}},
@{n='TimeStamp';e={$_.TimeCreated}}
@{n='Target RDP host';e={$_.Properties[3].Value}}
)
(Get-WinEvent -FilterHashTable @{LogName='Microsoft-Windows-TerminalServices-Gateway/Operational';ID='302'} | Select-Object $properties) -match $rdpusername
आप Microsoft-Windows-TerminalServices-Gateway इवेंट लॉग में निम्न RD गेटवे उपयोगकर्ता कनेक्शन ईवेंट देख सकते हैं:
- 300 — क्लाइंट कंप्यूटर DEVICE पर उपयोगकर्ता NAME, संसाधन प्राधिकरण नीति आवश्यकताओं को पूरा करता है और इसलिए उसे संसाधन RDPHOST से कनेक्ट करने के लिए अधिकृत किया गया था;
- 302 — उपयोगकर्ता NAME, क्लाइंट कंप्यूटर DEVICE पर, संसाधन RDPHOST से जुड़ा;
- 303 — क्लाइंट कंप्यूटर DEVICE पर उपयोगकर्ता NAME, निम्न नेटवर्क संसाधन से डिस्कनेक्ट हो गया:RDPHOST। उपयोगकर्ता के डिस्कनेक्ट होने से पहले, क्लाइंट ने X बाइट्स को स्थानांतरित किया और X बाइट्स प्राप्त किया। क्लाइंट सत्र की अवधि X सेकंड थी।
आप अपने RDS होस्ट पर वर्तमान दूरस्थ सत्रों की सूची को कमांड के साथ प्रदर्शित कर सकते हैं:
qwinsta
आदेश सत्र आईडी, USERNAME, और सत्र स्थिति (सक्रिय/डिस्कनेक्ट) लौटाता है। यह कमांड तब उपयोगी होता है जब आपको शैडो रिमोट डेस्कटॉप कनेक्शन का उपयोग करते समय उपयोगकर्ता की आरडीपी सत्र आईडी प्राप्त करने की आवश्यकता होती है।
आप विशिष्ट आरडीपी सत्र में चल रही प्रक्रियाओं की सूची प्रदर्शित कर सकते हैं (सत्र आईडी निर्दिष्ट है):
qprocess /id:5
Windows में आउटगोइंग RDP कनेक्शन लॉग
आप क्लाइंट साइड पर आउटगोइंग RDP कनेक्शन लॉग भी देख सकते हैं। वे निम्नलिखित इवेंट लॉग में उपलब्ध हैं:अनुप्रयोग और सेवाएँ लॉग -> Microsoft -> Windows -> TerminalServices-ClientActiveXCore -> Microsoft-Windows-TerminalServices-RDPClient -> ऑपरेशनल।
उदाहरण के लिए, EventID 1102 तब होता है जब कोई उपयोगकर्ता दूरस्थ विंडोज सर्वर आरडीएस होस्ट या विंडोज 10/11 कंप्यूटर से आरडीपी सक्षम (डेस्कटॉप विंडोज संस्करण भी एक साथ कई आरडीपी कनेक्शन का समर्थन करता है) से जुड़ता है।
The client has initiated a multi-transport connection to the server 192.168.13.201.
निम्न RDP स्क्रिप्ट वर्तमान कंप्यूटर पर RDP क्लाइंट कनेक्शन का इतिहास प्रदर्शित करेगी:
$properties = @(
@{n='TimeStamp';e={$_.TimeCreated}}
@{n='LocalUser';e={$_.UserID}}
@{n='Target RDP host';e={$_.Properties[1].Value}}
)
Get-WinEvent -FilterHashTable @{LogName='Microsoft-Windows-TerminalServices-RDPClient/Operational';ID='1102'} | Select-Object $properties
स्क्रिप्ट उन उपयोगकर्ताओं के SIDs लौटाती है जिन्होंने इस कंप्यूटर पर RDP कनेक्शन शुरू किया था, साथ ही उन दूरस्थ डेस्कटॉप होस्ट के DNS नाम/आईपी पते, जिनसे उपयोगकर्ता कनेक्ट थे। आप निम्न प्रकार से SID को उपयोगकर्ता नाम में बदल सकते हैं।
साथ ही, आप उपयोगकर्ता की रजिस्ट्री में RDP कनेक्शन इतिहास की जांच कर सकते हैं।