007. Linux 서버 보안 — sudo 로깅 강화 — logfile과 I/O 기록

changseop lee·6일 전

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

선행 학습

1. 개념

sudo는 기본적으로 실행한 명령 한 줄만 syslog(authpriv)에 남깁니다. 그러나 sudo -i나 sudo bash처럼 root 셸을 연 뒤의 명령은 기록되지 않습니다. 이 공백을 메우는 것이 sudo 로깅 강화입니다.

sudo systemctl restart httpd   → secure에 COMMAND=... 1줄 기록 (O)
sudo -i  → root 셸            → "COMMAND=/bin/bash" 1줄만 기록
   └─ 이후 rm, wget, vi ...   → sudo 로그에는 없음 (X)
                                └─ 보완: log_output/log_input(I/O 기록), auditd execve

2. 왜 중요한가

  • 침해 분석에서 "root 셸 안에서 무엇을 했는가"는 핵심 질문인데, 기본 설정으로는 답할 수 없습니다.
  • sudo 전용 로그 파일을 두면 syslog 전체를 뒤지지 않고 권한 사용 이력만 빠르게 볼 수 있습니다.
  • 단, I/O 기록에는 입력한 비밀번호나 민감정보가 포함될 수 있으므로 저장소 권한·보존 정책이 함께 필요합니다.

3. 핵심 명령어 / 설정

설정(Defaults)의미
logfile=/var/log/sudo.logsudo 전용 로그 파일 추가
log_output세션 출력(화면) 기록
log_input키 입력 기록 (민감정보 주의)
iolog_dir=/var/log/sudo-ioI/O 로그 저장 위치
use_pty의사 터미널 할당, 백그라운드 프로세스 분리
sudoreplay -l / sudoreplay ID기록된 세션 목록·재생

4. 실습 (실습 예시)

# 반드시 visudo로 별도 파일 생성
sudo visudo -f /etc/sudoers.d/10-logging
# 아래 내용 입력
Defaults logfile=/var/log/sudo.log
Defaults log_output
Defaults iolog_dir=/var/log/sudo-io
Defaults use_pty

# 확인
sudo visudo -c
sudo -i            # 테스트 세션
whoami; ls /root; exit
sudo sudoreplay -l
sudo tail -3 /var/log/sudo.log

실습 예시는 출력만 기록(log_output)하고, 키 입력 기록은 정책 검토 후 적용하는 것을 권장합니다.

5. 정상 상태

$ sudo tail -2 /var/log/sudo.log
Oct  1 10:20:11 : admin1 : TTY=pts/0 ; PWD=/home/admin1 ; USER=root ;
    TSID=000001 ; COMMAND=/bin/bash
$ sudo sudoreplay -l
Oct  1 10:20:11 2026 : admin1 : TTY=/dev/pts/0 ; CWD=/home/admin1 ; USER=root ; TSID=000001 ; COMMAND=/bin/bash

TSID가 I/O 로그 세션 ID이며 sudoreplay 000001로 화면을 재생할 수 있습니다.

6. 이상 상태

$ sudo ls -l /var/log/sudo.log
-rw-r--r--. 1 root root 0 Oct  1 04:00 /var/log/sudo.log
$ sudo grep -c . /etc/sudoers.d/10-logging
0
  • 로그 파일 크기가 0이고 변경 시각이 새벽 → 비우기(truncate) 의심 (G영역 「로그 변조 의심」에서 상세 분석)
  • 로깅 설정 파일이 비어 있음 → 로깅 비활성화 시도
  • 권한이 644면 일반 사용자가 관리 이력을 열람할 수 있어 정보 노출입니다.

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

syslog의 sudo 기록과 sudo.log, I/O 로그를 TSID와 시간으로 교차 확인합니다(가상의 예시 로그).

[/var/log/secure]
Oct  1 10:20:11 rocky9-web01 sudo[4011]:  admin1 : TTY=pts/0 ; PWD=/home/admin1 ; USER=root ; COMMAND=/bin/bash
[sudoreplay 000001 출력 일부]
# whoami
root
# ls /root
anaconda-ks.cfg  baseline
  • syslog는 원격 전송되므로 로컬 sudo.log가 지워져도 원격 사본과 비교하면 삭제 여부를 판단할 수 있습니다.

8. SOC 관제 포인트

  • root 셸 진입(COMMAND=/bin/bash, /bin/su, sudo -i)은 세션 단위로 추적합니다.
  • sudo.log·sudo-io 디렉터리의 삭제·크기 감소는 증거 인멸 징후로 봅니다.
  • sudo 로깅 설정 파일 변경은 sudoers 변경과 같은 중요도로 감시합니다.

9. 탐지 규칙

<group name="local,sudo,">
  <rule id="100140" level="9">
    <if_sid>5402</if_sid>
    <regex>COMMAND=/bin/bash$|COMMAND=/usr/bin/bash$|COMMAND=/bin/sh$|COMMAND=/usr/bin/su$</regex>
    <description>sudo를 통한 root 셸 진입: $(dstuser)</description>
  </rule>
</group>

root 셸 진입 자체는 운영 중에도 발생하므로 레벨을 중간으로 두고, 업무 시간 외·비관리자 계정 조건을 결합해 우선순위를 조정합니다.

10. 대응 방법

  1. 초기 확인 — root 셸 진입 세션의 TSID와 접속 출발지를 확인합니다.
  2. 범위 확인 — 같은 세션에서 실행된 명령을 I/O 로그와 auditd execve 기록으로 재구성합니다.
  3. 증거 확보 — sudo.log, sudo-io 디렉터리, 원격 syslog 사본을 보존합니다.
  4. 차단/조치 — 비인가 세션이면 계정을 잠그고 세션을 종료합니다(pkill -t pts/N).
  5. 재발 방지 — sudo 로깅 설정을 표준화하고 로그를 원격 서버로 전송합니다.

11. 핵심 정리

구분핵심 내용
기본 한계root 셸 이후 명령은 sudo 로그에 남지 않음
보완 설정logfile, log_output, iolog_dir, use_pty
재생sudoreplay -l / sudoreplay TSID
주의log_input은 민감정보 기록 위험
면접 포인트"sudo -i 이후 행위는 I/O 로그·auditd로 보완"

12. 다음 편 예고

다음 편 008. Linux 서버 보안 — root 로그인 제한 — 콘솔·SSH·su 경로 에서는 root로 들어오는 모든 경로(콘솔·SSH·su)를 제한하는 설정을 점검합니다.


이전 편: 006. Linux 서버 보안 — sudoers 설정 점검 — NOPASSWD와 와일드카드
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글