Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: neviemkto 03. 12. 2011, 22:04:00

Název: Je LD_PRELOAD bypassovatelný?
Přispěvatel: neviemkto 03. 12. 2011, 22:04:00
Caute,

je LD_PRELOAD vlastnej kniznice bypassovatelny?
Ide mi o to, ze ak si napisem kniznicu, ktora bude logovat niektore syscally, tak ci ju bude mozne obist (a ak ano, tak ake znalosti su na to treba?). Ak by LD_PRELOAD prestal fungovat po specifickej (casto opakovanej) akcii ako je fork() resp. ina tvorba vlaken, tak sa na to nemozem spoliehat ani pri obycajnych statistikach.

Vdaka za odpoved.
Název: Re:Je LD_PRELOAD bypassovatelny?
Přispěvatel: upalse 03. 12. 2011, 22:44:48
ahoj,

LD_PRELOAD zavisi uz z podstaty na environmentu, tzn kdyz ho tam odsud nekdo smaze - unsetenv("LD_PRELOAD") _a k tomu_ zavola napr system() tak uz se LD_PRELOAD neprojevi. samozrejme subprocess po execve nemusi vubec puvodni environment dostat, pripadne setuid binarka ho bude ignorovat.

praktictejsi je pouzit /etc/ld.so.preload. pokud to mozne neni, jeste jde si stav environmentu tesne pred execve hlidat (to neni jednoduche - je to nutne delat pro kazdy libc call zvlast, tj extra pro popen, system, exec* atd).

interne se preload totiz resi tesne po execve() pri hledani knihoven programu (tzv interpreter faze - /lib/ld-linux.so.2 atd), pote jeho pritomnost uz neni smerodatna.

co se tyce "obejiti" tak to mozne samozrejme jde, najit puvodni symbol pomoci dlsym(3) :)

na ucely callgraphu atd na urovni knihoven je mimojine rozumejsi pouzit LD_AUDIT - viz latrace(1).
Název: Re:Je LD_PRELOAD bypassovatelny?
Přispěvatel: neviemkto 04. 12. 2011, 00:21:12
Diky moc
Název: Re:Je LD_PRELOAD bypassovatelny?
Přispěvatel: Trident 04. 12. 2011, 13:55:30
Caute,

je LD_PRELOAD vlastnej kniznice bypassovatelny?
Ide mi o to, ze ak si napisem kniznicu, ktora bude logovat niektore syscally, tak ci ju bude mozne obist (a ak ano, tak ake znalosti su na to treba?). Ak by LD_PRELOAD prestal fungovat po specifickej (casto opakovanej) akcii ako je fork() resp. ina tvorba vlaken, tak sa na to nemozem spoliehat ani pri obycajnych statistikach.

Vdaka za odpoved.

No podle toho co potrebujes mne spise napadlo jestli neni lepsi vrazit cestu ke knihovne pro loader primo do ELF headeru. LD_LIBRARY_PATH a LD_PRELOAD jsou jen berlicky/prasarnicky.  V linuxu je jako prvni prohledavany ELF header  pak jdou dalsi metody(viz man k ld).
Název: Re:Je LD_PRELOAD bypassovatelny?
Přispěvatel: tomas 05. 12. 2011, 09:46:26
Pokud nevolám knihovní funkce ale přímo int #x80 (nebo něco podobného), tak se nic z tvé knihovny volat nebude.

Pokud je binárka slinkovaná staticky, tak se nic z tvé knihovny volat nebude.

Pokud někdo odebere proměnnou prostředí...
Název: Re:Je LD_PRELOAD bypassovatelny?
Přispěvatel: Ivan 05. 12. 2011, 13:04:55
- pokud ma binarka suid/sguid bit(na kohokoliv) tak se LD_PRELOAD ignoruje.

- setenv a unsetenv nemaji na LD_* promenne zadny vliv. glibc si pri startu uchova popie techto promennych a na jeich dalsi modifikace za behu programu nebere zretel.