Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

Windowsでのリモートデスクトップ接続ログの追跡と分析

この記事では、WindowsでRDP接続ログを取得して監査する方法について説明します。 RDP接続ログを使用すると、RDSターミナルサーバーの管理者は、特定のRDPユーザーがログオンしてセッションを終了したときにサーバーにログオンしたユーザー、およびユーザーがログオンしたデバイス(DNS名またはIPアドレス)に関する情報を取得できます。


この記事は、Windows Server 2022/2019/2016 / 2012R2とデスクトップエディション(Windows 11、10、および8.1)の両方のRDPログを分析する場合に適用されます。

WindowsイベントビューアのRDP接続イベント

ユーザーがリモートデスクトップ対応またはRDSホストに接続すると、これらのイベントに関する情報がイベントビューアログ(eventvwr.msc)に保存されます。 )。管理者が関心を持つ可能性のある、イベントビューアでのRDP接続と関連イベントの主な段階を検討してください

  1. ネットワーク接続;
  2. 認証;
  3. ログオン;
  4. セッションの切断/再接続;
  5. ログオフ。

ネットワーク接続 –ユーザーのRDPクライアントからサーバーへのネットワーク接続を確立します。これは、EventID 1149のイベントです。 (Remote Desktop Services: User authentication succeeded )。このイベントが見つかった場合でも、ユーザー認証が成功したことを意味するわけではありません。このログは、「アプリケーションとサービスのログ-> Microsoft-> Windows-> Terminal-Services-RemoteConnectionManager」にあります。>運用」。このイベントのログフィルターを有効にします(ログを右クリック->現在のログのフィルター-> EventId 1149

Windowsでのリモートデスクトップ接続ログの追跡と分析

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

Windowsでのリモートデスクトップ接続ログの追跡と分析

次に、このサーバーへのすべてのRDP接続の履歴を含むイベントリストを取得します。ログには、ユーザー名、ドメイン(この場合、ネットワークレベル認証が使用されます。NLAが無効になっている場合、イベントの説明は異なって表示されます)、およびユーザーのコンピューターのIPアドレスが提供されます。

Windowsでのリモートデスクトップ接続ログの追跡と分析

認証 RDPユーザーがサーバーで正常に認証されたかどうかを示します。ログは[Windows]->[セキュリティ]の下にあります。したがって、EventID 4624のイベントに興味があるかもしれません。 (An account was successfully logged on )または 4625 An account failed to log on

LogonTypeに注意してください イベントの説明の値。

  • LogonType =10 または3 —ログオン中にリモートデスクトップサービスを使用して新しいセッションを作成した場合。
  • LogonType =7 、ユーザーが既存のRDPセッションに再接続したことを意味します。
  • LogonType =5 –サーバーコンソールへのRDP接続(mstsc.exe / adminモード)。
RDP認証失敗イベントを使用して、RDPブルートフォース攻撃から保護できます。単純なPowerShellスクリプトを使用して、WindowsDefenderFirewallで攻撃者のIPを自動的にブロックできます。

Windowsでのリモートデスクトップ接続ログの追跡と分析

この場合、ユーザー名はアカウント名のイベントの説明に含まれています フィールド、ワークステーション名のコンピュータ名 、および送信元ネットワークアドレスのユーザーIP 。

LogonIDの値に注意してください 分野。これは、ユーザーのさらなるアクティビティを追跡するのに役立つ一意のユーザーRDPセッション識別子です。ただし、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

Windowsでのリモートデスクトップ接続ログの追跡と分析

ログオン WindowsへのRDPログインを指します。 EventID 21 –このイベントは、ユーザーが正常に認証された後に表示されます(Remote Desktop Services: Session logon succeeded )。このイベントは、「アプリケーションとサービスのログ-> Microsoft-> Windows-> TerminalServices-LocalSessionManager」にあります。 ->運用」。ご覧のとおり、ここでユーザーRDPセッションのIDを見つけることができます—セッションID

Windowsでのリモートデスクトップ接続ログの追跡と分析

EventID – 21 Remote Desktop Services: Shell start notification received )は、エクスプローラシェルが正常に開始されたことを示します(WindowsデスクトップはユーザーのRDPセッションに表示されます)。

