HAB-001 Bastion SSH Auth Log
공격 행위 요약
공격자는 제공된 SSH 접근 경로를 이용해 hanguel-bastion에 접속한 뒤 내부망 10.60.0.0/16으로 pivot한다. 이 로그는 누가, 언제, 어떤 출발지에서 bastion에 접근했는지 확인하는 1차 로그다.
로그 발생 위치
| 구분 | 위치 | 설명 |
| Amazon Linux 계열 | /var/log/secure | sshd 인증 성공/실패, session opened/closed |
| Ubuntu 계열 | /var/log/auth.log | Accepted publickey, Failed password, PAM session 이벤트 |
수집 방식
| 구분 | 방식 |
| 권장 | Elastic Agent system integration 또는 Filebeat system module |
| 대체 | Hanguel collector가 auth log tail 후 ECS 유사 JSON으로 변환 |
주요 필드
| 필드 | 의미 | 예시 |
@timestamp | SSH 인증 이벤트 발생 시간 | 2026-05-26T04:00:00Z |
host.name | bastion 호스트명 | hanguel-bastion |
message | 원본 sshd 인증 메시지 | Accepted publickey for ec2-user from ... |
process.name | 인증 프로세스 | sshd |
user.name | 접속 계정 | ec2-user |
source.ip | SSH 출발지 | analyst public IP |
event.action | 정규화된 보조 행위 | ssh_session_accepted |
커버하는 Techniques Used
탐지 포인트
- 허용된 실습자 IP가 아닌 출발지에서
Accepted publickey가 발생했는지 확인한다.
- bastion SSH 세션 직후 내부
10.60.0.0/16 스캔 또는 PMS 접근 로그가 이어지는지 본다.
원본 로그 기준 탐색 포인트
| 관찰할 행위 | 원본 필드/문자열 | 분석 의미 |
| SSH 로그인 성공 | message:*Accepted publickey*, process.name:sshd | bastion 진입 세션이 실제로 열렸는지 확인 |
| SSH 로그인 실패 반복 | message:*Failed password* | brute force가 아니라 제공 credential 사용인지 구분 |
| 세션 시작/종료 | message:*session opened*, message:*session closed* | 접속 시간창을 내부 스캔/HTTP 접근 시간창과 연결 |
| 출발지 확인 | source.ip, 원본 from x.x.x.x 문자열 | 허용된 실습자 IP 또는 예상 NAT IP인지 확인 |
Analyst Hunting KQL
분석가는 먼저 원본 auth log 메시지와 sshd 프로세스를 기준으로 검색한다. event.action은 collector가 정규화한 뒤에만 존재할 수 있으므로 1차 헌팅 조건으로 사용하지 않는다.
host.name:"hanguel-bastion" and process.name:"sshd" and message:*Accepted publickey*
host.name:"hanguel-bastion" and message:(*Accepted publickey* or *Failed password* or *session opened*)
host.name:"hanguel-bastion" and message:*Accepted publickey* and user.name:"ec2-user"
host.name:"hanguel-bastion" and process.name:"sshd" and message:(*Accepted* or *session opened* or *session closed*)
Normalized Pivot
정규화 파이프라인 동작 여부를 확인할 때만 보조적으로 사용한다.
host.name:"hanguel-bastion" and event.action:"ssh_session_accepted"