ืžืชื›ื ื ืช ืœื—ื–ืง ืืช ืžื ื’ื ื•ืŸ ื”ืื‘ื˜ื—ื” W^X ืฉืœ OpenBSD

ืชื™ืื• ื“ื” ืจืืื“ื˜ ืžืฉื•ืชืฃ ืžืชื›ื ื ืช ืœื—ื–ืง ืืช ืžื ื’ื ื•ืŸ ื”ื’ื ืช ื”ื–ื™ื›ืจื•ืŸ W^X (Write XOR Execute). ื”ืžื”ื•ืช ืฉืœ ื”ืžื ื’ื ื•ืŸ ื”ื™ื ืฉืœื ื ื™ืชืŸ ืœื’ืฉืช ืœื“ืคื™ ื–ื™ื›ืจื•ืŸ ืชื”ืœื™ืš ื‘ื• ื–ืžื ื™ืช ืœื›ืชื™ื‘ื” ื•ืœื‘ื™ืฆื•ืข. ืœืคื™ื›ืš, ื ื™ืชืŸ ืœื”ืคืขื™ืœ ืงื•ื“ ืจืง ืœืื—ืจ ืฉื”ื›ืชื™ื‘ื” ืžื•ืฉื‘ืชืช, ื•ื›ืชื™ื‘ื” ืœื“ืฃ ื–ื™ื›ืจื•ืŸ ืืคืฉืจื™ืช ืจืง ืœืื—ืจ ืฉื”ื‘ื™ืฆื•ืข ืžื•ืฉื‘ืช. ืžื ื’ื ื•ืŸ W^X ืขื•ื–ืจ ืœื”ื’ืŸ ืขืœ ื™ื™ืฉื•ืžื™ ืžืจื—ื‘ ืžืฉืชืžืฉ ืžืคื ื™ ื”ืชืงืคื•ืช ื’ืœื™ืฉื” ื ืคื•ืฆื•ืช ื‘ืžืื’ืจ, ื›ื•ืœืœ ื”ืฆืคืช ืžื—ืกื ื™ืช, ื•ืคืขื™ืœ ื‘-OpenBSD ื›ื‘ืจื™ืจืช ืžื—ื“ืœ.

ืžืชื—ื™ืœืช ื”ืขื‘ื•ื“ื” ืขืœ W^X, ื”ื™ื” ื‘ืจื•ืจ ืฉื–ื• ื“ืจืš ืืจื•ื›ื”, ืฉื›ืŸ ื™ืฉ ืžืกืคืจ ืœื ืžื‘ื•ื˜ืœ ืฉืœ ื™ื™ืฉื•ืžื™ื ื”ืžืฉืชืžืฉื™ื ื‘-JIT. ื ื™ืชืŸ ืœื—ืœืง ื™ื™ืฉื•ืžื™ JIT ืœืฉืœื•ืฉ ืงื˜ื’ื•ืจื™ื•ืช:

  • ื”ื—ืœืคืช ื–ื™ื›ืจื•ืŸ ื‘ื™ืŸ ืžืฆื‘ื™ W ื•-X, ืงื‘ืœืช ื”"ืขืœื•ืช" ืฉืœ ืฉื™ื—ืช ื”ืžืขืจื›ืช mpprotect.
  • ื™ืฆื™ืจืช ื›ื™ื ื•ื™ื™ื ื‘ื™ืŸ ื–ื•ื’ ืžื™ืคื•ื™ W ื•-X ืฉืœ ืื•ืชื• ื–ื™ื›ืจื•ืŸ.
  • ื”ืืคืฉืจื•ืช ื”"ืžืœื•ื›ืœื›ืช" ื‘ื™ื•ืชืจ ื“ื•ืจืฉืช ืžื•ื“ืœ ื–ื™ื›ืจื•ืŸ W|X ื”ืžืืคืฉืจ ื”ืงืœื˜ื” ื•ื‘ื™ืฆื•ืข ื‘ื• ื–ืžื ื™ืช.

