FreeBSD MAC
a (→Potenciális zh-kérdések: typo) |
|||
(2 szerkesztő 6 közbeeső változata nincs mutatva) | |||
9. sor: | 9. sor: | ||
===MAC címkék=== |
===MAC címkék=== |
||
A rendszerünk minden egyes objektumát (felhasználók, fájlok, hálózati interfészek, képernyő) el kell látnunk úgynevezett címkékkel, ezek a címkék a használt biztonsági modultól függően sok mindent jelenthetnek. Pl a <tt>biba/high</tt> címke a Biba policy modulra vonatkozik és az értéke "high". A FreeBSD három előre definiált value van. A high a lehető legmagasabb, a low a legalacsonyabb, az equal pedig egy "dontcare" értéket állít be. Az <tt>object</tt> -ek mellett nem árt tisztázni a <tt>subject</tt> fogalmát, ami nem más mint az az entitás (esetek nagyrészében process) ami az objektumok közt áramoltat adatot. Ahhoz, hogy egy partíción más és más labelt adhassunk file-jainknak, engedélyezni kell minden partíción a <tt>multi labeling</tt> -et a |
A rendszerünk minden egyes objektumát (felhasználók, fájlok, hálózati interfészek, képernyő) el kell látnunk úgynevezett címkékkel, ezek a címkék a használt biztonsági modultól függően sok mindent jelenthetnek. Pl a <tt>biba/high</tt> címke a Biba policy modulra vonatkozik és az értéke "high". A FreeBSD három előre definiált value van. A high a lehető legmagasabb, a low a legalacsonyabb, az equal pedig egy "dontcare" értéket állít be. Az <tt>object</tt> -ek mellett nem árt tisztázni a <tt>subject</tt> fogalmát, ami nem más mint az az entitás (esetek nagyrészében process) ami az objektumok közt áramoltat adatot. Ahhoz, hogy egy partíción más és más labelt adhassunk file-jainknak, engedélyezni kell minden partíción a <tt>multi labeling</tt> -et a |
||
− | tune2fs -l enable /path/to/fs |
+ | tunefs -l enable /path/to/fs |
paranccsal. |
paranccsal. |
||
48. sor: | 48. sor: | ||
* <tt>security.mac.enforce_vm</tt> enforces MAC policies on the virtual memory system. |
* <tt>security.mac.enforce_vm</tt> enforces MAC policies on the virtual memory system. |
||
− | ==== See no other uids ==== |
+ | ==== MAC SeeOtherUids ==== |
Modul betöltése: |
Modul betöltése: |
||
kldload mac_seenootheruids.ko |
kldload mac_seenootheruids.ko |
||
83. sor: | 83. sor: | ||
Megjegyzés: |
Megjegyzés: |
||
A belépett felhasználókat nem kell kiléptetni ha beállítjuk ezt a sysctl változót, de ha a csoportot és a felhasználó tagságát a csoportban akkor hoztuk létre amikor a user be volt lépve az újra beléptetés szükséges. |
A belépett felhasználókat nem kell kiléptetni ha beállítjuk ezt a sysctl változót, de ha a csoportot és a felhasználó tagságát a csoportban akkor hoztuk létre amikor a user be volt lépve az újra beléptetés szükséges. |
||
+ | |||
====MAC BSDExtended modul==== |
====MAC BSDExtended modul==== |
||
Betölthető ugyancsak modulként kézzel: |
Betölthető ugyancsak modulként kézzel: |
||
234. sor: | 235. sor: | ||
* security.mac.biba.revocation_enabled Ha az objektum biztonsági szintje magasabb lesz, tiltsuk le az elérést. |
* security.mac.biba.revocation_enabled Ha az objektum biztonsági szintje magasabb lesz, tiltsuk le az elérést. |
||
====MAC LoMAC modul==== |
====MAC LoMAC modul==== |
||
− | FIXME |
+ | Module neve: <tt>mac_lomac.ko</tt> |
+ | Kernel config: <tt>options MAC_LOMAC</tt> |
||
+ | Boot opció: <tt>mac_lomac_load="YES"</tt> |
||
+ | |||
+ | A Lomac (Low-watermark) modul működése a Biba modullal megegyező, azonban mégis megengedi az alacsonyabb szinten helyezkedő objektumok olvasását. Az intergritás megőrzése érdekében az egyes <tt>subject</tt>-ek rendelkeznek egy ún. külső label értékkel, amit a label után [] zárójelekbe írnak. Ha szükségünk van egy alacsonyabb szinten levő objektum olvasására, a saját biztonsági szintünk megváltozik a [] -ben levő alacsonyabb értékű szintre, így megakadályozva a felsőbb szintekre írást. |
||
+ | |||
+ | Példa egy labelre: |
||
+ | # setfmac lomac/15[2] |
||
==Egy összetett példa== |
==Egy összetett példa== |
||
243. sor: | 251. sor: | ||
Az <tt>/etc/login.conf</tt> -ba illesszük a következőket: |
Az <tt>/etc/login.conf</tt> -ba illesszük a következőket: |
||
insecure:\ |
insecure:\ |
||
− | :copyright=/etc/COPYRIGHT:\ |
+ | :copyright=/etc/COPYRIGHT:\ |
− | :welcome=/etc/motd:\ |
+ | :welcome=/etc/motd:\ |
− | :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\ |
+ | :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\ |
− | :path=~/bin /bin /usr/bin /usr/local/bin:\ |
+ | :path=~/bin /bin /usr/bin /usr/local/bin:\ |
− | :manpath=/usr/share/man /usr/local/man:\ |
+ | :manpath=/usr/share/man /usr/local/man:\ |
− | :nologin=/var/run/nologin:\ |
+ | :nologin=/var/run/nologin:\ |
− | :cputime=1h30m:\ |
+ | :cputime=1h30m:\ |
− | :datasize=8M:\ |
+ | :datasize=8M:\ |
− | :vmemoryuse=100M:\ |
+ | :vmemoryuse=100M:\ |
− | :stacksize=2M:\ |
+ | :stacksize=2M:\ |
− | :memorylocked=4M:\ |
+ | :memorylocked=4M:\ |
− | :memoryuse=8M:\ |
+ | :memoryuse=8M:\ |
− | :filesize=8M:\ |
+ | :filesize=8M:\ |
− | :coredumpsize=8M:\ |
+ | :coredumpsize=8M:\ |
− | :openfiles=24:\ |
+ | :openfiles=24:\ |
− | :maxproc=32:\ |
+ | :maxproc=32:\ |
− | :priority=0:\ |
+ | :priority=0:\ |
− | :requirehome:\ |
+ | :requirehome:\ |
− | :passwordtime=90d:\ |
+ | :passwordtime=90d:\ |
− | :umask=002:\ |
+ | :umask=002:\ |
− | :ignoretime@:\ |
+ | :ignoretime@:\ |
− | :label=partition/13,mls/5: |
+ | :label=partition/13,mls/5: |
Majd futtassuk le a <tt>cap_mkdb /etc/login.conf</tt> parancsot hogy a login.conf-ból elkészüljön a rendszer által használt adatbázis. |
Majd futtassuk le a <tt>cap_mkdb /etc/login.conf</tt> parancsot hogy a login.conf-ból elkészüljön a rendszer által használt adatbázis. |
||
275. sor: | 283. sor: | ||
tunefs: multilabel set |
tunefs: multilabel set |
||
A beállításokat természetesen minden használni kívánt partíción el kell végezni. |
A beállításokat természetesen minden használni kívánt partíción el kell végezni. |
||
+ | |||
+ | '''MLS teszt''' |
||
+ | |||
+ | $ getpmac |
||
+ | mls/5(5-5) |
||
+ | $ ls -lZ /dev/kmem |
||
+ | ls: /dev/kmem: Permission denied |
||
+ | Nem látjuk a magasabb szintén levő objektumokat |
||
+ | |||
+ | Ezután létrehozunk 3 tesztfile-t, az elsőnek 1-es a harmadiknak 10-es szintet adunk, és vizsgáljuk meg mit érünk el az 5. szintről |
||
+ | # echo s > test1; echo e > test2; echo x > test3 |
||
+ | # getfmac test2 |
||
+ | test: mls/equal |
||
+ | # setfmac mls/1 test1; setfmac mls/10 test3 |
||
+ | # chown test1:test1 test? |
||
+ | |||
+ | Megfigyelés: |
||
+ | |||
+ | $ ls test? |
||
+ | ls: test3: Permission denied |
||
+ | test1 test2 |
||
+ | Magasabb szintű objektumot nem láthatunk |
||
+ | |||
+ | Olvasás: |
||
+ | |||
+ | $ cat test? |
||
+ | s |
||
+ | e |
||
+ | cat: test3: Permission denied |
||
+ | Magasabb szintű objektumot nem is olvashatunk. |
||
+ | |||
+ | Write test: |
||
+ | $ echo 1 > test1 |
||
+ | cannot create test1: Permission denied |
||
+ | $ echo 1 > test2 |
||
+ | $ echo 1 > test3 |
||
+ | $ cat test? |
||
+ | s |
||
+ | 1 |
||
+ | cat: test3: Permission denied |
||
+ | # cat test3 |
||
+ | 1 |
||
+ | Írhatunk egyenlő, vagy magasabb szintre, de alacsonyabbra nem. |
||
+ | ==Zárszó== |
||
+ | Amint az látható a FreeBSD elég sok megoldást kínál a MAC modell bevezetésére. Ha egy éles rendszeren próbálunk meg kísérletezni, a túlságosan bonyolult, sok tervezést igénylő megoldásokat kerülni kell(biba, mls, lomac). |
||
+ | Valószínű emiatt sincs annyira elterjedve, pedig gondos tervezéssel gyakorlatilag sebezhetetlen rendszerek születhetnek. Ennek ellenére a lusta rendszergazda mindig a könnyebb utat választja (pf+jail). Remélem, hogy e rövid kedvcsinálónak sikerül pár vállalkozó kedvű admin figyelmét felkelteni, hiszen az egyszerűbb modulokat éles rendszereken is könnyen konfigurálni lehet |
||
+ | |||
+ | <tt>Írta: KOVACS Jozsef <jozsef.kovacs at huwico dot hu></tt> |
||
+ | |||
+ | == Potenciális zh-kérdések == |
||
+ | |||
+ | * Mi a Mandatory Access Control, és mi az előnye a DAC-cal szemben? Mi a hátránya? |
||
+ | * Mire lehet használni a FreeBSD portacl MAC modulját? |
A lap jelenlegi, 2006. november 11., 23:05-kori változata
Tartalomjegyzék |
[szerkesztés] 1 MAC implementáció a FreeBSD-ben
[szerkesztés] 1.1 Bevezető
[szerkesztés] 1.1.1 Mi az a MAC?
A Mandatory Access Control rövidítése. Olyan biztonsági modell ami a DAC kibővítésére, helyettesítésére szolgál. Egy DAC rendszerben a felhasználók maguk mondhatják meg, hogy az általuk birtokolt objektumoknak milyen jogai lehetnek. Ezzel szemben a MAC -ben a felhasználó nem adhat az objektumainak az adminisztrátor által beállíott jogoknál lazább jogokat.
[szerkesztés] 1.1.2 MAC címkék
A rendszerünk minden egyes objektumát (felhasználók, fájlok, hálózati interfészek, képernyő) el kell látnunk úgynevezett címkékkel, ezek a címkék a használt biztonsági modultól függően sok mindent jelenthetnek. Pl a biba/high címke a Biba policy modulra vonatkozik és az értéke "high". A FreeBSD három előre definiált value van. A high a lehető legmagasabb, a low a legalacsonyabb, az equal pedig egy "dontcare" értéket állít be. Az object -ek mellett nem árt tisztázni a subject fogalmát, ami nem más mint az az entitás (esetek nagyrészében process) ami az objektumok közt áramoltat adatot. Ahhoz, hogy egy partíción más és más labelt adhassunk file-jainknak, engedélyezni kell minden partíción a multi labeling -et a
tunefs -l enable /path/to/fs
paranccsal.
[szerkesztés] 1.1.3 Telepítés
A FreeBSD-be az 5.0-ás verziótol került bele a TrustedBSD project részeként létrehozott MAC implementáció. A GENERIC kernelnek nem része a MAC, ha be szeretnénk kapcsolni tegyük az
options MAC
sort a kernelconfigunkba, majd fordítsuk újra a kernelt
make buildkernel KERNCONF=GENERIC && make installkernel KERNCONF=GENERIC
A MAC framework részét képzi még számos modul, amiket az /etc/loader.conf -ba írva a bootolási folyamat során betöltődnek. Természetesen van mód ezeket a kernelbe fordítani, de így nagyobb az esély, hogy kizárjuk magunkat kedvenc rendszerünkből egy rosszul sikerült konfiguráció során.
[szerkesztés] 1.2 MAC
[szerkesztés] 1.2.1 Címkék használata
Subjectekre(processzekre):
setpmac biba/high bash
Objectekre:
setfmac biba/high test.txt
Megadhatunk konkrét értékeket is:
setfmac biba/5(4-10)
Ahol a zárójel előtt az effektív, használatban levő érték van a zárójelekben pedig a legalacsonyabb és legmagasabb állítható érték) Hálózati interfészre:
ifconfig xl0 maclabel biba/equal
[szerkesztés] 1.2.2 Modularitás
Alaphelyzetben, modulok nélkül is lehetőségünk van a MAC framework egyes részeit letiltani a sysctl parancs segítségével. Az alapértelmezett értékek mindegyiknél 1.
- security.mac.enforce_fs Fájlrendszer policyk
- security.mac.enforce_kld enforces MAC kernel linking policies on the dynamic kernel linker (see kld(4)).
- security.mac.enforce_network enforces MAC network policies.
- security.mac.enforce_pipe enforces MAC policies on pipes.
- security.mac.enforce_process enforces MAC policies on processes which utilize inter-process communication.
- security.mac.enforce_socket enforces MAC policies on sockets (see the socket(2) manual page).
- security.mac.enforce_system enforces MAC policies on system activities such as accounting and rebooting.
- security.mac.enforce_vm enforces MAC policies on the virtual memory system.
[szerkesztés] 1.2.2.1 MAC SeeOtherUids
Modul betöltése:
kldload mac_seenootheruids.ko
vagy
echo mac_seeotheruids_load="YES" >> /boot/loader.conf
ha a bootolas során szeretnénk bekapcsolni A modul nem igényli a label -ek használatát és átlátszó módon képes működni más MAC modulokkal. Erre a későbbiekben lesz példa
- security.mac.seeotheruids.enabled bekapcsolja a modul funkcióit, ami alapértelmezésben megtiltja a felhasználóknak hogy mások processeit és socket-jeit lássák.
- security.mac.seeotheruids.specificgid_enabled segítségével kivételt állíthatunk be egy csoportnak. A csoport gid-jét a security.mac.seeotheruids.specificgid=XXX sysctl változóba kell tenni.
- security.mac.seeotheruids.primarygroup_enabled használatával elsődleges csoportoknak adhatunk kivételt. Tehát így a process vagy socket group tagjai látni fogják az adott processt vagy socket-et. Fontos, hogy a security.mac.seeotheruids.specificgid_enabled ne legyen ekkor bekapcsolva.
Példa:
test1 user nem látja mások processeit
[test1@homokozo /usr/home/test1]$ ps aux USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND test1 727 0.0 1.1 1676 1360 v1 I 2:56PM 0:00.10 -sh (sh) test1 728 0.0 1.6 3120 1920 v1 S 2:56PM 0:00.69 bash test1 805 0.0 0.7 1340 860 v1 R+ 3:21PM 0:00.07 ps aux
Készítsünk egy seeother csoportot, tegyük bele test1-et és állítsuk be kivételnek a csoportot
[root@homokozo ~]# pw groupadd seeother [root@homokozo ~]# pw groupmod seeother -M test1 [root@homokozo ~]# pw groupshow seeother seeother:*:1002:test1 [root@homokozo ~]# sysctl security.mac.seeotheruids.specificgid=1002 security.mac.seeotheruids.specificgid: 0 -> 1002 [root@homokozo ~]# sysctl security.mac.seeotheruids.specificgid_enabled=1 security.mac.seeotheruids.specificgid_enabled: 0 -> 1
Tada:
[test1@homokozo /usr/home/test1]$ ps aux |wc -l 63
Megjegyzés: A belépett felhasználókat nem kell kiléptetni ha beállítjuk ezt a sysctl változót, de ha a csoportot és a felhasználó tagságát a csoportban akkor hoztuk létre amikor a user be volt lépve az újra beléptetés szükséges.
[szerkesztés] 1.2.2.2 MAC BSDExtended modul
Betölthető ugyancsak modulként kézzel:
kldload mac_bsdextended.ko
boot során:
echo MAC_BSDEXTENDED_LOAD="YES" > /etc/loader.conf
vagy kernelbe forgatva:
OPTIONS MAC_BSDEXTENDED
A bsdextended modul nem más mint egy tűzfal a filerendszerre, vannak különféle szabályaink és ezeken végigmenve dönti el a rendszer, hogy az adott objektumhoz van e hozzáférésünk. Syntaxis hasonló az ipfw-hez.
[root@homokozo ~]# kldload mac_bsdextended Security policy loaded: TrustedBSD MAC/BSD Extended (mac_bsdextended) [root@homokozo ~]# ugidfw list 0 slots, 0 rules
Látható, hogy alaphelyzetben nincsenek betöltve szabályok
Szabályok felépítése:
add subject [not] [uid uid] [gid gid] object [not] [uid uid] [gid gid] mode arswxn
ahol
- a - adminisztratív műveletek
- r - olvasás
- s - file attribútumok elérése
- w - írás
- x - futtatás
- n - none
Példa:
[test1@homokozo /usr/home/test1]$ sh proba proba
Tiltsuk meg test1 usernek, hogy a saját dolgain kívül bármi máshoz hozzáférjen:
[root@homokozo ~]# ugidfw add subject uid test1 object not uid test1 mode n Added rule 1 [test1@homokozo /usr/home/test1]$ sh proba bash: /bin/sh: Permission denied
Itt már nem érjük el a /bin/sh, viszont magát a scriptet futtatva sikerrel járunk
[test1@homokozo /usr/home/test1]$ ./proba proba
A script tartalma egy "echo proba" sor
Megjegyzés: Ha subjectnek azt írjuk hogy not uid user1, akkor a szabály a user1 felhasználó kivételével minden más felhasználóra érvényes elvileg. Gyakorlatilag ilyen esetben a root felhasználó mindig kivétel
[szerkesztés] 1.2.2.3 MAC ifoff
Letilthatjuk vele a hálózati interfészeket, és megakadályozzuk, hogy azokat a root bármikor felhúzza Modul neve: mac_ifoff.ko Boot opció: mac_ifoff_load="YES" Kernel config: options MAC_IFOFF
Az alábbi sysctl változók segítségével szabályozható a modul működése:
- security.mac.ifoff.lo_enabled loopback interfész ki-be kapcsolása
- security.mac.ifoff.bpfrecv_enabled Berkeley Packet Filter interfész (bpf(4))
- security.mac.ifoff.other_enabled minden egyéb
[szerkesztés] 1.2.2.4 MAC portacl
Modul neve: mac_portacl.ko Boot opció: mac_portacl_load="YES" Kernel config: options MAC_PORTACL A modul lehetővé teszi, hogy bizonyos portok használata szabályhoz kötött legyen, akár megemelhetjuk a privileged ports határát 1023-ról egy magasabb értékre. (A UNIX rendszerekben az első 1024 portra sima felhasználók nem bindelhetnek). De akár egy port használatát köthetjük egy bizonyos felhasználóhoz is. A működést az alábbi sysctl változók segítik:
- security.mac.portacl.enabled ki/be kapcs
- security.mac.portacl.port_high a legnagyobb port amire a portacl védelmet nyújt
- security.mac.portacl.suser_exempt a root legyen kivétel
- security.mac.portacl.rules Itt megadhatunk szabályokat vesszővel elválasztva az alábbi forma szerint:
idtype:id:protocol:port //idtype: uid|gid, protocol: tcp|udp
Például engedjük meg a test1 usernek, hogy webszervert futtasson, de senki más ne tudjon Vegyük át a rendszertől a privilegizált portok kezelését:
[test1@homokozo ~]$ nc -l 80 nc: Operation not permitted
[root@homokozo ~]# sysctl net.inet.ip.portrange.reservedlow=0 net.inet.ip.portrange.reservedhigh=0 net.inet.ip.portrange.reservedlow: 0 -> 0 net.inet.ip.portrange.reservedhigh: 1023 -> 0
A security.mac.portacl.port_high alapból 1023. Ez az érték nekünk pont megfelel. Majd adjuk hozzá a megfelelő szabályokat:
[root@homokozo ~]# sysctl security.mac.portacl.rules=uid:1001:tcp:80 security.mac.portacl.rules: -> uid:1001:tcp:80
Az eredmény:
[test1@homokozo ~]$ nc -l 80 ^C
Megjegyzés:
[root@homokozo ~]# sysctl security.mac.portacl.suser_exempt=0 security.mac.portacl.suser_exempt: 1 -> 0 [root@homokozo ~]# nc -l 80 nc: Operation not permitted
Ilyenkor a root is beleesik a port_high szabályba, tehát ebben az esetben az első 1024 port le van tiltva mindenki számára, és csak a test1 felhasználó használhatja a 80as portot
[szerkesztés] 1.2.2.5 MAC partition
Modul neve: mac_partition.ko
Boot opció: mac_partition_load="YES"
Kernel config: options MAC_PARTITION
A modul segítségével procecsseiket partíciókra oszthatjuk. Minden partíció csak a saját processzeit láthatja. A processek partíció label-jének beállításához használjuk a
# setpmac partition/10 bash
parancsot, ami indítani fog egy bash shellt a 10es partíción
[root@homokozo ~]# ps Zaux LABEL USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND partition/10 root 538 0.0 1.6 3096 1992 v0 S 11:01PM 0:00.20 bash partition/10 root 655 0.0 0.7 1340 860 v0 R+ 11:59PM 0:00.03 ps Za
Látható, hogy a partícionálás nem függ a felhasználótól, hiszen ezen kívül számos root process is még fut. Ha kombináljuk a mac_seenootheruids modullal, további finomításokat érhetünk el.
Megjegyzés: a root label ez esetben is kivétel.
[szerkesztés] 1.2.2.6 MAC Multi-Level Security
Modul neve: mac_mls.ko
Kernel config: options MAC_MLS
Boot opció: mac_mls_load="YES" Az MLS biztosági modul az első olyan MAC modul ahol a labelekkel definiálhatunk a subjejct-ek és object-ek közi adatáramlást valamilyen secucrity modell szerint. Ez úgy történik, hogy minden label-ben egy biztonsági szint számot írunk, a számok helyett természetesen használhatjuk a FreeBSD-ben alapértelmezettként definiált high, low, equal értékeket.
- Az mls/low címkével jelölt objektumok a hierarchia legalacsonyabb szintjét képviselik, gyakorlatilag nem férnek hozzá a nála magasabb szinttel rendelkező objektutmokhoz, és a nála magasabb objektumok nem tudnak információt juttatni az alacsonyabb szintekre.
- Az mls/equal gyakorlatilag egy kivételkezelés a policy alól
- Az mls/high labellel jelöltt objektumok a legnagyobb szintet képviselik, gyakorlatilag hozzáférnek minden más objektumhoz, de információt nem tudnak nekik juttatni.
Ezek a gyakorlatban úgy jelennek meg, hogy egy subject olvashatja a vele egyszintű, vagy nála alacsonyabb szintű object-eket, írás joga pedig csak a vele egyező illetve magasabb szintű objektumokhoz lehet. A modell lényege, hogy megakadályozza az felsőbb szintről információ szivárogtatást az alsó biztonsági szintekre.
Természetesen itt is van lehetőség néhány sysctl változó állítására:
- security.mac.mls.enabled MLS policy ki/be kapcs
- security.mac.mls.ptys_equal pty(4) eszközt mls/equal címkével lát el létrehozásukkor
- security.mac.mls.revocation_enabled ha egy objektum szintje alacsonyabbra változik vonjunk meg az elérést
- security.mac.mls.max_compartments is used to set the maximum number of compartment levels with objects; basically the maximum compartment number allowed on a system.
Az egyes objektumokat a setfmac mls/high <object> paranccsal címkézhetjük fel, a getfmac paranccsal pedig lekérdezhetjük a címkéket. Ezek felett lehetőségünk van egy ún. policy fileból beolvasni az egyes értékeket.
[szerkesztés] 1.2.2.7 MAC Biba modul
Modul neve: mac_biba.ko
Kernel config: options MAC_BIBA
Boot opció: mac_biba_load="YES"
A Biba biztonsági modell működési elve hasonlít az MLS-éhez, azzal az egy különbséggel, hogy itt az információ megendegett áramlása az egyes biztonsági szintek közt teljesen fordított. A modell elve, hogy megakadályozzuk az érzékeny adatok móosítását. Az alacsonyabb szintű objektumok nem írhatják a magasabb szintű objektumokat, és a magasabb szintű objektumok nem olvashatják a náluk alacsonyabb biztonsági szinten elhelyezkedő objektumokat.
Haszálat:
# setfmac biba/low test # getfmac test test: biba/low
Az alábbi sysctl változók itt is a rendelkezésünkre állnak, működésük azonban néhányn esetben fordított:
- security.mac.biba.enabled modul ki/be kapcs
- security.mac.biba.ptys_equal Biba policy kikapcsolása a pty(4) eszközökön
- security.mac.biba.revocation_enabled Ha az objektum biztonsági szintje magasabb lesz, tiltsuk le az elérést.
[szerkesztés] 1.2.2.8 MAC LoMAC modul
Module neve: mac_lomac.ko
Kernel config: options MAC_LOMAC
Boot opció: mac_lomac_load="YES"
A Lomac (Low-watermark) modul működése a Biba modullal megegyező, azonban mégis megengedi az alacsonyabb szinten helyezkedő objektumok olvasását. Az intergritás megőrzése érdekében az egyes subject-ek rendelkeznek egy ún. külső label értékkel, amit a label után [] zárójelekbe írnak. Ha szükségünk van egy alacsonyabb szinten levő objektum olvasására, a saját biztonsági szintünk megváltozik a [] -ben levő alacsonyabb értékű szintre, így megakadályozva a felsőbb szintekre írást.
Példa egy labelre:
# setfmac lomac/15[2]
[szerkesztés] 1.3 Egy összetett példa
Először is hozzunk létre egy új login classt ahova pakolni fogjuk a nem biztonságos felhasználóinkat:
Az /etc/login.conf -ba illesszük a következőket:
insecure:\ :copyright=/etc/COPYRIGHT:\ :welcome=/etc/motd:\ :setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\ :path=~/bin /bin /usr/bin /usr/local/bin:\ :manpath=/usr/share/man /usr/local/man:\ :nologin=/var/run/nologin:\ :cputime=1h30m:\ :datasize=8M:\ :vmemoryuse=100M:\ :stacksize=2M:\ :memorylocked=4M:\ :memoryuse=8M:\ :filesize=8M:\ :coredumpsize=8M:\ :openfiles=24:\ :maxproc=32:\ :priority=0:\ :requirehome:\ :passwordtime=90d:\ :umask=002:\ :ignoretime@:\ :label=partition/13,mls/5:
Majd futtassuk le a cap_mkdb /etc/login.conf parancsot hogy a login.conf-ból elkészüljön a rendszer által használt adatbázis.
Tegyük át a test1 felhasználót az insecure login classba.
[root@homokozo ~]# pw user mod test1 -L insecure
Ha még nem tettük meg engedélyezzük a filerenddszerünkön a multilabel módot, ezt single user módba bootolva tehetjük meg a következő módon:
# tunefs -l enable / tunefs: multilabel set
A beállításokat természetesen minden használni kívánt partíción el kell végezni.
MLS teszt
$ getpmac mls/5(5-5) $ ls -lZ /dev/kmem ls: /dev/kmem: Permission denied
Nem látjuk a magasabb szintén levő objektumokat
Ezután létrehozunk 3 tesztfile-t, az elsőnek 1-es a harmadiknak 10-es szintet adunk, és vizsgáljuk meg mit érünk el az 5. szintről
# echo s > test1; echo e > test2; echo x > test3 # getfmac test2 test: mls/equal # setfmac mls/1 test1; setfmac mls/10 test3 # chown test1:test1 test?
Megfigyelés:
$ ls test? ls: test3: Permission denied test1 test2
Magasabb szintű objektumot nem láthatunk
Olvasás:
$ cat test? s e cat: test3: Permission denied
Magasabb szintű objektumot nem is olvashatunk.
Write test:
$ echo 1 > test1 cannot create test1: Permission denied $ echo 1 > test2 $ echo 1 > test3 $ cat test? s 1 cat: test3: Permission denied # cat test3 1
Írhatunk egyenlő, vagy magasabb szintre, de alacsonyabbra nem.
[szerkesztés] 1.4 Zárszó
Amint az látható a FreeBSD elég sok megoldást kínál a MAC modell bevezetésére. Ha egy éles rendszeren próbálunk meg kísérletezni, a túlságosan bonyolult, sok tervezést igénylő megoldásokat kerülni kell(biba, mls, lomac). Valószínű emiatt sincs annyira elterjedve, pedig gondos tervezéssel gyakorlatilag sebezhetetlen rendszerek születhetnek. Ennek ellenére a lusta rendszergazda mindig a könnyebb utat választja (pf+jail). Remélem, hogy e rövid kedvcsinálónak sikerül pár vállalkozó kedvű admin figyelmét felkelteni, hiszen az egyszerűbb modulokat éles rendszereken is könnyen konfigurálni lehet
Írta: KOVACS Jozsef <jozsef.kovacs at huwico dot hu>
[szerkesztés] 1.5 Potenciális zh-kérdések
- Mi a Mandatory Access Control, és mi az előnye a DAC-cal szemben? Mi a hátránya?
- Mire lehet használni a FreeBSD portacl MAC modulját?