Nā ʻae waihona ma Linux

Aloha kākou. Ke hoʻomaka nei mākou i ka hana a ke hoʻomākaukau nei mākou i nā hoʻolaha ikaika i Ianuali. Ma waena o nā mea ʻē aʻe, ua hoʻolaha ʻia ke kau inoa ʻana no kahi kahawai hou o ka papa punahele a kēlā me kēia. "Ka Luna Hoʻokele Linux". No ka hoʻomaka ʻana, kaʻana like mākou i nā unuhi o nā mea pono.

Nā ʻae waihona ma Linux

Hāʻawi nā ʻae faila i kahi koho palekana i nā mea hoʻokō SUID, akā hiki ke ʻike i kahi huikau i ka wā mua.


ʻIke mākou a pau i kēlā binaries KA HEMA mau hoʻoholo maikaʻi ʻole mai kahi ʻano palekana. ʻO ka mea pōmaikaʻi, inā makemake kāu noi i kekahi mau pono i kaupalena ʻia, aia kahi ala ʻoi aku ka maikaʻi i kapa ʻia palapala ʻae.

E mālama au iā ʻoe i kekahi manawa inā makemake ʻoe e pale i ka heluhelu ʻana i ka ʻatikala ma luna me ka kikoʻī: ʻO ka mea nui, ʻae ʻia nā ʻae faila i nā kaʻina hana e holo ma ke kumu a no laila ua ʻae ʻia e hana i kekahi mea e mālama i kekahi mau mana, kaupalena ʻia. keia papa inoai ka wā e hāʻule ai lākou i nā pono a e holo ʻia e kahi mea hoʻohana pono ʻole. ʻO ia ke ʻano inā hoʻokō ka mea hoʻouka i kahi kaʻina hana me ka hoʻohana ʻana i ka buffer overflow a i ʻole nā ​​​​mea hoʻohana ʻē aʻe, ʻaʻole hiki iā lākou ke hoʻohana i nā mea ʻē aʻe ma mua o kekahi mau pono liʻiliʻi e pono ai ke kaʻina hana.

He maikaʻi nā ʻae no nā lawelawe e holo mau nei ma ke ʻano he kumu, akā pehea e pili ana i nā pono laina kauoha? ʻO ka mea pōmaikaʻi, kākoʻo ʻia kēia inā loaʻa iā ʻoe nā pono pono i kau ʻia. Inā ʻoe e hoʻohana nei i ka Ubuntu, pono ʻoe i ka pōʻai libcap2-bin. Pono ʻoe e holo i kahi kernel non-archaic (mai ka version 2.6.24).

Hāʻawi kēia mau hana i nā ʻae e pili pū me nā faila hiki ke hoʻokō ʻia, e like me ka hoʻonohonoho ʻana i ka bit SUID, akā no nā ʻae kikoʻī wale nō. Mea hoohana setcap hoʻohana ʻia e hoʻohui a wehe i nā ʻae mai kahi faila.

ʻO ka hana mua ke koho i nā ʻae āu e pono ai. No ka pono o kēia ʻatikala, ke manaʻo nei au aia kahi mea hana diagnostic network i kapa ʻia tracewalk, i hiki ke hoohana nā kumu maka. Pono kēia e holo i ka noi ma ke ʻano he aʻa, akā i ka nānā ʻana ka papa inoa ʻo ka ʻae wale nō ke koi ʻia CAP_NET_RAW.

Ke manaʻo nei aia ʻoe i ka papa kuhikuhi kahi i loaʻa ai ka binary tracewalk, hiki iā ʻoe ke hoʻohui i kēia ʻae e like me kēia:

sudo setcap cap_net_raw=eip tracewalk

E haʻalele i ka suffix i kēia manawa =eip no ka hoʻoholo ʻana, e kamaʻilio wau e pili ana i kēlā i loko o ʻelua mau kekona. E hoʻomanaʻo, aia ka inoa ʻae ma ka huaʻōlelo liʻiliʻi. Hiki iā ʻoe ke nānā inā ua hoʻonohonoho pololei ʻoe i nā ʻae me:

setcap -v cap_new_raw=eip tracewalk

