089. 계정 · 인증 보안 — su·sudo 조합 상승 경로 추적

changseop lee·5일 전

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

선행 학습

1. 개념

공격자는 단번에 root가 되기보다 여러 계정을 거쳐 상승하기도 합니다. 중간 계정을 경유하면 추적이 복잡해지고 눈에 덜 띕니다. 핵심은 모든 전환에서 auid가 유지된다는 점(008편)입니다.

다단계 상승 예시
 devops ──sudo -u postgres──→ postgres ──su root──→ root
   │                              │                    │
  auid=devops 전 구간 유지 (중간 계정을 거쳐도 최초 사용자로 추적)

전환 조합
 sudo → su      : sudo로 계정 전환 후 su로 또 전환
 su → sudo      : su로 계정 바꾼 뒤 그 계정의 sudo 사용
 서비스 경유    : sudo -u apache 로 서비스 계정이 된 뒤 추가 행위

2. 왜 중요한가

  • 다단계 상승은 로그가 여러 계정·여러 이벤트에 흩어져, 한 줄만 보면 전체 경로가 안 보입니다.
  • 중간 계정(특히 서비스·DB 계정)을 거치면 "그 계정이 한 일"처럼 보여 최초 행위자가 가려집니다.
  • auid·세션(ses)으로 묶으면 중간 계정을 거쳐도 최초 사용자와 전체 경로를 복원할 수 있습니다.

3. 핵심 명령어 / 설정

추적 수단용도
ausearch --session N -i한 세션의 모든 전환·명령
ausearch -ua <auid> -i최초 사용자 기준 전체 행위
sudo -u 로그계정 전환(USER=대상)
su by 로그전환 수행자(008편)
USER_START acct전환된 대상 계정

4. 실습 (실습 예시)

# 1) sudo -u (root 아닌 계정으로 전환) 사용 찾기
sudo grep 'sudo\[' /var/log/secure | grep -v 'USER=root' | sed -E 's/.* ([a-z_]+) : .*USER=([a-z_]+) ; COMMAND=(.*)/\1 -> \2 : \3/' | tail

# 2) 한 세션의 전환 체인 (auid 유지 확인)
SES=12
sudo ausearch --session $SES -i 2>/dev/null | grep -E 'USER_START|USER_CMD|type=USER_LOGIN' | \
  sed -E 's/.*(acct=[^ ]+).*(auid=[^ ]+).*(exe=[^ ]+).*/\2 \3 \1/' | sort -u

# 3) 최초 사용자 기준 전체 행위 (중간 계정 무관)
sudo ausearch -ua devops -i --start today 2>/dev/null | grep -E 'exe=.*(sudo|su)' | tail

5. 정상 상태

admin1 -> postgres : /usr/bin/psql -c ...

관리자가 업무상 sudo -u postgres로 DB 작업을 하고, 그 이상 전환이 없는 상태는 정상입니다(단일 목적 전환).

6. 이상 상태

devops -> postgres : /bin/bash
$ (세션 12 체인)
auid=devops exe=/usr/bin/sudo acct=postgres
auid=devops exe=/usr/bin/su   acct=root
$ (최초 사용자 기준)
devops: sudo -u postgres bash  →  su - root
  • devops가 sudo -u postgres로 DB 계정 셸 → 다시 su root로 상승 → 2단계 경로
  • 중간에 postgres를 거쳐 "postgres가 한 일"처럼 보이지만, auid=devops로 전 구간 추적됨
  • 008편의 su 체인과 037편의 sudo 상승이 결합된 형태

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

다단계 상승을 세션으로 재구성한 예시입니다(가상의 예시 로그).

02:11:30 sudo: devops : USER=postgres ; COMMAND=/bin/bash      (1단계: devops→postgres)
         USER_START auid=devops ses=12 acct=postgres exe=/usr/bin/sudo
02:40:25 su: session opened for user root by postgres(uid=26)  (2단계: postgres→root)
         USER_START auid=devops ses=12 acct=root exe=/usr/bin/su
02:41:00 (root 권한 명령들) auid=devops ses=12
단계전환auid
1devops → postgres(sudo -u)devops
2postgres → root(su)devops
결과root 권한 행위devops

by postgres만 보면 postgres가 범인 같지만, auid·ses가 devops를 가리킵니다. 이것이 다단계 추적의 핵심입니다.

8. SOC 관제 포인트

  • 권한 전환은 sudo -u·su를 모두 포함해 세션·auid 기준으로 체인을 재구성합니다.
  • 중간 계정(서비스·DB)의 "by" 표시에 속지 말고 auid로 최초 행위자를 확정합니다.
  • 서비스·DB 계정을 경유한 root 상승은 높은 우선순위로 봅니다.

9. 탐지 규칙

<group name="local,syssec_b,privilege,">
  <!-- 같은 세션에서 계정 전환이 2회 이상 (다단계 상승) -->
  <rule id="101360" level="11" frequency="2" timeframe="600">
    <if_group>audit</if_group>
    <match>type=USER_START</match>
    <same_field field="audit.session" />
    <description>단일 세션 내 다단계 권한 전환(sudo/su 체인)</description>
  </rule>
</group>

same_field로 세션을 묶는 방식은 Wazuh 버전에 따라 다르므로, 지원하지 않으면 SIEM에서 "같은 ses의 USER_START ≥ 2"로 구현합니다. auid 기반 전체 행위 조회는 SIEM 저장 검색으로 둡니다.

10. 대응 방법

  1. 초기 확인 — 전환 체인(계정 순서)과 각 단계의 auid·세션을 재구성합니다.
  2. 범위 확인 — 최초 행위자(auid) 기준으로 전체 행위와 다른 서버 활동을 확인합니다.
  3. 증거 확보 — 세션 전체 ausearch 결과, sudo·su 로그를 보존합니다.
  4. 차단/조치 — 세션 종료·관련 계정(최초·중간) 조치·자격증명 교체를 진행합니다.
  5. 재발 방지 — 다단계 전환 상관 룰과 auid 기준 조회를 운영합니다.

11. 핵심 정리

구분핵심 내용
다단계 상승중간 계정을 거쳐 root로(추적 복잡·은폐)
불변전 구간 auid 유지 → 최초 행위자 추적
조합sudo→su, su→sudo, 서비스 계정 경유
주의"by 중간계정"에 속지 말 것
면접 포인트"중간 계정을 거쳐도 auid는 최초 사용자를 가리킨다"

12. 다음 편 예고

다음 편 090. 계정 · 인증 보안 — 계정 탈취 의심 지표(IOC) 정리 에서는 계정 탈취의 종합 지표인 계정 탈취 의심 지표(IOC) 정리를 다룹니다.


이전 편: 088. 계정 · 인증 보안 — sudo 실패·권한 없음 로그 분석
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글