056. 계정 · 인증 보안 — root 계정 사용 패턴 분석

changseop lee·5일 전

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

선행 학습

1. 개념

root 권한 사용은 막는 것만으로 끝나지 않습니다. 운영에는 root 권한이 필요하므로, 관제의 목표는 "평소 누가, 언제, 어떤 경로로, 얼마나 root를 쓰는가" 를 알고 그 패턴에서 벗어나는 사용을 찾는 것입니다.

root 권한 사용 경로              행위자 식별 방법
① 직접 로그인(콘솔·SSH)     →  불가(모두 root) → 원칙적으로 차단 (A영역 008편)
② sudo                      →  sudo 로그의 사용자, audit auid
③ su                        →  su 로그 "by 사용자", audit auid
④ 데몬·cron·systemd         →  auid=unset(4294967295) → 부모 프로세스·유닛으로 판단

분석 축:  누가(auid) × 언제(시간대) × 무엇(명령) × 얼마나(건수·세션 길이)

2. 왜 중요한가

  • 계정 탈취 후 공격자도 결국 root 권한을 씁니다. 하지만 평소 root를 거의 쓰지 않던 계정이 갑자기 많이 쓰거나, 평소와 다른 시간·명령을 쓰면 드러납니다.
  • root 사용 통계는 최소 권한 원칙 점검에도 쓰입니다. 실제로 root를 전혀 쓰지 않는 계정은 sudo 권한을 회수할 수 있습니다.
  • 데몬 경로(④)의 root 실행은 로그인 사용자가 없어, 웹 서버 같은 부모 프로세스를 통해 판단해야 합니다.

3. 핵심 명령어 / 설정

명령용도
sudo aureport -x --summary -i실행 파일별 실행 건수
sudo ausearch -k root_exec -i --start week-agoroot로 실행된 명령(A영역 030편 키)
sudo aureport --login --summary -i로그인 요약
grep 'USER=root' /var/log/secure | awk ...sudo 사용자별 root 실행 건수
grep 'session opened for user root' /var/log/securesu·sudo로 열린 root 세션

4. 실습 (실습 예시)

# 1) sudo로 root 명령을 실행한 사용자별 건수 (최근 로그 파일 기준)
sudo grep 'USER=root ; COMMAND=' /var/log/secure | awk '{for(i=1;i<=NF;i++) if($i==":"){print $(i-1); break}}' | sort | uniq -c | sort -rn

# 2) 시간대별 분포 (몇 시에 root를 쓰는가)
sudo grep 'USER=root ; COMMAND=' /var/log/secure | awk '{split($3,t,":"); print t[1]"시"}' | sort | uniq -c

# 3) auid 기준 root 실행 요약 (audit)
sudo ausearch -k root_exec -i --start week-ago 2>/dev/null | grep -oE 'auid=[^ ]+' | sort | uniq -c | sort -rn

# 4) 데몬 경로 root 실행 중 셸 실행 찾기 (auid unset + bash/sh)
sudo ausearch -m EXECVE -i --start today 2>/dev/null | grep -B2 'a0=bash\|a0=sh' | grep 'auid=unset' | head

Ubuntu는 /var/log/auth.log를 사용합니다. 로그 회전 파일(secure-*)까지 포함하려면 zgrep이나 cat secure*로 범위를 넓힙니다.

5. 정상 상태

[sudo 사용자별 root 실행 — 최근 7일]
     84 admin1
      6 devops
[시간대]
     21 09시
     30 10시
     25 14시
     14 16시

root 사용이 관리자(admin1)에 집중되고, 업무 시간대에 분포한 이 모습이 이 서버의 root 사용 기준선입니다.

6. 이상 상태

[10월 2일]
    163 devops
[시간대]
     95 02시
     68 03시
[데몬 경로 root 셸]
type=SYSCALL ... ppid=1188 auid=unset uid=root comm=bash exe=/usr/bin/bash
  • 평소 주 6건이던 devops가 하루 163건, 그것도 새벽 2~3시에 집중 → 기준선 대비 수십 배
  • 부모가 httpd(ppid 1188)인 root 셸 → 웹 프로세스가 root 권한을 얻었다면 상승 경로 조사가 필요(D영역 「권한 변경 이상 징후」로 연결)

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

