Seite 1 von 3
.
Verfasst: 05.05.2010 00:01
von NoUser
.
Re: Sandbox erkennen [Ideen gesucht]
Verfasst: 18.05.2010 20:06
von Thorium
Hm, warum ist das denn wichtig für dein Projekt?
Eine Sandbox müsste eigentlich ziemlich viele API Funktionen Hooken. Da würde ich mit einer Erkennung ansetzen. Und prüfen ob diese gehookt sind. Bringt dir aber garnichts bei ner VM.
Re: Sandbox erkennen [Ideen gesucht]
Verfasst: 18.05.2010 20:26
von NoUser
.
Re: Sandbox erkennen [Ideen gesucht]
Verfasst: 04.06.2010 00:21
von Blackskyliner
Hab grade gefunden, wie man scheinbar VBox Emulation erkennen kann, also dasses in einer VM läuft:
http://www.opensc.ws/c-c/10972-vm-detection.html
Möglicherweise kann man auch bei anderen Emulatoren über den verwendeten Treiber auf Anwesenheit einer VM prüfen.
Hoffe es hilft

Re: Sandbox erkennen [Ideen gesucht]
Verfasst: 12.06.2010 13:46
von Dark
Hallo,
eine wirklich gute Sandbox zu erkennen ist schwierig. Diese werden ihre Hooks direkt in der Service Descriptor Table (SDT) im Kernel einsetzen. Diese Hooks kannst du dir zum Beispiel mit Rootkit Unhooker anzeigen lassen. Wenn du in der Software dann auf Unhook All clicken würdest, würdest du merken das dien Virenscanner und deine Firewall ebenfalls ihre Arbeit einstellen. Es verändern also nicht nur Sandboxen den Teil des Kernels. Der Hook kann aber auch genau so in einer Änderung der DLL bestehen.
Nehmen wir mal das Beispiel OpenFile.
Eine Sandbox könnte:
- die Import Table deiner EXE für den API Befehl CreateFile abändern, so das statdessen ein anderer Befehl der Sandbox aufgerufen wird
- könnte den Befehl in der Kernel32.dll ersetzen
- könnte die Import Table von der Kernel32.dll so ersetzen das statt NTOpenFile ein anderer Befehl ausgeführt wird
- könnte die NTDLL.dll abändern
---- ab jetzt sind wir nicht mehr im usermode sondern im kernel mode ---
- könnte die SDT abändern
- könnte den aufgerufenen Interrupt Handler abändern
Also bräuchtest du auf jedenfall nen Systemtreiber um alle Möglichkeiten abzudecken. Sowas wie VMWare wäre durchaus möglich herauszufinden. Aber richtige Sandboxen wie Sandboxie kann man eigentlich nicht feststellen, wenn sie gut geschrieben sind.
mfg,
Dark
Re: Sandbox erkennen [erledigt]
Verfasst: 12.06.2010 14:02
von NoUser
.
Re: Sandbox erkennen [Ideen gesucht]
Verfasst: 12.06.2010 21:11
von Dark
Hi,
wie du selbst schon gesagt hast, ist es nahezu unmöglich einen 100% Schutz zu schreiben.
Du könntest eine kleine Hürde einbauen, in dem du, nach der Installation, einen Neustart verlangst. Du trägst dann z.b. in der Registry bei RunOnce ein Programm ein, das ausgefüht werden muss bevor dein Programm funktioniert (am besten mit einer bestimmten Parameterkombination).
Dies hört sich im ersten Moment vll. nen bischen verrückt an, aber man kann eine Sandbox leider nicht neustarten.
Aus eigener Erfahrung muss ich sagen, das einem dann meistens die Lust vergeht, jetzt die erstellten Registrie Dateien zu durchsuchen und schauen, was da noch ausgeführt werden muss etc.
Wenn es aber wirklich einer auf deine Software abgesehen hat, würde er notfalls zum Olly Debugger greifen, deine Checks rausschmeißen, die EXE neu abspeichern und dann war es eh umsonst.
Und denk dran, lieber einen mehr, der die Software nicht legal benutzt, als verärgerte Kunden bei denen der Kopierschutz meint, es wäre ne Sandbox oder VM aktiv :P
mfg,
Dark
Re: Sandbox erkennen [Ideen gesucht]
Verfasst: 13.06.2010 01:02
von Thorium
Schick mir mal nen Link wo man so ne Sandbox herbekommt. Da muss sich was erkennen lassen. ^^
Re: Sandbox erkennen [Ideen gesucht]
Verfasst: 13.06.2010 01:17
von Dark
Hi,
du kannst ja dein Glück versuchen:
http://www.sandboxie.com/
mfg,
DarkPlayer
Re: Sandbox erkennen [Ideen gesucht]
Verfasst: 13.06.2010 03:17
von Thorium
Morgen werd ich mal schauen.
Was soweit klar ist das Ntdll.dll gehookt wird und das kann man detecten. Muss nur was zuverlässiges stricken.
Hier ein kleiner Testcode der unter Sandboxie ein anderes Ergebnis zeigt als unter realen Bedingungen:
Code: Alles auswählen
EnableExplicit
Define.i Ntdll, NtCreateFileAddr
Ntdll = OpenLibrary(#PB_Any, "ntdll.dll")
NtCreateFileAddr = GetFunction(Ntdll, "NtCreateFile")
MessageRequester("", Hex(PeekQ(NtCreateFileAddr), #PB_Quad))