따라서 다음 세 가지 감사 로그 항목이 있습니다.
type=AVC msg=audit(1488396169.095:2624951): avc: denied { setrlimit } for pid=16804 comm="bash" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:httpd_t:s0 tclass=process
type=SYSCALL msg=audit(1488396169.095:2624951): arch=c000003e syscall=160 success=no exit=-13 a0=1 a1=7ffe06c17350 a2=2 a3=7fea949f3eb0 items=0 ppid=15216 pid=16804 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="bash" exe="/usr/bin/bash" subj=system_u:system_r:httpd_t:s0 key=(null)
type=EOE msg=audit(1488396169.095:2624951):
bash
AVC 라인에서는 컨텍스트가 있는 프로세스가 system_u:system_r:httpd_t:s0
리소스 제한 설정 권한이 거부되었음을 즉시 확인할 수 있습니다 .
SYSCALL 라인에서 syscall=160을 Google에서 빠르게 검색하면 이것이 setrlimit()
호출임을 알 수 있는데 이는 매우 흥미롭습니다. 어떤 리소스를 수정하도록 요청했는지 모르겠습니다. 어떤 리소스를 수정하려고 합니까?
답변1
따라서 이 경우 문제의 시스템 호출이 이라는 것을 이미 알고 있습니다 setrlimit
. 검색하면 setrlimit
해당 시스템 호출을 래핑하는 동일한 이름의 C 라이브러리 함수가 있음을 알 수 있습니다.
이것기능 문서화첫 번째 매개변수(감사 로그의 SYSCALL 라인에 있는 "a0")는 문제의 리소스를 나타내는 것으로 표시되지만 매뉴얼에서는 숫자 값이 아닌 기호 이름만 알려줍니다. 그러나 이러한 기호가 sys/resource.h
헤더 파일에 정의되어 있음을 알려줍니다 . 그러나 파일에는 실제 값이 포함되어 있지 않습니다.
숫자 값을 얻으려면 다음을 살펴보십시오.sysdeps/unix/sysv/linux/bits/resource.h. 거기에서 정의된 다양한 RLIMIT_ 매크로를 찾을 수 있습니다.
이를 살펴보면 수정하려는 리소스를 찾을 수 있습니다. 이때 a0=1이고, 1에 해당하는 매크로는 RLIMIT_FSIZE이다.
답변2
이것은 조금 다른 접근 방식입니다. AVC는 bash
프로세스를 실행 중이며 자체 또는 하위 프로세스 중 일부를 설정하려고 시도하고 있다고 말합니다 rlimit
. 이는 쉘에서 매우 일반적인 상황입니다.
오류는 서비스가 허용되지 않는 bash
SELinux 서비스의 컨텍스트에서 실행되고 있다는 것입니다. 이것은 네트워크를 향한 데몬이고 버그가 있는 경우 공격자가 이를 사용하는 것을 허용하고 싶지 않기 때문에 httpd
허용되지 않습니다 .httpd
이는 대개 특정 방식으로 bash
시작되었기 때문입니다 httpd
(확실히 좋은 생각은 아닙니다).
이러한 메시지에서는 어떤 리소스가 수정되고 있는지 알 수 없습니다. SELinux에는 setrlimit
제한 사항 수정을 허용하거나 거부할 수 있는 기능이 있습니다. 매개변수를 검색하려면 다음과 같은 몇 가지 도구가 필요합니다.
- SystemTap은 시스템 호출과 해당 매개변수를 연구합니다.
- 끝까지 읽어보세요소스 코드
- 실행 중인 프로세스 에서 스크립트를 실행
gdb
하거나 연결합니다 .gdb