Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
TamperingSyscalls — C++-Bibliothek, die Windows-Syscall-Argumente mithilfe von Hardware-Breakpoints und Exception-Handlern abruft und fälscht, um die EDR-Telemetrie zu untergraben. | Kitploit
Tools/GitHubGitHub/rad9800/tamperingsyscalls
IDS/IPS-UmgehungPost-ExploitationRed TeamingPayload-Entwicklung
GitHubrad9800/tamperingsyscalls

TamperingSyscalls

C++-Bibliothek, die Windows-Syscall-Argumente mithilfe von Hardware-Breakpoints und Exception-Handlern abruft und fälscht, um die EDR-Telemetrie zu untergraben.

Repository anzeigen
50876vor 4 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

TamperingSyscalls

TamperingSyscalls ist ein zweiteiliges neuartiges Projekt, bestehend aus Argument-Spoofing und Syscall-Abruf, die beide EH missbrauchen, um EDRs zu unterlaufen. Dieses Projekt vereint beide Projekte, um eine alternative Lösung zu direkten Syscalls bereitzustellen.

Tampering mit Syscalls.

  1. Richten Sie einen globalen EH ein, der später verwendet wird.
root@kitploit:~
SetUnhandledExceptionFilter( OneShotHardwareBreakpointHandler );
  1. Setzen Sie einen Hardware-Breakpoint auf die Adresse einer Syscall-Instruktion, welche die Bytes 0f05 enthält, im Dr0-Register. Wir können die Adresse des Syscall-Stubs mit dieser schnellen Byte-Suche im Speicher lokalisieren.
root@kitploit:~
BYTE stub[] = { 0x0F, 0x05 };
for( unsigned int i = 0; i < (unsigned int)25; i++ )
{
	if( memcmp( (LPVOID)((DWORD_PTR)function + i), stub, 2 ) == 0 ) {
		return (LPVOID)((DWORD_PTR)function + i);
	}
}
  1. Wir können dann einen Aufruf an diese Funktion tätigen, wobei wir NULL für die <=4 Argumente übergeben (bei denen es sich tendenziell um die wichtigeren Argumente handelt, die Informationen wie Prozess-Handles usw. enthalten). Wir setzen den EnumState außerdem auf die entsprechende Enum für diese Funktion (damit wir die Argumente später korrigieren können).
  2. Während der EDR volle Introspektion in unsere Argumente hat, kann er nicht sicher die Entscheidung treffen, dass wir eine bösartige Aktion ausführen, da wir NULL als die ersten <=4 Argumente übergeben haben.
  3. Der EDR wird dann die Syscall-Nummer (SSN) zurückgeben und sie in RAX speichern. Wenn Sie nur daran interessiert sind, Syscalls abzurufen, schauen Sie sich den gestrippten Branch dieses Repositorys an.
  4. Das Programm fließt dann in die Syscall-Instruktion { 0x0F, 0x05 }, welche den Breakpoint trifft, den wir zuvor gesetzt haben. Dies wird dann eine SINGLE_STEP-Exception auslösen, die von dem Exception-Handler behandelt wird, den wir in Schritt 1 eingerichtet haben.
root@kitploit:~
if( ExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_SINGLE_STEP )
  1. Dieser Exception-Handler deaktiviert den Hardware-Breakpoint für Dr0 nur, wenn Dr0 und RIP übereinstimmen, indem er den Wert, auf den das Dr0-Register zeigt, auf 0 setzt (was die aktuelle RIP sein sollte).
root@kitploit:~
if( ExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_SINGLE_STEP )
{
	if( ExceptionInfo->ContextRecord->Dr7 & 1 ) {
		if( ExceptionInfo->ContextRecord->Rip == ExceptionInfo->ContextRecord->Dr0 ) {
			ExceptionInfo->ContextRecord->Dr0 = 0;
  1. Wir werden dann die restlichen Register korrigieren, die wir zuvor auf NULL gesetzt hatten. Der Grund, warum es 4 sind, ist, dass die x64-Aufrufkonvention vorschreibt, dass wir RCX, RDX, R8, R9 für die ersten 4 Argumente verwenden und der Rest auf dem Stack eingerichtet wird. Es ist möglich, die >4 Parameter manuell auf dem Stack zu setzen, aber dies geht über den Rahmen dieses Projekts hinaus, da es Inline-Assembly erfordern würde. Der Grund, warum es R10 und nicht RCX ist, liegt darin, dass am Anfang jedes Syscall-Stubs mov r10, rcx steht, da das RCX-Register in den nächsten Instruktionen zerstört wird.
root@kitploit:~
case NTMAPVIEWOFSECTION_ENUM:
	ExceptionInfo->ContextRecord->R10 =
		(DWORD_PTR)((NtMapViewOfSectionArgs*)(StateArray[EnumState].arguments))->SectionHandle;

	ExceptionInfo->ContextRecord->Rdx =
		(DWORD_PTR)((NtMapViewOfSectionArgs*)(StateArray[EnumState].arguments))->ProcessHandle;

	ExceptionInfo->ContextRecord->R8 =
		(DWORD_PTR)((NtMapViewOfSectionArgs*)(StateArray[EnumState].arguments))->BaseAddress;

	ExceptionInfo->ContextRecord->R9 =
		(DWORD_PTR)((NtMapViewOfSectionArgs*)(StateArray[EnumState].arguments))->ZeroBits;

Wir können in diesem Beispiel sehen, dass wir die Argumente für NtMapViewOfSection korrigieren.

Howto

Wenn Sie damit beginnen möchten, EDR-Telemetrie zu fälschen, ist es möglich, die p[FunctionName]-Definitionen zu modifizieren, die derzeit auf NULL gesetzt sind.

Generierung

Um die benötigten Funktionen zu generieren, verwenden Sie gen.py. Dies unterstützt entweder:

  • Kommagetrennte Funktionen
root@kitploit:~
python gen.py NtOpenSection,NtMapViewOfSection,NtUnmapViewOfSection

Es werden 3 Dateien erzeugt: TamperingSyscalls.cpp, TamperingSyscalls.h und main.cpp. Sie können #include "TamperingSyscalls.h" in Ihr Projekt einfügen. Wir können die Funktionen aufrufen, indem wir den Funktionsnamen an p anhängen, zum Beispiel pNtOpenSection(...);

Einschränkungen

Wir können keinen Breakpoint auf NtSetThreadContext oder seine Varianten setzen, da dies zum Setzen der Debug-Register verwendet wird. Es gibt eine kurze Zeitspanne, in der die Debug-Register gesetzt sind, aber diese ist sehr klein und ich glaube nicht, dass wir erkannt werden, weil wir ein offenes Dr0 halten.

Ich habe einen kleinen Blogbeitrag veröffentlicht, der diese Techniken behandelt.

TamperingSyscall's Overview Blog Post

TamperingSyscall's Fake Intropspection Blog Post

Tool herunterladen