How Advanced Persistent Threat works?

How to protect from APT?

  • Antivirus

    Votes: 1 3.2%
  • Antivirus + Firewall

    Votes: 19 61.3%
  • No way out

    Votes: 11 35.5%

  • Total voters
    31
S

sinu

Thread author
Advanced Persistent Threat or APT's are a kind of cyber attack that can go undetected for a long period of time.The objective of the attack is:
  • To extricate vital data rather than cause damage
  • To gain access to the network or host
The typical characters of APT are listed below.
  • Advanced: They are highly sophisticated and targeted
  • Persistent: They put in a lot of effort to achieve their goals and to reach the target
  • Threatening: They have a newly generated payload compared to the conventional, target specific payloads something not known to security personal
In a APT the attackers deface the network, plant advanced malware and hide themselves until they receive the command to get off the target.
An APT uses a step by step approach.
The intrusion kill chain(also known as a kill chain, cyber kill chain or attack cycles) is a model used to execute the successful pathway towards segmenting, analyzing and mitigating the cyber attack. Various stages of attack are performed in order to gain access to the target.

  1. Reconnaissance: This is the initial stage of identifying and selecting the target.All the relevant information about the target is obtained by crawling the internet(social engineering) to get personal information like email, social media ID, etc.
  2. Weaponisation: At this stage a RAT(remote administration tool or a Trojan) is encapsulated with any client application which is likely to be an executable.
  3. Delivery: During this stage the weaponised executable is transferred to the target via email, suspicious links, USB media etc.
  4. Exploitation: Once the executable is delivered to the victim, the payload triggers the Trojan and exploits the OS vulnerability or targets a specific Application.
  5. Installation: Installation allows the Trojan and attacker to remain in close proximity.
  6. Command and control server: A command and control server is used to control the Trojan installed in the target via remote access.
  7. Action and goals: After six stages of progress the goal is accomplished by compromising the host.
The intrusion kill chain often takes many days for a successful attack to take place. It is very hard to identify these chain processes due to their stepping stone behavior (compromising multiple hosts to reach the target) its very difficult to identify the first three stages of the attack cycle.


APT anatomy

  1. Advanced persistent Threat: APT's are usually targeted at specific industries , organizations or even individuals and may involve significant research into personnel, offices, IT practices, operations and much more to help gain a foot hold.
  2. Entry Point: Targeted or not, the initial system is usually infected by either:
  • Visiting an infected website
  • Opening an email attachment
  • Plugging in a USB stick
3. Discretely call home: The infected system connects to the command and control (C & C)
Server for further instructions or to start passing sensitive data.
4. Covertly Spread: The malware may choose to remain undetected and move slowly or it may
spread to other systems by taking advantage of unpatched vulnerability or using hijacked
Credentials.
5. Silently ex filtrate data: The malware may attempt to steal information from emails,
documents, skype or IM conversations.

 

kmr1684

Level 3
Verified
Jun 23, 2014
148
advanced classical hips and knowledge of know how it works is for more better than good, rather than anything else.

ps: sorry for the off-topic, wiping the entire hdd is also good option to escape. rather than sorry.
 

Tony Cole

Level 27
Verified
May 11, 2014
1,639
Have friends in the NSA, or know Edward Snowden. Otherwise, (unless) you are using advanced security software i.e., Kaspersky's new Anti-APT solution, you cannot stop such a threat. Kaspersky does list 30 measures to possibly mitigate such threats, the top 4 being:

ASD rank Mitigation strategy, short name Kaspersky Lab technologies
1 Application whitelisting Dynamic whitelisting
2 Patching application vulnerabilities Vulnerability Assessment and Patch Management
3 Patching OS vulnerabilities
5 User application configuration hardening Web control (blocking scripts in web-browsers) , Web Anti-Virus

https://securelist.com/blog/software/69887/how-to-mitigate-85-of-threats-with-only-four-strategies/
 

jamescv7

Level 85
Verified
Honorary Member
Mar 15, 2011
13,070
@sinu : In such APT attacks then of course, very few of viruses will manage to bypass HIPS and BB since that component design to hook everything in the system for such changes. So with proper configuration of CIS or other products alongside of sufficient knowledge then all should be prevented.
 
  • Like
Reactions: souhrid

Online_Sword

Level 12
Verified
Honorary Member
Top Poster
Well-known
Mar 23, 2015
555
I heard that TrendMicro is good at defending APT attack. But it is difficult to test or verify.
 

Tony Cole

