рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдЕрд▓рдЧрд╛рд╡ рддрдВрддреНрд░ рдХреЛ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛

рдХреЙрд╕реНрдореЛрдкреЙрд▓рд┐рдЯрди рдорд╛рдирдХ рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рд░реЗрдбрдмреАрди рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдЬреНрдЮрд╛() рдЕрд▓рдЧрд╛рд╡ рддрдВрддреНрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдШреЛрд╖рдгрд╛ рдХреА рд╣реИред рдкреНрд▓реЗрдЬ рдореВрд▓ рд░реВрдк рд╕реЗ рдУрдкрдирдмреАрдПрд╕рдбреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЖрдкрдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЕрдкреНрд░рдпреБрдХреНрдд рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдЪреБрдирд┐рдВрджрд╛ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреА рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдлреЗрдж рд╕реВрдЪреА рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдФрд░ рдЕрдиреНрдп рдХреЙрд▓ рдирд┐рд╖рд┐рджреНрдз рд╣реИрдВ)ред Linux рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдкреНрд░рддрд┐рдмрдВрдз рддрдВрддреНрд░, рдЬреИрд╕реЗ рдХрд┐ seccomp, рдХреЗ рд╡рд┐рдкрд░реАрдд, рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рддрдВрддреНрд░ рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╕рд┐рд╕реНрдЯреНрд░реЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдУрдкрдирдмреАрдПрд╕рдбреА рдмреЗрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЕрд╕рдлрд▓ рдкрд╣рд▓ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЗ рд╕реНрддрд░ рдкрд░ рдЕрд▓рдЧрд╛рд╡ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдФрд░ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рдерд╛ред рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреА рдЧрдИ, рдЬрд┐рд╕рдиреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рдЬрд╛рдиреЗ рдФрд░ рддреИрдпрд╛рд░ рдкрд╣реБрдВрдЪ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрд▓рдЧрд╛рд╡ рдирд┐рдпрдо рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджрд┐рдпрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ stdio (рдЗрдирдкреБрдЯ/рдЖрдЙрдЯрдкреБрдЯ), rpath (рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЗрдВ), wpath (рдлрд╝рд╛рдЗрд▓реЗрдВ рд▓рд┐рдЦреЗрдВ), cpath (рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдВ), tmppath (рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ), inet (рдиреЗрдЯрд╡рд░реНрдХ рд╕реЙрдХреЗрдЯ), рдпреВрдирд┐рдХреНрд╕ ( рдпреВрдирд┐рдХреНрд╕ рд╕реЙрдХреЗрдЯ), рдбреАрдПрдирдПрд╕ (рдбреАрдПрдирдПрд╕ рд░реЗрдЬреЛрд▓реНрдпреВрд╢рди), рдЧреЗрдЯрдкреАрдбрдмреНрд▓реНрдпреВ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдкрдврд╝реЗрдВ), рдЖрдИрдУрд╕реАрдЯреАрдПрд▓ (рдЖрдИрдУрд╕реАрдЯреАрдПрд▓ рдХреЙрд▓), рдкреНрд░реЛрдХ (рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдмрдВрдзрди), рдХрд╛рд░реНрдпрдХрд╛рд░реА (рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓реЙрдиреНрдЪ) рдФрд░ рдЖрдИрдбреА (рдкрд╣реБрдВрдЪ рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рдмрдВрдзрди)ред

рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдирд┐рдпрдо рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреА рдЕрдиреБрдордд рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕реВрдЪреА рдФрд░ рдлрд╝рд╛рдЗрд▓ рдкрдереЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд╣рд╛рдВ рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рд╕рдВрд╢реЛрдзрд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд▓реЙрдиреНрдЪ рдХреЗ рдмрд╛рдж, рдХрд░реНрдиреЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд╛ рдХрд╛рдо рдЕрдкрдиреЗ рд╣рд╛рде рдореЗрдВ рд▓реЗ рд▓реЗрддрд╛ рд╣реИред

рдлреНрд░реАрдмреАрдПрд╕рдбреА рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЙрдирдХреЗ рдХреЛрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рдЬрдмрдХрд┐ рдУрдкрдирдмреАрдПрд╕рдбреА рдореЗрдВ рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдХреЙрд▓ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЖрдзрд╛рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рдордЬрдмреВрдд рдПрдХреАрдХрд░рдг рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдХреЛрдб рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝рдирд╛ рд╣реИред рдЖрд╡реЗрджрди рдкрддреНрд░ред

рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрдЬ рдкреЛрд░реНрдЯ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдлреНрд░реАрдмреАрдПрд╕рдбреА рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдпрд╛ рдФрд░ рдХреЛрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рдРрдб-рдСрди рдпреВрдЯрд┐рд▓рд┐рдЯреА рдкреНрд▓реЗрдЬ.рдХреЙрдо рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬреЛ рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдкреНрд░рддрд┐рдмрдВрдз рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд░реНрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдХреЗрд╡рд▓ stdio, rpath, inet рдФрд░ threadstdio рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреНрд▓рд╛рд╕ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ "./pledge.com -p 'stdio rpath inet thread' cur http://example.com" рдЪрд▓рд╛рдПрдВред

рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛ RHEL6 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдгреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд░реВрдЯ рдПрдХреНрд╕реЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдХреЙрд╕реНрдореЛрдкреЙрд▓рд┐рдЯрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдореЗрдВ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЪреБрдирд┐рдВрджрд╛ рдкрд╣реБрдВрдЪ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдиреНрдХреНрд▓реЗрд╡ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ SECCOMP BPF рдирд┐рдпрдореЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореВрд▓ рд▓рд┐рдирдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЖрдЗрд╕реЛрд▓реЗрд╢рди рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЙрд▓ рдкреНрд▓реЗрдЬ ("stdio rpath", 0) рдХреЛ BPF рдлрд╝рд┐рд▓реНрдЯрд░ static const struct sock_filter kFilter[] = { /* L0*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, syscall, 0, 14 - 1) рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред ), / * L1*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(args[0])), /* L2*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 2, 4 - 3, 0), /* L3* / BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, 10, 0, 13 - 4), /* L4*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(args[1])), /* L5*/ BPF_STMT(BPF_ALU | BPF_AND | BPF_K, ~0x80800), /* L6*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 1, 8 - 7, 0), /* L7*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 2, 0, 13 - 8) , /* L8*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(args[2])), /* L9*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0, 12 - 10, 0), /*L10*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 6, 12 - 11, 0), /*L11*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 17, 0, 13 - 11), /*L12*/ BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_ALLOW), /*L13*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(nr)), /*L14*/ /* рдЕрдЧрд▓рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ */ };

рд╕реНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