Table of Contents
TryHackMe Registry Persistence Detection
Windowsシステムのレジストリを利用して永続化(Persistence)を検出する仕組みを学ぶためのルームです。
Registry Persistence Detection
https://tryhackme.com/room/registrypersistencedetection
Task1 Intro
1. マルウェアの「永続化(Persistence)」とは
マルウェアは、実験用マシン(ターゲットのPC)での実行に成功した後、マシンの再起動や駆除の試みが行われても、システム内に残り続けられるようにするための重要なステップを踏みます。これらを可能にする様々な技術を総称して「マルウェア永続化機構(Malware Persistence Mechanisms)」と呼びます。
2. このRoomの目的
このRoomでは、これらの永続化技術の概要を理解するとともに、それらを検出し、駆除・排除するのに役立つツールの使い方を学びます。
3. 学習目標(Learning Objectives)
- マルウェアがどのようにしてマシン内に永続化(居座り)するのかを学ぶ
- マルウェアが「Windows レジストリ」を永続化機構としてどのように利用するのかを学ぶ
- AutoRuns PowerShell モジュールを使用して、これらの永続化機構を検出・修復(排除)する方法を学ぶ
Question
Read the above, start the machine, and log in.
マシンを起動してログインしてください。
Answer
No answer needed
Task2 Intro to Malware Persistence Mechanisms
「マルウェアの永続化」の具体的な定義と、Windows 環境において最も一般的かつ容易に悪用される「レジストリの Run キー」についてです。
1. マルウェア永続化の定義と手法
- 定義: 再起動などのシステムイベントに関係なく、マルウェアがシステム内に残り続けることを可能にする振る舞い。
- 多様な手法: OSのブートセクタ(起動領域)の改ざん、悪意のある設定のインストール、実行フローの乗っ取りなどがあります。攻撃者は対象OS、実装の容易さ、隠蔽性の高さ、自身の好みに応じて手法を選択します。
2. Windows レジストリと「Run キー」の悪用
Windowsにおいて、最も一般的で実装が簡単な手法が「Windows レジストリの Run キー」の悪用です。
- Windows レジストリとは: OSやアプリケーションの低レベルな設定を保存しているデータベース。
- Run キーとは: ユーザーがログオンするたびに、指定されたパスのプログラムを自動実行する特別なレジストリキーです。
主に以下の4つのキーが悪用されます:
| レジストリキーのパス | 実行されるタイミングと挙動 |
| HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run | 現在のユーザーがログインした時に実行 |
| HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run | すべてのユーザーがログインした時に実行 |
| HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce | 現在のユーザーがログインした時に1回だけ実行し、その後キーを削除 |
| HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce | すべてのユーザーがログインした時に1回だけ実行し、その後キーを削除 |
3. 確認方法(レジストリエディタの利用)
これらのキーを確認するには、Windows 検索で「Regedit」を検索するか、タスクバーのアイコンから「レジストリエディタ(Registry Editor)」を起動します。
目的の Run キーの値を確認する際は、左側のツリーからフォルダ(例: HKEY_LOCAL_MACHINE > Software > Microsoft > Windows > CurrentVersion > Run)を順に展開して確認します。
Question
What is the value “Name” of the suspicious registry entry that runs during startup? Include the parenthesis.
起動時に実行される不審なレジストリエントリの「Name」という値は何ですか? 括弧も併せて記載してください。
レジストリエディタを起動して、HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Runを確認する。

Value nameの「(Default)」を答える。
What is the value “Data” of the suspicious registry entry that runs during startup?
起動時に実行される不審なレジストリエントリの「Data」という値はどのようなものですか?
上記レジストリキーのValue dataを答える。
What string is displayed on the console when the suspicious file runs?
不審なファイルが実行されたとき、コンソールにはどのような文字列が表示されますか?
C:\Users\Administrator\AppData\Local\bd84\24d9.batのバッチファイルを実行するとメッセージが表示される。

