AppArmor
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
AppArmor ni kuimarisha kernel iliyoundwa kupunguza rasilimali zinazopatikana kwa programu kupitia wasifu wa kila programu, kwa ufanisi ikitekeleza Udhibiti wa Ufikiaji wa Lazima (MAC) kwa kufunga sifa za udhibiti wa ufikiaji moja kwa moja kwa programu badala ya watumiaji. Mfumo huu unafanya kazi kwa kuchaji wasifu kwenye kernel, kawaida wakati wa kuanzisha, na wasifu hawa huamua ni rasilimali zipi programu inaweza kufikia, kama vile muunganisho wa mtandao, ufikiaji wa soketi mbichi, na ruhusa za faili.
Kuna njia mbili za uendeshaji kwa wasifu wa AppArmor:
Njia ya Utekelezaji: Njia hii inatekeleza kwa nguvu sera zilizofafanuliwa ndani ya wasifu, ikizuia vitendo vinavyokiuka sera hizi na kuandika jaribio lolote la kuvunja hizo kupitia mifumo kama syslog au auditd.
Njia ya Malalamiko: Tofauti na njia ya utekelezaji, njia ya malalamiko haisitishi vitendo vinavyokwenda kinyume na sera za wasifu. Badala yake, inaandika jaribio hizi kama ukiukaji wa sera bila kutekeleza vizuizi.
Moduli ya Kernel: Inawajibika kwa utekelezaji wa sera.
Sera: Zinabainisha sheria na vizuizi kwa tabia ya programu na ufikiaji wa rasilimali.
Parser: Inachaji sera kwenye kernel kwa utekelezaji au ripoti.
Utilities: Hizi ni programu za hali ya mtumiaji zinazotoa kiolesura cha kuingiliana na kusimamia AppArmor.
Wasifu wa Apparmor kawaida huhifadhiwa katika /etc/apparmor.d/
Kwa kutumia sudo aa-status
utaweza kuorodhesha binaries ambazo zimepunguziliwa mbali na wasifu fulani. Ikiwa unaweza kubadilisha herufi "/" kuwa nukta katika njia ya kila binary iliyoorodheshwa, utapata jina la wasifu wa apparmor ndani ya folda iliyoelezwa.
Kwa mfano, wasifu wa apparmor kwa /usr/bin/man utawekwa katika /etc/apparmor.d/usr.bin.man
Ili kuonyesha executable iliyoathiriwa, njia za moja kwa moja na wildcards zinakubaliwa (kwa ajili ya kufafanua faili).
Ili kuonyesha ufikiaji ambao binary itakuwa nao juu ya faili, udhibiti wa ufikiaji zifuatazo zinaweza kutumika:
r (soma)
w (andika)
m (ramani ya kumbukumbu kama executable)
k (kufunga faili)
l (kuunda viungo vigumu)
ix (kutekeleza programu nyingine na programu mpya ikirithi sera)
Px (kutekeleza chini ya wasifu mwingine, baada ya kusafisha mazingira)
Cx (kutekeleza chini ya wasifu wa mtoto, baada ya kusafisha mazingira)
Ux (kutekeleza bila vizuizi, baada ya kusafisha mazingira)
Vigezo vinaweza kufafanuliwa katika wasifu na vinaweza kushughulikiwa kutoka nje ya wasifu. Kwa mfano: @{PROC} na @{HOME} (ongeza #include <tunables/global> kwenye faili la wasifu)
Sheria za kukataa zinasaidiwa kubadilisha sheria za kuruhusu.
Ili kuanza kwa urahisi kuunda wasifu, apparmor inaweza kusaidia. Inawezekana kufanya apparmor ikague vitendo vinavyofanywa na binary kisha kukuruhusu uamue ni vitendo gani unataka kuruhusu au kukataa. Unahitaji tu kukimbia:
Kisha, katika console tofauti fanya vitendo vyote ambavyo binary kawaida hufanya:
Kisha, katika console ya kwanza bonyeza "s" na kisha katika vitendo vilivyorekodiwa onyesha kama unataka kupuuza, kuruhusu, au chochote. Unapomaliza bonyeza "f" na wasifu mpya utaundwa katika /etc/apparmor.d/path.to.binary
Kwa kutumia funguo za mshale unaweza kuchagua unachotaka kuruhusu/kukataa/chochote
Unaweza pia kuunda kiolezo cha wasifu wa apparmor wa binary kwa:
Kumbuka kwamba kwa default katika wasifu ulioundwa hakuna kinachoruhusiwa, hivyo kila kitu kinakataliwa. Utahitaji kuongeza mistari kama /etc/passwd r,
ili kuruhusu binary kusoma /etc/passwd
kwa mfano.
You can then enforce the new profile with
Chombo kinachofuata kitaisoma kumbukumbu na kumwuliza mtumiaji kama anataka kuruhusu baadhi ya vitendo vilivyogunduliwa kuwa haramu:
Kwa kutumia funguo za mshale unaweza kuchagua kile unachotaka kuruhusu/kukataa/chochote
Mfano wa AUDIT na DENIED logs kutoka /var/log/audit/audit.log ya executable service_bin
:
Unaweza pia kupata habari hii kwa kutumia:
Kumbuka jinsi profaili docker-profile ya docker inavyopakiwa kwa default:
Kwa kawaida Apparmor docker-default profile inatengenezwa kutoka https://github.com/moby/moby/tree/master/profiles/apparmor
Muhtasari wa docker-default profile:
Upatikanaji wa mtandao wote
Hakuna uwezo ulioelezwa (Hata hivyo, baadhi ya uwezo utaweza kuja kutokana na kuingiza sheria za msingi za msingi i.e. #include <abstractions/base>)
Kuandika kwenye faili yoyote ya /proc hakuruhusiwi
Madirisha/faili mengine ya /proc na /sys yanakataliwa upatikanaji wa kusoma/kuandika/kufunga/kuunganisha/kutekeleza
Kuweka hakuruhusiwi
Ptrace inaweza kuendeshwa tu kwenye mchakato ambao umepunguziliwa mbali na profil ya apparmor ile ile
Mara tu unapofanya kazi na kontena la docker unapaswa kuona matokeo yafuatayo:
Note that apparmor itazuia hata uwezo wa haki uliotolewa kwa kontena kwa default. Kwa mfano, itakuwa na uwezo wa kuzuia ruhusa ya kuandika ndani ya /proc hata kama uwezo wa SYS_ADMIN umepatiwa kwa sababu kwa default profaili ya apparmor ya docker inakataa ufikiaji huu:
Unahitaji kuondoa apparmor ili kupita vizuizi vyake:
Note that by default AppArmor itakataza kontena kuunganisha folda kutoka ndani hata na uwezo wa SYS_ADMIN.
Note that you can ongeza/ondoa uwezo kwa kontena la docker (hii bado itakuwa na mipaka kutokana na mbinu za ulinzi kama AppArmor na Seccomp):
--cap-add=SYS_ADMIN
toa uwezo wa SYS_ADMIN
--cap-add=ALL
toa uwezo wote
--cap-drop=ALL --cap-add=SYS_PTRACE
ondoa uwezo wote na toa tu SYS_PTRACE
Kawaida, unapogundua kuwa una uwezo wa kipaumbele uliopatikana ndani ya kontena la docker lakini sehemu fulani ya kuvamia haifanyi kazi, hii itakuwa kwa sababu docker apparmor itakuwa ikizuia.
(Mfano kutoka hapa)
Ili kuonyesha kazi ya AppArmor, niliumba profaili mpya ya Docker “mydocker” na mstari ufuatao umeongezwa:
Ili kuamsha wasifu, tunahitaji kufanya yafuatayo:
Ili kuorodhesha wasifu, tunaweza kufanya amri ifuatayo. Amri iliyo hapa chini inaorodhesha wasifu wangu mpya wa AppArmor.
Kama inavyoonyeshwa hapa chini, tunapata kosa tunapojaribu kubadilisha “/etc/” kwani profaili ya AppArmor inazuia ufikiaji wa kuandika kwenye “/etc”.
Unaweza kupata ni profil ya apparmor ipi inayoendesha kontena kwa kutumia:
Kisha, unaweza kukimbia mstari ufuatao ili kupata wasifu halisi unaotumika:
In the weird case you can modify the apparmor docker profile and reload it. You could remove the restrictions and "bypass" them.
AppArmor ni msingi wa njia, hii inamaanisha kwamba hata kama inaweza kuwa inalinda faili ndani ya directory kama /proc
ikiwa unaweza kuunda mipangilio ya jinsi kontena litakavyokuwa linaendeshwa, unaweza kuunganisha directory ya proc ya mwenyeji ndani ya /host/proc
na haitakuwa inalindwa na AppArmor tena.
Katika bug hii unaweza kuona mfano wa jinsi hata kama unazuia perl kuendeshwa na rasilimali fulani, ikiwa tu unaunda script ya shell ikiashiria katika mstari wa kwanza #!/usr/bin/perl
na unafanya kufanya kazi hiyo moja kwa moja, utaweza kutekeleza chochote unachotaka. E.g.:
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)