C __randomize_layout talany

Fórumok

Sziasztok,

Tudna segiteni valaki esetleg, ha egy struktura ezzel van definialva __randomize_layout, tipikusan egy csomo a kernelben, akkor azt hoyan tudom reprodukalni mondjuk egy kprobe vagy tracepointba?

eBPF doksi szerint

Using tracepoints 3: bpf

BPF gives us a few ways to connect to tracepoints via different program types:

    BPF_PROG_TYPE_TRACEPOINT: this program type gives access to the TP_STRUCT_entry data available at tracepoint entry; i.e. the data assigned from the raw tracepoint arguments via the TP_fast_assign() section in the tracepoint definition. The tricky part with these tracepoints is the context definition must match that described in the TP_STRUCT_entry definition exactly. For example, in samples/bpf/xdp_redirect_cpu_kern.c the tracepoint format for xdp_redirect tracepoints is defined as follows

De ha randomizalt (The randstruct plugin randomly rearranges fields at compile time given a randomization seed.) akkor nem ertem, hogy fog osszetalalkozni a ketto.

Elore is koszi.

Hozzászólások

A fordítókban randstruct néven fut, és az __attribute__((randomize_layout)) segítségével lehet aktiválni. Már a clang is támogatja. Szerintem csak úgy lehet debugolni, ha az eredeti kernel debuginfo rendelkezésre áll, máshol nincs tárolva a pontos struktura offset.

https://lwn.net/Articles/722293/

https://www.openwall.com/lists/kernel-hardening/2017/04/06/14

https://www.mail-archive.com/cfe-commits@lists.llvm.org/msg127918.html

Az előző mondataimnál levő linken elgondolkoztam.
Ha debugolni akarsz, akkor a __CHECKER__ flaggel fordítva a kernelt, gyakorlatilag kiirtod belőle az összes randomizációt.
Persze az élesben futó ágat majd ismét a __CHECKER__ nélkül fordítod.

Elméletileg a GDB transzparensen fel tudja oldani a randomizációt, ha a konkrét kernel debuginfója elérhető. Az eBPF kódot az eBPF Simulator nevű GDB kiegésztítés tudja kezelni, ezt a kettőt kell összehozni. Szóval ebben az esetben csak látszólagos a randomizáció, más eszközzel vagy más debuginfóval ténylegesen random.

https://www.phoronix.com/scan.php?page=news_item&px=GDB-Debugger-eBPF

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/s…