파일 · 권한 · 사용자 관리 49 / 50 · Part 5. 권한 상승과 Linux 보안
실습 환경: Rocky Linux 9.8 · Ubuntu 24.04.5 (Docker 격리 컨테이너, 테스트 계정 analyst)
기초편 연계: 「리눅스 시스템 기초」 19. sudo와 su · 48. Linux 로그와 journalctl

1. 들어가며

48편에서 백도어 계정과 이상 권한을 찾았다. 이제 질문은 "언제, 누가 이것을 만들었는가" 다. 답은 로그에 있다.

이번 글에서는 권한 상승·계정 변경 행위가 로그에 어떻게 남는지 분석한다. 핵심은 무엇이 남고 무엇이 안 남는가 를 정확히 아는 것이다.

  • 로그에 남는 것: sudo(명령 단위), useradd·usermod·passwd, 인증 실패
  • 기본 로그에 안 남는 것: chmod·chown(권한 변경), 파일 생성·삭제 → auditd 필요

"로그가 항상 남는다"는 오해는 위험하다. chmod 4755 /bin/cp로 SUID 백도어를 심어도 /var/log/secure에는 흔적이 없다. 이 한계를 이해하고 auditd로 보완하는 것이 이번 글의 목표다.


2. 핵심 개념

2-1. 로그 위치

배포판인증·권한 로그
Rocky/RHEL/var/log/secure
Ubuntu/Debian/var/log/auth.log

systemd journal(journalctl)에도 함께 기록된다.

2-2. 무엇이 남는가

행위기본 로그보완
sudoO (명령 단위)-
su△ 세션만auditd
useradd/usermod/userdelO-
passwdO-
chmod/chownXauditd
SUID 설정Xauditd
파일 생성·삭제Xauditd/FIM

2-3. auditd의 필요성

권한 변경(chmod)·파일 조작은 syslog에 남지 않는다. 이를 기록하려면 auditd 규칙이 필요하다.

# 권한·소유자 변경 감시
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F auid>=1000 -k perm_mod
# 민감 파일 감시
-w /etc/passwd -p wa -k passwd_change

3. 동작 원리

권한 변경 로그 분석 — 누가·언제

로그 분석의 힘은 행위를 체인으로 연결 하는 데 있다. 공격자가 sudo로 useradd를 실행하고, 그 계정을 wheel에 넣었다면:

  1. sudo: analyst : COMMAND=/sbin/useradd -M hacker — 누가 useradd를 실행했는가
  2. useradd[..]: new user: name=hacker, UID=1001 — 어떤 계정이 생겼는가
  3. usermod[..]: add hacker to group wheel — 관리자 그룹에 편입

세 로그를 시간순으로 연결하면 "analyst가 hacker 계정을 만들어 wheel에 넣었다"는 공격 흐름이 재구성된다. 인증 실패 로그(1 incorrect password attempt)는 무차별 대입 시도의 근거가 된다.

하지만 chmod 4755 /bin/cp(SUID 백도어)는 이 로그들에 없다. sudo로 실행했다면 COMMAND=/bin/chmod 4755 /bin/cp는 남지만, 직접 root가 실행했다면 아무 흔적이 없다. 그래서 권한 변경 추적에는 auditd가 필수다.


4. 명령어 실습

analyst가 sudo로 계정 생성·그룹 편입·SUID 설정을 수행하고, 인증 실패도 발생시킨 뒤 로그를 분석한다. 테스트 환경이다.

# (analyst 가 수행한 행위 — 로그 생성)
#   sudo useradd -M hacker
#   sudo usermod -aG wheel hacker
#   sudo chmod 4755 /bin/cp
#   sudo -k; echo wrongpw | sudo -S id   → 인증 실패

# (root 로 로그 분석)
# 1) sudo 성공/실패 로그
grep -E 'sudo:.*(COMMAND|incorrect password|authentication failure)' /var/log/secure | tail -8

# 2) 계정 생성·그룹 변경
grep -E 'useradd|new user|usermod|added.*to group' /var/log/secure | tail -6

# 3) 인증 실패 (무차별 대입 근거)
grep -E 'incorrect password|authentication failure' /var/log/secure | tail -3

# 4) chmod 는 기본 로그에 없음
ls -l /bin/cp    # SUID 설정됐지만 secure 에는 chmod 자체 기록 없음

5. 실행 결과

