078. 계정 · 인증 보안 — 동시 세션·다중 출발지 로그인 탐지

changseop lee·5일 전

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

선행 학습

1. 개념

한 계정이 같은 시간에 여러 곳에서 쓰이면, 계정 공유이거나 탈취입니다. 특히 지리적으로 떨어진 두 출발지에서 짧은 간격으로 로그인하면(불가능한 이동), 한 사람일 수 없습니다.

동시 세션: who/last에서 같은 계정이 서로 다른 출발지로 동시에 active
 devops pts/0 192.168.56.5   (09:00~ )
 devops pts/1 192.168.56.77  (02:10~ )   ← 겹치는 시간, 다른 출발지

불가능한 이동: 같은 계정이
 10:00 서울 IP 로그인 → 10:05 해외 IP 로그인  (5분 만에 이동 불가) → 탈취

2. 왜 중요한가

  • 정상적으로도 한 사람이 여러 세션을 열 수 있지만(여러 터미널), 출발지가 다르면 공유·탈취 신호입니다.
  • 계정 공유는 보안 정책 위반이자 책임 추적성 문제이고, 탈취는 침해입니다. 둘을 구분해 대응합니다.
  • 불가능한 이동은 GeoIP가 있으면 자동 판정할 수 있는 강력한 탈취 지표입니다.

3. 핵심 명령어 / 설정

확인명령
현재 동시 세션who, w (같은 계정의 여러 출발지)
세션 중첩last -i에서 로그인/로그아웃 시간 겹침
출발지 다양성계정별 동시 활성 출발지 수
불가능한 이동연속 로그인의 출발지 지리 거리 ÷ 시간
세션별 행위각 세션(ses)의 명령 비교

4. 실습 (실습 예시)

# 1) 현재 한 계정이 여러 출발지에서 접속 중인지
who | awk '{print $1, $NF}' | sort | awk '{c[$1]++; ip[$1]=ip[$1]" "$2} END{for(u in c) if(c[u]>1) print u": "c[u]"세션 "ip[u]}'

# 2) wtmp에서 세션 시간 중첩 확인 (계정별)
last -i -F devops | head -10

# 3) 짧은 간격 다출발지 로그인 (불가능한 이동 후보)
sudo grep 'Accepted' /var/log/secure | grep ' for devops ' | sed -E 's/.*(..:..:..).* from ([0-9.]+).*/\1 \2/' | tail

지리 거리 계산은 SIEM의 GeoIP 필드(위도·경도)로 하고, 내부망 환경에서는 "서로 다른 신뢰 구역의 동시 접속"으로 대체 판단합니다.

5. 정상 상태

$ who | ...
(한 계정 다출발지 없음)
$ last -i -F devops
devops pts/0 192.168.56.5 ... 09:12 - 10:30 (01:18)
devops pts/0 192.168.56.5 ... 14:02 - 15:10 (01:08)

같은 계정의 세션이 시간적으로 겹치지 않고, 출발지가 일관된 상태가 정상입니다(여러 터미널이라도 같은 출발지면 정상).

6. 이상 상태

$ who | ...
devops: 2세션  192.168.56.5 192.168.56.77
$ last -i -F devops | head
devops pts/1 192.168.56.77 ... 02:10 - still logged in
devops pts/0 192.168.56.5  ... 09:12 - still logged in
  • devops가 두 출발지(관리망 56.5 + 비관리망 56.77)에서 동시 활성
  • 02:10 세션(비관리망)과 09:12 세션(관리망)이 겹침 → 정상 사용자 + 탈취 세션 공존 가능성
  • 각 세션(ses)의 행위를 비교: 56.5는 일상 업무, 56.77은 sudo·useradd(탈취)

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

동시 세션의 행위를 세션별로 분리한 예시입니다(가상의 예시).

ses=8  (192.168.56.5, pts/0)  : systemctl status, tail log       → 정상 업무(본인)
ses=12 (192.168.56.77, pts/1) : sudo -i, useradd, chage -M 99999 → 탈취 행위
 두 세션이 09:12~ 동시 active, 출발지·행위 성격 완전히 다름
 → 56.77 세션이 탈취된 것, 본인은 56.5에서 정상 근무 중
세션출발지행위판정
ses=8관리망조회·업무본인
ses=12비관리망상승·백도어탈취

동시 세션 덕분에 "본인은 멀쩡히 근무 중인데 다른 곳에서도 쓰이고 있다"는 탈취의 명확한 증거가 됩니다.

8. SOC 관제 포인트

  • 같은 계정의 동시·다출발지 세션을 탐지하고, 출발지·행위로 공유/탈취를 구분합니다.
  • 불가능한 이동(GeoIP)은 즉시 높은 우선순위로 처리합니다.
  • 각 세션(ses)의 행위를 분리 분석해 어느 세션이 탈취인지 특정합니다.

9. 탐지 규칙

<group name="local,syssec_b,authentication,">
  <!-- 같은 계정이 서로 다른 출발지에서 짧은 시간 내 로그인 성공 -->
  <rule id="101250" level="12" frequency="2" timeframe="600">
    <if_matched_sid>5715</if_matched_sid>
    <same_user />
    <different_source_ip />
    <description>동일 계정의 다출발지 로그인(계정 공유/탈취 의심)</description>
  </rule>
</group>

different_source_ip 지원 여부는 버전에 따라 다르므로, 지원하지 않으면 SIEM에서 "계정별 동시 활성 출발지 수 ≥ 2"나 GeoIP 거리/시간 기반 불가능한 이동 규칙으로 구현합니다.

10. 대응 방법

  1. 초기 확인 — 동시·다출발지 세션의 출발지와 각 세션의 행위를 확인합니다.
  2. 범위 확인 — 탈취 세션을 특정하고 다른 서버의 동일 계정 활동을 확인합니다.
  3. 증거 확보 — 세션 현황(who/last), 세션별 행위 로그를 보존합니다.
  4. 차단/조치 — 탈취 세션 종료·계정 잠금·자격증명 교체, 공유면 정책 시정을 진행합니다.
  5. 재발 방지 — 다출발지 로그인·불가능한 이동 룰을 운영합니다.

11. 핵심 정리

구분핵심 내용
동시 세션같은 계정 · 다른 출발지 · 겹치는 시간
불가능한 이동짧은 시간 내 지리적으로 먼 두 곳
공유 vs 탈취출발지·행위 성격으로 구분
확정 근거본인 세션과 탈취 세션의 공존
면접 포인트"본인이 근무 중인데 다른 곳에서도 쓰이면 탈취의 명확한 증거"

12. 다음 편 예고

다음 편 079. 계정 · 인증 보안 — 신규 계정 생성 탐지와 검증 에서는 계정 생애주기의 시작인 신규 계정 생성 탐지와 검증을 다룹니다.


이전 편: 077. 계정 · 인증 보안 — 비정상 시간대·신규 출발지 로그인 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글