Script As Updater (SAU) は、スクリプトファイルが固定化されたシステムを変更する必要がある場合に必要です。固定化されたファイルを変更し、固定化されていないファイルを実行するために必要です。アップデータとして設定されたスクリプトは、
場合によってはアップデータ権限を取得できません。
例と解説:
スクリプトファイルは、他の実行ファイルやバイナリのように実行されるわけではありません。それらは、ファイル内のコマンドやスクリプトを理解するインタプリタ・プロセス(バイナリ)を通じて実行されます。たとえば、
cmd.exe と
explorer.exe は
.bat と
.cmd ファイル用のインタプリタ・プロセスであり、
cscript.exe は .vbs ファイル用のインタプリタ・プロセスです。
Windows がスクリプトを必要なインタプリタにマッピングすることで対処しているため、ユーザーはこの違いを直接感じないかもしれません。
例えば、以下のような内容の 3 つの bat ファイル
test1.bat、 test2.bat と
test3.bat を作成したとします:
test1.bat:
echo “11111”
test2.bat:
echo “22222”
test3.bat:
copy /y test1.bat test2.bat
全てのファイルを固め、アップデータとして
test3.bat を作成します。
test3.bat をダブルクリックや
cmd /c test3.bat, で実行するとコピーに成功する。コマンドプロンプトから
>test3.bat, と実行すると、コピーに失敗します。
両方のケースで生成されたログをよく見てみると、以下のようになります:
同じプロセスでスクリプトを実行した場合:
この例では、スクリプトをコマンドプロンプトから
>script_nameとして直接実行しています。
Solidcore のログに以下のような事象が確認されました:
<WRITE_DENIED file_name="C:\Users\user_name\Desktop\bat files\test2.bat" pid="9480" process_name="c:\windows\system32\cmd.exe" ppid="2440" parent_process_name="c:\windows\explorer.exe" event_time="1599847976784" event_time_system="Sep 11 2020:18:12:56" is_system_file="false" deny_reason="File-solidified" user_name="DESKTOP\user_name" />
同一プロセスからスクリプトを実行した場合
MACC は、あるプロセスでユーザー入力があった後、そのプロセスにアップデータ権限を許可してはならないため、そのプロセスが固定化ファイル
test2.bat を変更することを許可しない。それがスクリプトを実行しているのか、ユーザーが直接コマンドを与えているのか、判断がつきません。そこで、このような実行はセキュリティ上の問題からブロックされます。
新しいプロセスでスクリプトが実行された場合:
例では、ダブルクリックするか、コマンドプロンプトから
cmd /c script_name を実行して、スクリプトを実行します。
Solidcore のログ (s3diag.log) に以下の事象が確認されます:
<FILE_MODIFIED file_name="C:\Users\user_name\Desktop\bat files\test2.bat" pid="3148" process_name="c:\windows\system32\cmd.exe" ppid="2440" parent_process_name="c:\windows\explorer.exe" cksum="da39a3ee5e6b4b0d3255bfef95601890afd80709" cksum256="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" event_time="1599846761194" event_time_system="Sep 11 2020:17:52:41" file_type="script" is_system_file="false" user_name="DESKTOP\user_name" workflow_id="UPDATER: AUTO_24" />
スクリプトが新しいプロセスで実行される場合:
MACC は、その特定のプロセスのライフサイクルにおいてのみ、そのプロセスに固定化ファイルの修正を許可します。ダブルクリックと “
cmd /c script_name” の両方が、スクリプトを実行するための新しいプロセスを生成します。そして、このプロセスには、終了するまでアップデータ権限が付与されます。これらの権限は、通常のアップデータ・プロセスとは異なり、子プロセスには渡されません。上記のログにあるように、ファイル変更ログを取得します。このログには、固定化ファイルの変更に使用されたワークフロー ID が含まれています。