022. Linux 서버 보안 — 커널 보안 파라미터(sysctl) 하드닝

changseop lee·6일 전

시스템 보안 · 취약점 › A. Linux 서버 보안 설정 · 22/50편 (전체 022/450)
학습 단계: 2단계 · 설정 및 점검
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

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 키=값 (재부팅 시 원복)

2. 왜 중요한가

  • 커널 주소나 커널 메시지가 일반 사용자에게 노출되면 권한 상승 공격의 준비 정보가 됩니다.
  • ASLR을 끄면(randomize_va_space=0) 메모리 취약점 악용이 쉬워집니다.
  • 공격자가 sysctl -w로 값을 바꾸면 재부팅 전까지만 유지되므로, 설정 파일만 점검하면 놓칩니다. 런타임 값과 설정 파일 값을 모두 봐야 합니다.

3. 핵심 명령어 / 설정

파라미터권장값의미
kernel.kptr_restrict1 이상커널 포인터 주소 숨김
kernel.dmesg_restrict1일반 사용자의 dmesg 열람 제한
kernel.randomize_va_space2ASLR 전체 적용
kernel.yama.ptrace_scope1 이상다른 프로세스 디버깅(메모리 읽기) 제한
fs.protected_symlinks / fs.protected_hardlinks1world-writable 디렉터리의 링크 악용 방지
fs.suid_dumpable0SUID 프로그램 코어 덤프 금지

배포판·커널 버전에 따라 기본값이 다르므로(예: ptrace_scope는 Ubuntu 기본 1, Rocky는 0일 수 있음) 실측 후 기대값을 정합니다.

4. 실습 (실습 예시)

# 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에서 서비스 영향을 확인합니다.

5. 정상 상태

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

6. 이상 상태

$ 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
  • 설정 파일은 2인데 런타임 값은 0 → sysctl -w로 즉시 변경된 상태
  • ASLR 해제 + ptrace 제한 해제가 함께 발생 → 다른 프로세스 메모리 접근·메모리 취약점 악용 준비로 의심

7. 로그 분석 (분석 방법)

런타임 변경은 실행 명령 감사로 남깁니다(가상의 예시 로그).

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 ... =0ASLR 런타임 해제
/proc/sys/...에 직접 쓰기(tee)sysctl 명령을 거치지 않는 우회 방식
같은 auid=1002동일 사용자 세션의 연속 행위

/proc/sys는 일반 파일 감시(-w)가 동작하지 않는 가상 파일시스템이라, 위 두 번째 기록은 open 시스템 콜 규칙으로 수집한 예시입니다.

8. SOC 관제 포인트

  • 보안 sysctl의 런타임 값을 정기 수집해 기준선과 비교합니다(설정 파일만 보면 -w 변경을 놓침).
  • sysctl -w, /proc/sys 쓰기를 수집 대상에 포함합니다.
  • ASLR·ptrace 관련 값을 낮추는 변경은 정상 운영에서 드물어 높은 우선순위로 봅니다.

9. 탐지 규칙

-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>

10. 대응 방법

  1. 초기 확인 — 런타임 값과 설정 파일 값을 비교하고 변경 명령 실행 기록을 확인합니다.
  2. 범위 확인 — 같은 세션에서 이어진 행위(프로세스 접근, 신규 바이너리 실행)를 확인합니다.
  3. 증거 확보 — sysctl -a 출력, audit 로그, 설정 파일 사본을 보존합니다.
  4. 차단/조치 — sysctl --system으로 설정 파일 값을 재적용하고 비인가 세션을 차단합니다.
  5. 재발 방지 — 런타임 sysctl 값을 기준선에 포함하고 하향 변경 룰을 운영합니다.

11. 핵심 정리

구분핵심 내용
목적정보 노출 감소 · 메모리 공격 방지 · 프로세스 간섭 제한
핵심 값kptr_restrict, dmesg_restrict, randomize_va_space=2, ptrace_scope, suid_dumpable=0
함정sysctl -w는 설정 파일에 안 남음 → 런타임 값 점검 필수
탐지execve(sysctl -w), /proc/sys 쓰기
면접 포인트"설정 파일 값 ≠ 런타임 값일 수 있다"

12. 다음 편 예고

다음 편 023. Linux 서버 보안 — 네트워크 sysctl 하드닝 점검 에서는 커널 네트워크 동작을 결정하는 네트워크 sysctl 하드닝을 점검합니다.


이전 편: 021. Linux 서버 보안 — /etc 디렉터리 변경 관리
📚 시리즈 전체 보기: 시스템 보안 · 취약점

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글