Documente Academic
Documente Profesional
Documente Cultură
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