セッションの切断/再接続 –セッションの切断イベントと再接続イベントのIDは、ユーザーの切断の原因によって異なります(RDPセッションのタイムアウトで設定された非アクティブによる切断、セッションでユーザーが切断オプションを選択した、別のユーザーまたは管理者がRDPセッションを終了した)等。)。これらのイベントは、イベントビューアの「アプリケーションとサービスログ-> Microsoft-> Windows->TerminalServices-LocalSessionManager->Operational」にあります。役立つ可能性のあるRDPイベントIDについて考えてみましょう:

  • EventID – 24 Remote Desktop Services: Session has been disconnected )–ユーザーがRDPセッションから切断しました;
  • EventID – 25 Remote Desktop Services: Session reconnection succeeded )–ユーザーがサーバー上の既存のRDPセッションに再接続しました。
  • EventID – 39 Session <A> has been disconnected by session <B>によって切断されました )–ユーザーが(RDPクライアントウィンドウを閉じるだけでなく)対応するメニューオプションを選択することにより、RDPセッションから切断しました。セッションIDが異なる場合、ユーザーは別のユーザー(または管理者)によって切断されています。
  • EventID – 40 Session <A> has been disconnected, reason code <B> )。ここでは、イベントの説明で切断理由コードを確認する必要があります。例:
    • 理由コード0No additional information is available )は、ユーザーがRDPクライアントウィンドウを閉じたばかりであることを意味します。
    • 理由コード5The client’s connection was replaced by another connection )は、ユーザーが前のRDPセッションに再接続したことを意味します。
    • 理由コード11User activity has initiated the disconnect )ユーザーがスタートメニューの[切断]ボタンをクリックしました。

EventID 4778 Windows->セキュリティログ(セッションがWindow Stationに再接続されました)。ユーザーがRDPセッションに再接続しました(ユーザーには新しいLogonIDが割り当てられます)。

イベントID4779 「Windows->セキュリティ」ログ(A session was disconnected from a Window Station )。ユーザーがRDPセッションから切断されました。

ログオフ ユーザーセッションの終了を指します。 EventID 23のイベントとしてログに記録されます (Remote Desktop Services: Session logoff succeeded )「アプリケーションとサービスのログ-> Microsoft-> Windows->TerminalServices-LocalSessionManager->Operational」の下。

Windowsでのリモートデスクトップ接続ログの追跡と分析

同時に、EventID 4634 An account was logged off )がセキュリティログに表示されます。

EventID 909 The Desktop Window Manager has exited with code <X>で終了しました )システムログ内は、ユーザーがRDPセッションからログオフを開始し、ウィンドウとユーザーのグラフィックシェルの両方が終了したことを意味します。

EventID 4647 —ユーザーが開始したログオフ

PowerShellを使用したリモートデスクトップのログイン履歴の取得

これは、ターミナルRDSサーバーのイベントログから当日のすべてのRDP接続の履歴を一覧表示する短いPowerShellスクリプトです。結果の表には、接続時間、クライアントのIPアドレス(DNSコンピューター名)、およびリモートユーザー名が表示されます(必要に応じて、レポートに他のLogonTypeを含めることができます)。

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)"}
}
}}

Windowsでのリモートデスクトップ接続ログの追跡と分析

この方法では、スタンドアロンRDSHサーバーでRDP接続ログを収集して解析できます。 RDSファームに複数のサーバーがある場合は、このスクリプトを使用して各サーバーにクエリを実行するか、リモートデスクトップ接続ブローカーの役割を持つ管理サーバーからログを取得できます。

RDP接続ログをイベントビューアからCSVファイルにエクスポートできます(Excelスプレッドシートでさらに分析するため)。ログは、イベントビューアのGUI(イベントビューアのログがクリアされていない場合)またはコマンドプロンプトからエクスポートできます。

WEVTUtil query-events Security > c:\ps\rdp_security_log.txt

