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

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

рд╕рд┐рд╕реНрдЯреНрд░реЗрд╕ рдореЗрдХрд╛рдирд┐рдЬрдо рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ OpenBSD рдЖрдзрд╛рд░ рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрд▓рд╛рдИ рдЕрд▓рдЧ рдЧрд░реНрди рдЕрд╕рдлрд▓ рдкрд╣рд▓рд▓реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рдгрд╛рд▓реА рдХрд▓рд╣рд░реВрдХреЛ рд╕реНрддрд░рдорд╛ рдЕрд▓рдЧрд╛рд╡ рдзреЗрд░реИ рдЬрдЯрд┐рд▓ рд░ рд╕рдордп рдЦрдкрдд рдЧрд░реНрдиреЗ рджреЗрдЦрд╛рдПрдХреЛ рдЫред рдПрдХ рд╡рд┐рдХрд▓реНрдкрдХреЛ рд░реВрдкрдорд╛, рдПрдЙрдЯрд╛ рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рдЬрд╕рд▓реЗ рд╡рд┐рд╡рд░рдгрд╣рд░реВрдорд╛ рдирдЬрд╛рдЗрдХрди рд░ рддрдпрд╛рд░ рдкрд╣реБрдБрдЪ рдХрдХреНрд╖рд╛рд╣рд░реВ рд╣реЗрд░рдлреЗрд░ рдирдЧрд░реА рдЕрд▓рдЧрд╛рд╡ рдирд┐рдпрдорд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдпреЛред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░рд┐рдПрдХрд╛ рдХрдХреНрд╖рд╛рд╣рд░реВ stdio (рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ), rpath (рдлрд╛рдЗрд▓рд╣рд░реВ рдорд╛рддреНрд░ рдкрдвреНрдиреЗ), wpath (рдлрд╛рдЗрд▓рд╣рд░реВ рд▓реЗрдЦреНрдиреЗ), cpath (рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ), tmppath (рдЕрд╕реНрдерд╛рдпреА рдлрд╛рдЗрд▓рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗ), inet (рдиреЗрдЯрд╡рд░реНрдХ рд╕рдХреЗрдЯрд╣рд░реВ), рдпреБрдирд┐рдХреНрд╕ (рдпреБрдирд┐рдХреНрд╕) рд╣реБрдиреНред рд╕рдХреЗрдЯрд╣рд░реВ), dns (DNS рд░рд┐рдЬреЛрд▓реНрдпреБрд╕рди), getpw (рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдкрд╣реБрдБрдЪ рдкрдвреНрдиреБрд╣реЛрд╕реН), ioctl (рдХрд▓ ioctl), proc (рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рдпрдиреНрддреНрд░рдг), exec (рдкреНрд░рд╛рд░рдореНрдн рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ), рд░ id (рдЕрдиреБрдорддрд┐ рдирд┐рдпрдиреНрддреНрд░рдг)ред

рдкреНрд░рдгрд╛рд▓реА рдХрд▓рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗ рдирд┐рдпрдорд╣рд░реВ рдПрдиреЛрдЯреЗрд╕рдирд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ рдЬрд╕рдорд╛ рдЕрдиреБрдорддрд┐ рджрд┐рдЗрдПрдХреЛ рдкреНрд░рдгрд╛рд▓реА рдХрд▓ рд╡рд░реНрдЧрд╣рд░реВрдХреЛ рд╕реВрдЪреА рд░ рдкрд╣реБрдБрдЪ рдЕрдиреБрдорддрд┐ рджрд┐рдЗрдПрдХреЛ рдлрд╛рдЗрд▓ рдорд╛рд░реНрдЧрд╣рд░реВрдХреЛ рдПрд░реНрд░реЗ рд╕рдорд╛рд╡реЗрд╢ рдЫред рдкрд░рд┐рдорд╛рд░реНрдЬрд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдирд┐рд░реНрдорд╛рдг рд░ рд╕рдЮреНрдЪрд╛рд▓рди рдЧрд░реЗрдкрдЫрд┐, рдХрд░реНрдиреЗрд▓рд▓реЗ рддреЛрдХрд┐рдПрдХрд╛ рдирд┐рдпрдорд╣рд░реВрдХреЛ рдкрд╛рд▓рдирд╛ рдЕрдиреБрдЧрдорди рдЧрд░реНрдиреЗ рдХрд╛рдо рд▓рд┐рдиреНрдЫред

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

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

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

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирд▓рд╛рдИ рдХрд░реНрдиреЗрд▓рдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрди - рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдкреНрд░рддрд┐рдмрдиреНрдзрд╣рд░реВ SECOMP BPF рдирд┐рдпрдорд╣рд░реВрдорд╛ рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдиреНрдЫ рд░ рдиреЗрдЯрд┐рдн рд▓рд┐рдирдХреНрд╕ рдкреНрд░рдгрд╛рд▓реА рдХрд▓ рдЕрд▓рдЧрд╛рд╡ рд╕рдВрдпрдиреНрддреНрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рд╢реЛрдзрди рдЧрд░рд┐рдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдХрд▓рд┐рдЩ pledge("stdio rpath", 0) рд▓рд╛рдИ BPF рдлрд┐рд▓реНрдЯрд░ static const struct sock_filter kFilter[] = { /* L0*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, syscall, 0, 14) рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░рд┐рдиреЗрдЫред , / * L1*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(args[1])), /* L0*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 2, 2 - 4, 3), /* L0* BPF_JUMP( BPF_JMP | BPF_JEQ | BPF_K, 3, 10, 0 - 13), /* L4*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(args[4])), /* L1*/ BPF_STM | BPF_STM | BPF_K, ~5x0), /* L80800*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 6, 1 - 8, 7), /* L0*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_7, -2), /* L0*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(args[13])), /* L8*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 8, 2 - 9, 0), /*BP_FJ* (BPF_JMP | BPF_JEQ | BPF_K, 12, 10 - 0, 10), /*L6*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 12, 11, 0 - 11), /*L17, 0 - 13) рдЕрдиреБрдорддрд┐ рджрд┐рдиреБрд╣реЛрд╕реН ), /*L11*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(nr)), /*L12*/ /* рдЕрд░реНрдХреЛ рдлрд┐рд▓реНрдЯрд░ */ };

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди