
LSM BPF 모듈로 pwnkit(CVE-2021-4034)과 같은 익스플로잇을 차단합니다.
argc == 0인 프로그램 실행(예: pwnkit, CVE-2021-4034)을 차단하는 간단한 LSM BPF 프로그램입니다. 이 프로그램은 모든 exec*() 시스템 호출이 argc >= 1로 호출되는지 확인하는 것 외에는 아무것도 하지 않습니다. 이 검사는 Ariadne Conill의 패치를 기반으로 합니다.
# Ubuntu에서
$ sudo apt-get install libc6-dev-i386 libbpf0 libbpf-dev
# Fedora 35에서
$ sudo dnf install clang bpftool libbpf-devel glibc-devel.i686 glibc-devel.x86_64
$ make
다음을 실행하세요:
$ sudo make DESTDIR=/usr install
# 다음 명령어가 실행됩니다
# sudo cp src/load_check_argc0_lsm /usr/sbin
# sudo cp share/check_argc0_lsm.service /etc/systemd/system/
# 그 후 다음 명령으로 서비스를 활성화할 수 있습니다
$ sudo systemctl daemon-reload
$ sudo systemctl enable check_argc0_lsm.service
$ sudo systemctl start check_argc0_lsm.service
테스트:
$ strace ./test/trigger
...
execve("/usr/bin/pkexec", NULL, NULL) = -1 EINVAL (Invalid argument)
$ sudo journalctl -u check_argc0_lsm.service
Feb 10 13:27:08 purple systemd[1]: Started LSM BPF protection for argc == 0 execs.
Feb 10 13:27:13 purple load_check_argc0_lsm[89177]: TIME PID PROCESS CALLING
Feb 10 13:27:13 purple load_check_argc0_lsm[89177]: 13:27:13 89194 trigger /usr/bin/pkexec
BPF LSM(5.7) 및 BPF ringbuf(5.8)에는 Linux 커널 >= 5.8이 필요합니다.
# 프로그램이 시작되고 LSM BPF를 연결한 후 로그를 모니터링합니다
$ sudo ./src/load_check_argc0_lsm
TIME PID PROCESS CALLING
12:59:21 85689 trigger /usr/bin/pkexec
트리거 프로그램을 사용하여 모든 것이 정상 작동하는지 테스트할 수 있습니다:
$ strace ./test/trigger
...
execve("/usr/bin/pkexec", NULL, NULL) = -1 EINVAL (Invalid argument)