またはPowerShellを使用する場合:

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でログに記録します 。たとえば、次のPowerShellスクリプトは、RDゲートウェイを介した指定されたユーザーの接続履歴を表示します。

$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

Windowsでのリモートデスクトップ接続ログの追跡と分析

次のRDゲートウェイユーザー接続イベントは、Microsoft-Windows-TerminalServices-Gatewayイベントログで確認できます。

  • 300 —クライアントコンピューターDEVICE上のユーザーNAMEは、リソース許可ポリシー要件を満たしているため、リソースRDPHOSTへの接続が許可されました。
  • 302 —リソースRDPHOSTに接続されているクライアントコンピューターDEVICE上のユーザーNAME;
  • 303 —クライアントコンピューターDEVICE上のユーザーNAMEが、次のネットワークリソースから切断されました:RDPHOST。ユーザーが切断する前に、クライアントはXバイトを転送し、Xバイトを受信しました。クライアントセッションの継続時間はX秒でした。

次のコマンドを使用して、RDSホスト上の現在のリモートセッションのリストを表示できます。

qwinsta
このコマンドは、セッションID、ユーザー名、およびセッション状態(アクティブ/切断)を返します。このコマンドは、シャドウリモートデスクトップ接続を使用するときにユーザーのRDPセッションIDを取得する必要がある場合に役立ちます。

Windowsでのリモートデスクトップ接続ログの追跡と分析

特定のRDPセッションで実行中のプロセスのリストを表示できます(セッションIDが指定されています):

qprocess /id:5

Windowsでのリモートデスクトップ接続ログの追跡と分析

WindowsでのRDP接続ログの送信

クライアント側で発信RDP接続ログを表示することもできます。これらは、次のイベントログで利用できます。アプリケーションおよびサービスログ-> Microsoft-> Windows-> TerminalServices-ClientActiveXCore->Microsoft-Windows-TerminalServices-RDPClient->Operational。

たとえば、EventID 1102 ユーザーがリモートのWindowsServerRDSホストまたはRDPが有効になっているWindows10/11コンピューターに接続したときに発生します(デスクトップWindowsエディションは複数の同時RDP接続もサポートしています)。

The client has initiated a multi-transport connection to the server 192.168.13.201.

Windowsでのリモートデスクトップ接続ログの追跡と分析

次の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

Windowsでのリモートデスクトップ接続ログの追跡と分析

スクリプトは、このコンピューターでRDP接続を開始したユーザーのSIDと、ユーザーが接続したリモートデスクトップホストのDNS名/IPアドレスを返します。次のようにSIDをユーザー名に変換できます。

また、ユーザーのレジストリでRDP接続履歴を確認できます。


  1. Windows 10 でリモート デスクトップ接続をセットアップする方法

    リモート デスクトップ接続は、ユーザーがネットワーク経由でリモート コンピューターを制御できるようにする Microsoft Windows の機能です。これは、リモート管理に役立つ安全なネットワーク通信プロトコルであるリモート デスクトップ プロトコル (RDP) を使用して行われます。いいえ、リモート接続を介してコンピューターにアクセスするには、サードパーティのソフトウェアが必要です。ただし、RDP はデフォルトで Windows によって無効にされているため、両方のコンピューターで RDP を有効にし、両方のコンピューターがインターネットに接続されていることを確認する必要があります。

  2. Windows 10 でリモート デスクトップ ポート (RDP) を変更する

    Windows ユーザーの多くは、リモート デスクトップを認識しています。ほとんどのユーザーはリモート デスクトップ機能を使用して、別のコンピューター (職場または自宅) にリモートでアクセスします。職場のコンピューターから作業ファイルに緊急にアクセスする必要がある場合があります。そのような場合、リモート デスクトップが命の恩人になります。このように、コンピューターにリモート アクセスする必要がある理由は他にもいくつか考えられます。 ルーターにポート転送ルールを設定するだけで、簡単にリモート デスクトップを使用できます。しかし、インターネットへのアクセスにルーターを使用しないとどうなりますか?