ప్రతిజ్ఞ ఐసోలేషన్ మెకానిజంను Linuxకు పోర్ట్ చేయడానికి ప్రాజెక్ట్

కాస్మోపాలిటన్ స్టాండర్డ్ C లైబ్రరీ మరియు రెడ్‌బీన్ ప్లాట్‌ఫారమ్ రచయిత Linux కోసం ప్రతిజ్ఞ() ఐసోలేషన్ మెకానిజం అమలును ప్రకటించారు. ప్లెడ్జ్ వాస్తవానికి OpenBSD ప్రాజెక్ట్ ద్వారా అభివృద్ధి చేయబడింది మరియు ఉపయోగించని సిస్టమ్ కాల్‌లను యాక్సెస్ చేయకుండా అప్లికేషన్‌లను ఎంచుకోకుండా నిషేధించడానికి మిమ్మల్ని అనుమతిస్తుంది (అప్లికేషన్ కోసం సిస్టమ్ కాల్‌ల యొక్క ఒక రకమైన వైట్ లిస్ట్ ఏర్పడుతుంది మరియు ఇతర కాల్‌లు నిషేధించబడ్డాయి). Linuxలో అందుబాటులో ఉన్న seccomp వంటి సిస్టమ్ కాల్ పరిమితి మెకానిజమ్‌ల వలె కాకుండా, ప్రతిజ్ఞ మెకానిజం వాస్తవానికి వీలైనంత సరళంగా రూపొందించబడింది.

సిస్ట్రేస్ మెకానిజంను ఉపయోగించి ఓపెన్‌బిఎస్‌డి బేస్ ఎన్విరాన్‌మెంట్‌లో అప్లికేషన్‌లను ఐసోలేట్ చేయడంలో విఫలమైన చొరవ వ్యక్తిగత సిస్టమ్ కాల్‌ల స్థాయిలో ఐసోలేషన్ చాలా క్లిష్టంగా మరియు సమయం తీసుకుంటుందని చూపించింది. ప్రత్యామ్నాయంగా, ఒక ప్రతిజ్ఞ ప్రతిపాదించబడింది, ఇది వివరాలలోకి వెళ్లకుండా మరియు రెడీమేడ్ యాక్సెస్ తరగతులను మార్చకుండా ఐసోలేషన్ నియమాలను రూపొందించడం సాధ్యం చేసింది. ఉదాహరణకు, stdio (ఇన్‌పుట్/అవుట్‌పుట్), rpath (రీడ్-ఓన్లీ ఫైల్‌లు), wpath (ఫైళ్లను వ్రాయడం), cpath (ఫైళ్లను సృష్టించడం), tmppath (తాత్కాలిక ఫైల్‌లతో పని చేయడం), inet (నెట్‌వర్క్ సాకెట్లు), unix ( unix సాకెట్లు) , dns (DNS రిజల్యూషన్), getpw (యూజర్ డేటాబేస్‌కు యాక్సెస్ చదవండి), ioctl (ioctl కాల్), proc (ప్రాసెస్ మేనేజ్‌మెంట్), ఎగ్జిక్యూటివ్ (ప్రాసెస్ లాంచ్) మరియు id (యాక్సెస్ రైట్స్ మేనేజ్‌మెంట్).

సిస్టమ్ కాల్‌లతో పని చేయడానికి నియమాలు ఉల్లేఖనాల రూపంలో పేర్కొనబడ్డాయి, సిస్టమ్ కాల్‌ల యొక్క అనుమతించబడిన తరగతుల జాబితా మరియు యాక్సెస్ అనుమతించబడిన ఫైల్ పాత్‌ల శ్రేణితో సహా. సవరించిన అప్లికేషన్‌ను రూపొందించి, ప్రారంభించిన తర్వాత, కెర్నల్ పేర్కొన్న నియమాలకు అనుగుణంగా పర్యవేక్షించే పనిని తీసుకుంటుంది.