ื ื›ื•ืŸ ืœืขื›ืฉื™ื•, ื™ืฉ ื”ืจื‘ื” ืคื—ื•ืช ืชื•ื›ื ื™ื•ืช ื”ืžืฉืชืžืฉื•ืช ื‘ืืคืฉืจื•ืช ื”ืฉืœื™ืฉื™ืช ื•ื™ื•ืชืจ ื”ืžืฉืชืžืฉื•ืช ื‘-XNUMX ื•ื‘ืฉื ื™ื™ื”. ืขื ื–ืืช, ืžื›ื™ื•ื•ืŸ ืฉื”ื™ื” ืฆื•ืจืš ืœื”ืจื™ืฅ ืชื•ื›ื ื™ื•ืช ืขื W|X JIT (ื‘ืขื™ืงืจ Chromium ื•-Iridum), ื ื•ืกืคื” ืืคืฉืจื•ืช ื”ืจื›ื‘ื” ืฉืœ ืžืขืจื›ืช ื”ืงื‘ืฆื™ื "wxallowed", ืฉืืคืฉืจื” ืœื”ืฉืชืžืฉ ื‘ื–ื™ื›ืจื•ืŸ ื‘ื•-ื–ืžื ื™ืช ืœื›ืชื™ื‘ื” ื•ืœื‘ื™ืฆื•ืข, ืœืžืงืจื” ืฉ-ELF ื‘ืจ ื”ื”ืคืขืœื”. ื”ืงื•ื‘ืฅ ืžืกื•ืžืŸ ื‘ืกืžืŸ "wxneeded", ื•ื”ื™ื™ืฉื•ืžื™ื ืขืฆืžื ื”ื™ื• ืžื•ื’ื ื™ื ื‘ื ื•ืกืฃ ื‘ืืžืฆืขื•ืช ืžื ื’ื ื•ื ื™ื ืžืฉื›ื•ืŸ ะธ ืœึทื—ืฉื‚ื•ึนืฃ ืœื”ื’ื‘ื™ืœ ืืช ืจืฉื™ืžืช ืงืจื™ืื•ืช ื”ืžืขืจื›ืช ื‘ืฉื™ืžื•ืฉ ื•ื—ืœืงื™ื ืžืžืขืจื›ืช ื”ืงื‘ืฆื™ื ื”ื–ืžื™ื ื™ื ืœืืคืœื™ืงืฆื™ื”, ื‘ื”ืชืืžื”.

ื›ื“ื™ ืœืกื‘ืš ืขื•ื“ ื™ื•ืชืจ ืืช ื ื™ืฆื•ืœ ื ืงื•ื“ื•ืช ื”ืชื•ืจืคื” ื‘ื™ื™ืฉื•ืžื™ื ื›ืืœื”, ืžื•ืฆืขืช ืชื•ืกืคืช ืœืžื ื’ื ื•ืŸ MAP_STACK, ืฉื‘ื•ื“ืง ืื ืงืจื™ืืช ื”ืžืขืจื›ืช ืžื‘ื•ืฆืขืช ืžื“ืฃ ื–ื™ื›ืจื•ืŸ ื”ื ื™ืชืŸ ืœื›ืชื™ื‘ื”. ืื ื”ื“ืฃ ื ื™ืชืŸ ืœื›ืชื™ื‘ื”, ื”ืชื”ืœื™ืš ื ืืœืฅ ืœื”ืกืชื™ื™ื. ื‘ื“ืจืš ื–ื•, ืชื•ืงืฃ ืœื ื™ื•ื›ืœ ืœื ืฆืœ ืฉื™ื—ื•ืช ืžืขืจื›ืช ื•ื™ื™ืืœืฅ ืœื ืกื•ืช ืœืžืฆื•ื ืืช ื”ื’ืื“ื’'ื˜ื™ื ื”ื“ืจื•ืฉื™ื ื‘ื™ื™ืฉื•ื JIT ืื• ืืคื™ืœื• ืœืขืฉื•ืช ืืช ื”ืขื‘ื•ื“ื” ื”ืงืฉื” ื™ื•ืชืจ ืฉืœ ื–ื™ื”ื•ื™ ืงื˜ืขื™ ืฉื™ื—ื•ืช ืžืขืจื›ืช ื™ืฉื™ืจื•ืช ื‘ืคื ื™ื ืงื™ืฉื•ืจ libc ื‘ื˜ืขื•ืช.

