αž‚αž˜αŸ’αžšαŸ„αž„αžŠαžΎαž˜αŸ’αž”αžΈαž”αž‰αŸ’αž‡αžΌαž“αž™αž“αŸ’αžαž€αžΆαžšαž•αŸ’αžαžΆαž…αŸ‹αž€αžΆαžšαžŸαž“αŸ’αž™αžΆαž‘αŸ…αž›αžΈαž“αž»αž…

αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αž“αŸƒαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš Cosmopolitan C αž“αž·αž„αžœαŸαž‘αž·αž€αžΆ Redbean αž”αžΆαž“αž”αŸ’αžšαž€αžΆαžŸαž–αžΈαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž™αž“αŸ’αžαž€αžΆαžšαž―αž€αŸ„ pledge() αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž›αžΈαž“αž»αž…αŸ” αž€αžΆαžšαžŸαž“αŸ’αž™αžΆαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ†αž”αžΌαž„αžŠαŸ„αž™αž‚αž˜αŸ’αžšαŸ„αž„ OpenBSD αž αžΎαž™αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž αžΆαž˜αžƒαžΆαžαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž–αžΈαž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž€αžΆαžšαž αŸ…αž‘αžΌαžšαžŸαž–αŸ’αž‘αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž˜αž·αž“αž”αŸ’αžšαžΎ (αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž”αž‰αŸ’αž‡αžΈαžŸαž“αŸƒαž€αžΆαžšαž αŸ…αžαžΆαž˜αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž αžΎαž™αž€αžΆαžšαž αŸ…αž‘αžΌαžšαžŸαž–αŸ’αž‘αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž αžΆαž˜αžƒαžΆαžαŸ‹)αŸ” αž˜αž·αž“αžŠαžΌαž…αž™αž“αŸ’αžαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎ syscall αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž›αžΈαž“αž»αž… αžŠαžΌαž…αž‡αžΆ seccomp αž‘αŸ αž™αž“αŸ’αžαž€αžΆαžšαžŸαž“αŸ’αž™αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αž–αžΈαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžšαž αžΌαžαžŠαž›αŸ‹αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ’αžšαžΎαžαžΆαž˜αžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αŸ”

αž‚αŸ†αž“αž·αžαž•αŸ’αžαž½αž…αž•αŸ’αžαžΎαž˜αžŠαŸ‚αž›αž”αžšαžΆαž‡αŸαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‰αŸ‚αž€αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž™αžΆαž€αžΆαžŸαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ OpenBSD αžŠαŸ„αž™αž”αŸ’αžšαžΎαž™αž“αŸ’αžαž€αžΆαžš systrace αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαžΆ αž—αžΆαž–αž―αž€αŸ„αž“αŸ…αž€αž˜αŸ’αžšαž·αžαž“αŸƒαž€αžΆαžšαž αŸ…αžαžΆαž˜αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αž»αž‚αŸ’αž‚αž›αž‚αžΊαžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž–αŸαž€ αž“αž·αž„αž…αŸ†αžŽαžΆαž™αž–αŸαž›αž…αŸ’αžšαžΎαž“αŸ” αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαž˜αž½αž™ αž€αžΆαžšαžŸαž“αŸ’αž™αžΆαž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαŸ’αž“αžΎαž‘αžΎαž„ αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž”αž„αŸ’αž€αžΎαžαž…αŸ’αž”αžΆαž”αŸ‹αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αž αž“αž·αž„αžšαŸ€αž”αž…αŸ†αžαŸ’αž“αžΆαž€αŸ‹αž…αžΌαž›αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αžαŸ’αžšαŸ€αž˜αžšαž½αž…αž‡αžΆαžŸαŸ’αžšαŸαž…αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αžαŸ’αž“αžΆαž€αŸ‹αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αž‡αžΌαž“αž‚αžΊ stdio (αž”αž‰αŸ’αž…αžΌαž›/αž‘αž·αž“αŸ’αž“αž•αž›) rpath (αžαŸ‚αž’αžΆαž“αž―αž€αžŸαžΆαžš) wpath (αž€αžΆαžšαžŸαžšαžŸαŸαžšαž―αž€αžŸαžΆαžš) cpath (αž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžš) tmppath (αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž―αž€αžŸαžΆαžšαž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“) inet (αžšαž“αŸ’αž’αž”αžŽαŸ’αžαžΆαž‰) unix (unix αžšαž“αŸ’αž’), dns (αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ DNS), getpw (αž’αžΆαž“αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹), ioctl (αž€αžΆαžšαž αŸ…αž‘αžΌαžšαžŸαž–αŸ’αž‘ ioctl), proc (αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš), exec (αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš) αž“αž·αž„αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹ (αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž)αŸ”