FreeBSD కోసం ప్రతిజ్ఞ యొక్క ప్రత్యేక అమలు అభివృద్ధి చేయబడుతోంది, ఇది అప్లికేషన్‌లను వాటి కోడ్‌లో మార్పులు చేయకుండా వేరుచేసే సామర్థ్యంతో విభిన్నంగా ఉంటుంది, అయితే OpenBSDలో ప్రతిజ్ఞ కాల్ బేస్ ఎన్విరాన్‌మెంట్‌తో గట్టి ఏకీకరణ మరియు ప్రతి కోడ్‌కి ఉల్లేఖనాలను జోడించడం లక్ష్యంగా పెట్టుకుంది. అప్లికేషన్.

Linux కోసం ప్రతిజ్ఞ పోర్ట్ డెవలపర్లు FreeBSD యొక్క ఉదాహరణను తీసుకున్నారు మరియు కోడ్‌లో మార్పులు చేయడానికి బదులుగా, అప్లికేషన్ కోడ్‌ను మార్చకుండా పరిమితులను వర్తింపజేయడానికి మిమ్మల్ని అనుమతించే యాడ్-ఆన్ యుటిలిటీ pledge.comని సిద్ధం చేశారు. ఉదాహరణకు, కర్ల్ యుటిలిటీని stdio, rpath, inet మరియు threadstdio సిస్టమ్ కాల్ క్లాస్‌లకు మాత్రమే యాక్సెస్‌తో అమలు చేయడానికి, “./pledge.com -p 'stdio rpath inet thread' curl http://example.com”ని అమలు చేయండి.

ప్రతిజ్ఞ ప్రయోజనం RHEL6తో మొదలయ్యే అన్ని Linux పంపిణీలపై పని చేస్తుంది మరియు రూట్ యాక్సెస్ అవసరం లేదు. అదనంగా, కాస్మోపాలిటన్ లైబ్రరీ ఆధారంగా, C భాషలో ప్రోగ్రామ్ కోడ్‌లో పరిమితులను నిర్వహించడం కోసం API అందించబడుతుంది, ఇది ఇతర విషయాలతోపాటు, నిర్దిష్ట అప్లికేషన్ ఫంక్షన్‌లకు సంబంధించి యాక్సెస్‌ని ఎంచుకోవడానికి ఎన్‌క్లేవ్‌లను సృష్టించడానికి అనుమతిస్తుంది.

అమలుకు కెర్నల్‌లో మార్పులు అవసరం లేదు - ప్రతిజ్ఞ పరిమితులు SECCOMP BPF నియమాలలోకి అనువదించబడతాయి మరియు స్థానిక Linux సిస్టమ్ కాల్ ఐసోలేషన్ మెకానిజంను ఉపయోగించి ప్రాసెస్ చేయబడతాయి. ఉదాహరణకు, కాల్ ప్రతిజ్ఞ ("stdio rpath", 0) BPF ఫిల్టర్ స్టాటిక్ కాన్స్ట్ sock_filter kFilterకి మార్చబడుతుంది[] = { /* L0*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, syscall, 0 ), / * L14*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(args[1])), /* L1*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0, 2 -* 2, 4), / / BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, 3, 0, 3 - 10), /* L0*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(args[13])), /* L4*/BPF_ST_ | BPF_K, ~4x1), /* L5*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0, 80800 - 6, 1), /* L8*/ BPF_JUMP(BPF_JMP | BPF_JEQ, | BPF_JEQ, | 7, , /* L0*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(args[7])), /* L2*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0, 13 -*8, /*L8), /*L2 Bpf_jump (bpf_jmp | bpf_jeq | bpf_k, 9, 0 - 12, 10), /*l0* SECCOMP_RET_ALLOW), /*L10*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(nr)), /*L6*/ /* తదుపరి ఫిల్టర్ */ };

మూలం: opennet.ru

ఒక వ్యాఖ్యను జోడించండి