OpenSUSE에서 coturn-4.5.2-4.1.x86_64
이 .service
파일에는 허용된 기능과 시스템 호출을 포함하는 생성된 것처럼 보이는 섹션이 포함되어 있습니다. 취약점이 나타날 경우를 대비해 샌드박스를 시도할 수도 있습니다. 시작하자마자 프로세스가 거의 즉시 종료되고 범인을 찾기 위해 모든 제한 사항을 하나씩 제거해야 한다는 점을 제외하면 모든 것이 괜찮았습니다.
SystemCallFilter=~ ... @privileged ...
서비스가 종료되면 시스템 로그에 유용한 정보가 기록되지 않습니다. 오직
기본 프로세스가 종료됩니다. 코드=killed, 상태=31/SYS
설명서에는 다음과 같이 나와 있습니다.
@privileged 수퍼유저 기능이 필요한 모든 시스템 호출(capability(7))
실제로 실패한 실제 시스템 호출과 누락된 기능을 알고 싶습니다.
답변1
서비스가 시스템 콜에 포함되지 않은 시스템 콜을 수행하는 경우SystemCallFilter=
설정, 기본 동작은 프로세스 종료입니다.SIGSYS
, 따라서 프로세스는 하나의 코어를 덤프합니다. 따라서 코어 파일을 확인하고 그 안에서 시스템 호출 번호를 찾을 수 있습니다.
예:
# coredumpctl debug
(gdb) p $rax
157
예제 시스템 호출 번호도 마찬가지입니다 157
. 다음과 같은 테이블에서 이를 찾아볼 수 있습니다.
https://github.com/torvalds/linux/blob/v5.15/arch/x86/entry/syscalls/syscall_64.tbl
즉
157 common prctl __x64_sys_prctl
따라서 prctl
에 추가해야 합니다 SystemCallFilter=
.
또 다른 시스템 호출로 인해 다시 시작이 실패할 수 있으므로 일부 반복이 필요할 수 있습니다.
당신은 또한 확인할 수 있습니다시스템 실행(5)누락되었을 수 있는 일부 시스템 호출 그룹의 경우 다음을 추가할 수 있습니다.SystemCallFilter=
프로세스 속도가 빨라질 수 있습니다.
또한 다음을 통해 현재 실행 중인 systemd에 포함된 여러 그룹의 시스템 호출을 정확히 확인할 수 있습니다.
systemd-analyze syscall-filter
서비스 파일도 포함된 경우 SystemCallErrorNumber=
해당 파일을 삭제하여 프로세스에서 코어 덤프를 허용해야 합니다.