非常感谢卢克为我指明了正确的方向。Procmon 是一个很棒的工具。从字面上看,系统内部的一个新世界为我打开了。parent process ID = WINPID of a Cygwin bash.exe
通过设置一个过滤器来包含然后只监视一个ls
命令,很快就找到了罪魁祸首。它是挂在名为 的注册表项中的恶意软件AppCertDlls
,我之前当然完全不知道。
一旦我将恶意软件clipmote.dll
移出system32
,进程创建速度立即恢复正常。
我想我是通过安装有毒的免费软件感染了这种病毒。
我花了一些时间调查这个问题,发现它既可怕又有趣,所以这就是我的发现,当然,我会感谢您提供的所有其他信息或任何评论。
恶意软件 DLL 被加载到每个用户进程中,甚至是 Explorer、taskmgr 和 procmon 本身。只有SYSTEM
(如 中所列procexp.exe
)下的进程似乎没有受到感染。
这里的问题HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCertDlls
是检查(至少在我的系统上,但可能在许多系统上,甚至可能在默认情况下)加载 DLL,这可能通过返回值来决定是否允许运行某些二进制文件从对它们调用的函数中:
NTSTATUS STDCALL CreateProcessNotify (LPCWSTR lpApplicationName, ULONG Reason);
事实上,我在那个键下有一个条目叫做sethdown
,但名字可以是任何东西。
RegEnumValue HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCertDlls
Index: 0
Name: sethdown
Type: REG_SZ
Length: 66
Data: C:\WINDOWS\system32\clipmote.dll
从网上找到的报告中,我得出结论,该AppCertDlls
钩子是 Windows 操作系统的常规部分,而不是一些流氓扩展。如果是这样,它就是一个病毒入口点,因为它允许将恶意软件动态配置到进程中。
看起来它实际上 - 具有讽刺意味的是 - 是一种安全功能,与 JVM 中的安全管理器没有什么不同(请参阅我的原始问题)。据报道,一个名为的 Microsoft 实用程序appsec.exe
使用此密钥。然后在加载的“安全”DLL 上调用的函数是CreateProcessNotify
,如上所述。据我了解,假设只是说是或否-但它可以做任何想做的事。
在我的案例和我分析的单个运行实例中ls.exe
,它创建了五个线程。他们加载或尝试加载其他 DLL 并与注册表交互。谁知道还有什么。
如果有人知道更多关于这种危险机制的信息,我会全力以赴。
这是我发现的AppCertDlls
:
早在 01/2007 中提及(Re 5 : Блокировка запуска приложений)
AppCertDlls 在 Sysinternals 论坛 (Autoruns) 上报告,10/2007
关于 AppCertDlls - 提到的病毒 01/2008
但是微软自己广泛使用了这个功能,确切地说,它实际上被设想为“一次性”的东西。仅用作限制可在终端服务器 2000 下运行的应用程序的方式。 -- Andrew Worobow
有关 AppCertDlls 密钥和 CreateProcessNotify 的更多详细信息,01/2008
06/2010 感染报告提供了一些细节
该恶意软件试图窃取银行账户信息(显然还有钱),但它也可能被配置为做其他事情。下还有其他注册表项HKEY_CURRENT_USER\Software\AppDataLow\{some GUID here}
。我在做网上银行的时候,它一定做了一些屏幕抓取;它知道使用过 TAN。我记得有一次我的印象是我的银行在登录前不久或(可能)登录后被黑了,我看到一个屏幕一次询问大约 20 个 TAN。WTF,我想,浏览器得到了错误的 URL,我关闭了窗口。我应该更关心的。我不会认为整个问题如此危险。幸运的是,没有损坏。只是幸运,我猜。
这是我在病毒中发现的看起来很重要的字符串的列表:
client.dll
EAPSFILT.dll
KERNEL32.dll
我认为前两个可能是它尝试加载的其他病毒库。
_aullshr
CompareStringA
CreateEventA
CreateFileA
CreateFileMappingA
CreateProcessNotify
CtfImmIsCiceroStartedInThread
CtfImmTIMActivate
DllCleanupServer
DllStartupServer
ExitProcess
GetThreadContext
ImmDisableIme
ImmDisableIME
ImmGetConversionListA
ImmGetVirtualKey
ImmRegisterWordA
ImmSetCandidateWindow
InterlockedExchangeAdd
iswlower
lstrcmpA
MapViewOfFile
memset
OpenThread
ReadFile
RealDriveType
RegenerateUserEnvironment
RestartDialog
SetFilePointer
Sleep
strchr
TerminateThread
UnmapViewOfFile
vDbgPrintExWithPrefix
VirtualQueryEx
WaitForMultipleObjects
该Cicero
函数对我来说看起来很流氓,但它是C:\WINDOWS\system32\imm32.dll
“Windows IMM32 API 客户端库”的一部分——不管它是什么。
我跑了sfc.exe
,微软的“系统文件检查器”。将对我的程序文件进行更多检查。并获得病毒扫描程序。欢迎提出建议。