root 사용 이상을 판단할 때 보는 로그 조합입니다(가상의 예시 로그).

Oct  2 02:11:30 rocky9-web01 sudo[11701]:  devops : TTY=pts/1 ; PWD=/home/devops ; USER=root ; COMMAND=/bin/bash
Oct  2 02:11:30 rocky9-web01 sudo[11701]: pam_unix(sudo-i:session): session opened for user root(uid=0) by devops(uid=1002)
Oct  2 03:42:15 rocky9-web01 sudo[11701]: pam_unix(sudo-i:session): session closed for user root
관찰해석
COMMAND=/bin/bashroot 셸 진입 — 이후 명령은 sudo 로그에 개별로 남지 않음(A영역 007편)
session opened ~ closedroot 세션 1시간 31분 지속
같은 PID(11701)열림·닫힘을 PID로 짝지어 세션 길이 계산

평소 관리자들의 root 세션이 수 분 단위라면, 1시간 반짜리 새벽 root 세션은 그 자체로 이상 지표입니다. 세션 안의 명령은 auditd root_exec(ses 기준)로 재구성합니다.

8. SOC 관제 포인트

  • 사용자별·시간대별 root 사용 건수와 root 세션 길이를 주간 기준선으로 관리합니다.
  • 기준선 대비 급증(예: 평소의 5배 이상), 업무 외 시간 사용, 평소 쓰지 않던 계정의 사용을 Alert로 봅니다.
  • auid unset 상태의 root 셸은 데몬 경유 상승 가능성으로 별도 분류합니다.

9. 탐지 규칙

<group name="local,syssec_b,privilege,">
  <!-- 같은 사용자의 sudo root 실행이 30분 내 50회 이상 (빈도 기반) -->
  <rule id="101050" level="10" frequency="50" timeframe="1800">
    <if_matched_sid>5402</if_matched_sid>
    <same_user />
    <description>단시간 내 sudo root 실행 급증: $(dstuser)</description>
  </rule>
  <rule id="101051" level="12">
    <if_group>audit</if_group>
    <field name="audit.auid">^4294967295$|^unset$</field>
    <field name="audit.euid">^0$</field>
    <match>comm="bash"|comm="sh"</match>
    <description>로그인 세션 없는 root 셸 실행(데몬 경유 가능성)</description>
  </rule>
</group>

same_user가 sudo 로그에서 어떤 필드를 비교하는지, audit 디코더가 auid를 숫자로 주는지 이름으로 주는지는 wazuh-logtest로 확인한 뒤 조정합니다.

10. 대응 방법

  1. 초기 확인 — 이상 사용 계정의 root 세션 시각·길이·출발지와 세션 내 명령을 확인합니다.
  2. 범위 확인 — 같은 계정이 다른 서버에서도 root 사용이 급증했는지 확인합니다.
  3. 증거 확보 — sudo 로그, audit root_exec 결과, 세션 로그인 기록을 보존합니다.
  4. 차단/조치 — 비인가 사용이면 세션 종료·sudo 권한 회수·계정 잠금을 진행합니다.
  5. 재발 방지 — root 사용 기준선(사용자·시간대·세션 길이)을 주간 갱신하고 급증 룰을 운영합니다.

11. 핵심 정리

구분핵심 내용
경로직접 로그인(차단) · sudo · su · 데몬(auid unset)
분석 축누가(auid) × 언제 × 무엇 × 얼마나(건수·세션 길이)
기준선사용자별·시간대별 root 실행 건수, root 세션 길이
이상 신호급증, 새벽 집중, 긴 root 세션, 데몬 경유 root 셸
면접 포인트"root 사용 자체가 아니라 평소 패턴에서 벗어난 사용을 본다"

12. 다음 편 예고

다음 편 057. 계정 · 인증 보안 — sudo 사용 로그 분석 심화 에서는 sudo 로그를 명령·작업 디렉터리·TTY까지 읽는 sudo 사용 로그 분석 심화를 다룹니다.


이전 편: 055. 계정 · 인증 보안 — UID·GID 범위 정책과 login.defs
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글