Title: Biztons
1Biztonság .NET-ben
2Alapfogalmak
- 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 eroforrásokat
érhet el, használhat ez a személy ? - Integritás ellenorzés (integrity check)
- Hogyan biztosítható, hogy az adatokat útközben ne
manipulálhassák ?
3Windows biztonság
- Felhasználó hitelesítésen
- Kerberos
- NTLM
- Publikus kulcs
- Objektum alapú hozzáférés szabályozás
4 .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
5Biztonsági modell filozófiája
- Segédalkalmazásokkal állítható!
- Ellenorizheto
- felhasználó kilétét - szerep alapúés vagy
- kód eredetétés vagy
- hívási láncot
6Szerep alapú biztonság
- Tradicionális, elterjedt biztonsági ellenorzé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.
7Ellenorzé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.
8Biztonságot fenyegeto szereplok
- 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)
9Biztonsági fenyegetések
- TitoksértésKód, illetéktelen személy - kényes
bizalmas információ - Ellenorzés hamisításLogok módosítása, zagyválása
- Azonosító megszerzéseJogosult felhasználó
nevében - Jogosultság megszerzésejogosult felhasználó -gt
admin - Szerviz elfojtásSok felesleges, érvényes muvelet
-gt szükséges funkciók lassulnak - Mobil kódLetöltött kódok gyakran admin jog!
10Megvalósítás
- Minden esetben Demand() fv. Hívás.(IPermission
interface, PermissionSet osztály) - SecurityException kivétel dobódik, ha nincs
megfelelo jogosultság.
11Osztálykönyvtár eszközei
- System.Security.Principal névtér
- Interface-ek (általánosak)
- Iidentity felhasználók adatai
- Iprincipal csoporttagság
12IIdentity
- public interface IIdentity
- String Nameget
- String AuthenticationTypeget
- bool IsAutenticatedget
-
13IPrincipal
- Minden szálhoz egy principal objektum
- Tread.CurrentPrincipal (olvasható -
írható)public interface IPrincipal - Iidentity Identityget
- bool IsInRole(String Role)
-
14Általános osztályok
- Elore definiált, az alaposztály könyvtár eleme.
- Csak az interface-t implementálja.
- GenericIdentity
- GenericPrincipal
15Windows specifikus osztályok
- WindowsIdentityEgy windows-os felhasználót
kezel. - WindowsPrincipalWindows-os csoporttagság
nyilvántartása.
16WindowsIdentity
- Az Iidentity fv.-ei
- IsAnonymous
- IsGuest
- IsSystem
- static GetAnonymous()
- static GetCurrent() - win32 szállehet, hogy más,
mint a .NET Identity - Impersonate() - win32 szál felh. változtatása
(eroforrás hozzáférés).
17WindowsPrincipal
- 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, ...
18Pé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().F
ullName - )
- )
- Console.WriteLine(
- string.Format(Az aktuális Identity 0\n
\tTípusa 1, - WindowsIdentity.GetCurrent().Name,
- WindowsIdentity.GetCurrent().GetType().FullN
ame - )
- )
19Pé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 -
-
20Pé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
- getreturn base.Identity as MyIdentity
-
- public static MyPrincipal Current
- get return Thread.CurrentPrincipal as
MyPrincipal -
21Pé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.Identit
y as MyIdentity - Console.WriteLine("DoIt hívás Név0 (1)",
- MyI.Name, MyI.FullName)
22Biztonsági környezet öröklése
- Új szál esetén öröklodik a Pirncipal?
- new Thread() -gt igen
- new Timer -gt nem
- .NET Remoting -gt általában nem
- Web Service -gt általában nem
23Alkalmazá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
24Nem szerep alapú biztonság
- Nem Mindet, vagy semmit, hanem
- az adott program
- adott eroforráson
- milyen muveletet hajthat végre
- Kóderedet-alapú (evidence based security)
- Kódhozzáférési jogosultság(Code Access Security
CAS)
25Biztonsági házirend
- A programok jogait nem minden esetben a
rendszergazda állítja és nem futásidoben. - Elore elkészített szabályrendszer, amely kódról
származó információk alapján meghatározza - hogy mely eroforrásokon
- milyen muvelet(ek)et hajthat végre
26Eredetigazolás, erdetinformációkódról származó
információ (bizonyíték - evidence)
- Beépített információk
- Információk szerelvényrol
- Hash
- Kiadó (kiadó digitális aláírása)
- Eros név
- Információk indítás helyérol
- Alkalmazásmappa
- Webhely
- URL
- Zóna
- Lehet saját is!
27Kódhoz rendelheto jogok
- CodeAccessPermission osztály leszármazottjai
- Léteznek beépített jogok
- EnvironmentPermission
- EventLogPermission
- PrintingPermission
- RegitryPermission
- FileIOPermission
- ...
- Bovítheto saját jogokkal!
28Jog csoportok, engedély halmazok
- Jogok csoportba rendezhetoek, nevesíthetoek
(Named Permission Set)! - Léteznek beépített engedélyhalmazok
- Nothing
- Execution (nem használhat védett eroforrást)
- Internet
- LocalInternet
- Everything (kivéve kód ellenorzés kihagyása)
- FullTrust (GAC-ban levok alapból)
- Saját definiálható!
29Házirend felépítése, muködése
- Fastruktúra
- Csomópontjaiban 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öbbszintu, 4 fából áll.
30Tá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
31Házirendek végso jogosultsága
- A rendszer sorra kiértékeli az összes fát!
- Az 1. szinttol kezdodoen a 4. szintig
- A végso jogosultság az egyes jogosultságok
metszete.
32Kiértékelést befolyásolása
- Kizárólagosság (Exclusive)Ha a fát bejárva elér
egy ilyen csomópontot, nem megy tovább a
gyerekre! Megy a következo fára.(Nem kaphat több
jogot) - Végso szint (Level Final)Az aktuális fánál
abbahagyja a kiértékelést nem folytatja az
alacsonyabb szintuvel!(Nem kaphat kevesebb jogot)
33Házirend vizuálisan
Vállalati
Számítógép
Felhasználó
Alkalmazástartomány
34Szerelvények - biztonság
- Szerelvényekhez is rendelhetoek biztonsági
eloírások - Required
- Optional
- Refused
- Attribútummal valósítják meg!
35Futó program végso jogosultsága
- ((MIN ? OPT) ? ALLOWED) \ REFUSED
- MIN, OPT szerelvény által kért jogok
- ALLOWED házirendból eredo jogok
- Szerelvény által visszautasított jogok
- Ha a MIN jog nem áll rendelkezésre, akkor kivétel
keletkezik!
36Jog, jogcsoport
- Legkisebb egység, eroforrásokon végezheto
muveletek halmazak. - public interface IPermission
- IPermission Union(IPermission rhs)
- IPermission Intercect(IPermission rhs)
- IPermission Copy()
- Void Demand()
-
- PermissionSet osztály (ICollection)
37Ellenorzés fajtái
- Op. rendszer eroforrást
- Alkalmazás Feladatot, funkciót
- Keretrendszer személy, jog, stackmódja
- Deklaratív
- Imperatív
38Deklaratív ellenorzés
- Attribútum segítségével (beépül metaadatba)
- Az engedély paramétereit már fordítási idoben
tudni kell! - Gyors
- Könnyen felderítheto, dokumentálható
- Szerelvényre, tfv.-re érvényes.
39Imperatív ellenorzés
- Permission vagy PermissionSet osztály egy
példányának létrehozása. - Majd Demand fv.-ével is.
- Futásideju
- Kivétel elkapása.
- Kódszintu
40Stack ellenorzé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 elott Demand()!
41Ellenorzés módosítói
- A hagyományos ell. módosítják!
- Assertnem vizsgál tovább, engedélyez
- Denynem vizsgál tovább, tilt
- Permit OnlyAktuálisra assert, többire Deny
42Stack ellenorzés szabályai
- Engedélyen, vagy engedélyhalmazon hívható
módosító. - Csak egy módosító lehet aktív.
- Muvelet 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() -gt Demand()
43Biztonság beállítása
- Jogok
- Caspol.exe-házirend muvelet pl. -addfullTrust
- .NET Configurartor
- Engedély
- Configurator (beépített)
- XML fájlból (beépített, saját)