068. 계정 · 인증 보안 — SSH 키 지문으로 접속 키 추적하기

changseop lee·3일 전

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

선행 학습

1. 개념

비밀번호 로그인은 "누가 들어왔나"만 알 수 있지만, 키 로그인은 어떤 키로 들어왔는지까지 알 수 있습니다. LogLevel VERBOSE이면 sshd가 인증에 사용된 공개키 지문(SHA256) 을 로그에 남깁니다.

로그인 로그 (VERBOSE)
 Accepted publickey for devops from 192.168.56.5 port 51010 ssh2: ED25519 SHA256:Qm9vZ2xl...
                                                                   키타입    지문
        │
        └─ 이 지문을 authorized_keys 각 줄의 지문과 대조
           ssh-keygen -lf authorized_keys → 256 SHA256:Qm9vZ2xl... devops@mgmt

→ "devops가 devops@mgmt 키로 192.168.56.5에서 접속" 까지 확정

지문은 공개키의 해시라 로그에 남아도 안전하며, 키를 특정하는 고유 식별자로 쓸 수 있습니다.

2. 왜 중요한가

  • 키가 유출됐을 때, 지문 추적이 있으면 그 키로 들어온 모든 세션을 찾아낼 수 있습니다. 대응 범위(어떤 키를 폐기할지)를 정확히 정할 수 있습니다.
  • 017편에서 심어진 키의 지문을, 로그의 지문과 대조하면 "준비된 키가 실제로 사용됐는가"를 증명할 수 있습니다.
  • 한 키가 여러 계정·여러 서버에서 쓰이면(키 재사용), 그 키 하나의 유출이 광범위한 접근으로 이어짐을 보여줍니다.

3. 핵심 명령어 / 설정

작업명령
VERBOSE 설정 확인sudo sshd -T | grep loglevel (VERBOSE 권장)
로그의 키 지문 추출grep 'Accepted publickey' /var/log/secure
파일 키 지문ssh-keygen -lf ~/.ssh/authorized_keys
개별 공개키 지문ssh-keygen -lf 파일.pub
지문 매핑로그 지문 ↔ 파일 지문 조인

4. 실습 (실습 예시)

LOG=/var/log/secure        # Ubuntu: /var/log/auth.log
# 1) 로그에서 (계정, 출발지, 지문) 추출
sudo grep 'Accepted publickey' $LOG | \
  sed -E 's/.*publickey for ([^ ]+) from ([0-9.]+).*(SHA256:[A-Za-z0-9+/=]+).*/\1 \2 \3/' | sort | uniq -c | sort -rn

# 2) 전 계정 authorized_keys 지문 → 주석(출처) 사전 만들기
for u in $(sudo awk -F: '$3>=1000||$1=="root"{print $1}' /etc/passwd); do
  h=$(getent passwd $u|cut -d: -f6)
  sudo ssh-keygen -lf "$h/.ssh/authorized_keys" 2>/dev/null | awk -v u=$u '{print $2, u, $NF}'
done | sort -u > /tmp/fp_dict.txt   # 지문 계정 주석

# 3) 로그 지문이 사전에 있는지 확인 (없으면 미등록 키로 로그인 = 이상)
sudo grep 'Accepted publickey' $LOG | grep -oE 'SHA256:[A-Za-z0-9+/=]+' | sort -u | \
  while read fp; do grep -q "$fp" /tmp/fp_dict.txt && echo "$fp known" || echo "$fp UNKNOWN"; done

5. 정상 상태

     40 devops 192.168.56.5 SHA256:Qm9vZ2xl...
     22 admin1 192.168.56.5 SHA256:YWRtaW4x...
SHA256:Qm9vZ2xl... known
SHA256:YWRtaW4x... known

로그에 나타난 모든 지문이 등록 키 사전에 있고(known), 계정·출발지가 일관된 상태가 정상입니다.

6. 이상 상태

     18 devops 192.168.56.77 SHA256:dW5rbm93bktleQ==
