AppArmor
Basic Information
AppArmor is a kernel verbetering wat ontwerp is om die hulpbronne wat beskikbaar is aan programme deur per-program profiele te beperk, wat effektief Verpligte Toegang Beheer (MAC) implementeer deur toegangbeheer eienskappe direk aan programme te koppel in plaas van aan gebruikers. Hierdie stelsel werk deur profiele in die kern te laai, gewoonlik tydens opstart, en hierdie profiele bepaal watter hulpbronne 'n program kan toegang hê, soos netwerkverbindinge, rou sokkettoegang, en lêer toestemmings.
Daar is twee operasionele modi vir AppArmor profiele:
Handhaving Modus: Hierdie modus handhaaf aktief die beleide wat binne die profiel gedefinieer is, en blokkeer aksies wat hierdie beleide oortree en enige pogings om dit te oortree deur stelsels soos syslog of auditd te log.
Klagte Modus: Anders as handhaving modus, blokkeer klagte modus nie aksies wat teen die profiel se beleide gaan nie. In plaas daarvan, log dit hierdie pogings as beleids oortredings sonder om beperkings af te dwing.
Components of AppArmor
Kernel Module: Verantwoordelik vir die handhaving van beleide.
Beleide: Spesifiseer die reëls en beperkings vir programgedrag en hulpbron toegang.
Parser: Laai beleide in die kern vir handhaving of verslagdoening.
Hulpmiddels: Dit is gebruikersmodus programme wat 'n koppelvlak bied om met en te bestuur AppArmor.
Profiles path
Apparmor profiele word gewoonlik gestoor in /etc/apparmor.d/
Met sudo aa-status
sal jy in staat wees om die binaire te lys wat deur 'n profiel beperk word. As jy die karakter "/" kan verander in 'n punt in die pad van elke gelys binêre, sal jy die naam van die apparmor profiel binne die genoemde gids verkry.
Byvoorbeeld, 'n apparmor profiel vir /usr/bin/man sal geleë wees in /etc/apparmor.d/usr.bin.man
Commands
Skep 'n profiel
Om die betrokke uitvoerbare lêer aan te dui, absolute paaie en wildcard is toegelaat (vir lêer globbing) om lêers spesifiseer.
Om die toegang wat die binêre oor lêers sal hê aan te dui, kan die volgende toegangbeheer gebruik word:
r (lees)
w (skryf)
m (geheuekaart as uitvoerbaar)
k (lêer vergrendeling)
l (skepping harde skakels)
ix (om 'n ander program uit te voer met die nuwe program wat die beleid erfen)
Px (uitvoer onder 'n ander profiel, na die omgewing skoongemaak is)
Cx (uitvoer onder 'n kind profiel, na die omgewing skoongemaak is)
Ux (uitvoer onbepaal, na die omgewing skoongemaak is)
Veranderlikes kan in die profiele gedefinieer word en kan van buite die profiel gemanipuleer word. Byvoorbeeld: @{PROC} en @{HOME} (voeg #include <tunables/global> by die profiel lêer)
Weier reëls word ondersteun om toelaat reëls te oortree.
aa-genprof
Om maklik 'n profiel te begin skep kan apparmor jou help. Dit is moontlik om apparmor die aksies wat deur 'n binêre uitgevoer word te ondersoek en jou dan te laat besluit watter aksies jy wil toelaat of weier. Jy moet net die volgende uitvoer:
Dan, in 'n ander konsole, voer al die aksies uit wat die binêre gewoonlik sal uitvoer:
Dan, druk in die eerste konsole "s" en dui dan in die opgeneemde aksies aan of jy wil ignoreer, toelaat, of wat ook al. Wanneer jy klaar is, druk "f" en die nuwe profiel sal geskep word in /etc/apparmor.d/path.to.binary
Met die pyle sleutels kan jy kies wat jy wil toelaat/weier/wat ook al
aa-easyprof
Jy kan ook 'n sjabloon van 'n apparmor profiel van 'n binêre skep met:
Let daarop dat niks standaard in 'n geskepte profiel toegelaat word nie, so alles word geweier. Jy sal lyne soos /etc/passwd r,
moet byvoeg om die binêre lees van /etc/passwd
toe te laat, byvoorbeeld.
Jy kan dan afdwing die nuwe profiel met
Modifying a profile from logs
Die volgende hulpmiddel sal die logs lees en die gebruiker vra of hy sommige van die gedetecteerde verbode aksies wil toelaat:
Deur die pyltoetsen te gebruik, kan jy kies wat jy wil toelaat/ontken/ens.
Bestuur van 'n Profiel
Logs
Voorbeeld van AUDIT en DENIED logs van /var/log/audit/audit.log van die uitvoerbare service_bin
:
U kan ook hierdie inligting verkry deur:
Apparmor in Docker
Let op hoe die profiel docker-profile van docker standaard gelaai word:
By default Apparmor docker-default profiel is gegenereer van https://github.com/moby/moby/tree/master/profiles/apparmor
docker-default profiel Opsomming:
Toegang tot alle netwerk
Geen vermoë is gedefinieer (Echter, sommige vermoëns sal kom van die insluiting van basiese basisreëls i.e. #include <abstractions/base>)
Skryf na enige /proc lêer is nie toegelaat nie
Ander subgidse/lêers van /proc en /sys is weggesluit lees/skryf/slot/skakel/uitvoer toegang
Monteer is nie toegelaat nie
Ptrace kan slegs op 'n proses wat deur dieselfde apparmor profiel beperk is, uitgevoer word
Sodra jy 'n docker-container hardloop, behoort jy die volgende uitvoer te sien:
Let wel dat apparmor selfs vermoënsprivileges wat aan die houer toegeken is, standaard sal blokkeer. Byvoorbeeld, dit sal in staat wees om toestemming te blokkeer om binne /proc te skryf selfs as die SYS_ADMIN vermoë gegee is omdat die standaard docker apparmor-profiel hierdie toegang ontken:
U moet apparmor deaktiveer om sy beperkings te omseil:
Let wel, standaard sal AppArmor ook die houer verbied om vouers van binne te monteer, selfs met SYS_ADMIN vermoë.
Let wel, jy kan byvoeg/verwyder vermoëns aan die docker houer (dit sal steeds beperk word deur beskermingsmetodes soos AppArmor en Seccomp):
--cap-add=SYS_ADMIN
geeSYS_ADMIN
vermoë--cap-add=ALL
gee alle vermoëns--cap-drop=ALL --cap-add=SYS_PTRACE
verwyder alle vermoëns en gee slegsSYS_PTRACE
Gewoonlik, wanneer jy vind dat jy 'n bevoorregte vermoë beskikbaar het binne 'n docker houer maar 'n deel van die ontploffing werk nie, sal dit wees omdat docker apparmor dit sal voorkom.
Voorbeeld
(Voorbeeld van hier)
Om AppArmor se funksionaliteit te illustreer, het ek 'n nuwe Docker-profiel “mydocker” geskep met die volgende lyn bygevoeg:
Om die profiel te aktiveer, moet ons die volgende doen:
Om die profiele te lys, kan ons die volgende opdrag uitvoer. Die onderstaande opdrag lys my nuwe AppArmor-profiel.
Soos hieronder getoon, kry ons 'n fout wanneer ons probeer om “/etc/” te verander aangesien die AppArmor-profiel skryftoegang tot “/etc” voorkom.
AppArmor Docker Bypass1
Jy kan vind watter apparmor-profiel 'n houer uitvoer deur:
Dan kan jy die volgende lyn uitvoer om die presiese profiel wat gebruik word te vind:
In die vreemde geval kan jy die apparmor docker-profiel wysig en dit herlaai. Jy kan die beperkings verwyder en "omseil" hulle.
AppArmor Docker Bypass2
AppArmor is pad-gebaseerd, dit beteken dat selfs al mag dit lêers binne 'n gids soos /proc
beskerm, as jy kan konfigureer hoe die houer gaan loop, kan jy die proc-gids van die gasheer binne /host/proc
monteer en dit sal nie meer deur AppArmor beskerm word nie.
AppArmor Shebang Bypass
In hierdie fout kan jy 'n voorbeeld sien van hoe selfs al verhoed jy dat perl met sekere hulpbronne uitgevoer word, as jy net 'n skulp-skrip skep wat in die eerste lyn #!/usr/bin/perl
spesifiseer en jy voer die lêer direk uit, sal jy in staat wees om te voer wat jy wil. Byvoorbeeld:
Last updated