Level 27
Verified
May 11, 2014
1,639
All we must know is no Government (unless you’re committing mass murder, or a terrorist) would waste money infecting our mere machines with an APT. As you will see in the upcoming months/year Kaspersky's new anti-APT software (which inadvertently is so powerful it discovered the new Duqu 2.0) that software is meant for large corporations worth millions. Duqu 2.0, Eugene Kaspersky estimated cost over $10 million, so we are safe.

And no, Comodo is crap, if their network was compromised by Duqu 2.0 they probably would brush it under the carpet, not tell the world - good on Kaspersky for standing up to such, what amounts to crimes against innocent people.
 
  • Like
Reactions: Piteko21
S

sinu

Thread author
I got some more information about the difference between APT and traditional malware:

Traditional malware:
  • Targets random network or hosts.
  • Probability of getting detected by AV is high as signatures get detected.
  • The effects become visible over a period of time as large networks or hosts get infected
  • A good firewall or intrusion detection system can prevent entry by signature checking
APT:
  • Targets specific network or hosts
  • A combination of malware is used, signatures go undetected because of this
  • The idea is to lie low over a significant period of time
  • It is carried mostly through content, which used well known ports (80, 443, etc) and known protocols like http, https etc

Hence analyzing network layered packets is a good way to keep a check & log analysis from various sources with co-related may help in early detection.
 
D

Deleted member 21043

Thread author
Hooking. I love hooking. I use hooking techniques on a daily basis, I was hooking just before I started writing this. (x64 ;) ) :D
From kernel-mode, callbacks are also important.

Want to block drivers from loading? Hook functions like ZwLoadDriver, ZwSetSystemInformation. There are ways that malware can get a driver loaded without loading it directly itself from those functions, though (e.g. via registry).
Want to monitor process creation and inject a DLL as a process is started? Hook functions like CreateProcessInternalW.
Want to monitor process creation and termination from Kernel-Mode? Setup a callback to PsSetCreateProcessNotifyRoutineEx or hook functions in SSDT/IDT,...
Want to protect Antivirus software (or if the AV wants too)? From kernel-mode, setup a callback to ObRegisterCallback.

There is so much you can do with hooking. It's why I love it, it creates new possibilities for detecting and blocking malicious software in real-time (zero-day prevention). Just ruling things out well can be tricky, and if you do it wrong you can cause issues (user-mode hooking can result in the process crashing if done incorrectly, kernel-mode issues results in a BSOD). ;)

You can use hooking to make a firewall (or use a low level driver to sniff the network which would be better but more advanced) as well.

A combination of malware is used, signatures go undetected because of this
It won't matter about the signatures detecting it or not. Once the malware is executed, unless it is using a vulnerability to bypass Antivirus software, if hooks have been set you can monitor it and prevent certain actions. If you set hooks from usermode, then it can bypass this (more sophisticated malware by people who really know what they are doing). If you hook the Interrupt Descriptor Table (IDT) (kernel-mode), well, good luck malware! :)

Hooking and callbacks from kernel-mode is how HIPS works...

This post was more for more advanced members like @jamescv7 and @Klipsh but of course anyone feel free to read it.
 
S

sinu

Thread author
Hooking. I love hooking. I use hooking techniques on a daily basis, I was hooking just before I started writing this. (x64 ;) ) :D
From kernel-mode, callbacks are also important.

Want to block drivers from loading? Hook functions like ZwLoadDriver, ZwSetSystemInformation. There are ways that malware can get a driver loaded without loading it directly itself from those functions, though (e.g. via registry).
Want to monitor process creation and inject a DLL as a process is started? Hook functions like CreateProcessInternalW.
Want to monitor process creation and termination from Kernel-Mode? Setup a callback to PsSetCreateProcessNotifyRoutineEx or hook functions in SSDT/IDT,...
Want to protect Antivirus software (or if the AV wants too)? From kernel-mode, setup a callback to ObRegisterCallback.

There is so much you can do with hooking. It's why I love it, it creates new possibilities for detecting and blocking malicious software in real-time (zero-day prevention). Just ruling things out well can be tricky, and if you do it wrong you can cause issues (user-mode hooking can result in the process crashing if done incorrectly, kernel-mode issues results in a BSOD). ;)

You can use hooking to make a firewall (or use a low level driver to sniff the network which would be better but more advanced) as well.


