Biztonság .NET-ben
Krizsán Zoltán iit
Alapfogalmak
Azonosítás (authentication) – Hitelesítés – Ki az aki a kérést küldi ?
Engedélyezés (authorization) – Hozzáférés szabályozás – Milyen erőforrásokat érhet el, használhat ez a személy ?
Integritás ellenőrzés (integrity check) – Hogyan biztosítható, hogy az adatokat útközben ne manipulálhassák ?
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
2
Windows biztonság Felhasználó
hitelesítésen
– Kerberos – NTLM – Publikus kulcs Objektum
alapú hozzáférés szabályozás
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
3
+ .NET biztonság Nem
lehet kikerülni vagy lecserélni az op. rendszer vagy hálózat biztonságát Csak fokozni vagy kiterjeszteni lehet
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
4
Biztonsági modell filozófiája Segédalkalmazásokkal állítható! Ellenőrizhető: felhasználó kilétét - szerep alapú és vagy kód eredetét és vagy hívási láncot
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
5
Szerep alapú biztonság Tradicionális,
elterjedt biztonsági
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
ellenőrzés. A felhasználókat csoportokba rendezik, ezek a szerepek. A jogokat a szerepek kapják, nem a felhasználók. A .NET szál szinten kezeli a szerep alapú biztonságot. 6
Ellenőrzés helye Az
operációs rendszer a kernelben vagy modulban. A .NET alaposztály-könyvtárában, az osztályok fv.-eiben. Az alkalmazás komponenseiben, osztályiban.
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
7
Biztonságot fenyegető szereplők Jóindulatú
(ártatlan) hitelesített – óvatlan, figyelmetlen Rosszindulatú (támadó) – hitelesített felh. Adatait megszerezni, használni. – Megváltoztatni a rendszer komponenseit észrevétlenül (buffer túlcsordulás)
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
8
Biztonsági fenyegetések
Titoksértés Kód, illetéktelen személy - kényes bizalmas információ Ellenőrzés hamisítás Logok módosítása, zagyválása Azonosító megszerzése Jogosult felhasználó nevében … Jogosultság megszerzése jogosult felhasználó -> admin Szerviz elfojtás Sok felesleges, érvényes művelet -> szükséges funkciók lassulnak Mobil kód Letöltött kódok gyakran admin jog!
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
9
Megvalósítás Minden
esetben Demand() fv. Hívás. (IPermission interface, PermissionSet osztály) SecurityException kivétel dobódik, ha nincs megfelelő jogosultság.
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
10
Osztálykönyvtár eszközei System.Security.Principal
névtér Interface-ek (általánosak): Iidentity felhasználók adatai Iprincipal csoporttagság
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
11
IIdentity public interface IIdentity{ String Name{get;} String AuthenticationType{get;} bool IsAutenticated{get;} }
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
12
IPrincipal Minden
szálhoz egy principal objektum Tread.CurrentPrincipal (olvasható írható) public interface IPrincipal{ Iidentity Identity{get;} bool IsInRole(String Role); } Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
13
Általános osztályok Előre
definiált, az alaposztály könyvtár eleme. Csak az interface-t implementálja. GenericIdentity GenericPrincipal
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
14
Windows specifikus osztályok WindowsIdentity
Egy windows-os felhasználót kezel.
WindowsPrincipal
Windows-os csoporttagság nyilvántartása.
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
15
WindowsIdentity Az
Iidentity fv.-ei +:
– IsAnonymous – IsGuest – IsSystem – static GetAnonymous() – static GetCurrent() - win32 szál lehet, hogy más, mint a .NET Identity – Impersonate() - win32 szál felh. változtatása (erőforrás hozzáférés). Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
16
WindowsPrincipal Hasonló,
mint a GenericPrincipal, de IsInRole() két fajta paraméterrel: – string BUILTIN\szerep GÉPNÉV\Felhasználó TARTOMÁNY\Felhasználó
– felsosorolt (WindowsBuiltInRole) AcountOperator, Administrator, PowerUser BackupOperator, Guest, User, Replicator, ... Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
17
Példa I Thread.CurrentPrincipal = new GenericPrincipal( new GenericIdentity(”Hát én”), null); Console.WriteLine( string.Format(”Az aktuális Identity: {0}\n \tTípusa: {1}”, Thread.CurrentPrincipal.Identity.Name, Thread.CurrentPrincipal.Identity.GetType().FullName ) ); Console.WriteLine( string.Format(”Az aktuális Identity: {0}\n \tTípusa: {1}”, WindowsIdentity.GetCurrent().Name, WindowsIdentity.GetCurrent().GetType().FullName ) ); Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
18
Példa II - MyIdentity public class MyIdentity : GenericIdentity{ private string m_fullName; public string FullName{ get{ return m_fullName;} } public MyIdentity (string userName, string fullName) : base(userName) { m_fullName = fullName;} public static MyIdentity Current{ get{ return (MyPrincipal.Current == null) ? null : MyPrincipal.Current.Identity as MyIdentity; } } }
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
19
Példa II - MyPrincipal public class MyPrincipal : GenericPrincipal{ public MyPrincipal(MyIdentity ident, string[] roles) : base(ident,roles){} public override bool IsInRole(string role){ if (Identity != null && Identity.Name == ”Admin”) return true; else return base.IsInRole(role); } public new MyIdentity Identity{ get{return base.Identity as MyIdentity;} } public static MyPrincipal Current{ get{ return Thread.CurrentPrincipal as MyPrincipal;} } } Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
20
Példa II - teszt kód
static void Main(string[] args){ Thread.CurrentPrincipal = new GenericPrincipal(new MyIdentity("Admin", "Rendszer gizda"), null); try{ DoIt(); Thread.CurrentPrincipal = new GenericPrincipal(new MyIdentity("Krz", "Hát én ki más"), null); DoIt(); } catch(Exception e){Console.WriteLine("Kivétel: " + e.ToString ());} } [PrincipalPermission(SecurityAction.Demand, Name="Admin") ] static void DoIt(){ MyIdentity MyI= Thread.CurrentPrincipal.Identity as MyIdentity; Console.WriteLine("DoIt hívás: Név:{0} ({1})", MyI.Name, MyI.FullName); }
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
21
Biztonsági környezet öröklése Új szál esetén öröklődik a Pirncipal? – new Thread() – new Timer – .NET Remoting Web Service
Krizsá Krizsán Zoltá Zoltán iit
-> -> -> ->
igen nem általában nem általában nem
Biztonsá Biztonság .NET.NET-ben
22
Alkalmazástartomány Szálak
biztonsági környezetét egységesen szabályozhatjuk. AppDomain.SetPrincipalPolicy() Paraméterek lehetnek (PrincipalPolicy felsorolt típus): – NoPrincipal (null) – UnauthenticatedPrincipal (alapért., üres) – WindowsPrincipal Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
23
Nem szerep alapú biztonság Nem Mindet, vagy semmit, hanem – az adott program – adott erőforráson – milyen műveletet hajthat végre Kóderedet-alapú
(evidence based
security) Kódhozzáférési jogosultság (Code Access Security CAS) Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
24
Biztonsági házirend A
programok jogait nem minden esetben a rendszergazda állítja és nem futásidőben. Előre elkészített szabályrendszer, amely kódról származó információk alapján meghatározza: – hogy mely erőforrásokon – milyen művelet(ek)et hajthat végre Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
25
Eredetigazolás, erdetinformáció kódról származó információ (bizonyíték - evidance)
Beépített információk: – Információk szerelvényről: Hash Kiadó
(kiadó digitális aláírása) Erős név
– Információk indítás helyéről: Alkalmazásmappa Webhely URL Zóna
Lehet saját is!
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
26
Kódhoz rendelhető jogok CodeAccessPermission
osztály
leszármazottjai Léteznek beépített jogok: – – – –
EnvironmentPermission EventLogPermission PrintingPermission RegitryPermission
– FileIOPermission – ...
Bővíthető Krizsá Krizsán Zoltá Zoltán iit
saját jogokkal! Biztonsá Biztonság .NET.NET-ben
27
Jog csoportok, engedély halmazok Jogok csoportba rendezhetőek, nevesíthetőek (Named Permission Set)! Léteznek beépített engedélyhalmazok:
– Nothing – Execution (nem használhat védett erőforrást) – Internet – LocalInternet – Everything (kivéve kód ellenőrzés kihagyása) – FullTrust (GAC-ban levők alapból)
Saját definiálható!
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
28
Házirend felépítése, működése
Fastruktúra Csomópotjaiban: feltétel (Kód eredetére) engedélyhalmaz Ha a feltétel igaz, akkor – a program megkapja a jogokat – folytatódik a kiértékelés s gyermekkel
Végigmegy a fán és összegzi azokat (UNIÓ). A fa egy szintjén csak egy levélre illeszkedhet! A rendszer többszintű, 4 fából áll.
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
29
Támogatott házirendek 1.
szint Vállalati (Enterprise) :
– Active Directory telepítheti – Tartományra érvényes 2.
szint Számítógép (Machine) 3. szint Felhasználói (User) 4. szint Alkalmazástartományi (Application Domain) – Futtató hoszt által létrehozott Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
30
Házirendek végső jogosultsága A
rendszer sorra kiértékeli az összes fát! Az 1. szinttől kezdődően a 4. szintig A végső jogosultság az egyes jogosultságok metszete.
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
31
Kiértékelést befolyásolása Kizárólagosság
(Exclusive):
Ha a fát bejárva elér egy ilyen csomopontot, nem megy tovább a gyerekre! (Nem kaphat több jogot)
Végső
szint (Level Final):
Az aktuális fánál abbahagyja a kiértékelést nem folytatja az alacsonyabb szintűvel! (Nem kaphat kevesebb jogot)
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
32
Házirend vizuálisan Minden kód Vállalati Kibocsátó: MS Számítógép
Kiértékelés
Ms.Office Felhasználó
Alkalmazástartomány
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
33
Szerelvények - biztonság Szerelvényekhez
is rendelhetőek biztonsági előírások: – Required – Optional – Refused
Attribútummal
Krizsá Krizsán Zoltá Zoltán iit
valósítják meg!
Biztonsá Biztonság .NET.NET-ben
34
Futó program végső jogosultsága ((MIN ∪ OPT) ∩ ALLOWED) \ REFUSED MIN, OPT : szerelvény által kért jogok ALLOWED : házirendból eredő jogok Szerelvény által visszautasított jogok Ha a MIN jog nem áll rendelkezésre, akkor kivétel keletkezik! Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
35
Jog, jogcsoport Legkisebb egység, erőforrásokon végezhető műveletek halmazak. public interface IPermission{ IPermission Union(IPermission rhs); IPermission Intercect(IPermission rhs); IPermission Copy(); Void Demand(); } PermissionSet osztály (ICollection) Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
36
Ellenőrzés fajtái Op.
rendszer: erőforrást Alkalmazás: Feladatot, funkciót Keretrendszer: személy, jog, stack módja: – Deklaratív – Imperatív
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
37
Deklaratív ellenőrzés Attríbútum
segítségével (beépül metaadatba) Az engedély paramétereit már fordítási időben tudni kell! Gyors Könnyen felderíthető, dokumentálható Szerelvényre, tfv.-re érvényes. Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
38
Imperatív ellenőrzés Permission
vagy PermissionSet osztály egy példányának létrehozása. Majd Demand fv.-ével is. Futásidejű Kivétel elkapása.
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
39
Stack ellenőrzés Minden
metódus híváshoz veremkeret. Biztonsági ell. (Demand) esetén bejárja a hívási vermet, és megvizsgálja a fv.-ek veremkereteit. Minden Win32API hívás előtt Demand()!
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
40
Ellenőrzés módosítói A hagyományos ell. módosítják! Assert: nem vizsgál tovább, engedélyez Deny: nem vizsgál tovább, tilt Permit Only: Aktuálisra assert, többire Deny
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
41
Stack ellenőrzés szabályai
Engedélyen, vagy engedélyhalmazon hívható módosító. Csak egy módosító lehet aktív. Művelet elvégzése után szokás visszavonni (RevetAll, RevertAssert, …). Konstruktorban tilos a veremvizsgálat! Demand() helyett lehet LinkDemand() – nem jár végig a vermen, csak az aktuálisat vizsgálja! Reflexiónál LinkDeman() -> Demand()
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
42
Biztonság beállítása Jogok
– Caspol.exe -házirend –művelet pl.: -addfullTrust – .NET Configurartor Engedély
– Configurator (beépített) – XML fájlból (beépített, saját)
Krizsá Krizsán Zoltá Zoltán iit
Biztonsá Biztonság .NET.NET-ben
43