시스템 보안 · 취약점 › B. 계정 · 인증 보안 강화 · 18/50편 (전체 068/450)
학습 단계: 2단계 · 설정 및 점검
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
비밀번호 로그인은 "누가 들어왔나"만 알 수 있지만, 키 로그인은 어떤 키로 들어왔는지까지 알 수 있습니다. 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에서 접속" 까지 확정
지문은 공개키의 해시라 로그에 남아도 안전하며, 키를 특정하는 고유 식별자로 쓸 수 있습니다.
| 작업 | 명령 |
|---|---|
| VERBOSE 설정 확인 | sudo sshd -T | grep loglevel (VERBOSE 권장) |
| 로그의 키 지문 추출 | grep 'Accepted publickey' /var/log/secure |
| 파일 키 지문 | ssh-keygen -lf ~/.ssh/authorized_keys |
| 개별 공개키 지문 | ssh-keygen -lf 파일.pub |
| 지문 매핑 | 로그 지문 ↔ 파일 지문 조인 |
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
40 devops 192.168.56.5 SHA256:Qm9vZ2xl...
22 admin1 192.168.56.5 SHA256:YWRtaW4x...
SHA256:Qm9vZ2xl... known
SHA256:YWRtaW4x... known
로그에 나타난 모든 지문이 등록 키 사전에 있고(known), 계정·출발지가 일관된 상태가 정상입니다.
18 devops 192.168.56.77 SHA256:dW5rbm93bktleQ==
SHA256:dW5rbm93bktleQ== UNKNOWN
(사전 확인) 이 지문은 apache, backup 계정에도 동일하게 등록됨
키 지문 기반 추적 결과를 매핑 표로 정리합니다(가상의 예시).
지문 계정 출발지 첫 사용 마지막 사용 등록 위치
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영역 내부 확장) |
LogLevel VERBOSE를 표준으로 적용해 키 지문이 항상 로그에 남게 합니다.<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 리스트를 만들어 "목록에 없는 지문 로그인"을 탐지하는 방식이 유지보수에 유리합니다.
| 구분 | 핵심 내용 |
|---|---|
| 전제 | LogLevel VERBOSE → 로그에 키 지문(SHA256) 기록 |
| 대조 | 로그 지문 ↔ ssh-keygen -lf authorized_keys 지문 |
| 활용 | 폐기 키 특정, 세션 범위 확정, 키 재사용·확산 파악 |
| 지문 성질 | 공개키 해시 → 로그에 남아도 안전한 고유 식별자 |
| 면접 포인트 | "지문으로 어떤 키가 쓰였는지까지 추적 → 정확한 폐기 범위 산정" |
다음 편 069. 계정 · 인증 보안 — SSH 인증 성공 로그 분석 에서는 키·비밀번호를 포함한 SSH 인증 성공 로그 분석을 다룹니다.
이전 편: 067. 계정 · 인증 보안 — authorized_keys 변조·추가 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점