It won't matter about the signatures detecting it or not. Once the malware is executed, unless it is using a vulnerability to bypass Antivirus software, if hooks have been set you can monitor it and prevent certain actions. If you set hooks from usermode, then it can bypass this (more sophisticated malware by people who really know what they are doing). If you hook the Interrupt Descriptor Table (IDT) (kernel-mode), well, good luck malware! :)

Hooking and callbacks from kernel-mode is how HIPS works...

This post was more for more advanced members like @jamescv7 and @Klipsh but of course anyone feel free to read it.
that's very informative
 
L

LabZero

Thread author
Thanks @kram7750, I try to simplify what is a hook.

A hook is used to "snap" Windows messages or any other application. With the global hook can catch such as all the pressed keys, in any application, when the user moves a any window when an application starts, and any other message generated from the operating system to/from any application.

The antivirus use a global hook, as well as many malware (for obvious reasons): thanks to hooking, hidden rootkits and keyloggers steal informations. ...

There are several ways to create a hook, one of the most used is the dll injection, i.e. the insertion of code we want to run in a dll created ad hoc.

For example the GetAsyncKeyState function is not used to log what is typed from the keyboard, you have to set a hook.

The class (which can also be static) allows you to record a Hook or to delete it.
When registered, SetWindowsHookEx is invoked and passed a delegate that will serve the function of Windows to invoke LowLevelKeyboardHandler (callback), which will receive the message (WM_KEYUP or WM_KEYDOWN) and print on the console one of two messages (button pressed or released).

EH of course is the method that keylogger use LOL:D

There are more ways to make undetected a code like this. One such example is not to use the Windows API but fortunately is not at all easy ...
 
Last edited by a moderator:
D

Deleted member 21043

Thread author
Thanks @kram7750, I try to simplify what is a hook.

A hook is used to "snap" Windows messages or any other application. With the global hook can catch such as all the pressed keys, in any application, when the user moves a any window when an application starts, and any other message generated from the operating system to/from any application.

The antivirus use a global hook, as well as many malware (for obvious reasons): thanks to hooking, hidden rootkits and keyloggers steal informations. ...

There are several ways to create a hook, one of the most used is the dll injection, i.e. the insertion of code we want to run in a dll created ad hoc.

For example the GetAsyncKeyState function is not used to log what is typed from the keyboard, you have to set a hook.

The class (which can also be static) allows you to record a Hook or to delete it.
When registered, SetWindowsHookEx is invoked and passed a delegate that will serve the function of Windows to invoke LowLevelKeyboardHandler (callback), which will receive the message (WM_KEYUP or WM_KEYDOWN) and print on the console one of two messages (button pressed or released).

EH of course is the method that keylogger use LOL:D

There are more ways to make undetected a code like this. One such example is not to use the Windows API but fortunately is not at all easy ...
Well there are different types of hooks. The hook you are mentioning in the above post is a bit different to how Antvirus products work; e.g. using SetWindowsHookEx to monitor the keyboard keystrokes is a different type of hook to how Antivirus software works.

If an Antivirus is hooking functions from user-mode, it will work via IAT (Import Address Table) hooking. A better way for doing this is via what you can call a "trampoline hook". However, that's more advanced. Personally, I prefer trampoline hooks from user-mode for IAT hooking. You still place a JMP instruction for example, but it can get very advanced.

However, I would say for x86 processes, and even better method for hooking would be to just hook a deep function called KiFastSystemCall. I'm aware that maybe 100 out of thousands of software developers would actually know about this function; unless you are very advanced in security or malware programming/cracking, I doubt you'd ever learn about this function. A friend of mine, @Cowpipe, knows other malware analysts who he checked with, they did not know about this function. @Cowpipe only knows about it from his old cracking days (he turned onto the good side).

You can hook a function like KiFastSystemCall via a simple method such as placing a JMP instruction. However, it involves other things related to memory (changes). It's not something which a new person to hooking can do at least, it takes time to learn. I've been doing hooking for awhile (after I studied other things), I'm still not a master... Although I'd like to be, sooner or later I should fully master it, haha. (then I'll focus on mastering hooking from kernel-mode drivers, getting better everyday).

If you hook a function like KiFastSystemCall, you won't even require to hook every function you need too. For example, if you had a list of functions in the Native or Windows API you wanted to hook, for example:

- ZwTerminateProcess
- ZwSuspendProcess
- ZwOpenProcess
- ZwCreateFile
- ZwCreateKey
- ZwOpenKey
- ZwAllocateVirtualMemory

And you hooked KiFastSystemCall, then you can determine if those functions were being called via the System ID. Each function in the Native/Windows API has something called a System ID (system identifier), and it is used to differentiate between which function was being called. For example, if we hooked a function locally (or via DLL/Code injection), a very simple IAT hook which can be done in just a few lines of code with a bit of typecasting, in our callback we would move the system ID value into the EAX register. That same system ID value we move into the EAX register would be used in the KiFastSystemCall hook.

So we can check which function was being called by that, and then we can progress to more advanced things... Such as comparing the parameters and then returning the correct values. (ZwLoadDriver system call is 01Fh, memorized them haha).

If we wanted to monitor the use of ZwTerminateProcess via a KiFastSystemCall hook to protect a specific process (well Antivirus software can do this, but so can a rootkit (malware type)), we would start off by hooking KiFastSystemCall, and then we would check the system ID. The system ID for ZwTerminateProcess is e.g. 7002Bh. Then if the system ID is the same as that from the KiFastSystemCall hook, we can then start to check the parameters (comparison). If it's trying to terminate notepad, then the HANDLE parameter (_In_ HANDLE ProcessHandle) would be for notepad.exe. If so, we can return STATUS_ACCESS_DENIED.

From User-Mode, by default, you'll get an error if you try to: return STATUS_ACCESS_DENIED. The reason for this is because we are not in kernel-mode where this is defined by default. The NTSTATUS return code for this is 0xC0000022 (STATUS_ACCESS_DENIED), so we would: return 0xC0000022. This will generate the Access Denied error. Please bear in mind that you cannot do this for every function, only if the return value for this is supported and should be returned. For example, a WINAPI function (not Native API) like SetWinEventHook, you would return the integer 0 to represent that it's failed. If you wanted to block this function from successfully completing, in your hook, you would just: return 0. This means that since you had your callback function executed instead of the what was meant to happen (e.g. IAT hook, you place a JMP instruction to your memory address so your callback function code will be executed instead), if you just return 0, it will tell the process which called it that it's failed to complete the call.

Code:
        if (!SetWinEventHook(...))
        {

        }

If we returned 0, then the code inside of those curly braces will be executed. Because we are checking if the function failed, and then execute the code beneath it wrapped in the curly braces. Since we return 0, it tells the process that the operation failed to successfully complete.

Back onto the KiFastSystemCall topic, I will explain a bit how it works - when you call a NTAPI/WinAPI function from a user-mode process (well pretty much everything evolves around a function call (when you terminate a process, create a file, delete a file, create a registry key, connect to the internet, open a process, write to a file), and then of course as we know, the CPU executes instructions in the memory address it's Instruction Pointer is at), the function ends up executing in kernel-mode (completing). Basically what happens in short is you call the function, and then in the end, it's received by KiFastSystemCall (which is why hooking this on x86 processes gives us the power to filter out which API functions a user-mode process can complete or what should be denied). Once KiFastSystemCall receives this API call request, it will attempt to move this onto kernel-mode via the use of a function called SYSENTER. Therefore, if we set IAT hooks in user-mode or filter out certain API requests from KiFastSystemCall, we can prevent the function executing from kernel-mode in the first place.

To create a hook (hook a NTAPI function for example via IAT hooking techniques), you'll need to get the target address in which you want to hook (the address of the function in the Native API, let's say ZwOpenProcess). Then you'll need to unprotect the memory, 10 bytes is probably okay, via the WINAPI function VirtualProtect (takes in a few parameters for the target address, bytes to unprotect, the new protection setting and where to store the old protection setting). After you've unprotected the memory, you can start writing to the memory to even overwrite the instruction if you'd like. You can write your instruction, feel free! So for a trampoline hook (IAT), you overwrite a few bytes of the function. Anyway, stepping away from that, you can use simple hooking methods to start with, such as using typecasting to convert between data types to write the JMP instruction to the target address to your own memory address (which contains the the callback function).

As an example:

Code:
void KlipshTheMaster(LPVOID targetAddr)
{
    DWORD oldProt;
    VirtualProtect(targetAddr, 10, PAGE_EXECUTE_READWRITE, &oldProt);
    *(BYTE*)(targetAddr) = 0xE9;
    // now we do the rest to place the address to our callback, we placed JMP instruction above already
    VirtualProtect(targetAddr, 10, oldProt, &oldProt);
}

The above code, the first line in the function will create a variable (of DWORD) to store the protection settings. In the Windows API library (<windows.h>), the VirtualProtect protection settings are already defined for us. PAGE_EXECUTE_READWRITE represents 0x40 (DWORD). We can use 0x40 instead of PAGE_EXECUTE_READWRITE if we'd like.

The line:
Code:
*(BYTE*)(targetAddr) = 0xE9;
uses typecasting to BYTE to write the 0xE9 JMP instruction (byte). The reason we have the asteriks before the (BYTE) and after BYTE before the end paranthesis for (BYTE) is because it represents we are working with memory. So without the asteriks, we wouldn't be writing to memory. But since we have the asteriks there, it means that it will write to memory.

The last line in that function
Code:
VirtualProtect(targetAddr, 10, oldProt, &oldProt);
will set the protection settings back to how they originally were... It was stored in the DWORD variable oldProt (&oldProt means it will store the old protection settings to that DWORD variable), therefore we use that instead of PAGE_EXECUTE_READWRITE this time to re-protect the memory (since the old settings was protected memory).

0x40 (PAGE_EXECUTE_READWRITE) allows us to read and write to the memory.

However, there is one line missing from that code. That's the line to write to the memory to place the address to JMP too (we place it + 1 from the original address to make sure it's after the JMP instruction has been placed).

As a better alternate explanation to hooking (for me at least): hooking (IAT especially, in the sense where you write to the memory of the process) is essentially changing the memory to how you want it. What I mean is, we change instructions/write to the memory addresses to place in our instructions, therefore we are 'changing the memory'.

For trampoline hooking, we have a bit more than a few lines. If we are using DLL injection, we need to unprotect the memory as usual via VirtualProtect(...). Then, we need to allocate memory in the address space of the target process we injected into. We can allocate memory in the process we have already injected into via VirtualAlloc. If we want to allocate memory in another process, we can use VirtualAllocEx as MSDN mentions, however since we are injecting our DLL, our code is now executing in the address space of that process already, so we use VirtualAlloc. After this, we can copy memory to destination via a function called memcpy(...). After this, we can start doing things such as placing the JMP instruction to the addresses we want to JMP too (we'll need to work out the offset for this), when were done, reprotect the memory up.

I've mentioned hooking for x86 processes in these examples. However, for x64, the JMP instruction is 0x48. On x86, it is 0xE9. For hooking x86 processes via DLL, we use x86 hooking. For a x64 process, x64 hooking.

DLL injection methods (not all work on newer OS versions of Windows):
- CreateRemoteThread (no longer supported, Windows 7 had issues with it, didn't work for some people)
- SetWindowsHookEx (this can be used for DLL injection, not just setting hooks on the keyboard)
- ZwCreateThread (I like this one, I always prefer the Native API)

Those are 3 methods.

The popular Antivirus vendors who have experienced staff usually resort to kernel-mode drivers. For example, they have ObRegisterCallback for process protection, they can hook the SSDT on x86 (I know vendors do use this nowadays probably, I know vendors like AVG used too on x86 systems, not sure about now though - I think Kaspersky also did it, cannot remember what the other vendor was, I think it was Kaspersky. I remember checking the SSDT and seeing AVG doing it for sure, they used to hook functions in the SSDT like ZwTerminateProcess for sure). SSDT stands for System Service Descriptor Table, it holds the addresses to the kernel-mode functions (Zw* functions). In kernel-mode we use Zw* functions. In user-mode, we use Nt* functions. In user-mode, Zw* and Nt* are the same.

Avast uses ObRegisterCallback as an example, to protect their process. On x64, if you go to terminate the process, it should generate Access Denied error. They used to protect their process from ring3 I believe. Some AVs still do.

Hooking is incredibly powerful (and kernel-mode callbacks) for features like HIPS/Behaviour Blocker, dynamic analysis... Any zero-day prevention system. It's essential, and it's very easy to get started and learn to become a master eventually. All you need to start is the very basics of C++ and Assembly. Then you get better as you learn about Windows API functions, Native API functions, learn more hooking techniques, etc. You can make real-time protection either via a driver, or by hooking functions like ZwCreateFile, ZwWriteFile. You can even make a user-mode firewall via user-mode hooking. Although, a driver is better due to the control for a firewall to sniff the network, etc.

Bear in mind, there's also code injection... Accomplished via ZwWriteVirtualMemory as an example. (write to the process memory, although that function is for the Native API). (Nt* functions). I said a Zw* function, but on user-mode level, Nt* and Zw* are the same, so no issue.

Keyloggers (.NET for example) especially use functions like SetWindowsHookEx to set a hook and then invoke to a function to use a function like GetAsyncKeyState. They use the pair for monitoring the keystrokes on the system, SetWindowsHookEx can also be used to steal the cursor information (when you move the cursor, it can track). However, more advanced keyloggers in lower level languages like C, will install keyboard drivers to perform theft of the keystrokes. And if there is a user-mode process for it or the driver, rootkit activity can come into place to help hide the process/driver or the files on disk from the user/antivirus software.

Very detailed post I think this is, been writing for some time... Started writing earlier when I saw your post, maybe it helped educate you and many others. In the future, I'll probably discuss x64 hooking instead of x86 like in this post and kernel-mode hooking.

@Klipsh I'll give your post a like - attempted to help, included informaton regarding keylogger activity (SetWindowsHookEx) and tried to make the explanation more basic. :)

Cheers. ;)
 
Last edited by a moderator:

Tony Cole

Level 27
Verified
May 11, 2014
1,639
@kram7750 extremely advanced post/info, reminds me of my old essay days. Kaspersky only produces software for x32 OS, therefore would it be easier for malware to kill Kaspersky's processes compared with ESET that offer a dedicated x 64 installer? The tech support answered with the following:

Thank you for your patience.

Our experts have contacted us and have provided us with the following:

Kaspersky does indeed have HIPS restrictions for x64 operating systems. These restrictions are mentioned in the product’s user guide, which is available for all our customers and can be found here:http://docs.kaspersky-labs.com/english/kis2015_userguide_en.pdf (pages 69-70).

But apart from HIPS, there are other components which provide security in this case - File-Anti-Virus, Heuristics, System Watcher, the Kaspersky Firewall.

With regards to FinFisher, we do indeed detect FinFisher despite the company developing this program legally.

Please do not hesitate to contact us if you have any further questions.
 

jamescv7

Level 85
Verified
Honorary Member
Mar 15, 2011
13,070
Even though viruses/malware provide full or partial access for the hook algorithm implemented, whereas security products has no problem on the same concept like HIPS as most are not passive mode in order to detect changes.

So far it just simply such counter attack measures, a vice versa when one defeats.

But as long as possible, virtualization is currently the so far the strong component where some incidents are perhaps theory until proven.
 
D

Deleted member 21043

Thread author
therefore would it be easier for malware to kill Kaspersky's processes compared with ESET that offer a dedicated x 64 installer?
It depends how the vendor made the self defence.

If they did something on x86 like SSDT hooking, then you could start aiming for unhooking the functions they hooked - scan the SSDT, fix the issues when a hook is detected.

If they did something like use ObRegisterCallback to protect their process (on x64 support also), you could try to remove the callback. If that succeeds, continue to terminate the process as you wish since the protection would be gone.

What I would suggest is making protection from both ring3 and ring0. (ring3 being User-Mode, ring0 being Kernel-Mode).
From user-mode, you can use code injection into processes to hook functions (harder for them to detect) or DLL injection but hook functions to prevent them from unloading the DLL from the process address space. (and hide your DLL if they try to scan the modules loaded in it's own process so it is less aware of the AV products prescence injected into the process). Then set hooks to functions you like, block them via the callback to prevent the NTAPI/WINAPI function request ever reaching kernel-mode itself.

Then as a safety precaution, setup protection from ring0. For example, ObRegisterCallback. Hooking the Interrupt Descriptor Table is also a deadly approach in my opinion. If the user-mode process bypasses the ring3 hooks and protection, it is then left with the ring0 protection to deal with. Makes everything a lot trickier. Especially if it's malware and the developer had no idea on developing kernel-mode drivers (or how to do much, especially target Antivirus software), then they are stuck. Even then, the AV can block the process from loading a driver via hooking functions like: ZwLoadDriver, ZwSetSystemInformation, and patching up rootkit-alike methods to get itself into kernel-mode via e.g. changing the path of an installed driver somewhere to have it's own driver loaded (e.g. va the SC Manager - System service manager).

Without even checking, I can tell you know what Kaspersky use kernel-mode drivers for self protection for a fact, and you wouldn't be able to terminate it, suspend it, inject into it, from user-mode.

Cheers. ;)
 

About us

  • MalwareTips is a community-driven platform providing the latest information and resources on malware and cyber threats. Our team of experienced professionals and passionate volunteers work to keep the internet safe and secure. We provide accurate, up-to-date information and strive to build a strong and supportive community dedicated to cybersecurity.

User Menu

Follow us

Follow us on Facebook or Twitter to know first about the latest cybersecurity incidents and malware threats.

Top