Antivirus Artifacts 2
Antivirus Artifacts 2
Antivirus Artifacts 2
1
Antivirus Artifact II
Table of Contents
Topic Page
Introduction 3
Avira 4-6
F-Secure 7-8
Norton 9 - 12
TrendMicro 13 - 15
WebRoot 16 - 18
BitDefender 19 - 23
MalwareBytes 24 - 26
Conclusion 27
2
Antivirus Artifact II
Welcome to Antivirus Artifacts II.
My initial release of Antivirus Artifacts saw quite a bit of positive feedback. Criticism I
received revolved around minifilter driver documentation (or the lack thereof) and
documenting the process I took to discover these artifacts. This subsequent release is to act as
an amendment to the original paper by diving deeper into antivirus products and their
operations by documenting drivers loaded into the Windows kernel as well as listing the file
system filters in place.
Note: all data listed and found is the result of a clean installation with default configuration.
As data from the antivirus were discovered there were fluctuations in web traffic. All web
traffic listed was discovered from the antivirus at run-time. In the event you decide to review
any of the products listed in this paper note you may get different results based on your
geographical location or activity being performed by the antivirus product.
As 2020 comes to end I have seen many anti-virus evasion methods come and go. Most
notably there has been a resurgence of classic anti-hooking techniques (note the release date)
which have proven to be effective against many AV and EDR systems. While this is effective a
question still remains to be unanswered: if we are being hooked, who is hooking us? The most
common method to determine if an anti-virus product or EDR system is in place is using the
WMIC and performing a basic query against the Windows Security Center namespace.
This method will work in most scenarios. The problem presented here is that this will only
return a string if the anti-virus product, or the EDR system, has chosen to register itself in the
Windows Security Center namespace. If the product has not registered itself this query will
fail. Knowing we are dependent on a security product to register itself I have decided to go
down a different path. In this paper I will document antiviral remnants: artifacts present on
the machine which can indicate whether or not a security product is in place thus removing
our dependency on the Windows Security Center namespace.
3
Antivirus Artifact II
Avira
Parent Directory
Binaries present:
Name Description Sub directory
4
Antivirus Artifact II
Functions Hooked:
Minifilters Present:
avgntflt.sys IRP_MJ_CREATE
avgntflt.sys IRP_MJ_CLEANUP
avgntflt.sys IRP_MJ_WRITE
avgntflt.sys IRP_MJ_SET_INFORMATION
avgntflt.sys IRP_MJ_SET_SECURITY
avgntflt.sys IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
avgntflt.sys IRP_MJ_FLUSH_BUFFERS
avgntflt.sys IRP_MJ_FILE_SYSTEM_CONTROL
[continued below]
5
Antivirus Artifact II
Web Traffic:
6
Antivirus Artifact II
FSecure
Parent Directory
C:\Program Files(x86)\F-Secure\Anti-Virus\
Binaries present:
Name Description Sub directory
Functions Hooked:
7
Antivirus Artifact II
Minifilters Present:
fsulgk.sys IRP_MJ_CREATE
fsulgk.sys IRP_MJ_CLEANUP
fsulgk.sys IRP_MJ_WRITE
fsulgk.sys IRP_MJ_SET_INFORMATION
fsulgk.sys IRP_MJ_SET_SECURITY
fsulgk.sys IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
Web Traffic:
8
Antivirus Artifact II
Norton
Parent Directory
C:\Program Files(x86)\F-Secure\Anti-Virus\
Binaries present:
Name Description Sub directory
9
Antivirus Artifact II
Functions Hooked
KERNELBASE.DLL
VirtualAllocEx CreateFileMappingW CreateFileMappingNumaW
NTDLL.DLL
RtlAddVectoredExceptionHandler RtlRemoveVectoredExceptionHandler LdrLoadDll
KERNEL32.DLL
CreateFileMappingA SetProcessDEPPolicy VirtualAlloc
[continued below]
10
Antivirus Artifact II
Minifilters Present:
eeCtrl64.sys IRP_MJ_CREATE
eeCtrl64.sys IRP_MJ_CLEANUP
eeCtrl64.sys IRP_MJ_SET_INFORMATION
BHDrvx64.sys IRP_MJ_CREATE
BHDrvx64.sys IRP_MJ_WRITE
BHDrvx64.sys IRP_MJ_CLEANUP
BHDrvx64.sys IRP_MJ_SET_INFORMATION
BHDrvx64.sys IRP_MJ_SET_SECURITY
BHDrvx64.sys IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
BHDrvx64.sys IRP_MJ_FILE_SYSTEM_CONTROL
BHDrvx64.sys IRP_MJ_DIRECTORY_CONTROL
SymEvnt.sys IRP_MJ_CREATE
SymEvnt.sys IRP_MJ_WRITE
SymEvnt.sys IRP_MJ_SET_INFORMATION
SymEvnt.sys IRP_MJ_FILE_SYSTEM_CONTROL
SymEvnt.sys IRP_MJ_SHUTDOWN
SymEvnt.sys IRP_MJ_LOCK_CONTROL
11
Antivirus Artifact II
Antivirus Driver Request
SRTSP64.SYS IRP_MJ_CREATE
SRTSP64.SYS IRP_MJ_CLEANUP
SRTSP64.SYS IRP_MJ_WRITE
SRTSP64.SYS IRP_MJ_VOLUME_MOUNT
SRTSP64.SYS IRP_MJ_PNP
SRTSP64.SYS IRP_MJ_SET_INFORMATION
SRTSP64.SYS IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
SRTSP64.SYS IRP_MJ_RELEASE_FOR_SECTION_SYNCHRONIZATION
SRTSP64.SYS IRP_MJ_FILE_SYSTEM_CONTROL
SRTSP64.SYS IRP_MJ_SHUTDOWN
SRTSP64.SYS IRP_MJ_DEVICE_CONTROL
SYMEFASI64.SYS IRP_MJ_CREATE
SYMEFASI64.SYS IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
SYMEFASI64.SYS IRP_MJ_SHUTDOWN
SYMEFASI64.SYS IRP_MJ_WRITE
SYMEFASI64.SYS IRP_MJ_CLEANUP
SYMEFASI64.SYS IRP_MJ_CLOSE
SYMEFASI64.SYS IRP_MJ_FILE_SYSTEM_CONTROL
SYMEFASI64.SYS IRP_MJ_DEVICE_CONTROL
SYMEFASI64.SYS IRP_MJ_PNP
SYMEFASI64.SYS IRP_MJ_SET_INFORMATION
Web Traffic:
12
Antivirus Artifact II
Trend Micro
Parent Directory
C:\Program Files\TrendMicro
Binaries present:
Name Description Sub directory
13
Antivirus Artifact II
Functions Hooked
KERNELBASE.DLL
CreateFileA CreateFileW LoadLibraryExW
KERNEL32.DLL
CreateFileMappingA N/A N/A
NTDLL.DLL
RtlCreateHeap LdrUnloadDll LdrUnloadDll
Minifilters Present:
14
Antivirus Artifact II
Antivirus Driver Request
tmeyes.sys IRP_MJ_CREATE
tmeyes.sys IRP_MJ_READ
tmeyes.sys IRP_MJ_WRITE
tmeyes.sys IRP_MJ_CLEANUP
tmeyes.sys IRP_MJ_SET_INFORMATION
tmeyes.sys IRP_MJ_FILE_SYSTEM_CONTROL
tmeyes.sys IRP_MJ_VOLUME_MOUNT
tmeyes.sys IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
tmeyes.sys IRP_MJ_SET_SECURITY
Web Traffic:
15
Antivirus Artifact II
WebRoot
Parent Directory
C:\Program Files\WebRoot
Binaries present:
Name Description Sub directory
DLL’s present:
Name Description Path
Functions Hooked:
ADVAPI32.DLL
OpenSCManagerW OpenServiceW OpenSCManagerA
16
Antivirus Artifact II
USER32.DLL
PostThreadMessageA PostMessageA SendMessageA
KERNELBASE.DLL
OutputDebugStringA CreateProcessInternalW N/A
NTDLL.DLL
NtWaitForSingleObject NtDeviceIoControlFile NtRequestWaitReplyPort
17
Antivirus Artifact II
URLMON.DLL
URLDownloadToFileW URLDownloadToFileA N/A
WININET.DLL
InternetOpenA InternetCloseHandle InternetOpenUrlA
GDI32.DLL
BitBlt TextOutW N/A
KERNEL32.DLL
GetTickCount N/A N/A
RPCRT4.DLL
RpcSend RpcSendReceive NdrSendReceive
Minifilters Present:
WRCore.x64.sys IRP_MJ_CREATE
WRCore.x64.sys IRP_MJ_WRITE
WRkrn.sys IRP_MJ_CREATE
WRkrn.sys IRP_MJ_CLEANUP
WRkrn.sys IRP_MJ_WRITE
WRkrn.sys IRP_MJ_SET_INFORMATION
18
Antivirus Artifact II
BitDefender
Parent Directory
Binaries present:
Name Description Path
19
Antivirus Artifact II
Functions Hooked:
KERNELBASE.DLL
DefineDosDeviceW CreateProcessW CreateProcessA
COMBASE.DLL
CoCreateInstance CoGetClassObject N/A
KERNEl32.DLL
Process32NextW CreateToolhelp32Snapshot MoveFileExA
GDI32.DLL
CreateDCW BitBlt CreateCompatibleDC
20
Antivirus Artifact II
USER32.DLL
SetWindowsHookExW CallNextHookEx FindWindowExA
NTDLL.DLL
RtlImageNtHeaderEx NtSetInformationThread NtClose
21
Antivirus Artifact II
Minifilters Present:
vlflt.sys IRP_MJ_CREATE
vlflt.sys IRP_MJ_CLEANUP
vlflt.sys IRP_MJ_SET_INFORMATION
vlflt.sys IRP_MJ_WRITE
vlflt.sys IRP_MJ_FILE_SYSTEM_CONTROL
vlflt.sys IRP_MJ_VOLUME_MOUNT
vlflt.sys IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
vlflt.sys IRP_MJ_DIRECTORY_CONTROL
gemma.sys IRP_MJ_CREATE
gemma.sys IRP_MJ_CLEANUP
gemma.sys IRP_MJ_SET_INFORMATION
gemma.sys IRP_MJ_WRITE
gemma.sys IRP_MJ_READ
gemma.sys IRP_MJ_QUERY_INFORMATION
22
Antivirus Artifact II
Antivirus Driver Request
atc.sys IRP_MJ_CREATE
atc.sys IRP_MJ_WRITE
atc.sys IRP_MJ_CLEANUP
atc.sys IRP_MJ_READ
atc.sys IRP_MJ_SET_INFORMATION
atc.sys IRP_MJ_QUERY_INFORMATION
atc.sys IRP_MJ_DIRECTORY_CONTROL
atc.sys IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
atc.sys IRP_MJ_QUERY_EA
atc.sys IRP_MJ_SET_EA
atc.sys IRP_MJ_FILE_SYSTEM_CONTROL
atc.sys IRP_MJ_CREATE_NAMED_PIPE
atc.sys IRP_MJ_PNP
TRUFOS.SYS IRP_MJ_CREATE
TRUFOS.SYS IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
23
Antivirus Artifact II
MalwareBytes
Parent Directory
C:\Program Files\MalwareBytes\
Binaries present:
Name Description Sub directory
Functions Hooked:
MSCVRT.DLL
_wsystem system N/A
WSA_32.DLL
WSAStartup N/A N/A
SHELL32.DLL
ShellExecuteW ShellExecuteExW N/A
24
Antivirus Artifact II
NTDLL.DLL
ResolveDelayLoadedAPI GetDllHandle CreateProcessInternalW
KERNELBASE.DLL
VirtualAllocEx CreateProcessW CreateProcessInternalW
URLMON.DLL
URLDownloadToFileW URLDownloadToCacheFileA URLDownloadToCacheFileW
WININET.DLL
InternetReadFile InternetReadFileExW HttpOpenRequestW
KERNEL32.DLL
SetProcessDEPPolicy CopyFileA MoveFileA
25
Antivirus Artifact II
Minifilters Present:
mbamwatchdog.sys IRP_MJ_CREATE
mbamwatchdog.sys IRP_MJ_SET_INFORMATION
mbamwatchdog.sys IRP_MJ_SET_SECURITY
mbam.sys IRP_MJ_CREATE
mbam.sys IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
Web Traffic:
26
Antivirus Artifact II
Conclusion:
As this series has grown we are now starting to see anti-viruses use an array of different
technologies which can be difficult for malware authors to see. Although many rely on archaic
hooking techniques, and hook archaic functionality from well-known malware techniques, many
also come equipped with fairly robust file system minifilters to capture data which escape the
hooks. This is evident because in the original entry in the Antivirus Artifacts series F-Secure was
able to detect the keylogger placed on the machine despite not using any API hooks and also
being unfamiliar with the malicious binaries MD5 hash. This robust minifilter system, coupled
with static binary analysis implementations (something YARA rule-like), could prove to be a
challenging adversary for malware authors.
As a final note: in this series I was unable to test these anti-viruses against the ‘Undertaker’
malware written because after the release of Antivirus Artifacts 1 most antivirus companies had
flagged the file hash as malicious. The homebrew malware proof-of-concept can be viewed on
VirusTotal.
27
Antivirus Artifact II