Task3 Intro to the AutoRuns PowerShell Module
本タスクでは、レジストリを手動で確認する手法の限界を指摘し、効率的に自動実行プログラムを検出するためのツール、特にこのRoomで使用する「AutoRuns PowerShell モジュール」について解説しています。
1. 手動チェックの限界とツールの必要性
前タスクのようにレジストリキーを手動でチェックして永続化機構を見つけることは可能ですが、マルウェアが自動実行に利用できるレジストリキーは他にも無数に存在します。それらは目立たないため手動で見つけるのは困難であり、専用ツールの活用が不可欠です。
2. AutoRuns(Sysinternals)と PowerShell 版の違い
- 本家 AutoRuns(Microsoft製): PC起動時やユーザーログイン時に自動実行される可能性のあるすべての場所を網羅的にチェックできる、広く普及しているツールです。
- AutoRuns PowerShell モジュール(本Roomで使用): 本家と同様の機能を持ちながら、PowerShell スクリプトの利点を活かせるモジュールです。「現在の状態のスナップショット」を「過去のベースライン(基準)」と比較する機能(ベースライン機能)を備えている点が非常に重要となります。
3. ツールの使い方と主要コマンド
ルームのWindowsマシンには既にこのモジュールがインストールされています。タスクバーからPowerShellを管理者モード(Administrator)で起動し、以下のコマンドを入力することで利用可能なコマンドを確認できます。
Get-Command -Module AutoRuns
【利用可能な主な関数(コマンド)】
- New-AutoRunsBaseLine :比較の基準となるベースライン(初期状態)を作成する
- Get-PSAutorun :現在の自動実行エントリーを取得する
- Compare-AutoRunsBaseLine :現在の状態とベースラインを比較して変更点を特定する
各コマンドの詳しい使い方を調べるには、Get-Help <コマンド名>(例: Get-Help Get-PSAutorun)という形式でヘルプコマンドを実行するか、公式のReadMeページを参照します。
Question
What AutoRun function is used for getting and displaying the auto-run entries?
オートランエントリを取得して表示するために、どのオートラン機能が使用されていますか?
What AutoRun function is used for creating a baseline file from Autoruns artifact(s)?
Autorunsのアーティファクトからベースラインファイルを作成するために、どのAutoRun関数が使用されますか?
What AutoRun function is used for comparing two baseline files of Autoruns artifact(s)?
Autoruns アーティファクトの 2 つのベースラインファイルを比較するために、どの AutoRun 機能が使用されますか?
Task4 Filtering AutoRuns Entries
本タスクでは、自動実行プログラムの一覧を取得する具体的なコマンド Get-PSAutorun の使い方と、膨大な出力結果を効率的に見やすく・絞り込むためのテクニックについて解説しています。
1. Get-PSAutorun コマンドの挙動
- 役割: マシン内で利用可能なすべての自動起動メカニズム(永続化ルート)をリストアップします。
- 調査対象: Windows レジストリだけでなく、Windows サービス、WMI エントリー、DLL ハイジャックの候補地など、多岐にわたるカテゴリを網羅します。
- 課題: 調査範囲が非常に広いため、そのまま実行すると膨大な結果(生テキスト)が返され、人間の目での確認や分析が困難になります。
2. Out-GridView を使った視認性の向上
PowerShell の機能である Out-GridView にパイプ(|)で結果を渡すことで、グラフィカルな別ウィンドウで結果を表示できます。
Get-PSAutorun | Out-GridView
メリット:
- ウィンドウ上部にある「Filter(フィルター)」バーにキーワードを入力して、結果を瞬時に絞り込める。
- 列のヘッダー(Path, Category, ImagePath など)をクリックするだけで、データの並び替え(ソート)ができる。
- 注意点: ツールがすべての結果を出力し終えるまで数分かかる場合があります。
3. パラメータスイッチによるカテゴリ絞り込み
コマンド実行時に特定の「パラメータスイッチ(オプション)」を指定することで、最初から特定のカテゴリだけに絞り込んで結果を取得することも可能です。 利用可能なパラメータの詳細(どのようなフィルタリング用スイッチがあるか)を確認するには、以下のヘルプコマンドを実行します。
Get-Help Get-PSAutorun -detailed
Question
What parameter switch is used for filtering for artifacts related to boot execution of images?
イメージの起動実行に関連するアーティファクトをフィルタリングするには、どのパラメータスイッチを使用しますか?
How many entries are outputted using the parameter switch from the previous question?
前の質問で述べたパラメータスイッチを使用すると、何件のエントリが出力されますか?
Get-PSAutorun | Out-GridViewでウィンドウ表示して、CategoryでソートするとBoot Execureが1つだけ表示されている。

What parameter switch is used for filtering for artifacts related to printer driver and status monitors?
プリンタードライバーやステータスモニターに関連するアーティファクトをフィルタリングするには、どのパラメータスイッチを使用しますか?
PowerShellでGet-PSAutorunのヘルプを表示する。
PS C:\WINDOWS\system32> Get-Help Get-PSAutorun
名前
Get-PSAutorun
概要
Get Autorun entries.
構文
Get-PSAutorun [-All] [-BootExecute] [-AppinitDLLs] [-ExplorerAddons] [-ImageHijacks] [-InternetExplorerAddons] [-Kn
ownDLLs] [-Logon] [-Winsock] [-Codecs] [-OfficeAddins] [-PrintMonitorDLLs] [-LSAsecurityProviders] [-ServicesAndDri
vers] [-ScheduledTasks] [-Winlogon] [-WMI] [-PSProfiles] [-ShowFileHash] [-VerifyDigitalSignature] [<CommonParamete
rs>]
Get-PSAutorun [-All] [-BootExecute] [-AppinitDLLs] [-ExplorerAddons] [-ImageHijacks] [-InternetExplorerAddons] [-Kn
ownDLLs] [-Logon] [-Winsock] [-Codecs] [-OfficeAddins] [-PrintMonitorDLLs] [-LSAsecurityProviders] [-ServicesAndDri
vers] [-ScheduledTasks] [-Winlogon] [-WMI] [-PSProfiles] [-Raw] [<CommonParameters>]
~省略~
How many entries are listed in the output using the parameter switch from the previous question?
前の質問で述べたパラメータスイッチを使用した場合、出力にはいくつのエントリが一覧表示されますか?
PowerShellでGet-PSAutorun -PrintMonitorDLLsを実行すると、5つのアイテムが表示される。
PS C:\Users\Administrator> Get-PSAutorun -PrintMonitorDLLs
Path : HKLM:\SYSTEM\CurrentControlSet\Control\Print\Monitors\Local Port
Item : Driver
Category : Print Monitors
Value : localspl.dll
ImagePath : C:\Windows\System32\localspl.dll
Size : 1225216
LastWriteTime : 3/11/2021 9:15:38 AM
Version : 10.0.17763.1
Path : HKLM:\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port
Item : Driver
Category : Print Monitors
Value : tcpmon.dll
ImagePath : C:\Windows\System32\tcpmon.dll
Size : 223232
LastWriteTime : 5/13/2020 5:54:27 PM
Version : 10.0.17763.1
Path : HKLM:\SYSTEM\CurrentControlSet\Control\Print\Monitors\USB Monitor
Item : Driver
Category : Print Monitors
Value : usbmon.dll
ImagePath : C:\Windows\System32\usbmon.dll
Size : 359936
LastWriteTime : 1/13/2021 9:15:47 PM
Version : 10.0.17763.1
Path : HKLM:\SYSTEM\CurrentControlSet\Control\Print\Monitors\WSD Port
Item : Driver
Category : Print Monitors
Value : APMon.dll
ImagePath : C:\Windows\System32\APMon.dll
Size : 1267712
LastWriteTime : 1/13/2021 9:15:47 PM
Version : 10.0.17763.1
Path : HKLM:\SYSTEM\CurrentControlSet\Control\Print\Providers\LanMan Print Services
Item : Name
Category : Print Monitors
Value : win32spl.dll
ImagePath : C:\Windows\System32\win32spl.dll
Size : 847872
LastWriteTime : 1/13/2021 9:15:22 PM
Version : 10.0.17763.1
What parameter is used to add a new column to show whether a file is digitally signed?
ファイルにデジタル署名があるかどうかを表示する新しい列を追加するには、どのパラメータを使用しますか?
Searching all categories, how many entries have the “Signed” column set to “false”?
すべてのカテゴリを検索した場合、「Signed」列の値が「false」に設定されているエントリはいくつありますか?
マルウェアファイルはデジタル署名がないだろうから、デジタル署名がないエントリのみをフィルタして表示する。
Get-PSAutorun -All -VerifyDigitalSignature | Where-Object { $_.Signed -eq $false }