SHA256:dW5rbm93bktleQ== UNKNOWN
(사전 확인) 이 지문은 apache, backup 계정에도 동일하게 등록됨
  • 로그 지문이 사전에 없음(UNKNOWN) → 현재 authorized_keys에서 이미 제거됐거나, 추가 경로의 키 → 017편과 교차 확인
  • 또는 같은 지문이 여러 계정에 등록(apache, backup) → 하나의 공격자 키를 여러 계정에 심음 → 그 키 하나만 폐기해도 여러 접근 경로를 끊을 수 있음
  • 출발지 192.168.56.77(비관리망)에서 사용 → 공격 키로 판단

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

키 지문 기반 추적 결과를 매핑 표로 정리합니다(가상의 예시).

지문                       계정      출발지          첫 사용         마지막 사용   등록 위치
SHA256:Qm9vZ2xl...(mgmt)   devops    192.168.56.5    09-01          10-02        정상 기준선
SHA256:dW5rbm93...(없음)   devops    192.168.56.77   10-02 03:08    10-02 03:40  apache,backup에도 등록
활용설명
폐기 대상 특정UNKNOWN 지문 키를 전 계정에서 제거
세션 범위 확정그 지문으로 들어온 모든 세션(ses) → 행위 추적
확산 파악같은 지문이 쓰인 다른 서버 조회(H영역 내부 확장)

8. SOC 관제 포인트

  • LogLevel VERBOSE를 표준으로 적용해 키 지문이 항상 로그에 남게 합니다.
  • 로그 지문과 등록 키 사전을 대조해 미등록 키 로그인을 탐지합니다.
  • 유출·공격 키는 지문으로 특정해, 전 계정·전 서버에서 동일 지문을 폐기합니다.

9. 탐지 규칙

<group name="local,syssec_b,ssh,">
  <rule id="101160" level="11">
    <decoded_as>sshd</decoded_as>
    <match>Accepted publickey</match>
    <regex>SHA256:dW5rbm93bktleQ==</regex>
    <description>알려진 공격 키 지문으로 로그인(IOC 매칭)</description>
  </rule>
</group>

특정 지문 하드코딩은 사고 대응 중의 IOC 룰 예시입니다. 평상시에는 등록 키 지문 CDB 리스트를 만들어 "목록에 없는 지문 로그인"을 탐지하는 방식이 유지보수에 유리합니다.

10. 대응 방법

  1. 초기 확인 — 로그의 키 지문을 등록 키 사전과 대조해 미등록·공격 키를 식별합니다.
  2. 범위 확인 — 그 지문이 쓰인 모든 계정·세션·서버를 조회해 범위를 확정합니다.
  3. 증거 확보 — 로그인 로그(지문 포함), 키 사전, authorized_keys 사본을 보존합니다.
  4. 차단/조치 — 공격 키를 전 계정·전 서버에서 폐기하고 영향 계정 키를 재발급합니다.
  5. 재발 방지 — VERBOSE 로깅과 등록 키 지문 CDB 기반 미등록 키 탐지를 운영합니다.

11. 핵심 정리

구분핵심 내용
전제LogLevel VERBOSE → 로그에 키 지문(SHA256) 기록
대조로그 지문 ↔ ssh-keygen -lf authorized_keys 지문
활용폐기 키 특정, 세션 범위 확정, 키 재사용·확산 파악
지문 성질공개키 해시 → 로그에 남아도 안전한 고유 식별자
면접 포인트"지문으로 어떤 키가 쓰였는지까지 추적 → 정확한 폐기 범위 산정"

12. 다음 편 예고

다음 편 069. 계정 · 인증 보안 — SSH 인증 성공 로그 분석 에서는 키·비밀번호를 포함한 SSH 인증 성공 로그 분석을 다룹니다.


이전 편: 067. 계정 · 인증 보안 — authorized_keys 변조·추가 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글