Sunteți pe pagina 1din 23

7

 In momentul in care este lansat in executie un program sistemul de operare


creaza un proces.
 Procesul este, deci, o instanta a unui program sau mai bine zis un program in
executie.
 Sistemele de operare multitaskig pot rula simultan mai multe procese.
 Un proces, in general, are urmatoarele componente:
 O imagine a codului executabil asociat unui program
 Memoria asociata procesului, ce contine cod executabil asociat procesului si alte date
specifice acestuia.
 Descriptori de resurse ai sistemului de operare. ex: descriptori de fisier (terminologie
Unix) sau handles (terminologie Windows).
 Atribute de securitate, ca de ex posesorul (owner) procesului sau setul de permisii al
procesului.
 Starea procesorului (contextul) format din datele din registrii etc. Starea procesului este
in general stocata in registrii cand procesul se executa si in memoria externa
procesorului cand procesul nu se executa.
 Un application domain este un container logic
care permite ca mai multe assembly-uri sa fie
rulate in acelasi proces.
 Application Domain-urile ofera aceleasi facilitati
ca si procesele (spatii de memorie separate si
acces la resurse)
 Application Domain-urile sunt mai eficiente
decat procesele, permitand rularea de assembly-
uri fara overhead-ul necesar lansarii de procese.
 Cel mai bun exemplu de app domain este procesul asp.net din
IIS5 (internet information services 5).
 Atunci cand 10 persoane intra pe site se creeaza 10 application
domain-uri in interiorul acelui proces.
 De fapt asp.net lanseaza in executie 10 instante ale assembly-
ului cu care vor lucra utilizatorii.
 Deoarece fiecare instanta are spatiu de memorie propriu,
fiecare instanta va putea stoca o variabila password fara a exista
posibilitatea accesarii acestei variable din alta instanta a
assembly-ului.
 Acelasi rezultat poate fi obtinut si prin lansarea in executie a 10
procese separate, dar comutarea intre procese ar necesita timp
suplimentar de procesor, scazand astfel performanta.
 Izolarea intre assembly-uri creste securitatea aplicatiei
 Fiabilitate: Daca rulati un assembly intr-un app domain si
acel assembly devine instabil, puteti opri app domain-ul
fara efecte adverse asupra procesului. Aceasta tehnica
este importanta atunci cand dorim ca un proces sa ruleze
o perioada lunga de timp.
 Eficienta: Daca un assembly este incarcat intr-un proces
(in appdomain-ul principal), acel assembly nu poate fi
inchis fara a inchide procesul. Daca incarcam in un
appdomain putem inchide fiecare assembly in parte.
Folositi aceasta tehnica cand lucrati cu DLL-uri.
 Vom folosii una din metodele
AppDomain.CreateDomain.

AppDomain d =
AppDomain.CreateDomain(“DomeniulMeu”);
Console.WriteLine(“Domeniul
vechi:”+AppDomain.CurrentDomain.FriendlyName);
Console.WriteLine(“Domeniul nou:”+d.FriendlyName);
AppDomain d =
AppDomain.CreateDomain(“DomeniulMeu”);

d.ExecuteAssembly(“Assembly.exe”);
d.ExecuteAssemblyByName(“Assembly”);
AppDomain d =
AppDomain.CreateDomain(“DomeniulMeu”);

AppDomain.Unload(d);
 Sa consideram urmatorul scenariu: procesul vostru foloseste un
dll produs de altcineva. Acel dll contine o vulnerabilitate de
securitate prin care un program de spyware este lansat in
executie (sa presupunem in momentul incarcarii dll-ului)
 Acum sa presupunem ca am folosit AppDomain pentru
restrictionarea actiunilor pe care le poate face acel DLL: daca nu
am dat drept de acces la disk la acel dll acesta nu va putea lansa
in executie spyware-ul.
 Acesta este un exemplu de Defence-in-depth.
 Defence-in-depth este foarte important cand rulati cod extern,
deoarece codul extern poate contine vulnerabilitati pe care ori
nu stim de existenta lor ori nu le putem repara.
 Atunci cand creati un AppDomain controlati si
evidence-ul.
 Evidence-ul este informatia care determina in ce
grup de cod se afla assembly-ul.
 Aceste grup-uri de cod determina privilegiile
assembly-ului.
 Tipuri obisnuite de evidence sunt directorul sau
site-ul web de la care ruleaza aplicatia
 Prin schimbarea evidence-ului trimis unui AppDomain puteti
astfel modifica privilegiile pe care acesta le are.
 Evidence-ul este reprezentat de obiectul Evidence.
 In constructor obiectul Evidence primeste 2 parametrii:
 un array de obiecte care reprezinta evidence-ul pentru host-ul apelant
 un array de obiecte ce reprezinta evident-ul pt array-ul apelant
 Oricare din cei doi parametrii poate fi null
 In general veti folosii host evidence (atunci cand nu ati creat un
obiect de tip assembly evidence)
 Array-urile sunt de tip obiect deoarece evidence-ul poate fi
aproape de orice tip (string, intreg, o clasa a voastra, etc.)
 Cea mai simpla modalitate de a crea si evidence este de
a folosii obiectul System.Security.Policy.Zone si
enumerarea System.Secyrity.SecurityZone:
object[] hostEvidence = { new
Zone(SecurityZone.Internet)};
Evidence internetEvidence = new Evident(hostEvidence,
null);
AppDomain myDomain =
AppDomain.CreateDomain(“MyDomain”);
myDomain.ExecuteAssembly(“SecondAssembly.exe”,
internetEvidence);
 Putem schimba diferita proprietati ale clasei AppDomain direct la
creare folosind clasa AppDomainSetup.
 Cea mai importanta proprietate este ApplicationBase (prin care se
citeste sau seteaza directorul radacina a aplicatiei)
 Modificarile facut in AppDomainSetup nu afecteaza nici un
AppDomain creat deja.
Ex:
AppDomainSetup ads = new AppDomainSetup();
ads.ApplicationBase = “file://” +
System.Environment.CurrentDirectory;
ads.DissalowCodeDownload = true;

AppDomain d = AppDomain.CreateDomain(“NewDomain”,null,ads);
 Serviciile windows sunt procese ce ruleaza in
fundal, fara a avea o interfata cu utilizatorul si
fiecare in propria sesiune de utilizator.
 Seriviciile windows pornesc automat cand
porneste windows. Nu este deci nevoie de
interventia utilizatorului.
 Windows foloseste o multime de servicii printre
care: Server (partajeaza fisiere in retea) sau
Workstatsion (se conecteaza la partajari in retea)
 Seriviciile windows difera de urmatoarele
aplicatii in urmatoarele moduri:
 Aplicatia compilata trebuie instalata inainte de
utilizare. Nu puteti face debug si nu puteti lansa
aplicatia in executie (folosind F5 si F10/F11). Nu puteti
rula pas cu pas un serviciu.
 Metoda Main din proiectul vostru trebuie sa apeleze
comanda Run pentru serviciile din proiect. Metoda run
incarca serviciul in Service Control Manager.
 Seriviciile windows ruleaza in o alta windows station decat
cea a utilizatorului logat.
 O windows station este un obiect ce contine un clipboard,
un set de obiecte desktop si un set de atomi globali.
Deoarece serviciile windows nu contin interfara orice de
fereastra deschisa un serviciu nu va fi vizibila utilizatorului.
In mod simiar erorile nu pot fi afisate ci trebuiesc logate
undeva.
 Serviciile windows au propriul context de securitate: un
serviciu ce ruleaza in un cont system are mai multe
privilegii decat unul ce ruleaza in un cont user. Cu cat mai
multe privilegii are un serviciu cu atat creste mai mare
probabilitatea ca un atacator sa il foloseasca.
 Pas1> Creati un proiect nou folosind template-ul
Windows Service application. In proiectul nou se va crea
o clasa ce mosteneste ServiceBase, ce contine tot codul
necesar crearii si pornirii unui serviciu.
 Pas2> Scrieti metodele OnStart si OnStop si orice alte
metode aveti nevoie.
 Pas3> Adaugate installerele.
 Pas4> Dati build la proiect.
 Pas5> Instalati serviciul
 Pas6> Folositi snap-in-ul Services pentru a porni serviciul
 Dupa ce ati creat un proiect service urmati urmatorii
pasi pentru a implementa serviciul:
 Modificati proprietatea ServiceBase.ServiceName. Acest
nume este numele pe care windows il va folosii pentru a
identifica serviciul si trebuie sa fie unic.
 Adaugati cod pentru metoda OnStart.
 Adaugati cod pentru metoda OnStop.
 Puteti supraincarca metodele OnPause, OnContinue si
OnShutdown. Daca ati supraincarcat aceste metode setati
proprietatile ServiceBase.CanPauseAndContinue si
ServiceBase.CanShutdown.
 Putem folosii aplicatia InstallUtil.exe:
 InstallUtil serviciul_nostru.exe
 Pentru a dezinstala serviciul:
 InstallUtil /u serviciul_nostru.exe
 Start->Run->services.msc

S-ar putea să vă placă și