ืชื”ืœื™ื›ื™ ื›ืจื•ื/ืื™ืจื™ื“ื™ื•ื ื›ื‘ืจ ืžื•ื’ื ื™ื ื‘ืฆื•ืจื” ืืžื™ื ื” ืœืžื“ื™ ื‘ืืžืฆืขื•ืช ื”ื‘ื˜ื—ื” ื•ื—ืฉื™ืคื”, ืืš ืœื”ืกืจืช ื”ื™ื›ื•ืœืช ืœื”ืฉืชืžืฉ, ืœืžืฉืœ, ื‘ืงืจื™ืื” ืœืžืขืจื›ืช write(2) ื™ืฉ ื›ืžื•ื‘ืŸ ื™ืชืจื•ืŸ ืžืกื•ื™ื, ืžื›ื™ื•ื•ืŸ ืฉื”ื™ื ื™ื•ืฆืจืช ืงืฉื™ื™ื ื ื•ืกืคื™ื ืขื‘ื•ืจ ื”ืชื•ืงืฃ. ืขื ื–ืืช, ืงืฉื™ื™ื ื™ื›ื•ืœื™ื ืœื”ืชืขื•ืจืจ ื’ื ืื ื™ื™ืฉื•ื JIT ืžืฉืชืžืฉ ื‘ืงืจื™ืื•ืช ืžืขืจื›ืช ืžืงื•ืจื™ื•ืช ืžื–ื™ื›ืจื•ืŸ W|X. ืขื ื–ืืช, ื™ืฉ ืกื™ื‘ื” ืœืงื•ื•ืช ืฉื–ื” ืœื ื™ื”ื™ื” ื›ืš, ืฉื›ืŸ ื”-ABI ื”ื•ื—ืœืฃ ืžืกืคืจ ืคืขืžื™ื, ืืš ืื™ืฉ ืžืขื•ืœื ืœื ื“ื™ื•ื•ื— ืขืœ ื‘ืขื™ื•ืช.

ื”ืฉื™ื ื•ื™ื™ื ื›ื‘ืจ ื–ืžื™ื ื™ื ื‘ืชืฆืœื•ืžื™ื ืจื’ื™ืœื™ื ืฉืœ ืกื ื™ืฃ OpenBSD-Current, ื›ืœ ื”ืžืขื•ื ื™ื™ื ื™ื ืžื•ื–ืžื ื™ื ืœื‘ื“ื•ืง.

ื—ื“ืฉื•ืช ืงืฉื•ืจื•ืช ืœื’ื‘ื™ ื”ื•ืคืขืช ื”ืžืฆื‘ ื‘ื›ืจื•ื/ืื™ืจื™ื“ื™ื•ื ืจืื•ื™ื•ืช ืœื”ืขืจื” ื ืคืจื“ืช ืžืชื™ืื• ืœืœื JIT. ืžื ืงื•ื“ืช ื”ืžื‘ื˜ ืฉืœื•, ื–ื” ืžืงื•ื‘ืœ ืขืœ ื“ื’ืžื™ ืฉื™ืžื•ืฉ ืžืกื•ื™ืžื™ื, ืื‘ืœ ื›ื ืจืื” ืœื ืขืœ ื›ื•ืœื, ืฉื›ืŸ ืžืฆื‘ ื–ื” ื™ื’ื‘ื™ืจ ื›ืžื•ื‘ืŸ ืืช ื”ืขื•ืžืก ืขืœ ื”ืžืขื‘ื“. ื ื›ื•ืŸ ืœืขื›ืฉื™ื•, Chrome ื™ืขื‘ื•ื“ ื‘ืขื™ืงืจ ืื ืชืฉื‘ื™ืช ืืช "wxallowed" ืขื‘ื•ืจ /usr/local, ืื ื›ื™ ืขืฉื•ื™ื•ืช ืœื”ื™ื•ืช ื‘ืขื™ื•ืช ืขื ื›ืžื” ืชื•ืกืคื™ื (ghosty ื”ื™ื ื“ื•ื’ืžื”). ื›ืš ืื• ืื—ืจืช, ืชื™ืื• ืžืงื•ื•ื” ืฉืขื‘ื•ื“ื” ืžืœืื” ื‘ืžืฆื‘ JITless ืชื•ื‘ื ืœืžืฆื‘ ืžื‘ืฆืขื™ ืžืœื ื‘ืขืชื™ื“ ื”ืงืจื•ื‘.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”