11章
Hands-on-1
ここでは、レジストリエディターでRUNキーを実際に登録し、その挙動を確認するハンズオンを行います。
※(注) レジストリの誤編集は、システムやソフトウェアの動作に影響を及ぼす可能性がありますので、慎重に行って下さい。
登録するRUNキーの内容は以下のとおりとします。
レジストリキー :
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce値の名前 : TESTRUN
値の種類 : REG_SZ(文字列)
値のデータ :
C:\Windows\system32\mspaint.exe(※ Windows 10の場合)「値のデータ」に登録するのは任意のプログラムで結構です。ここではWindows標準のペイントアプリを起動する想定で説明します。なお、Windows11では同アプリのファイルパスが異なります。上記フォルダに存在するメモ帳(notepad.exe)などでもよいでしょう。
このように登録すると、次回のユーザーログオン時、自動的にペイントアプリが起動します。
以下の手順でRunキーを登録して下さい。
登録手順(例)
Windowsのタスクバーの検索ボックスに「regedit」と入力し、検索結果に表示される「レジストリエディター」を選択して起動します。

レジストリエディターの画面の上部にあるレジストリキー入力欄に、登録するRunキー名を入力して下さい。
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce

上記レジストリキー(Runキー)に現在登録されている「値」が一覧表示されます。
新規の「値」を追加登録しましょう。
「値」の一覧が表示されたエリアの空白部分を右クリックして、「新規」ー 「文字列値」を選択します。

「 新しい値 #1」という名前で、新規に「値」が作成されるので、値の名前を選択し、「TESTRUN」 に変更します(値を選択してF2キー、または右クリックメニューの「名前の変更」)。

上記の手順で作成した値の名前「TESTRUN」をダブルクリックし、値のデータに次の実行ファイルパスを入力し、「OK」をクリックして保存します。
C:\Windows\system32\mspaint.exe
登録結果の確認
下記の赤枠内のように登録されていることを確認して下さい。

これで、次回ログオン時にペイントアプリ(または任意のプログラム)が自動的に起動されます。
レジストリエディターを終了し、再ログインしてその挙動を確認して下さい。
「RunOnce」への登録ですので、再ログイン後は登録した値「TESTRUN」が自動的に削除されます。
再ログイン後、レジストリエディターを起動して、登録した値が削除されていることを確認して下さい。
APIやコマンドによる登録方法(参考)
このハンズオンではレジストリエディターを使ってレジストリ登録を行いましたが、マルウェアの場合は、Runキーの登録を自動的に行う命令がプログラミングされています。実装方法は、攻撃者によってさまざまな方法が取られているものと推測されますが、一般的なプログラミング方法には以下のようなものがあります。
Windows API(RegSetValue等)の使用
Microsoft社は、Windows上で動作するアプリケーションプログラムの開発者向けに、レジストリをはじめ、さまざまなシステムリソースを操作できるAPI(Application Programming Interface)を提供しています。レジストリキーおよび「値」の登録には、「RegSetValue」というAPIが提供されています。このAPIを使ってRunキーを登録するマルウェアも多数発見されています。
以下は、このハンズオンで実施したRunキー登録処理を、C言語で実装する場合のAPI使用例です。
HKEY hKey;
DWORD rt = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce", 0, KEY_SET_VALUE, &hKey);
TCHAR key_value_sz[] = TEXT("c:\\Windows\\System32\\mspaint.exe");
RegSetValueEx(hKey, "TESTRUN", 0, REG_SZ, (const unsigned char*)key_value_sz, sizeof(key_value_sz));
RegCloseKey(hKey);
このような方法で実装されているマルウェアは、動的解析で観測可能です。
例えば、Sysinternals ツール群の「Process Monitor」など、API呼び出しのモニターツールを使用すると、次の順にAPIが呼び出される状況や、APIに渡されるパラメータの内容(キー名や実行ファイルのパス名など)を確認することができます。
RegOpenKeyEx:レジストリキー(Runキー)のオープン
RegSetValueEx:値のセット
RegCloseKey:レジストリキーのクローズ
※ API名末尾の「Ex」は、レガシー版APIを拡張(パラメータ追加等)したAPIを表します。
PowerShell「new-itemproperty」コマンドレットの使用
PowerShellで標準提供されるコマンドレットの「new-itemproperty」でも、レジストリの新規登録を行うことができます。
以下は、このハンズオンで実施したRunキー登録処理を、PowerShellで行った例です。
new-itemproperty -path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce -PropertyType String -name TESTRUN -value "c:\Windows\System32\mspaint.exe"
(実行結果)
TESTRUN : c:\Windows\System32\mspaint.exe
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion
PSChildName : RunOnce
PSDrive : HKCU
PSProvider : Microsoft.PowerShell.Core\Registry
「reg add」コマンドの使用
Windows標準コマンドの「reg」では、さまざまなレジストリ操作を行うことができます。
以下は、このハンズオンで実施したRunキー登録処理を、「reg add」コマンドで行った例です。
reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce /v TESTRUN /t REG_SZ /d "c:\Windows\System32\mspaint.exe"
(実行結果)
この操作を正しく終了しました。
問題
このハンズオンで登録したRUNキーについて、次の1~4から正しい説明を選択し、番号(数字)を回答して下さい。
- 全てのユーザーのログオン時に、登録した実行ファイルが恒久的に起動される。
- 登録時にログオンしていたユーザーについてのみ、次回以降のログオン時に、登録した実行ファイルが恒久的に起動される。
- いずれかのユーザーによるログオン時に、登録した実行ファイルが1回のみ起動される。
- 登録時にログオンしていたユーザーについてのみ、次回ログオン時に、登録した実行ファイルが1回のみ起動される。