Task5 Comparing to a Baseline
本タスクでは、膨大な自動実行エントリーの中から「マルウェアによる変更点」だけを効率的にあぶり出すための、ベースライン(基準状態)の作成とファイル比較の手順について解説しています。
1. ベースライン比較のメリット
パラメータスイッチで結果を絞り込んでも、まだ確認すべきデータは多く残ります。そこで、事前に取得したクリーンな状態の「ベースライン」と現在の状態を比較することで、ベースラインから変更(追加・修正)されたエントリーだけを抽出でき、調査効率が劇的に向上します。 ※この実験用マシンでは、マルウェアが実行される前のレジストリ状態が、あらかじめ ~/Documents フォルダにベースラインファイルとして保存されています。
2. 新しいベースラインファイルの作成
マルウェア実行後に何が変更されたかを確認するため、以下のコマンドを使って「現在の状態」の新しいベースラインファイルを作成します。
PowerShell
Get-PSAutorun -VerifyDigitalSignature |
Get-PSAutorun -VerifyDigitalSignature |
Where { -not($_.isOSbinary)} |
New-AutoRunsBaseLine -Verbose
- コマンドの意図: デジタル署名を検証し、OS本来のバイナリ(Windows標準の安全なプログラム)を除外した上で、新しいベースラインを生成しています。
- 注意点: 生成には数分かかります。完了すると、新しいファイルが ~/Documents フォルダに追加されます。
3. ベースラインの比較と結果の確認
2つのファイル(マルウェア実行前と実行後)が準備できたら、以下のコマンドを実行して違いを比較します。
Compare-AutoRunsBaseLine -Verbose | Out-GridView
- 挙動: 変更点だけが抽出され、Out-GridView によって見やすいグラフィカルな別ウィンドウに表示されます。
- 運用の注意点: 比較を行う際は、~/Documents フォルダ内に常に2つのベースラインファイルだけが存在する状態にしてください。混乱を避けるため、不要な古いファイルは削除しておく必要があります。
Question
There is another suspicious logon Registry entry. What is the full path of this key?
他にも不審なログオンに関するレジストリエントリがあります。このキーのフルパスは何ですか?
What is the value item name of the suspicious Registry entry from question #1?
質問#1で挙げられた不審なレジストリエントリの値の名前は何ですか?
What is the value data of the suspicious Registry entry from question #1?
質問#1で挙げられた不審なレジストリエントリの値データはどのようなものですか?
What is the category that AutoRuns assigned to the entry from question #1?
AutoRunsは、質問#1のエントリにどのようなカテゴリを割り当てましたか?
What string is displayed on the console when the suspicious file ran?
不審なファイルが実行された際、コンソールにはどのような文字列が表示されましたか?
ベースラインを比較する
PS C:\Users\Administrator> Compare-AutoRunsBaseLine -Verbose
VERBOSE: Reference file set to C:\Users\Administrator\Documents\PSAutoRunsBaseLine-20221106123440.ps1
VERBOSE: Difference file set to C:\Users\Administrator\Documents\PSAutoRunsBaseLine-20260623115549.ps1
Path : HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
Item : Userinit
Category : Logon
Value : C:\Windows\system32\userinit.exe,C:\Users\Administrator\AppData\Local\THM\789a.bat
ImagePath : C:\Users\Administrator\AppData\Local\THM\789a.bat
Size : 40
LastWriteTime : 11/6/2022 12:57:56 PM
Version :
MD5 :
SHA1 :
SHA256 :
Signed :
IsOSBinary :
Publisher :
SideIndicator : =>
Path : HKLM:\SOFTWARE\\Microsoft\Windows\CurrentVersion\Run
Item :
Category : Logon
Value : C:\Users\Administrator\AppData\Local\bd84\24d9.bat
ImagePath : C:\Users\Administrator\AppData\Local\bd84\24d9.bat
Size : 41
LastWriteTime : 11/6/2022 12:57:37 PM
Version :
MD5 :
SHA1 :
SHA256 :
Signed :
IsOSBinary :
Publisher :
SideIndicator : =>
C:\Users\Administrator\AppData\Local\THM\789a.batを実行すると、メッセージが表示される。

