このブログは、アルバイトの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 | xfreerdp とxdotool を利用 |
環境
Kali,Win10-1,Win10-2はインターネットに接続されていない仮想環境で、それぞれにローカルIPアドレスを付与しています。
- Kall
- OS Version: Kali 2023.2
- IPアドレス: 198.51.100.254
- Windows10-1
- Windows10-2
各ツールの概要
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に対して接続すると、以下のような表示がされます。
ここで、ターミナルにpowershell
とPowershellを開くコマンド入力すると、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を用いたリモートホストの操作と同様の振る舞いをしており、単純なルールで検知することは困難であると感じました。
各ツールの特性を踏まえ、レジストリの監視やイベントログなど、複数の点を監視することが必要であると思われます。
検証には自身で管理する環境を使用し、自己責任でお願いします。また、この情報を悪用することは絶対に行わないでください。