Windows efterligning fra C #

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan kan et C # -program, der kører som LocalSystem, midlertidigt annoncere en anden brugerens login-id? Groft sagt har jeg en Windows-tjeneste, som jeg gerne vil køre som LocalSystem, men til tider imiterer brugeren XYZ (ved tilslutning til en db ved hjælp af Windows integreret sikkerhed).


Vigtigst af alt: Er der en måde at gøre dette på uden at kende den anden brugers adgangskode?


Bemærk: Hvis en adgangskode er obligatorisk, er der en anbefalet strategi til sikker opbevaring af et kodeord (c # og/eller vbscript).

Bedste reference


Det er muligt, selv om det kræver, at du laver en masse kode. Se NtCreateToken og CreateToken. Du har brug for SeCreateTokenPrivilege, selvom det ikke er et problem, da du kører under NT AUTORITY \ SYSTEM. Du kan derefter bruge den oprettede token at efterligne i en tråd. [9] [10]

Andre referencer 1


Kort svar: Du kan ikke uden brugerens adgangskode eller brugeren kalder din tjeneste via COM.


For at efterligne en anden bruger i din proces skal du ringe ImpersonateLoggedOnUser. ImpersonateLoggedOnUser kræver et token håndtag. Der er flere måder, du kan få til token håndtag: [11]



  • ved at logge ind som bruger med LogonUser. Dette kræver dog, at du kender brugeradgangskoden.

  • ved at duplikere et eksisterende token med CreateRestrictedToken, DuplicateToken eller DuplicateTokenEx.

  • ved at åbne token fra en anden proces eller tråd, der allerede er logget på som brugeren, med OpenProcessToken eller OpenThreadToken


Andre referencer 2


For den adgangskode lagring del, kan du måske kigge på dette spørgsmål, der blev spurgt for nylig. [12] [13] [14] [15] [16] [17] [[


Dette var mit svar:


Du kan/burde bruge DPAPI, databeskyttelses-API'et, der giver opbevaringskryptering.

Det er der kun for denne type problem. [19] [20]


Kryptering af lageret er baseret på enten:



  • brugerkontoen, så kun den indloggede bruger kan få adgang til dataene. Dette gør dataoverførslen til en anden pc med nøjagtig samme brugeroplysninger.

  • maskinen, så dataene kun er tilgængelige på den pågældende maskineopsætning og ikke kan overføres til en anden pc.



Der er et dnrTV show med Karl Franklin, der viser præcis, hvad der er nødvendigt for at implementere dette og andre krypteringsfunktioner.

Kildekoden fra showet er også tilgængelig på siden. [21]


Der er selvfølgelig mange andre artikler om dette emne. [22]