web-dev-qa-db-ja.com

BigFixの関連性で混乱-x64ファイル

エンタープライズ環境でBigFixを使用していますが、2016年のMicrosoftパッチの最近のラウンドが少数のアセットで失敗していることに気付きました。変更された関連性を使用してカスタムコピーフィックスレットを作成することでこれを回避できましたが、ほとんどのファイルがすべて_C:\Windows\Sytem32_にあるにもかかわらず、使用する必要のある関連性は常に一貫していませんでした。

例:MS16-031-スキャンプラットフォームが探している基準は、_Ntdll.dll_のバージョン番号に基づいています。関連性のあるカスタムフィックスレットを作成します。

_((version of x64 file "C:\Windows\System32\Ntdll.dll") as string) < VersionNumberGoesHere_

以前に関連性を使用して_Ntdll.dll_を探していたBigFix分析を作成したので、これはうまく機能しました。

if (exists x64 file "C:\Windows\System32\Ntdll.dll") then ((version of x64 file "C:\Windows\System32\Ntdll.dll") as string) else "Does Not Exist"

カスタムフィックスレットの関連性がちょうど約分析にスポットを当てていることを確認できました。どういうわけか、それは2つの鏡像ではありませんが、非常に近く、スキャン結果でフラグが立てられたすべてのマシンがカスタムフィックスレットリストに含まれているので、満足しています。

ここで問題が発生します。_C:\Windows\System32_のsomeファイルの場合、スキャン結果に基づいて探している正しいバージョン番号情報を取得するには、まったく異なる構文を使用する必要があります。 つまり、私はcan上記の方法を使用しますが、提供されるバージョン情報は、スキャナーが探しているものにさえ近くありません。私が使用する場合上記の方法では、スキャナーが「バージョン番号6.1.7600.16385」のようなものを探していると仮定すると、代わりに「1.1.11302.0」と表示されます。それはまだある種の明らかなバージョン番号付けですが、私のスキャンプラットフォームが参照しているタイプとはまったく似ていません。

例:MS16-027-分析用の_mfds.dll_のファイルバージョン情報を見つけるには、次を使用する必要がありました。

_value "FileVersion" of version block 1 of file "mfds.dll" of system folder_

カスタムフィックスレットの場合、次のものを使用する必要がありました。

value "FileVersion" of version block 1 of file "mfds.dll" of system folder != VersionNumberGoesHere (OSServicePatch_gdr.LongStringOfNumbers)

BigFixのアクションスクリプト構文について少し読んだところ、x64 file (command)file (command)は、32ビットシステムと64ビットシステムのパスに基づいて異なる結果をもたらす可能性があるようでした。ただし、ビットシステムは、_C:\Program Files_およびC:\Program Files (x86)内にあるファイルにのみ適用されると思いましたか?そうではありませんか?もしそうなら、System32の64ビットバージョンはどこにありますか、そしてなぜ2つの間の結果はそれほど劇的に異なるのですか?

2
Sawta

明確にするために、これはBigFixの関連性に関する質問であり、BigFixActionScriptではありません。

BigFixの関連性には少し学習曲線があり、複雑さの原因を理解するのが難しい場合がありますが、発生している問題は、ファイルにさまざまな種類のバージョンを含める方法の複雑さに関係しています。情報に加えて、MicrosoftのWindowsOnWindowsリダイレクトが機能する方法。


ファイルバージョン情報がどこから読み取ったかによって異なる可能性がある単純な理由は、ファイルバージョンを配置する場所が複数あり、それらが完全に一致する場合と異なる場合があるためです。これは、ファイルの作成者と、バージョン情報の意味をどのように伝えたいかによって異なります。

関連性versions of files "mfds.dll"は1つの場所を読み取り、関連性values "FileVersion" of version blocks of files "mfds.dll"は別の場所を読み取ります。

ここを参照してください:

Q: (values "FileVersion" of version blocks of it, (it as string) of versions of it) of files "mfds.dll" of (system folders)
A: 10.0.14342.1000 (rs1_release.160506-1708), 10.0.14342.1000
T: 3.677 ms
I: plural ( string, string )

あなたが見ている違いはfilex64 fileの違いによるものではないと思いますが、多くの理由で理解することが重要です。

この質問の目的のために、64ビットWindowsコンピューターについて話していると仮定します。これは、Windows Vista以降に適用されると想定する必要がありますが、Windows XP 64ビットにも適用される可能性があります。

BigFixクライアントは32ビットプロセスであるため、特別なx64ビットの場所に対して行われるすべてのファイル読み取りは、実際にはWindowsによって32ビットの場所にリダイレクトされます。

BigFixの関連性におけるfilesx64 filesの違いは何ですか?ほとんどのファイルの場合、filesx64 filesのいずれかを使用すると、実際には同じファイルが読み取られます。これは、x64 filesを使用すると、BigFixにWindowsOnWindows(WoW)リダイレクトが無効になっているファイルを読み取るように指示するためですが、このリダイレクトは特定のパスへの読み取りにのみ適用されます。 1つの例はProgram Filesで、もう1つはSystem32ですが、C:\Windows\TempのようなものはWoWリダイレクトの影響をまったく受けないため、C:\Windows\Tempに読み取られたファイルは関係なく同じように機能します。

  • 32ビットの場所:C:\Program Files (x86)
  • 64ビットの場所:C:\Program Files
  • 32ビットの場所:C:\Windows\SysWOW64
  • 64ビットの場所:C:\Windows\System32
  • 64ビットの場所:C:\Windows\sysnative
    • リダイレクトを無効にせずに機能する特別な偽のパス

64ビットシステムの場所の名前に32が含まれているのに対し、32ビットシステムの場所の名前には64が含まれているという事実に、マイクロソフトは感謝しています。これは間違いなく非常に一般的な混乱の原因です。

この関連性を使用して、システムに実際にmfds.dllのコピーが2つあることを確認します。

(name of it, size of it) of files "mfds.dll" of (system folders; system x64 folders)

(system folders; system x64 folders)はBigFixにC:\Windows\SysWOW64フォルダーとC:\Windows\System32フォルダーの両方を読み取るように指示するため、この関連性は両方の場所を読み取ります。

クレイジー?紛らわしい?ちょっと待ってください、それはもっと奇妙になります。

フィックスレットデバッガで次の関連性を実行します:pathnames of files "mfds.dll" of (system folders; system x64 folders)

Q: pathnames of files "mfds.dll" of (system folders; system x64 folders)
A: C:\WINDOWS\system32\mfds.dll
A: C:\WINDOWS\system32\mfds.dll
T: 1.312 ms
I: plural string

両方のファイルのパス名が同じであることに注意してください。ただし、これらは同じファイルではありません!!!

これがWindowsOnWindowsリダイレクトの仕組みです。これは32ビットプロセスにあり、C:\Windows\System32関連性を使用する場合は代わりにC:\Windows\SysWOW64からファイルを読み取ったとしても、system foldersの場所からファイルを読み取ることを通知するため、BigFixを適切にはパス名をC:\WINDOWS\system32\mfds.dllとして報告します。次に、system x64 foldersの関連性の場合、BigFix(32ビットプロセス)は、リダイレクトを無効にしてC:\Windows\System32の場所を読み取りたいことをWindowsに通知します。この場合、実際にはC:\WINDOWS\system32\mfds.dllおよびにあるファイルを適切に読み取ります。 はパス名をそのように報告します。

繰り返しになりますが、これはBigFixとは関係がなく、MicrosoftによるWindows64ビットとWindows32ビットのリダイレクトの実装と関係があります。


今後のBigFixの質問については、非常に活発なフォーラムを強くお勧めします: https://forum.bigfix.com/

1
jgstew