私は最近、マルウェアの検出とその後のWindows資産の感染を確認するために、いくつかのマルウェアレポートと関連ログを読む必要がありました。ログには、ユーザーのAppData
フォルダ内の.dll
ファイルが明確に示されています。これらの.dll
ファイルは、通常.dll
にあるsystem32
sと同じ名前になります(例:cryptbase.dll
)。
この特定の例では、これは間違いなくマルウェアであり、不正な.dll
sの解凍はマルウェアの通常のプロセスの一部でした。私はチャットでこれについて尋ねましたが、この動作の本当の信頼できる説明はマルウェア(この場合のように)または非常に悪いプログラミング慣行であり、その場合でもまれなシナリオであると言われました。
私の質問は2つあります。マルウェアまたは不適切なプログラミング以外の理由で、標準の.dll
system32
sと同じ名前の.dll
ファイルがユーザーのAppData
フォルダにあるシナリオはありますか?
さらに、AppData
にあり、.dll
の.dll
ファイルのコピーのように見えるsystem32
ファイルを、侵害の指標として扱うことは公正ですか?
MicrosoftがProgram Files
フォルダーのデフォルトの権限を調整したため、多くの開発者はコードの代替の場所としてAppData
を使用しています。この方法でインストールされたアプリケーションは、昇格または管理者レベルのアクセスを必要とせずに更新できるというロジックです。 (たとえば、Google Chromeがこれを行います)。
これはまた、通常、AppData
パスの下のどこかにあるsystem32
フォルダーに通常存在する正当なライブラリーを見つけることを意味します。これらは通常、アプリケーション自体によって保守および更新されるランタイムコンポーネント(MSVCRT、GDI +、またはcapicomなど)です(通常、特定のバージョンが機能するために必要ですが、システムのコンポーネントではなくユーザーコンポーネントとしてプッシュされる場合もあります。標高なしで展開する必要があります)。
これは、オペレーティングシステムに属しているライブラリを見つける必要があることを意味しません。たとえば、schannel.dllがそこに見つかる正当な理由はありません。そのライブラリを維持する唯一のアプリケーションはオペレーティングシステムだからです。
そのため、AppData
の下のsystem32
のdllと同じ名前のdllはnotが自動的に疑わしくなります。
distributionには適切ではありませんが、誰かが%appdata%
システムライブラリのパスは、実行時シミング用です。
具体的には:特定のAPIコントラクト検証にランタイムインスペクションを実行したい場合(malloc
/free
ですが、これは既にAppVerifierによって管理されています)または一般的な使用状況のプロファイリング、検証を実行するシムレイヤーを記述して、正当なシステムライブラリに渡すことができます。
一般に、システムライブラリは適切なシステムまたは [〜#〜] sxs [〜#〜] パスにある必要があります。 Windows Logo Certification を使用するものはすべてこれに準拠しますが、多くのアプリは認証なしで配布されます。
あなたが実際にWindowsのデフォルトDLLを上書きするなら、私はそれを悪いプログラミングと呼びます。それらをSystem32
以外の場所に置くと、次のことができます。
ソフトウェアが適切に作成されている場合、DLLはSystem32
ではなくAppData
またはそのインストールディレクトリに配置されます。
マルウェアが適切に作成されている場合、DLLはSystem32
に配置されます。