Task6 Conclusion
本タスクは、このRoom(学習コンテンツ)の締めくくりであり、検出した永続化機構の具体的な対処方法と全体のまとめについて述べています。
1. 検出したマルウェアへの対処(削除・修正)
前のタスクまでのプロセスで特定した悪意のあるレジストリキーや不正なファイルに対して、必要な排除措置(対処)を行います。
- 対処方法: Windows 標準の「レジストリエディタ(RegEdit)」を使用し、該当するエントリーを直接削除または修正します。
- 確認作業: 対処を行った後、マシンを再起動(リブート)し、再度自動実行されないよう完全に消去されているかを確認します。
2. 本Roomのまとめ
- 得られた知見: マルウェアが Windows レジストリを悪用してシステム内に居座り続ける(永続化する)仕組みについて理解を深めることができました。
- ツールの汎用性: マルウェアが用いる永続化技術には他にも多くの種類がありますが、今回学んだ「AutoRuns(PowerShell モジュール)」は、その大部分を検出するために共通して活用できる非常に強力なツールです。
Question
Congratulations! You have cleaned your machine of persistence mechanisms… for now.
おめでとうございます! マシンから永続化メカニズムを削除できました……少なくとも今のところは。
Answer
No Answer Needed
TryHackMeでサイバーセキュリティ体験!
- Phishing Analysis Fundamentalsウォークスルー
- TryHackMe Blueウォークスルー
- TryHackMe C2 Detection – Command & Carol ウォークスルー
- TryHackMe Conti ウォークスルー
- TryHackMe Empire ウォークスルー
- TryHackMe Hydraウォークスルー
- TryHackMe Introduction to EDRウォークスルー
- TryHackMe Linux Backdoorsウォークスルー
- TryHackMe Metasploit: Introduction ウォークスルー
- TryHackMe Metasploit: The Basics ウォークスルー
- TryHackMe Phishing Basicsウォークスルー
- TryHackMe Registry Persistence Detectionウォークスルー
- TryHackMe Threat Hunting: Endgame
- TryHackMe Vulnerabilities 101 ウォークスルー
- TryHackMeとは
- TryHackMeを始めよう
- TryHackMe ローカル攻撃環境構築 ~Kali Linux VMのインストール~
- TryHackMe Passive Reconnaissance ウォークスルー
- TryHackMe Active Reconnaissance ウォークスルー
- TryHackMe NMAP the Baics ウォークスルー