A i ʻole hiki iā ʻoe ke papa inoa i nā ʻae āpau i hoʻonohonoho ʻia no kahi hoʻokō i hāʻawi ʻia:

getcap tracewalk

No ka ʻike, hiki iā ʻoe ke wehe i nā ʻae āpau mai ka mea hoʻokō me:

setcap -r tracewalk

I kēia manawa, hiki iā ʻoe ke holo i ka executable ma ke ʻano he mea hoʻohana pono ʻole, a hiki iā ia ke hana me nā kumu maka, akā ʻaʻole loaʻa kekahi o nā pono ʻē aʻe i loaʻa i ka mea hoʻohana kumu.

No laila he aha ke ʻano o kēia suffix ʻē? =eip? Pono kēia e hoʻomaopopo i ke ʻano o nā ʻae. Loaʻa i kēlā me kēia kaʻina hana ʻekolu mau ʻae − kūpono, hoʻoili a ʻae ʻia:

  • Pono ʻO nā ʻae ʻia nā mea e wehewehe i ke ʻano o ke kaʻina hana. No ka laʻana, ʻaʻole hiki ke hana me nā kumu maka inā CAP_NET_RAW ʻaʻole i loko o ka hoʻonohonoho kūpono.
  • Loaʻa ʻO nā ʻae ʻia nā mea i ʻae ʻia i kahi kaʻina hana inā noi ia iā lākou me ka hoʻohana ʻana i ke kelepona kūpono. Kāohi lākou i kahi kaʻina hana mai ka hana maoli ʻana i kekahi mea ke ʻole i kākau kikoʻī ʻia e noi i ʻae ʻia. Hāʻawi kēia i nā kaʻina hana e kākau e hoʻohui i nā ʻae koʻikoʻi i ka hoʻonohonoho kūpono no ka manawa i koi ʻia ai.
  • Hoʻoilina ʻO nā ʻae ʻia nā mea i hiki ke hoʻoili ʻia i loko o ka hoʻonohonoho hiki ke loaʻa o ke kaʻina hana keiki spawned. I ka wā ʻoki fork() ai ole ia, clone() Hāʻawi mau ʻia ke kaʻina hana keiki i kope o ka ʻae ʻana o ke kaʻina hana makua no ka mea e holo mau ana ia i ka hoʻokō like i kēlā manawa. Hoʻohana ʻia kahi pūʻulu hoʻoilina i ka wā exec() (a i ʻole like) ua kāhea ʻia e hoʻololi i ka faila hoʻokō me kekahi. I kēia manawa, uhi ʻia ka pūʻulu i loaʻa i ke kaʻina hana e ka hoʻonohonoho hoʻoilina no ka loaʻa ʻana o ka pūʻulu hiki ke hoʻohana ʻia no ke kaʻina hana hou.

No laila ka pono setcap hiki iā mākou ke hoʻohui i nā ʻae o kēia mau pūʻulu ʻekolu no kahi hoʻokō i hāʻawi ʻia. E hoʻomaopopo i ka unuhi ʻokoʻa ʻana o ka manaʻo o nā pūʻulu no nā ʻae faila:

  • Loaʻa ʻO nā ʻae faila nā mea i loaʻa mau i kahi faila hiki ke hoʻokō ʻia, ʻoiai inā ʻaʻole i loaʻa i ka kaʻina hana makua i kapa ʻia. Ua kapa ʻia lākou he ʻae "hoʻoikaika".
  • Hoʻoilina ʻae ʻia nā faila e wehewehe i kahi mask hou e hiki ke hoʻohana ʻia no ka wehe ʻana i nā ʻae mai ke kaʻina hana kelepona. Hoʻopili lākou i ka hoʻohui i hoʻoili ʻia o ke kaʻina kelepona, no laila e hoʻoili ʻia ka ʻae inā loaʻa ia ma nā pūʻulu ʻelua.
  • Kūpono ʻO ka ʻae ʻana i nā faila he ʻāpana hoʻokahi wale nō, ʻaʻole he hoʻonohonoho, a inā hoʻonohonoho ʻia, ʻo ia hoʻi, ua kope pū ʻia ka pūʻulu holoʻokoʻa i loaʻa i loko o ka hoʻonohonoho pono o ke kaʻina hana hou. Hiki ke hoʻohana ʻia kēia e hoʻohui i nā ʻae i nā kaʻina hana ʻaʻole i kākau kikoʻī ʻia e noi iā lākou. No ka mea he wahi iki, inā hoʻonoho ʻoe iā ia no kekahi ʻae, pono e hoʻonohonoho ʻia no nā ʻae āpau. Hiki iā ʻoe ke noʻonoʻo iā ia ma ke ʻano he legacy bit no ka mea ua hoʻohana ʻia ia e ʻae i nā ʻae e hoʻohana ʻia e nā noi i kākoʻo ʻole iā lākou.