αž…αŸ’αž”αžΆαž”αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž€αžΆαžšαž αŸ…αž‘αžΌαžšαžŸαž–αŸ’αž‘αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž“αŸƒαž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αžŠαŸ‚αž›αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž”αž‰αŸ’αž‡αžΈαž“αŸƒαžαŸ’αž“αžΆαž€αŸ‹αž αŸ…αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž”αžΆαž“αž’αž“αž»αž‰αŸ’αž‰αžΆαž αž“αž·αž„αž’αžΆαžšαŸαž“αŸƒαž•αŸ’αž›αžΌαžœαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž”αž„αŸ’αž€αžΎαž αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ‚αž”αŸ’αžšαŸ‚ αžαžΊαžŽαŸ‚αž›αž“αžΉαž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαž„αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αžΆαžšαž’αž“αž»αž›αŸ„αž˜αžαžΆαž˜αž…αŸ’αž”αžΆαž”αŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αŸ”

αžŠαŸ„αž™αž‘αŸ‚αž€αž–αžΈαž‚αŸ’αž“αžΆ αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαžŸαž“αŸ’αž™αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ FreeBSD αž€αŸ†αž–αž»αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„ αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžŠαŸ„αž™αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‰αŸ‚αž€αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αžΌαžŠαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸ αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž“αŸ…αž€αŸ’αž“αž»αž„ OpenBSD αž€αžΆαžšαž αŸ…αžŸαž“αŸ’αž™αžΆαž‚αžΊαžŸαŸ†αžŠαŸ…αž›αžΎαž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž™αŸ‰αžΆαž„αžαžΉαž„αžšαŸ‰αžΉαž„αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αžšαž·αž™αžΆαž€αžΆαžŸαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ αž“αž·αž„αž”αž“αŸ’αžαŸ‚αž˜αž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž‘αŸ…αž€αžΆαž“αŸ‹αž€αžΌαžŠαž“αžΈαž˜αž½αž™αŸ—αŸ” αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ”

αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž“αŸƒαž…αŸ’αžšαž€αž›αžΈαž“αž»αž…αž“αŸƒαž€αžΆαžšαžŸαž“αŸ’αž™αžΆαž”αžΆαž“αž™αž€αž§αž‘αžΆαž αžšαžŽαŸ FreeBSD αž αžΎαž™αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αžΌαžŠ αž”αžΆαž“αžšαŸ€αž”αž…αŸ†αž§αž”αž€αžšαžŽαŸαž”αž“αŸ’αžαŸ‚αž˜ pledge.com αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„αžŠαŸ„αž™αž˜αž·αž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αžΌαžŠαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ curl αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαžαŸ‚αžαŸ’αž“αžΆαž€αŸ‹αž αŸ…αž”αŸ’αžšαž–αŸαž“αŸ’αž’ stdio, rpath, inet, αž“αž·αž„ threadstdio αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš "./pledge.com -p 'stdio rpath inet thread' curl http://example.com" .

αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŸαž“αŸ’αž™αžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αž›αžΈαž“αž»αž…αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈ RHEL6 αž αžΎαž™αž˜αž·αž“αžαŸ’αžšαžΌαžœαž€αžΆαžšαžŸαž·αž‘αŸ’αž’αž·αž‡αžΆ root αž‘αŸαŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžŸαž€αž› API αž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž‡αžΌαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠαž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ…αž€αŸ’αž“αž»αž„αž—αžΆαžŸαžΆ C αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž”αž„αŸ’αž€αžΎαž enclaves αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž˜αž»αžαž„αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ”

αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž˜αž·αž“αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαžΊαžŽαŸ‚αž›αž‘αŸ - αž€αžΆαžšαžšαžΉαžαž”αž“αŸ’αžαžΉαž„αž€αžΆαžšαžŸαž“αŸ’αž™αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž€αž”αŸ’αžšαŸ‚αž‘αŸ…αž‡αžΆαž…αŸ’αž”αžΆαž”αŸ‹ SECOMP 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_STUMTAL BPF_K, ~0x80800), /* L6*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 1, 8 - 7, 0), /* L7*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_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), /*L12*/BPFJ (BPF_JMP | BPF_JEQ | BPF_K, 10, 0 - 10, 6), /*L12*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 11, 0, 11 - 17), /*L0*/ BPPPF_MTRE, BPPF_MTRE αž’αž“αž»αž‰αŸ’αž‰αžΆαž ), /*L13*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(nr)), /*L11*/ /* αžαž˜αŸ’αžšαž„αž”αž“αŸ’αž‘αžΆαž”αŸ‹ */ };

αž”αŸ’αžšαž—αž–: opennet.ru

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