실제 실행 결과 — Rocky Linux 9.8 · root@rocky9-lab — 권한 변경 로그 분석

텍스트 원본(실제 출력):

[root@rocky9-lab ~]# echo "=== sudo 성공/실패 로그 ==="
=== sudo 성공/실패 로그 ===
[root@rocky9-lab ~]# grep -E 'sudo:.*(COMMAND|authentication failure|incorrect password)' /var/log/secure | tail -8
Sep 24 15:08:20 rocky9-lab sudo:  analyst : PWD=/home/analyst ; USER=root ; COMMAND=/sbin/useradd -M hacker
Sep 24 15:08:20 rocky9-lab sudo:  analyst : PWD=/home/analyst ; USER=root ; COMMAND=/bin/bash -c 'echo hacker:NewP@ss1 | chpasswd'
Sep 24 15:08:20 rocky9-lab sudo:  analyst : PWD=/home/analyst ; USER=root ; COMMAND=/sbin/usermod -aG wheel hacker
Sep 24 15:08:20 rocky9-lab sudo:  analyst : PWD=/home/analyst ; USER=root ; COMMAND=/bin/chmod 4755 /bin/cp
Sep 24 15:08:20 rocky9-lab sudo: pam_unix(sudo:auth): authentication failure; logname= uid=1000 euid=0 tty= ruser=analyst rhost=  user=analyst
Sep 24 15:08:22 rocky9-lab sudo:  analyst : 1 incorrect password attempt ; PWD=/home/analyst ; USER=root ; COMMAND=/bin/id
[root@rocky9-lab ~]# echo "=== 계정 생성·그룹 변경 로그 ==="
=== 계정 생성·그룹 변경 로그 ===
[root@rocky9-lab ~]# grep -E 'useradd|new user|usermod|added.*to group|new group' /var/log/secure | tail -6
Sep 24 15:08:20 rocky9-lab sudo:  analyst : PWD=/home/analyst ; USER=root ; COMMAND=/sbin/useradd -M hacker
Sep 24 15:08:20 rocky9-lab useradd[110]: new group: name=hacker, GID=1001
Sep 24 15:08:20 rocky9-lab useradd[110]: new user: name=hacker, UID=1001, GID=1001, home=/home/hacker, shell=/bin/bash, from=none
Sep 24 15:08:20 rocky9-lab sudo:  analyst : PWD=/home/analyst ; USER=root ; COMMAND=/sbin/usermod -aG wheel hacker
Sep 24 15:08:20 rocky9-lab usermod[139]: add 'hacker' to group 'wheel'
Sep 24 15:08:20 rocky9-lab usermod[139]: add 'hacker' to shadow group 'wheel'
[root@rocky9-lab ~]# echo "=== 인증 실패 로그 (무차별 대입 탐지 근거) ==="
=== 인증 실패 로그 (무차별 대입 탐지 근거) ===
[root@rocky9-lab ~]# grep -E 'incorrect password|authentication failure' /var/log/secure | tail -3
Sep 24 15:08:20 rocky9-lab sudo: pam_unix(sudo:auth): authentication failure; logname= uid=1000 euid=0 tty= ruser=analyst rhost=  user=analyst
Sep 24 15:08:22 rocky9-lab sudo:  analyst : 1 incorrect password attempt ; PWD=/home/analyst ; USER=root ; COMMAND=/bin/id
[root@rocky9-lab ~]# echo "=== 권한 변경 흔적 (chmod 는 기본 로그에 안 남음 → auditd 필요) ==="
=== 권한 변경 흔적 (chmod 는 기본 로그에 안 남음 → auditd 필요) ===
[root@rocky9-lab ~]# ls -l /bin/cp
-rwsr-xr-x 1 root root 144400 Sep 11 01:13 /bin/cp
[root@rocky9-lab ~]# echo "  ↑ SUID 설정됨. 하지만 secure 로그엔 chmod 자체는 없음(auditd 규칙 필요)"
  ↑ SUID 설정됨. 하지만 secure 로그엔 chmod 자체는 없음(auditd 규칙 필요)

6. 결과 해석

