
Scoperta di processi Linux. Libreria C, binding Go, Runtime.
È nmap ma per i pid. 🤓
Per favore aiutami a diventare un programmatore indipendente donando direttamente qui sotto.
xpid dà all'utente la possibilità di "investigare" i dettagli dei processi su un sistema Linux.
Per esempio, un thread in stato di sleep avrà una directory /proc/[pid] a cui si può navigare, ma non elencare.
xpid controllerà molti posti diversi nel kernel per i dettagli su un pid.
Cercando sottoinsiemi di possibili pid, xpid sarà in grado di controllare i dettagli dei pid in molti posti nel kernel.
xpid [flags] -o [output] <query>
Investigate all pids
xpid
Investigate pid 1
xpid 1
Find all container processes on a system
xpid -c
Find all processes in the same namespace(s) as pid 1
xpid --ns-in [mnt, net, pid, ipc, cgroup]
Find all processes not in the same namespace(s) as current user
xpid --ns-out-user [mnt, net, pid, ipc, cgroup]
Find all processes running with eBPF programs as JSON
xpid --ebpf -o json <pid-query>
Find all processes running with eBPF programs, in a container, in /proc
xpid -b -c -p
Find all processes between specific values (Query syntax)
xpid <flags> +100 # Search pids up to 100
xpid <flags> 100-2000 # Search pids between 100-2000
xpid <flags> 65000+ # Search pids 65000 or above
Find all hidden processes on a system (slow)
xpid -x <pid-query>
xpid cercherà processi container a runtime. 🎉
Funziona leggendo il link in /proc/[pid]/ns/@cgroup e correlandolo al valore in /proc/1/[pid]/ns/@cgroup.
Indipendentemente dal contesto del namespace dei pid, se esiste un "container" unico rispetto al pid 1 corrente, xpid lo troverà.
xpid troverà pid che hanno programmi eBPF caricati a runtime.
Funziona correlando le informazioni sui file descriptor da /proc/[pid]/fdinfo/* a /sys/fs/bpf/progs.debug.
Se un pid ha un programma eBPF caricato, xpid lo troverà.
A causa della flessibilità dei moduli del kernel e di eBPF nel kernel, può essere possibile impedire al filesystem proc(5) di elencare i dettagli dei pid nei modi tradizionali.
xpid usa una varietà di tattiche per cercare pid, allo stesso modo in cui nmap usa tattiche diverse per fare port scan di un target.
xpid è un'utilità Go runtime che dipende da libxpid.
Installa prima libxpid (sotto), poi compila il runtime Go.
git clone https://github.com/kris-nova/xpid.git
cd xpid
make
sudo make install
libxpid è scritta in C, poiché sfrutta direttamente ptrace(2) e il codice eBPF.
Ciò significa che l'eseguibile xpid NON è completamente collegato staticamente.
Devi prima avere libxpid installato sul tuo sistema, prima che il programma Go xpid venga eseguito.
git clone https://github.com/kris-nova/xpid.git
cd xpid/libxpid
./configure
cd build
make
sudo make install