시스템 보안 · 취약점 › A. Linux 서버 보안 설정 · 22/50편 (전체 022/450)
학습 단계: 2단계 · 설정 및 점검
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
sysctl은 실행 중인 커널의 동작 값을 조회·변경하는 인터페이스입니다(/proc/sys/ 아래 파일과 같음). 보안 관련 값은 크게 세 목적으로 나뉩니다.
① 정보 노출 줄이기 kernel.kptr_restrict, kernel.dmesg_restrict
② 메모리 공격 어렵게 kernel.randomize_va_space (ASLR)
③ 프로세스 간 간섭 제한 kernel.yama.ptrace_scope, fs.protected_symlinks/hardlinks, fs.suid_dumpable
설정 위치: /etc/sysctl.conf, /etc/sysctl.d/*.conf → 부팅 시 / sysctl --system 으로 적용
즉시 변경: sysctl -w 키=값 (재부팅 시 원복)
randomize_va_space=0) 메모리 취약점 악용이 쉬워집니다.sysctl -w로 값을 바꾸면 재부팅 전까지만 유지되므로, 설정 파일만 점검하면 놓칩니다. 런타임 값과 설정 파일 값을 모두 봐야 합니다.| 파라미터 | 권장값 | 의미 |
|---|---|---|
kernel.kptr_restrict | 1 이상 | 커널 포인터 주소 숨김 |
kernel.dmesg_restrict | 1 | 일반 사용자의 dmesg 열람 제한 |
kernel.randomize_va_space | 2 | ASLR 전체 적용 |
kernel.yama.ptrace_scope | 1 이상 | 다른 프로세스 디버깅(메모리 읽기) 제한 |
fs.protected_symlinks / fs.protected_hardlinks | 1 | world-writable 디렉터리의 링크 악용 방지 |
fs.suid_dumpable | 0 | SUID 프로그램 코어 덤프 금지 |
배포판·커널 버전에 따라 기본값이 다르므로(예: ptrace_scope는 Ubuntu 기본 1, Rocky는 0일 수 있음) 실측 후 기대값을 정합니다.
# 1) 런타임 값 일괄 확인
sysctl kernel.kptr_restrict kernel.dmesg_restrict kernel.randomize_va_space \
kernel.yama.ptrace_scope fs.protected_symlinks fs.protected_hardlinks fs.suid_dumpable
# 2) 설정 파일에 정의된 값과 출처
sudo sysctl --system 2>/dev/null | grep -E '^\* Applying|kptr|dmesg|randomize|ptrace|protected|suid'
# 3) 하드닝 파일 작성 후 적용
sudo tee /etc/sysctl.d/90-hardening.conf <<'EOF'
kernel.kptr_restrict = 1
kernel.dmesg_restrict = 1
kernel.randomize_va_space = 2
kernel.yama.ptrace_scope = 1
fs.protected_symlinks = 1
fs.protected_hardlinks = 1
fs.suid_dumpable = 0
EOF
sudo sysctl --system >/dev/null && sysctl kernel.yama.ptrace_scope
ptrace_scope를 높이면 일부 디버깅·모니터링 도구 동작에 영향이 있으므로, 테스트 VM에서 서비스 영향을 확인합니다.
kernel.kptr_restrict = 1
kernel.dmesg_restrict = 1
kernel.randomize_va_space = 2
kernel.yama.ptrace_scope = 1
fs.protected_symlinks = 1
fs.protected_hardlinks = 1
fs.suid_dumpable = 0
$ sysctl kernel.randomize_va_space kernel.yama.ptrace_scope
kernel.randomize_va_space = 0
kernel.yama.ptrace_scope = 0
$ grep -r randomize /etc/sysctl.conf /etc/sysctl.d/
/etc/sysctl.d/90-hardening.conf:kernel.randomize_va_space = 2
sysctl -w로 즉시 변경된 상태런타임 변경은 실행 명령 감사로 남깁니다(가상의 예시 로그).
type=SYSCALL msg=audit(1759730100.400:1901): arch=c000003e syscall=59 success=yes ppid=8301 pid=8320 auid=1002 uid=0 comm="sysctl" exe="/usr/sbin/sysctl" key="sysctl_exec"
type=EXECVE msg=audit(1759730100.400:1901): argc=3 a0="sysctl" a1="-w" a2="kernel.randomize_va_space=0"
type=SYSCALL msg=audit(1759730101.010:1903): arch=c000003e syscall=257 success=yes auid=1002 uid=0 comm="tee" exe="/usr/bin/tee" key="sysctl_proc"
type=PATH msg=audit(1759730101.010:1903): item=0 name="/proc/sys/kernel/yama/ptrace_scope"
| 관찰 | 해석 |
|---|---|
sysctl -w ... =0 | ASLR 런타임 해제 |
/proc/sys/...에 직접 쓰기(tee) | sysctl 명령을 거치지 않는 우회 방식 |
같은 auid=1002 | 동일 사용자 세션의 연속 행위 |
/proc/sys는 일반 파일 감시(-w)가 동작하지 않는 가상 파일시스템이라, 위 두 번째 기록은 open 시스템 콜 규칙으로 수집한 예시입니다.
-w 변경을 놓침).sysctl -w, /proc/sys 쓰기를 수집 대상에 포함합니다.-w /etc/sysctl.conf -p wa -k sysctl_conf
-w /etc/sysctl.d/ -p wa -k sysctl_conf
-a always,exit -F arch=b64 -S execve -F path=/usr/sbin/sysctl -k sysctl_exec
<rule id="100280" level="11">
<if_group>audit</if_group>
<field name="audit.key">sysctl_exec</field>
<match>randomize_va_space=0|ptrace_scope=0|kptr_restrict=0|dmesg_restrict=0</match>
<description>커널 보안 파라미터 하향 시도</description>
</rule>
sysctl -a 출력, audit 로그, 설정 파일 사본을 보존합니다.sysctl --system으로 설정 파일 값을 재적용하고 비인가 세션을 차단합니다.| 구분 | 핵심 내용 |
|---|---|
| 목적 | 정보 노출 감소 · 메모리 공격 방지 · 프로세스 간섭 제한 |
| 핵심 값 | kptr_restrict, dmesg_restrict, randomize_va_space=2, ptrace_scope, suid_dumpable=0 |
| 함정 | sysctl -w는 설정 파일에 안 남음 → 런타임 값 점검 필수 |
| 탐지 | execve(sysctl -w), /proc/sys 쓰기 |
| 면접 포인트 | "설정 파일 값 ≠ 런타임 값일 수 있다" |
다음 편 023. Linux 서버 보안 — 네트워크 sysctl 하드닝 점검 에서는 커널 네트워크 동작을 결정하는 네트워크 sysctl 하드닝을 점검합니다.
이전 편: 021. Linux 서버 보안 — /etc 디렉터리 변경 관리
📚 시리즈 전체 보기: 시스템 보안 · 취약점