Salaam wote. Tunaingia kazini kwa bidii na tayari tunatayarisha uzinduzi mwingi wenye nguvu mnamo Januari. Miongoni mwa wengine, uandikishaji umetangazwa kwa mkondo mpya wa kozi inayopendwa na kila mtu.
Ruhusa za faili hutoa mbadala salama kwa utekelezo wa SUID, lakini inaweza kuonekana kuwa ya kutatanisha mwanzoni.
Sote tunajua hizo binaries
Nitakuokoa muda ikiwa unataka kuzuia kusoma kifungu kilicho hapo juu kwa undani: Kimsingi, ruhusa za faili huruhusu michakato inayoendeshwa kama mzizi na kwa hivyo inaruhusiwa kufanya kitu ili kuhifadhi uwezo fulani, mdogo.
Ruhusa ni nzuri kwa huduma ambazo kwa kawaida huendeshwa kama mzizi, lakini vipi kuhusu huduma za mstari wa amri? Kwa bahati nzuri, hii pia inatumika mradi una huduma zinazofaa zilizosakinishwa. Ikiwa unatumia Ubuntu, kwa mfano utahitaji kifurushi libcap2-bin
. Utahitaji pia kuendesha kerneli isiyo ya zamani (kutoka toleo 2.6.24).
Vipengele hivi vya kukokotoa huruhusu ruhusa kuhusishwa na faili zinazoweza kutekelezwa, sawa na kuweka biti ya SUID, lakini kwa seti maalum ya ruhusa pekee. Huduma setcap
kutumika kuongeza na kuondoa ruhusa kutoka kwa faili.
Hatua ya kwanza ni kuchagua ruhusa unayohitaji. Kwa ajili ya nakala hii, nadhani kuna zana ya utambuzi wa mtandao inayoitwa tracewalk
, ambayo inapaswa kuwa na uwezo wa kutumia CAP_NET_RAW
.
Kwa kudhani uko kwenye saraka ambapo binary iko tracewalk
, unaweza kuongeza ruhusa hii kama hii:
sudo setcap cap_net_raw=eip tracewalk
Puuza kiambishi tamati kwa sasa =eip
kwa azimio, nitazungumza juu ya hilo katika sekunde chache. Kumbuka kwamba jina la ruhusa liko katika herufi ndogo. Sasa unaweza kuangalia ikiwa umesanidi ruhusa kwa usahihi na:
setcap -v cap_new_raw=eip tracewalk
Au unaweza kuorodhesha ruhusa zote zilizowekwa kwa inayoweza kutekelezwa:
getcap tracewalk
Kwa marejeleo, unaweza pia kuondoa ruhusa zote kutoka kwa inayoweza kutekelezwa kwa:
setcap -r tracewalk
Katika hatua hii, unapaswa kuwa na uwezo wa kuendesha inayoweza kutekelezwa kama mtumiaji asiye na bahati, na inapaswa kuwa na uwezo wa kufanya kazi na soketi mbichi, lakini isiwe na haki zingine zozote ambazo mtumiaji wa mizizi anayo.
Kwa hivyo kiambishi hiki cha ajabu kinamaanisha nini? =eip
? Hii inahitaji uelewa fulani wa asili ya ruhusa. Kila mchakato una seti tatu za ruhusa - ufanisi, urithi na kuruhusiwa:
- Ufanisi Ruhusa ni zile zinazofafanua kile ambacho mchakato unaweza kufanya. Kwa mfano, haiwezi kukabiliana na soketi mbichi ikiwa
CAP_NET_RAW
haiko katika seti inayofaa. - Inapatikana ruhusa ni zile ambazo mchakato unaruhusiwa kuwa nazo ikiwa utawaomba kwa kutumia simu inayofaa. Wanazuia mchakato kufanya chochote isipokuwa iliandikwa haswa kuomba ruhusa iliyosemwa. Hii inaruhusu michakato kuandikwa ili kuongeza ruhusa muhimu kwa seti inayofaa tu kwa kipindi ambacho zinahitajika.
- Ya kurithi ruhusa ni zile zinazoweza kurithiwa katika seti inayoweza kufikiwa ya mchakato wa mtoto aliyezaliwa. Wakati wa upasuaji
fork()
auclone()
mchakato wa mtoto kila wakati hupewa nakala ya ruhusa za mchakato wa mzazi kwani bado unaendelea kutekelezwa kwa wakati huo. Seti ya kurithi hutumiwa wakatiexec()
(au sawa) inaitwa kuchukua nafasi ya faili inayoweza kutekelezwa na nyingine. Katika hatua hii, seti inayopatikana ya mchakato hufunikwa na seti inayoweza kurithiwa ili kupata seti inayoweza kufikiwa ambayo itatumika kwa mchakato mpya.
Hivyo shirika setcap
huturuhusu kuongeza ruhusa za seti hizi tatu kwa kujitegemea kwa utekelezaji fulani. Kumbuka kuwa maana ya vikundi inatafsiriwa tofauti kidogo kwa ruhusa za faili:
- Inapatikana ruhusa za faili ni zile ambazo zinapatikana kila wakati kwa faili inayoweza kutekelezwa, hata kama mchakato wa mzazi ulioiita haukuwa nazo. Zilikuwa zinaitwa vibali vya "kulazimishwa".
- Kurithi ruhusa za faili hufafanua kinyago cha ziada ambacho kinaweza pia kutumika kuondoa ruhusa kutoka kwa seti ya mchakato wa kupiga simu. Zinatumika pamoja na seti ya kurithi ya mchakato wa kupiga simu, kwa hivyo ruhusa inarithiwa ikiwa inapatikana katika seti zote mbili.
- Ufanisi ruhusa za faili kwa kweli ni sehemu moja tu, sio seti, na ikiwa imewekwa, inamaanisha kuwa seti nzima inayopatikana pia inakiliwa kwenye seti madhubuti ya mchakato mpya. Hii inaweza kutumika kuongeza ruhusa kwa michakato ambayo haikuandikwa mahususi ili kuziomba. Kwa kuwa ni biti moja, ukiiweka kwa ruhusa yoyote, lazima iwekwe kwa ruhusa zote. Unaweza kuiona kama sehemu ya urithi kwa sababu inatumika kuruhusu ruhusa kutumiwa na programu ambazo haziauni.
Wakati wa kubainisha ruhusa kupitia setcap
barua tatu e
, i
ΠΈ p
husiana na ufanisi, urithi na kupatikana seti kwa mtiririko huo. Kwa hivyo, maelezo ya awali:
sudo setcap cap_net_raw=eip tracewalk
...inaonyesha kuwa azimio hilo CAP_NET_RAW
lazima iongezwe kwa seti zinazopatikana na zinazoweza kurithiwa na kwamba biti yenye ufanisi lazima pia iwekwe. Hii itafuta ruhusa zozote zilizowekwa kwenye faili. Ili kuweka ruhusa nyingi kwa wakati mmoja, tumia orodha iliyotenganishwa kwa koma:
sudo setcap cap_net_admin,cap_net_raw=eip tracewalk
Kwanza, uwezo wa faili haufanyi kazi na ulinganifu - lazima uitumie kwa faili ya binary yenyewe (yaani lengo la ulinganifu).
Pili, hazifanyi kazi na maandishi yaliyotafsiriwa. Kwa mfano, ikiwa una hati ya Python ambayo unataka kupeana ruhusa, lazima uikabidhi kwa mkalimani wa Python yenyewe. Ni wazi kuwa hili ni suala la usalama linalowezekana kwa sababu basi hati zote zinazotekelezwa na mkalimani huyo zitakuwa na ruhusa maalum, ingawa hii bado ni bora zaidi kuliko kuifanya SUID. Njia ya kawaida ya kufanya kazi inaonekana kuwa kuandika inayoweza kutekelezwa katika C au sawa ambayo inaweza kufanya shughuli zinazohitajika na kuiita kutoka kwa hati. Hii ni sawa na mbinu inayotumiwa na Wireshark ambayo hutumia binary /usr/bin/dumpcap
kufanya shughuli za upendeleo:
$ getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip
Tatu, ruhusa za faili zimezimwa ikiwa unatumia mabadiliko ya mazingira LD_LIBRARY_PATH
kwa sababu za kiusalama zilizo wazi(1). hiyo inatumika kwa LD_PRELOAD
, nijuavyo mimi.
1. Kwa kuwa mshambulizi anaweza kubadilisha moja ya maktaba ya kawaida na kutumia LD_LIBRARY_PATH
kulazimisha maktaba yake kuitwa kwa upendeleo kwa mfumo wa kwanza, na kwa hivyo kuwa na nambari yake ya kiholela inayotekelezwa kwa haki sawa na programu ya kupiga simu.
Ni hayo tu. Maelezo zaidi juu ya mpango wa kozi yanaweza kupatikana
Chanzo: mapenzi.com