로그해석
sudo: analyst : ... COMMAND=/sbin/useradd -M hackeranalyst가 sudo로 계정 생성
sudo: ... COMMAND=/sbin/usermod -aG wheel hackerwheel 그룹 편입
sudo: ... COMMAND=/bin/chmod 4755 /bin/cpsudo 경유 chmod는 COMMAND로 남음
useradd[108]: new user: name=hacker, UID=1001계정 생성 상세
usermod[130]: add 'hacker' to group 'wheel'관리자 그룹 편입 흔적
sudo: analyst : 1 incorrect password attempt인증 실패 → 무차별 대입 근거
ls -l /bin/cp → -rwsr-xr-xSUID 설정됨. 하지만 chmod 자체는 secure에 없음 (sudo 경유가 아니었다면 흔적 없음)

핵심은 마지막 항목이다. /bin/cp에 SUID가 붙었지만, chmod가 직접 실행됐다면 secure 로그에는 없다. 이번 실습은 sudo 경유였기에 COMMAND로 남았지만, root가 직접 chmod했다면 auditd 없이는 추적 불가 다.


7. 보안 관점

주제내용
로그 한계 인식chmod·chown·파일 조작은 기본 로그에 없다
auditd 필수권한 변경·SUID 설정·민감 파일 접근 감시
로그 위변조 방어로그를 원격 전송(10편). 로컬 로그는 root가 삭제 가능
su 보완su 세션 내 명령은 auditd execve로
시간 동기화NTP로 여러 서버 로그 시각 일치

auditd 핵심 규칙:

-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
-a always,exit -F arch=b64 -S chmod,chown,fchmod,fchown -F auid>=1000 -k perm_mod

8. 보안관제 관점

[수집]     Rocky /var/log/secure, Ubuntu /var/log/auth.log + auditd + journal → SIEM
     ↓
[상관분석] sudo(COMMAND) + useradd(new user) + usermod(group) 를 시간순 연결
     ↓
[탐지 규칙] · 짧은 시간 내 계정 생성 + 관리자 그룹 편입
           · 인증 실패 다수 후 성공 (무차별 대입)
           · UID 0 계정 생성 (new user ... UID=0)
           · auditd: SUID 설정(chmod), 민감 파일 변경
     ↓
[Evidence] 로그의 user·COMMAND·시각·IP → 공격 타임라인
     ↓
[Response] 계정 잠금, 권한 원복, 로그 보존, 침입 경로 차단
관점내용
상관분석개별 로그가 아니라 행위 체인으로 공격 재구성
로그 공백chmod 등은 auditd 없으면 공백. 미탐 구간 인지
원격 전송로그 위변조 대비 필수(10편)

9. 실무에서 자주 발생하는 실수

실수결과예방
"로그는 다 남는다" 가정chmod 등 추적 실패auditd 설정
로컬 로그만 신뢰root가 삭제 가능원격 전송
su 세션 내 명령 미감사추적 공백auditd execve
시간 미동기화상관분석 오류NTP
개별 로그만 확인공격 흐름 놓침상관분석

10. 실습 체크리스트

[ ] sudo 로그의 COMMAND 를 확인했다
[ ] useradd/usermod 로그로 계정 생성·그룹 편입을 추적했다
[ ] 인증 실패 로그를 확인했다
[ ] chmod 가 기본 로그에 안 남는 것을 확인했다
[ ] auditd 규칙의 필요성을 이해했다
[ ] 로그 원격 전송이 필요한 이유를 안다

11. 핵심 정리

  • 권한·계정 로그는 Rocky /var/log/secure, Ubuntu /var/log/auth.log에 남는다.
  • sudo(명령 단위)·useradd·usermod·passwd·인증 실패는 기본 로그에 기록된다.
  • chmod·chown·파일 조작은 기본 로그에 안 남는다. auditd가 필요하다.
  • 개별 로그를 시간순 체인으로 연결 해 공격을 재구성한다.
  • 로컬 로그는 root가 삭제할 수 있으므로 원격 전송한다.
  • su 세션 내 명령은 auditd execve로 보완한다.

12. 다음 편 예고

시리즈의 마지막 글 「50. Linux 파일·권한·사용자 보안관제 실습」 에서는 지금까지 배운 모든 것을 하나의 침해 시나리오로 연결한다. 웹 계정 침투 → 웹셸 → sudo 오설정 권한 상승 → 백도어 계정 → SUID 백도어 → 로그 탐지 → 증거 수집 → 초동 대응까지, 공격과 대응 전 과정 을 실습한다.


참고 자료


시리즈 이동

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

0개의 댓글