RDPツールの検証

このブログは、アルバイトのseigo2016が書いています。 あるもりすぶろぐの内容は個人の意見です。

はじめに

今回は、警察庁のレポート(令和5年におけるサイバー空間をめぐる脅威の情勢等について)などでもランサムウェアの侵入経路としても悪用されるリモートデスクトップで使用できる各ツールの動作及び検知可能性について検証してみました。

検証には自身で管理する環境を使用し、自己責任でお願いします。また、この情報を悪用することは絶対に行わないでください。

検証対象のツール

ツール名 GitHubリポジトリ 言語等 概要
SharpRDP https://github.com/0xthirteen/SharpRDP C# mstscax.dllを利用
EvilRDP https://github.com/skelsec/evilrdp Python RDPクライアントのaardwolfを利用
RKS https://github.com/U53RW4R3/RKS Shell xfreerdpxdotoolを利用

環境

Kali,Win10-1,Win10-2はインターネットに接続されていない仮想環境で、それぞれにローカルIPアドレスを付与しています。

各ツールの概要

SharpRDP

リモートデスクトッププロトコル(RDP)を用いて横移動を行うために、対象のコンピュータに対してコマンドを実行することのできるツールです。
WindowsでRDPを提供するためのdllである、mstscax.dllを利用し、GUIクライアントやSOCKSプロキシを使用せずにコマンドを実行できます。
SharpRDPは、実行ファイルなどを直接指定することができるWindows標準機能の「ファイル名を指定して実行」ダイアログにコマンドを入力することで、侵害・情報収集を行います。
https://github.com/0xthirteen/SharpRDP

動作確認

SharpRDPは.NETアプリケーションであるため、Win10-1でビルド・実行し、Win10-2に対して動作確認を行いました。
下記の例では、198.51.100.10に対して、userとしてログインし、shell:desktopコマンドを実行しています。
shell:desktopコマンドがファイル名を指定して実行ダイアログで実行されると、エクスプローラーでホーム->デスクトップが表示されます。

EvilRDP

RDPでは、SSH-Dオプションのように、アクティブなRDPセッションでクリップボードデータ転送などのRDP接続を介してパケットをトンネリングすることができます。
EvilRDPでは、このSOCKSプロキシをクライアントから生成し、ターゲットホストで任意のコマンドを実行したり、ファイルの共有を行ったりすることができます。

動作確認

Win10-1に対して接続すると、以下のような表示がされます。

ここで、ターミナルにpowershellPowershellを開くコマンド入力すると、PowerShellが起動します。

また、type 文字列とすることで、アクティブなウィンドウに任意の文字列を入力することができます。

様々なコマンドが用意されており、例えばinvokerunを実行すると、ファイル名を指定して実行ダイアログが表示されます。
続けて、以下のようにコマンドを実行することで、cmd.exeが起動しました。

$ type cmd
$ return

$ type dir
$ return

また、screenshotコマンドでRDSの画面のスクリーンショットを撮ることもでき、取った画像はローカルに保存されます。]

$ screenshot

また、startpscmdでリモートエージェントを起動し、shell dirのようにコマンドを実効するとクライアントのシェルにコマンドの実行結果が出力されます。

$ pscmdchannel
$ startpscmd
$ shell dir

$ shell netstat

RKS

RKSはアクティブなRDPセッションを介して、キー入力を自動化し、コマンドの実行やファイル転送を行うスクリプトです。 xdotoolを使用して、キーボード入力やマウス操作を行っています。
https://github.com/U53RW4R3/RKS

動作確認

Kali → Win10-1

検知方法の検証

イベントログ

ネットワーク経由でWindowsにログインした場合、以下のようにセキュリティイベントログにイベントID:4624のイベントが記録されます。 Logon TypeはSharpRDPが3、EvilRDP/RKSが10になっています。 LogonType: 3はネットワーク経由からのログイン、10はRDPによるログインを示しています。

また、どのツールにおいても。Microsoft-Windows-TerminalServices-LocalSessionManager/OperationalにイベントID:21, 24が記録されます。これはそれぞれOSログイン成功, OSセッション再接続時に記録されるイベントです。

ツール名 イベントログ名 イベントID 特徴
SharpRDP セキュリティイベントログ 4624 Logon Type: 3
EvilRDP/RKS セキュリティイベントログ 4624 Logon Type: 10
すべて アプリケーションとサービスログ Microsoft-Windows-TerminalServices-LocalSessionManager/Operational 21, 24 OSログイン成功, OSセッション再接続

これらのログにより、リモートログインの履歴を確認できます。 一方で、これだけでは通常のRDP接続かどうかを判別できません。

Sysmonでも同様にPort3389へのNetwork Connection Detected(イベントID 3)及びProcess Create(イベントID 1)が記録されます。

使用config(SwiftOnSecurity/sysmon-config)

  • Network Connection Detected(イベントID 3)

    • Image C:\Windows\System32\svchost.exe
    • DestinationPort 3389
  • Process Create(イベントID 1)

    • ParentImage C:\Windows\explore.exe ファイル名を指定して実行を通してコマンドが実行されるため、親プロセスがエクスプローラーであるという特徴があります。

レジストリエディタ

ファイル名を指定して実行ダイアログの実行履歴は、以下のように、HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRUに記録されます。下記のレジストリを監視することで、疑わしい動作を検知することができます。

Elasticのdetection rule例では、RDPへの接続→該当レジストリへの記録→新規プロセスの作成の一連の動作が行われた際に検知する例が挙げられています。

終わりに

今回はRDPを使用したツールの動作と検知可能性について確認しました。
どのツールの動作も一般的なRDPを用いたリモートホストの操作と同様の振る舞いをしており、単純なルールで検知することは困難であると感じました。
各ツールの特性を踏まえ、レジストリの監視やイベントログなど、複数の点を監視することが必要であると思われます。

検証には自身で管理する環境を使用し、自己責任でお願いします。また、この情報を悪用することは絶対に行わないでください。