Engedélyzeték a W^X funkciót a Firefox nightly-ben

A W^X (vagy: "W xor X") egy biztonsági feature, ami az OpenBSD 3.3-ban mutatkozott be először még 2003-ban. A W^X egy memóriavédelmi irányelv, amely által az adott folyamat címterében levő minden lap vagy írható, vagy végrehajtható, de nem lehet mindkettő egy időben (erre utal a XOR logikai operátor a névben). Vagyis, biztosítja, hogy az alkalmazások által írható memória nem lehet ugyanakkor végrehajtható és fordítva. Ez megnehezíti a puffer túlcsordulások és más típusú támadások dolgát.

Az elmúlt időszakban többen is elkezdtek dolgozni azon, hogy a Firefox JIT kódját W^X védelemmel lássák el. A munka eredménye bekerült a Firefoxba és elsőként az OpenBSD projekt engedélyezte október végén a -current felhasználók számára.

Most pedig arról ír blogján Jan de Mooij (jandem), hogy az összes JIT kódra engedélyezte a W^X védelmet a Firefox nightly-ben. Ha semmi komoly probléma vagy teljesítményromlás sem lesz, akkor a Firefox 46-ban már a végfelhasználókhoz is meg fog érkezni.

A részletek itt olvashatók.

Hozzászólások

Amúgy miért W xor X? Nem W nand X lenne a helyes? (Ld. read-only memory.)

--

De kedves vagy, hogy belinkelted nekem, köszönöm szépen.

Viccet félretéve, a xor azt jelenti, hogy egy memóriablokkra W és X közül pont az egyik igaz. Itt arról lenne szó leginkább, hogy W és X ne legyen egyszerre. Ezt a nand és xor is tudja. Én pedig azt tenném hozzá csak kiegészítésként, hogy az is simán lehet, hogy egy memóriablokk se nem W, se nem X. Itt van a nand és xor közötti különbség. Ha egy memória csak olvasható, annak security vonatkozása is lehet jó eséllyel, tehát ne mondja senki, hogy ez annyira offtopic.

--

Bocs, részben igazad volt.

http://wiki.osdev.org/Global_Descriptor_Table

RW: Readable bit/Writable bit.
Readable bit for code selectors: Whether read access for this segment is allowed. Write access is never allowed for code segments.
Writable bit for data selectors: Whether write access for this segment is allowed. Read access is always allowed for data segments.

Descriptor tabla nem sokat szamit ha az alap memoria modelben a code szegmens es az adatszegmens teljesen atfedi egymast -> atirod a kodot mintha adat lene..
Ami szamitani szokott az az hogy PDE (vagy mas szinten) bejegyzesen mi van ami a lapokra vonatkozik.
- Lehet irast engedelyezni (R/W)
- Lehet futatast tiltani (NX)
- Egyeb trukok

Van RO page.
Tipikusan a konstans adatokat szokas ide tenni.

(Lehet teljesen mas memoria model, de ez a tipikus, es vannak fura architekturak is)

Amit nem lehet megirni assemblyben, azt nem lehet megirni.