Plan dike ku Mekanîzmaya Ewlekariya W^X ya OpenBSD-ê xurt bike

Theo De Raadt parve kirin plan dike ku mekanîzmaya parastina bîranîna W^X (Write XOR Execute) xurt bike. Esasê mekanîzmayê ev e ku rûpelên bîranîna pêvajoyê bi hevdemî ji bo nivîsandin û darvekirinê nekarin bigihîjin. Ji ber vê yekê, kod tenê piştî ku nivîsandin bêçalak bû dikare were darve kirin, û nivîsandina li ser rûpelek bîranînê tenê piştî ku darvekirin neçalak dibe gengaz e. Mekanîzmaya W^X arîkariya parastina sepanên cîhê bikarhêner ji êrişên berbelavbûna tamponê yên hevpar, di nav de serpêhatiyên stackê, dike û di OpenBSD de çalak e. bi xwerû.

Ji destpêka xebata li ser W^X ve, eşkere bû ku ev rêyek dirêj bû, ji ber ku hejmareke girîng a serîlêdanên ku JIT bikar tînin hebûn. Pêkanîna JIT dikare li sê kategoriyan were dabeş kirin:

  • Veguheztina bîranînê di navbera dewletên W û X de, pejirandina "lêçûn" ya banga pergalê mprotect.
  • Di navbera cotek nexşeyên W û X yên heman bîranînê de navdêran çêbikin.
  • Vebijarka herî "pîs" pêdivî bi modela bîranîna W|X heye ku destûrê dide tomarkirin û cîbicîkirina hevdemî.

Heya nuha, pir hindiktir bername hene ku vebijarka sêyemîn bikar tînin û bêtir jî yên yekem û duyemîn bikar tînin. Lêbelê, ji ber ku hewce bû ku bernameyan bi W|X JIT (bi piranî Chromium û Iridum) werin xebitandin, vebijarkek çîyayê pergala pelan a "wxallowed" hate zêdekirin, ku hişt ku bîranîn hem ji bo nivîsandinê û hem jî ji bo darvekirinê were bikar anîn, ger ELF-ya îcrakar. pel bi nîşana "wxneeded" tê nîşankirin, û serîlêdan bixwe jî bi karanîna mekanîzmayan hatine parastin. teahudê ji и vekin bi rêzê ve navnîşa bangên pergalê yên ku têne bikar anîn û beşên pergala pelê ku ji serîlêdanê re peyda dibin sînordar bikin.

Ji bo ku di sepanên weha de îstismarkirina qelsiyan bêtir tevlihev bike, pêvekek mekanîzmayê tê pêşniyar kirin. MAP_STACK, ya ku kontrol dike ka banga pergalê ji rûpelek bîranîna nivîsandinê tê darve kirin. Ger rûpel were nivîsandin, pêvajo neçar e ku biqede. Bi vî rengî, êrîşkar dê nikaribe bangên pergalê îstîsmar bike û dê neçar bimîne ku di pêkanîna JIT-ê de kelûmelên pêwîst bibîne an jî xebata dijwartir a tespîtkirina stûyên banga pergalê rasterast di hundurê de bike. bi xeletî libc ve girêdayî ye.

Pêvajoyên Chrome/Iridium jixwe bi karanîna soz û eşkerekirinê pir pêbawer têne parastin, lê rakirina şiyana karanîna, mînakî, banga pergala nivîsandinê (2) eşkere hin avantajê heye, ji ber ku ew ji bo êrîşker dijwariyên din çêdike. Lêbelê, heke pêkanîna JIT bangên pergala xwemalî ji bîra W|X bikar bîne, dibe ku dijwarî jî derkevin holê. Lêbelê, sedemek heye ku em hêvî bikin ku ew ê ne wusa be, ji ber ku ABI çend caran hate guheztin, lê kesek çu carî pirsgirêkan rapor nekiriye.

Guhertin jixwe di dîmenên birêkûpêk ên şaxê OpenBSD-Current de hene, her kesê eleqedar tê vexwendin ku ceribandinê bike.

Nûçeyên têkildar ên di derbarê xuyangkirina modê de li Chrome / Iridium hêjayî şîroveyek cihêreng ji Theo ye JITless. Li gorî nêrîna wî, ev ji bo hin modelên karanîna meqbûl e, lê dibe ku ne ji bo hemîyan, ji ber ku ev mod eşkere dê barkirina li ser pêvajoyê zêde bike. Heya nuha, ger hûn "wxallowed" ji bo /usr/local neçalak bikin, Chrome bi piranî dê bixebite, her çend dibe ku di hin pêvekan de pirsgirêk hebin (ghostery mînakek e). Bi rengek din, Theo hêvî dike ku xebata bêkêmasî ya di moda JITless de dê di demek nêzîk de bibe rewşek bi tevahî xebitandinê.

Source: opennet.ru

Add a comment