เบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเป€เบชเบตเบกเบชเป‰เบฒเบ‡เบเบปเบ™เป„เบเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบž W^X เบ‚เบญเบ‡ OpenBSD

Theo De Raadt เปเบšเปˆเบ‡เบ›เบฑเบ™ เบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเป€เบชเบตเบกเบชเป‰เบฒเบ‡เบเบปเบ™เป„เบเบ›เป‰เบญเบ‡เบเบฑเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒ W^X (Write XOR Execute). เป‚เบ”เบเป€เบ™เบทเป‰เบญเปเบ—เป‰เปเบฅเป‰เบงเบ‚เบญเบ‡เบเบปเบ™เป„เบเปเบกเปˆเบ™เบงเปˆเบฒเบซเบ™เป‰เบฒเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰เบžเป‰เบญเบกเบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ‚เบฝเบ™เปเบฅเบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบฅเบฐเบซเบฑเบ”เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ‚เบฝเบ™เบ–เบทเบเบ›เบดเบ”เปƒเบŠเป‰เบ‡เบฒเบ™, เปเบฅเบฐเบเบฒเบ™เบ‚เบฝเบ™เปƒเบชเปˆเบซเบ™เป‰เบฒเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปเบกเปˆเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ›เบดเบ”เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™. เบเบปเบ™เป„เบ W^X เบŠเปˆเบงเบเบ›เบปเบเบ›เป‰เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰เบˆเบฒเบเบเบฒเบ™เป‚เบˆเบกเบ•เบตเบ—เบตเปˆเป€เบเบตเบ™ buffer เบ—เบปเปˆเบงเป„เบ›, เบฅเบงเบกเบ—เบฑเบ‡ stack overflows, เปเบฅเบฐเปเบกเปˆเบ™เปƒเบŠเป‰เปƒเบ™ OpenBSD. เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.

เบˆเบฒเบเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™ W^X, เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบเบฒเบง, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบตเบˆเปเบฒเบ™เบงเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเปƒเบŠเป‰ JIT. เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” JIT เบชเบฒเบกเบฒเบ”เปเบšเปˆเบ‡เบญเบญเบเป€เบ›เบฑเบ™เบชเบฒเบกเบ›เบฐเป€เบžเบ”:

  • เบเบฒเบ™เบ›เปˆเบฝเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบฅเบฐเบซเบงเปˆเบฒเบ‡เบฅเบฑเบ” W เปเบฅเบฐ X, เบเบญเบกเบฎเบฑเบš "เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ" เบ‚เบญเบ‡เบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบš เบ›เป‰เบญเบ‡เบเบฑเบ™.
  • เบเบฒเบ™เบชเป‰เบฒเบ‡เบ™เบฒเบกเปเบเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ„เบนเปˆเบ‚เบญเบ‡เปเบœเบ™เบ—เบตเปˆ W เปเบฅเบฐ X เบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ”เบฝเบงเบเบฑเบ™.
  • เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆ "เป€เบ›เบทเป‰เบญเบ™" เบ—เบตเปˆเบชเบธเบ”เบ•เป‰เบญเบ‡เบเบฒเบ™เบฎเบนเบšเปเบšเบšเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ W|X เบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบšเบฑเบ™เบ—เบถเบเปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™.

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบกเบตเป‚เบ„เบ‡เบเบฒเบ™เบซเบ™เป‰เบญเบเบฅเบปเบ‡เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบเป‚เบ”เบเบ™เปเบฒเปƒเบŠเป‰เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเบชเบฒเบกเปเบฅเบฐเบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบฑเป‰เบ™เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเป€เบฅเบทเบญเบเบ—เปเบฒเบญเบดเบ”เปเบฅเบฐเบ—เบตเบชเบญเบ‡. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบกเบต W|X JIT (เบ•เบปเป‰เบ™เบ•เปเปเบกเปˆเบ™ Chromium เปเบฅเบฐ Iridum), เบ—เบฒเบ‡เป€เบฅเบทเบญเบ mount เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ "wxallowed" เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบก, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบžเป‰เบญเบกเบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบ—เบฑเบ‡เบเบฒเบ™เบ‚เบฝเบ™เปเบฅเบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆ ELF เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰. เป„เบŸเบฅเปŒเบ–เบทเบเบซเบกเบฒเบเบ”เป‰เบงเบเป€เบ„เบทเปˆเบญเบ‡เบซเบกเบฒเบ "wxneeded", เปเบฅเบฐเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ•เปˆเบฒเบ‡เป†เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป‚เบ”เบเปƒเบŠเป‰เบเบปเบ™เป„เบ เบชเบฑเบ™เบเบฒ ะธ เป€เบ›เบตเบ”เป€เบœเบตเบ เป€เบžเบทเปˆเบญเบˆเปเบฒเบเบฑเบ”เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบšเบ—เบตเปˆเปƒเบŠเป‰เปเบฅเบฐเบžเบฒเบเบชเปˆเบงเบ™เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™, เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš.

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ‚เบนเบ”เบฎเบตเบ”เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเบชเบฑเบšเบชเบปเบ™เบ•เบทเปˆเบกเบญเบตเบเปƒเบ™เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบกเบตเบเบฒเบ™เบชเบฐเป€เปœเบตเปƒเบซเป‰เบกเบตเบเบฒเบ™เป€เบžเบตเปˆเบกเบ•เบทเปˆเบก MAP_STACK, เป€เบŠเบดเปˆเบ‡เบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบšเบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบˆเบฒเบเบซเบ™เป‰เบฒเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เป„เบ”เป‰. เบ–เป‰เบฒเบซเบ™เป‰เบฒเป€เบงเบฑเบšเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เป„เบ”เป‰, เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ–เบทเบเบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบขเบธเบ”เป€เบŠเบปเบฒ. เบ”เป‰เบงเบเบงเบดเบ—เบตเบ™เบตเป‰, เบœเบนเป‰เป‚เบˆเบกเบ•เบตเบˆเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ‚เบนเบ”เบฎเบตเบ”เบฅเบฐเบšเบปเบšเบเบฒเบ™เป‚เบ—เปเบฅเบฐเบˆเบฐเบ–เบทเบเบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบžเบฐเบเบฒเบเบฒเบกเบŠเบญเบเบซเบฒเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” JIT, เบซเบผเบทเปเบกเป‰เบเบฐเบ—เบฑเป‰เบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบตเปˆเบเบฒเบเบเบงเปˆเบฒเปƒเบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบฅเบฐเบšเบปเบšเบเบฒเบ™เป‚เบ—เป‚เบ”เบเบเบปเบ‡เบžเบฒเบเปƒเบ™. เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ libc เป‚เบ”เบเบšเบฑเบ‡เป€เบญเบตเบ™.

เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ Chrome/Iridium เปเบกเปˆเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เปเบฅเป‰เบงเป‚เบ”เบเบเบฒเบ™เปƒเบซเป‰เบ„เปเบฒเปเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเปเบฅเบฐเบเบฒเบ™เป€เบ›เบตเบ”เป€เบœเบตเบ, เปเบ•เปˆเบเบฒเบ™เบ–เบญเบ™เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰, เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบš write(2) เปเบ™เปˆเบ™เบญเบ™เบกเบตเบ›เบฐเป‚เบซเบเบ”เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เบชเป‰เบฒเบ‡เบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เป‚เบˆเบกเบ•เบต. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเบเปเปˆเบชเบฒเบกเบฒเบ”เป€เบเบตเบ”เบ‚เบทเป‰เบ™เป„เบ”เป‰เบ–เป‰เบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” JIT เปƒเบŠเป‰เบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบšเบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡เบˆเบฒเบ W|X memory. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบกเบตเป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบˆเบฐเบซเบงเบฑเบ‡เบงเปˆเบฒเบ™เบตเป‰เบˆเบฐเบšเปเปˆเป€เบ›เบฑเบ™เบเปเบฅเบฐเบ™เบต, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ ABI เป„เบ”เป‰เบ–เบทเบเบ›เปˆเบฝเบ™เปเบ›เบ‡เบซเบผเบฒเบเบ„เบฑเป‰เบ‡, เปเบ•เปˆเบšเปเปˆเบกเบตเปƒเบœเบฅเบฒเบเบ‡เบฒเบ™เบšเบฑเบ™เบซเบฒ.

เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปเบกเปˆเบ™เบกเบตเบขเบนเปˆเปƒเบ™เบฎเบนเบšเบžเบฒเบšเบ›เบปเบเบเบฐเบ•เบดเบ‚เบญเบ‡เบชเบฒเบ‚เบฒ OpenBSD-Current, เบ—เบธเบเบ„เบปเบ™เบ—เบตเปˆเบชเบปเบ™เปƒเบˆเปเบกเปˆเบ™เป€เบŠเบตเบ™เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบกเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš.

เบ‚เปˆเบฒเบงเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เบฐเบเบปเบ”เบ•เบปเบงเบ‚เบญเบ‡เป‚เบซเบกเบ”เปƒเบ™ Chrome / Iridium เบชเบปเบกเบ„เบงเบ™เป„เบ”เป‰เบฎเบฑเบšเบ„เปเบฒเป€เบซเบฑเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบˆเบฒเบ Theo JITless. เบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ‚เบญเบ‡เบฅเบฒเบง, เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบเบญเบกเบฎเบฑเบšเบชเปเบฒเบฅเบฑเบšเบšเบฒเบ‡เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰, เปเบ•เปˆเบญเบฒเบ”เบˆเบฐเบšเปเปˆเบชเปเบฒเบฅเบฑเบšเบ—เบธเบเบ„เบปเบ™, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบฎเบนเบšเปเบšเบšเบ™เบตเป‰เปเบ™เปˆเบ™เบญเบ™เบˆเบฐเป€เบžเบตเปˆเบกเบเบฒเบ™เป‚เบซเบผเบ”เบ‚เบญเบ‡เป‚เบ›เป€เบŠเบ”เป€เบŠเบต. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, Chrome เบชเปˆเบงเบ™เปƒเบซเบเปˆเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ›เบดเบ”เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™ "wxallowed" เบชเปเบฒเบฅเบฑเบš /usr/local, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบญเบฒเบ”เบˆเบฐเบกเบตเบšเบฑเบ™เบซเบฒเบเบฑเบšเบšเบฒเบ‡เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบ (ghostery เป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡). เบšเปเปˆเบงเปˆเบฒเบ—เบฒเบ‡เปƒเบ”เบ—เบฒเบ‡เบซเบ™เบถเปˆเบ‡, Theo เบซเบงเบฑเบ‡เบงเปˆเบฒเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆเปƒเบ™เป‚เบซเบกเบ” JITless เบˆเบฐเบ–เบทเบเบ™เปเบฒเป„เบ›เบชเบนเปˆเบชเบฐเบžเบฒเบšเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆเปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”เบญเบฑเบ™เปƒเบเป‰เบ™เบตเป‰.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™