Ke kuhikuhi nei i nā ʻae ma o setcap ʻekolu leka e, i и p e nānā i pono, hoʻoili a hiki ke loaʻa hoonoho pakahi. No laila, ʻo ka ʻōlelo mua:

sudo setcap cap_net_raw=eip tracewalk

...e hōʻike ana i ka ʻōlelo hoʻoholo CAP_NET_RAW pono e hoʻohui ʻia i nā pūʻulu i loaʻa a hoʻoili ʻia a pono e hoʻonohonoho pū ʻia ka bit kūpono. E hoʻopau kēia i nā ʻae i hoʻonohonoho mua ʻia ma ka faila. No ka hoʻonohonoho ʻana i nā ʻae he nui i ka manawa hoʻokahi, e hoʻohana i kahi papa inoa i hoʻokaʻawale ʻia i nā koma:

sudo setcap cap_net_admin,cap_net_raw=eip tracewalk

Alakaʻi ʻae ke kūkākūkā nei i kēia mau mea a pau, akā ke lana nei ka manaʻo ua hoʻokaʻawale kēia pou i ka mea e hana nei. He liʻiliʻi wale nō nā hoʻopaʻapaʻa a me nā hoʻopunipuni i koe e haʻi.

ʻO ka mea mua, ʻaʻole hana nā faila me nā symlinks - pono ʻoe e hoʻopili iā lākou i ka faila binary ponoʻī (ʻo ia hoʻi ka pahuhopu o ka symlink).

ʻO ka lua, ʻaʻole lākou e hana me nā palapala unuhi. No ka laʻana, inā loaʻa iā ʻoe kahi palapala Python āu e makemake ai e hāʻawi i ka ʻae, pono ʻoe e hāʻawi iā ia i ka unuhi ʻōlelo Python ponoʻī. ʻOiaʻiʻo, he pilikia palekana kēia no ka mea e loaʻa i nā palapala āpau i hana ʻia me kēlā unuhi ʻōlelo ka ʻae i ʻōlelo ʻia, ʻoiai ʻoi aku ka maikaʻi o kēia ma mua o ka hana ʻana iā SUID. ʻO ka workaround maʻamau ka mea e kākau i kahi hoʻokō ʻokoʻa i C a i ʻole like e hiki ke hana i nā hana pono a kāhea iā ia mai kahi palapala. Ua like kēia me ke ala i hoʻohana ʻia e Wireshark e hoʻohana ana i kahi binary /usr/bin/dumpcap e hana i nā hana pono:

$ getcap /usr/bin/dumpcap 
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip

ʻO ke kolu, hoʻopau ʻia nā ʻae faila inā hoʻohana ʻoe i kahi ʻano hoʻololi kaiapuni LD_LIBRARY_PATH no nā kumu palekana maopopo(1). Pela no hoi LD_PRELOAD, i ko'u ike.

1. No ka mea hiki i ka mea hoʻouka ke hoʻololi i kekahi o nā hale waihona puke maʻamau a hoʻohana LD_LIBRARY_PATHe koi aku i kona hale waihona puke e kapa ʻia ma mua o ka ʻōnaehana hoʻokahi, a no laila ua hoʻokō ʻia kāna code ponoʻī me nā pono like me ka noi kelepona.

ʻo ia wale nō. Hiki ke loaʻa nā kikoʻī hou aku e pili ana i ka papahana papa ma webinar, e hana ʻia ma Ianuali 24.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka