c ++ - Sikret virtuel disk på Windows med VC ++

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en DLL af en software, som jeg vil bruge. I DLL API er der en funktion 'LoadConfigFile (char * fil)', der har brug for et filnavn med aboslute-path til det (fx 'C: \ TestFolder \ ConfigFile.cfg'). Funktionen lægger derefter selve config-filen.


Af sikkerhedsmæssige grunde vil jeg kun tillade adgangen til filen (indhold) til det program, hvor DLL'en bruges.


Så jeg spekulerede på, hvordan dette kunne gøres og søgte på internettet for løsninger. Følgende muligheder og spørgsmål kom til at tænke på, mens man ledte efter løsninger:



  • Jeg kunne kryptere filen. -> Kender nogen et gratis bibliotek til dette?
    -> Er det så muligt at give funktionen filen som astring, og funktionen kan læse filen?

  • Måske er der mulighed for at bruge et virtuelt filsystem. Hvad jeg mener er at indlæse filen fra en krypteret kilde, dekryptere den og holde den i RAM på en virtuel disk eller mappe. giv derefter linket som en streng til DLL-funktionen -> Er det muligt? -> Kender nogen et gratis bibliotek til at gøre det?

  • Jeg læser også noget om 'i hukommelsesdatabaser'. -> Kan dette være et svar på mit problem?



Mit udviklingsmiljø er VC ++ 2010 og OS er Windows XP.


Jeg håber, at nogen kunne hjælpe mig med dette spørgsmål.

Bedste reference


Alt for kompleks. Den nemmeste løsning (siden du er processen i kontrol) er:



  1. Opret en midlertidig fil, og åbn den udelukkende (ikke engang dele læs). Pass FILE\_ATTRIBUTE\_TEMPORARY og FILE\_FLAG\_DELETE\_ON\_CLOSE, da det ikke er vedholdende

  2. Dekrypter config-filen til denne midlertidige fil. Hold håndtaget åbent.

  3. Send det midlertidige filnavn til DLL'en. Det er i din proces, så det påvirkes ikke af den eksklusive lås.

  4. Når DLL'en er færdig, skal du nullstille den midlertidige fil.

  5. Luk dit håndtag. Dette vil slette filen.



Da den midlertidige fil er låst, når den indeholder fortroligt indhold, kan ingen anden proces få adgang til det. Og da det er markeret som midlertidigt, skal du slette det ved at lukke Windows, og det vil ikke ødelægge Windows på den fysiske disk.


Dette er selvfølgelig ikke perfekt sikkerhed. Enhver der kan læse din proceshukommelse (jeg har SeDebugPrivilege) kan få adgang til disse oplysninger, men det er trivielt indlysende. Bare sæt et fejlfindingsbrudpunkt på LoadConfigFile.

Andre referencer 1


Hvor følsomme er dine data? Og hvad er målet for din ansøgning?


I mange tilfælde kan en simpel home-brew-krypteringsmekanisme være tilstrækkelig til at skræmme den uformelle læser.


Hvis dine data kræver grundig kryptering, skal du kigge på Windows-krypteringsfunktionerne (f.eks. CryptProtectData, se http://msdn.microsoft.com/en-us/library/aa380261(VS.85).aspx).[5]


I nogle tilfælde ønsker du ikke at kryptere dine data, men du vil bare sikre dig, at ingen ændrer den. I så fald skal du tilføje en hash-værdi (SHA-2, se http://en.wikipedia.org/wiki/SHA-2) til din fil.

Andre referencer 2


Det eneste jeg kan tænke på - og jeg ikke har kildekoden for den ved hånden - er hash og dekrypterer. [6]


Krypter din fil med noget, ved hjælp af en nøgle stammer fra en hash af din kode. Gem ikke nøglen nogen steder. Din kode er nøglen. Endnu bedre, hash nogle hukommelsestrukturer, som kun et vellykket løb af dit program kan skabe.


Chancerne er, at det vil bryde, hver gang du opdaterer din kode. Du skal overveje 32 bit og 64 bit arkitekturer. Måske kan pointer alingment komme i spil. Sørg for, at dine sikkerhedskrav er værd at gøre, og vær ikke opmærksom på vedligeholdelsesindsatsen.


Normalt vil CryptProtectData gøre, og give parameteren pOptionalEntropy for ekstra sikkerhed (accepter derefter @Patrick svar, ikke min).