Anti-ROP mechanizmus az OpenBSD libc-ben

 ( trey | 2016. április 26., kedd - 7:14 )

Theo de Raadt tegnap arról írt az openbsd-tech levelezési listán, hogy változtatásai nyomán Anti-ROP (ROP = Return-Oriented Programming) mechanizmus került a libc-be:

Idézet:
This change randomizes the order of symbols in libc.so at boot time.

This is done by saving all the independent .so sub-files into an ar archive, and then relinking them into a new libc.so in random order, at each boot. The cost is less than a second on the systems I am using.

Részletek Theo levelében.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Nagyon jó, hogy már bootoláskor c fordító kell. Beágyazott rendszereken ideális lesz. :)

OpenBSD embedded? Valamiről lemaradtam?

Mit értünk beágyazotton? "Hivatalosan" nincs ilyen. De sokan használják az OpenBSD-t network appliance dobozokon read only fs-en, erősen csökkentett alaprendszerrel amiben nincs fordító: resflash,flashdist,flashrd,flashboot..... A levlistán szó van róla, hogy a cc-t átteszik a comp set-ből a base-ba ráadásul..... szóval most majd lesz....

Miért kell ehhez g/cc? ld+ar nem elég? Belenéztem a diffbe, láttam, hogy hivatkozik cc-re, de akkor se értem. :)

--
„Spiró ótvar, Konrád átok, Nádastól meg mindjárt hányok!”

Én sem. :)

linker kell, nem c fordító. Azért jóval kisebb függőség (ráadásul ha jól emlékszem, OBSD-ben ott a PCC is, az meg kicsi). (Mondjuk ettől eltekintve, nem vagyok elájulva a megoldástól.)

Lehet, de a diffben ez van a rebuildlibs() függvényben:

cc -shared -o $_lib $(ls *.so | sort -R) $(cat .ldadd)

Annyival azért jobb a helyzet az elképzeltnél, hogy normális esetben a cc az csak egy keretprogram, tehát ha nagyon akarják, meg tudják csinálni úgy, hogy valóban ne legyen fordító abban a minimalista környezetben, de működjön a dolog.
Amúgy szerintem azért nem az ld-t hívogatják direktben, mert így bármely későbbi cc-vel kapcsolatos módosítást csak egyetlen helyen kell megcsinálni, és mindenre - a valódi fordításra, és az ilyen hekkekre is - alkalmas lesz, míg ha ide egy ld hívást raknának, akkor minden cc-s módosítást itt *is* végig kell vezetni.

Miért kéne fordító? Ez csak linkelést végez, fordítást nem. Linker meg mindenképpen van a rendszerben.

szerveren sokra megy vele, ha csak 2-3 evente van reboot :)

Miután az utolsó 2 verzió támogatott az legfeljebb 1 év. Illetve van évi 2-3 kernel patch is, azt is fel szokás tenni.... :)

/o\ Eléggé gányolós megoldásnak tűnik. Inkább a puffereket kellene megtanulni jól kezelni, nem? ;)

--

" Seems like a weaker implementation of fine-grained ASLR to me, which accomplishes nothing on local attacks and is vulnerable to all attacks against fine-grained ASLR, eg:

http://www.ieee-security.org/TC/SP2013/papers/4977a574.pdf "

--
trey @ gépház

ez nagyon szar, miert nem a dynamic linkerrel csinalja?

--
NetBSD - Simplicity is prerequisite for reliability

Mármint arra gondolsz, h programindításkor? Nyilván mert annak jóval nagyobb az overheadje.

rohadt nagy overheadje lehet :)

--
NetBSD - Simplicity is prerequisite for reliability