Grsecurity
A HupWiki-ből...
GR = eredetileg "Get Rewted"
Egy teljeskörű Linux-rendszermag folt a biztonsági problémák észlelésére, megelőzésére és beazonosítására. Használata kis időráfordítást igényel. Nemcsak ajánlott, hanem kötelező, nemcsak saját magad, hanem mások érdekében is. (Természetesen semmilyen védelem sem nyújt teljes biztonságot a szoftverhibák / emberi tényezők ellen, ezért folyamatosan frissítsd a rendszered és képezd magad a témában.)
Rendelkezik RBAC támogatással és részét képezi a magyar fejlesztésű PaX.
A letöltött forrás ellenőrzéséhez a Grsecurity PGP kulcsa: gpg --keyserver wwwkeys.pgp.net --recv-keys 0x4245D46A
Tartalomjegyzék |
Kernel opciók
Megj.: ez a rész a 2.6 kernelhez készült, de a 2.4hez is használható.
Megj.2.: az opciókról részletes leírás van az adott "Help"ben;
- Security options
- Grsecurity = Y - az adott opciók "Help"jében teljes részletességgel le van írva mi mire jó;
- Security level = általános sémák különböző biztonsági szintre, ha először használod és / vagy bizonytalan vagy, akkor egy ideig "low"ban, majd "medium"ban menjen, aztán rakd az itt leírt "high"ra; "custom" esetén minden opciót szabadon variálhatsz;
- Address Space Protection
- Deny writing to /dev/kmem, /dev/mem, and /dev/port = Y - ha nem működik megfelelően az, akkor kapcsold ki; nem kompatibilis továbbá a vmwarerel, dosemuval; FIXME
- Disable privileged I/O = N - pld az X nem fog menni;
- Remove addresses from /proc/pid/[maps|stat] = Y
- Deter exploit bruteforcing = Y
- Hide kernel symbols = Y
- Role Based Access Control Options
- Hide kernel processes = Y
- Maximum tries before password lockout
- Time to wait after max password tries, in seconds
- Filesystem Protections
- Proc restrictions = N
- Linking restriction
- FIFO restriction
- Chroot jail restrictions
- Kernel Auditing - érdmes bekapcsolni: Resource logging, (Un)Mount logging, Signal logging, Fork failure logging, Time change logging
- Executable Protections
- Enforce RLIMIT_NPROC on execs = Y
- Destroy unused shared memory = Y
- Dmesg(8) restriction = Y
- Randomized PIDs = Y
- Trusted path execution = N
- Network Protections
- Larger entropy pools = Y
- Randomized TCP source ports = Y
- Socket restrictions = N
- Sysctl support = N
- Logging options - jó alapállapotban;
- PaX
- PaX Control
- Support soft mode = Y
- Use legacy ELF header marking = Y - régebbi módszer, 'chpax' kell a felülbírálásához;
- Use ELF program header marking = Y - újabb módszer, 'paxctl't igényel és patchelt 'binutils't (lásd pax honlap); magasabb priorítása van az előzőnél;
- MAC system integration = direct
- Non-executable pages
- Enforce Non-executable pages = Y
- Paging based non-executable pages = Y
- Segmentation based non-executable pages = Y
- Default non-executable page method = SEGMEXEC
- Emulate trampolines = Y - alkalmazásszintű bekapcsolása biztonsági kockázatot rejt;
- Automatically emulate sigreturn trampolines = N - bekapcsolása tényleges biztonsági rést jelent a pagexecben;
- Restrict mprotect() = Y
- Disallow ELF text relocations = N - rendszerfüggő, ha nem megy pld a login, kapcsold ki; (az opera pluginjei is akadnak: "Warning: XtRemoveGrab asked to remove a widget not on the list");
- Enforce non-executable kernel pages = Y - nem múködik együtt a kernel modulokkal;
- Address Space Layout Randomization
- Address Space Layout Randomization = Y
- Randomize kernel stack base = Y - nemvárt fagyásokat okozhat, ha használni akarod teszteld alaposan;
- Randomize user stack base = Y
- Randomize mmap() base = Y
- Disable the vsyscall page = Y
- Address Space Layout Randomization = Y
- PaX Control
- Grsecurity = Y - az adott opciók "Help"jében teljes részletességgel le van írva mi mire jó;
Hasznos infók
PaX felülbírálása
A 'chpax' programra lesz szükség (vagy a modernebb 'paxctl', ami speciális 'binutils't igényel).
A felülbírálandó bináris helyét a which adja meg (pld.: 'which glxgears').
A 'chpax'nak adható opciók közül a kisbetűsök megakadályozzák, hogy a pax egy adott ellenőrzést végrehajtson, ezzel lehetővé téve néhány nem telejesen szabványos bináris futtatását. A nagybetűsök engedélyezik, hogy a pax végrehajtsa az adott ellenőrzést. Alapesetben egy bináris PeMRxS beállításokkal bír.
A PaX a fenti beállítások mellett a '/var/log/syslog'ba loggol; legegyszerűbb a 'dmesg | tail'-lal lekérdezni az utolsó üzeneteket.
Példa 1: egy openglt használó program nem indul az nvidia bináris libGL.so-ja miatt:
Mar 2 14:20:13 localhost kernel: PAX: execution attempt in: /usr/lib/tls/libGL.so.1.0.5336, 25a40000-25a4e000 0004b000 Mar 2 14:20:13 localhost kernel: PAX: terminating task: /usr/X11R6/bin/glxinfo(glxinfo):18887, uid/euid: 1000/1000, PC: 25a45f20, SP: 5efdaa90 Mar 2 14:20:13 localhost kernel: PAX: bytes at PC: b8 f0 ff ff ff e9 2b 73 fe ff b8 f4 ff ff ff e9 31 73 fe ff
Ok: a bináris nvidia driverhez járó libGL.so nem működik együtt az mprotect() védelemmel
Megoldás: ki kell kapcsolni a "restrict mprotect()"-et
Parancs: chpax -m /usr/X11R6/bin/glxinfo
Példa 2: az X nem indul el:
Mar 2 14:16:04 localhost kernel: PAX: execution attempt in: <anonymous mapping>, 081f3000-08254000 00000000 Mar 2 14:16:04 localhost kernel: PAX: terminating task: /usr/X11R6/bin/XFree86(XFree86):18833, uid/euid: 0/0, PC: 082514e8, SP: 5e201e8c Mar 2 14:16:04 localhost kernel: PAX: bytes at PC: 55 89 e5 83 ec 08 c7 04 24 e0 17 25 08 8b 45 08 a3 e8 17 25
Ok: az X memóriakezelése egy nem igazán szabványos módszerre épül
Megoldás: ki kell kapcsolni a "segmentation based non-executable pages", "paging based non-executable pages", "mprotect() restriction" és "mmap() base randomization" védelmet
Parancs: chpax -spmr /usr/X11R6/bin/XFree86
Még pár példa, a bináris nevével és a kikapcsolandó funkcióval:
java + opera:
(megj: adott java változatok esetén csak akkor fut 2.6 kernel alatt, ha felülbírálod a glibc szálkezelését: export LD_ASSUME_KERNEL=2.2.5 )
java : segmentation based non-executable pages, paging based non-executable pages, restrict mprotect()
opera : segmentation based non-executable pages, paging based non-executable pages
wine:
wine-kthread : segmentation based non-executable pages, paging based non-executable pages, restrict mprotect()
wine-pthread : segmentation based non-executable pages, paging based non-executable pages, restrict mprotect()
mplayer:
mplayer : segmentation based non-executable pages, paging based non-executable pages, restrict mprotect()
mencoder : segmentation based non-executable pages, paging based non-executable pages
localedef:
localedef : segmentation based non-executable pages, paging based non-executable pages
OOo:
soffice.bin : segmentation based non-executable pages, paging based non-executable pages
grub:
grub : segmentation based non-executable pages, paging based non-executable pages, restrict mprotect()
Megj.: ha a pax lelő egy programot, az néha "beragad"; így kell felszabadítani:
$ chpax -spm /usr/local/bin/mplayer /usr/local/bin/mplayer: Text file busy $ fuser -k /usr/local/bin/mplayer /usr/local/bin/mplayer: 16885e $ chpax -spm /usr/local/bin/mplayer
Megj.2: elképzelhető, hogy egy bináris így száll el:
grsec: signal 11 sent to /usr/X11R6/bin/glxinfo[glxinfo:1436] uid/euid:1000/1000 gid/egid:1000/1000, parent /bin/bash[bash:2721] uid/euid:1000/1000 gid/egid:1000/1000 grsec: attempted resource overstep by requesting 4096 for RLIMIT_CORE against limit 0 by /usr/X11R6/bin/glxinfo[glxinfo:1436] uid/euid:1000/1000 gid/egid:1000/1000, parent /bin/bash[bash:2721] uid/euid:1000/1000 gid/egid:1000/1000
tehát nem tud sikeres core dumpot végrehajtani; ha tudsz mit kezdeni ennek eredményével, akkor 'ulimit -c unlimited' és reprodukáld a hibát;
Megj.3: bináris nvidia driver:
1. a bináris nvidia meghajtóhoz járó libGL.so nem működik együtt a pax mprotect() védelmével, ezért minden binárison - ami ezt a libraryt akarja használni - a 'chpax -m' segítségével ki kell kapcsolni sz ilyen típusú védelmet. De a qt-t használó programok nagy része alapból hozzá van linkelve a libGL.so-hoz és ez egy KDE esetén rengeteg felülbírálandó programot jelent. Tehát, ha KDEt és bináris nvidia meghajtót használsz és nem akarsz ezzel foglalkozni, akkor kapcsold ki a "Restrict mprotect()"-et;
2. a "Disallow ELF text relocations" mellett kifagy az X a GLX extension inicializálásakor;
Egyéb megszorítások
(oscon tippjei alapján)
/proc:
- Filesystem Protections
- Proc restrictions = Y
- Restrict /proc to user only = N
- Allow special group = Y
- GID for special group = 1001
- Allow special group = Y
- Restrict /proc to user only = N
- Additional restrictions = Y
- Proc restrictions = Y
az 1001 id alá tartozó csoport megnézheti a mások számára tiltott adatokat is; rendszerfüggő, néhány daemonnak szüksége lehet rá;
tpe:
- Executable Protections
- Trusted Path Execution (TPE) = Y
- Partially restrict non-root users = Y
- GID for untrusted users = 1005
- Partially restrict non-root users = Y
- Trusted Path Execution (TPE) = Y
az 1005 id alá tartozó csoport csak biztonságos pathben lévő binárisokat indíthat; tehát olyan programokat, amik könyvtárába csak a root és a saját maguk írhat; rendszerfüggő, ellenőrizni kell a PATHben lévő könyvtárak (pld /usr/local/bin) jogait;
socket restriction:
- Network Protections
- Socket restrictions = Y
- Deny any sockets to group = Y
- GID to deny all sockets for = 1004
- Deny client sockets to group = Y
- GID to deny client sockets for = 1003
- Deny server sockets to group = Y
- GID to deny server sockets for = 1002
- Deny any sockets to group = Y
- Socket restrictions = Y
egy adott csoport számára meg lehet tiltani: minden hálózati kapcsolatot (1004 id; pld root), kliens oldali kapcsolatot (1003 id; pld daemonok), szerver oldali kapcsolatot (1003 id; pld userek); erősen rendszerfüggő, tesztelni kell;
hogy ezeket használni lehessen, módosítani kell az '/etc/group' tartalmát:
grsec_proc:x:1001: grsec_tpe_gid:x:1005: grsec_socket_all_gid:x:1004: grsec_socket_client_gid:x:1003: grsec_socket_server_gid:x:1002:
hol mikor melyik csoportot lehet kitiltani erősen rendszerfüggő;
Külső hivatkozások
- A Grsecurity honlapja
- Magyar tükörszerver
- Dokumentációk, leírások
- PaX_Memory_Protection.pdf
- Wikipedia:Pax