AppArmor
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Basiese Inligting
AppArmor is ân kernverbetering wat ontwerp is om die hulpbronne wat beskikbaar is vir programme deur middel van per-program profiele te beperk, wat effektief Verpligte Toegang Beheer (MAC) implementeer deur toegangbeheer eienskappe direk aan programme te koppel eerder as 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 log enige pogings om dit te oortree deur stelsels soos syslog of auditd.
- 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.
Komponente van AppArmor
- Kernmodule: 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 die bestuur van AppArmor te kommunikeer.
Profiele pad
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
Opdragte
aa-status #check the current status
aa-enforce #set profile to enforce mode (from disable or complain)
aa-complain #set profile to complain mode (from diable or enforcement)
apparmor_parser #to load/reload an altered policy
aa-genprof #generate a new profile
aa-logprof #used to change the policy when the binary/program is changed
aa-mergeprof #used to merge the policies
Skep ân profiel
- Om die aangetaste 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 kindprofiel, 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 oortref.
aa-genprof
Om maklik te begin om ân profiel te skep, kan apparmor jou help. Dit is moontlik om apparmor die aksies wat deur ân binĂȘre uitgevoer word te laat ondersoek en dan jou te laat besluit watter aksies jy wil toelaat of weier.
Jy moet net die volgende uitvoer:
sudo aa-genprof /path/to/binary
Dan, in ân ander konsole, voer al die aksies uit wat die binĂȘre gewoonlik sal uitvoer:
/path/to/binary -a dosomething
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
Note
Met die pyle sleutels kan jy kies wat jy wil toelaat/weier/whatever
aa-easyprof
Jy kan ook ân sjabloon van ân apparmor profiel van ân binĂȘre skep met:
sudo aa-easyprof /path/to/binary
# vim:syntax=apparmor
# AppArmor policy for binary
# ###AUTHOR###
# ###COPYRIGHT###
# ###COMMENT###
#include <tunables/global>
# No template variables specified
"/path/to/binary" {
#include <abstractions/base>
# No abstractions specified
# No policy groups specified
# No read paths specified
# No write paths specified
}
Note
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/etc/passwdtoe te laat, byvoorbeeld.
Jy kan dan die enforce die nuwe profiel met
sudo apparmor_parser -a /etc/apparmor.d/path.to.binary
Wysigting ân profiel vanaf logs
Die volgende hulpmiddel sal die logs lees en die gebruiker vra of hy sommige van die gedetecteerde verbode aksies wil toelaat:
sudo aa-logprof
Note
Deur die pyl sleutels te gebruik, kan jy kies wat jy wil toelaat/weier/wat ook al
Bestuur van ân Profiel
#Main profile management commands
apparmor_parser -a /etc/apparmor.d/profile.name #Load a new profile in enforce mode
apparmor_parser -C /etc/apparmor.d/profile.name #Load a new profile in complain mode
apparmor_parser -r /etc/apparmor.d/profile.name #Replace existing profile
apparmor_parser -R /etc/apparmor.d/profile.name #Remove profile
Logs
Voorbeeld van AUDIT en DENIED logs van /var/log/audit/audit.log van die uitvoerbare service_bin:
type=AVC msg=audit(1610061880.392:286): apparmor="AUDIT" operation="getattr" profile="/bin/rcat" name="/dev/pts/1" pid=954 comm="service_bin" requested_mask="r" fsuid=1000 ouid=1000
type=AVC msg=audit(1610061880.392:287): apparmor="DENIED" operation="open" profile="/bin/rcat" name="/etc/hosts" pid=954 comm="service_bin" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
Jy kan ook hierdie inligting verkry deur:
sudo aa-notify -s 1 -v
Profile: /bin/service_bin
Operation: open
Name: /etc/passwd
Denied: r
Logfile: /var/log/audit/audit.log
Profile: /bin/service_bin
Operation: open
Name: /etc/hosts
Denied: r
Logfile: /var/log/audit/audit.log
AppArmor denials: 2 (since Wed Jan 6 23:51:08 2021)
For more information, please see: https://wiki.ubuntu.com/DebuggingApparmor
Apparmor in Docker
Let op hoe die profiel docker-profile van docker standaard gelaai word:
sudo aa-status
apparmor module is loaded.
50 profiles are loaded.
13 profiles are in enforce mode.
/sbin/dhclient
/usr/bin/lxc-start
/usr/lib/NetworkManager/nm-dhcp-client.action
/usr/lib/NetworkManager/nm-dhcp-helper
/usr/lib/chromium-browser/chromium-browser//browser_java
/usr/lib/chromium-browser/chromium-browser//browser_openjdk
/usr/lib/chromium-browser/chromium-browser//sanitized_helper
/usr/lib/connman/scripts/dhclient-script
docker-default
Standaard word die Apparmor docker-default profiel gegenereer vanaf https://github.com/moby/moby/tree/master/profiles/apparmor
docker-default profiel Opsomming:
- Toegang tot alle netwerk
- Geen vermoë is gedefinieer (Ehowever, 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 het weier lees/skryf/slot/skakel/uitvoer toegang
- Monteer is nie toegelaat nie
- Ptrace kan slegs op ân proses wat deur dieselfde apparmor profiel beperk word, uitgevoer word
Sodra jy ân docker-container hardloop, moet jy die volgende uitvoer sien:
1 processes are in enforce mode.
docker-default (825)
Let wel, apparmor sal selfs vermoënsprivileges blokkeer wat aan die houer standaard toegeken word. Byvoorbeeld, dit sal in staat wees om toestemming te blokkeer om binne /proc te skryf selfs as die SYS_ADMIN vermoë toegeken is omdat die standaard docker apparmor-profiel hierdie toegang weier:
docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined ubuntu /bin/bash
echo "" > /proc/stat
sh: 1: cannot create /proc/stat: Permission denied
U moet apparmor deaktiveer om sy beperkings te omseil:
docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined --security-opt apparmor=unconfined ubuntu /bin/bash
Let wel, standaard sal AppArmor ook die houer verbied om vouers van binne te monteer, selfs met SYS_ADMIN vermoë.
Let wel dat jy vermoëns aan die docker houer kan byvoeg/verwyder (dit sal steeds beperk wees deur beskermingsmetodes soos AppArmor en Seccomp):
--cap-add=SYS_ADMINgeeSYS_ADMINvermoë--cap-add=ALLgee alle vermoëns--cap-drop=ALL --cap-add=SYS_PTRACEverwyder alle vermoëns en gee slegsSYS_PTRACE
Note
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:
deny /etc/* w, # deny write for all files directly in /etc (not in a subdir)
Om die profiel te aktiveer, moet ons die volgende doen:
sudo apparmor_parser -r -W mydocker
Om die profiele te lys, kan ons die volgende opdrag uitvoer. Die onderstaande opdrag lys my nuwe AppArmor-profiel.
$ sudo apparmor_status | grep mydocker
mydocker
Soos hieronder getoon, kry ons ân fout wanneer ons probeer om â/etc/â te verander aangesien die AppArmor-profiel skryftoegang tot â/etcâ voorkom.
$ docker run --rm -it --security-opt apparmor:mydocker -v ~/haproxy:/localhost busybox chmod 400 /etc/hostname
chmod: /etc/hostname: Permission denied
AppArmor Docker Bypass1
Jy kan vind watter apparmor-profiel ân houer uitvoer deur:
docker inspect 9d622d73a614 | grep lowpriv
"AppArmorProfile": "lowpriv",
"apparmor=lowpriv"
Dan kan jy die volgende lyn uitvoer om die presiese profiel wat gebruik word te vind:
find /etc/apparmor.d/ -name "*lowpriv*" -maxdepth 1 2>/dev/null
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 voorkom 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:
echo '#!/usr/bin/perl
use POSIX qw(strftime);
use POSIX qw(setuid);
POSIX::setuid(0);
exec "/bin/sh"' > /tmp/test.pl
chmod +x /tmp/test.pl
/tmp/test.pl
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks

