LL-001 Linux SSH Auth Log
Why This Log Matters
SB-01에서 공격자는 Jenkins에서 확보한 배포 credential을 이용해 App 서버로 SSH 접속한다. auth.log는 이 이동이 실제로 발생했는지 확인하는 1차 증거다. 특히 접속 계정, 출발지 IP, 인증 방식, 성공/실패 여부를 통해 정상 배포 접근과 비정상 접근을 구분할 수 있다.
Log Structure
Linux SSH 인증 로그는 일반적으로 시간, 호스트명, 프로세스, 인증 결과, 계정, 출발지 IP, 포트, 인증 방식 정보를 포함한다. ELK로 수집하면 message 원문과 함께 user.name, source.ip, event.outcome, process.name 같은 필드로 정규화할 수 있다.
<timestamp> <host> <process>[<pid>]: <auth_result> <auth_method> for <user> from <source_ip> port <source_port> ssh2
예를 들어 SSH public key 인증에 성공하면 아래처럼 Accepted publickey, 접속 계정, 출발지 IP, 포트가 한 줄에 같이 남는다.
Raw Log Example
May 08 13:25:41 sb01-app sshd[2841]: Accepted publickey for deploy from 10.10.40.21 port 51244 ssh2: RSA SHA256:...
May 08 13:25:41 sb01-app sshd[2841]: pam_unix(sshd:session): session opened for user deploy(uid=1001) by (uid=0)
May 08 13:27:02 sb01-app sshd[2841]: pam_unix(sshd:session): session closed for user deploy
Representative Events
| Event Type | Example Signal | Meaning |
|---|---|---|
| Login success | Accepted publickey for deploy | SSH public key 인증 성공 |
| Login failure | Failed password for invalid user | 비밀번호 인증 실패 또는 계정 추측 |
| Session opened | pam_unix(sshd:session): session opened | SSH 세션 시작 |
| Session closed | pam_unix(sshd:session): session closed | SSH 세션 종료 |
Important Fields
| Field | Meaning |
|---|---|
@timestamp | 인증 이벤트 발생 시간 |
user.name | 접속 계정 |
source.ip | 접속 출발지 IP |
event.outcome | 성공 또는 실패 |
process.name | 보통 sshd |
message | 원본 인증 로그 |
Collection Method
| Method | Use Case |
|---|---|
| Filebeat system module | Linux 인증 로그를 ECS 필드로 정규화해서 수집할 때 사용 |
| Filebeat custom log input | project.name, sb01_server, sb01_log_type 같은 SB-01 전용 필드를 붙일 때 사용 |
Mapped Techniques
| Technique | Mapping Reason |
|---|---|
| T1021.004 Remote Services: SSH | SSH를 통한 원격 접속 자체를 확인 |
| T1078 Valid Accounts | 정상 계정/키를 이용한 인증 성공 확인 |
| T1110 Brute Force | 반복 인증 실패, invalid user 패턴 확인 |
KQL Draft
sb01_server: "app" and sb01_log_type: "linux_auth" and message: "Accepted publickey for deploy"
Investigation Pivot
Accepted publickey for deploy이벤트로 SSH 성공 여부를 확인한다.source.ip가 Jenkins 서버인지, 외부 또는 예상 밖 내부 서버인지 확인한다.- 같은 시간대 Jenkins build/system log에서 배포 job 또는 CLI 사용 흔적을 확인한다.
- SSH 직후
LL-002 auditd에서/opt/spacebar-booking접근이 이어졌는지 확인한다. - 필요하면
DBL-001 PostgreSQL로그로 DB 접속과 조회 행위를 연결한다.
Limitations
auth.log만으로는 SSH 접속 이후 실행한 명령이나 접근한 파일을 알 수 없다. 따라서 App 경로 접근은 LL-002 auditd, DB 조회는 DBL-001, 네트워크 전송은 AWSL-001과 함께 봐야 한다.
