SSHD 로그 분석은 OpenSSH 서버의 문제를 해결하고, 보안 이슈를 모니터링하는 데 매우 중요한 작업이다. SSHD 로그는 시스템 로그 파일 또는 SSH 데몬이 직접 생성한 파일에 저장되며, SSHD가 시작될 때부터 클라이언트가 접속하고 명령을 실행하는 전체 흐름을 추적할 수 있다. 이를 통해 연결 문제, 인증 실패, 비정상적인 접속 시도를 발견할 수 있다.
로그 파일 위치
일반적으로 SSHD 로그는 syslog
를 사용하여 /var/log/auth.log
또는 /var/log/secure
에 저장된다. 로그 파일의 정확한 위치는 시스템의 로그 설정에 따라 다를 수 있다. 예를 들어, SSHD 설정 파일인 sshd_config
에서 SyslogFacility
와 LogLevel
을 설정하여 로그의 자세한 정도를 조정할 수 있다.
SyslogFacility AUTH
LogLevel VERBOSE
SyslogFacility
는 로그 메시지의 카테고리를 지정하며, 보통 AUTH
또는 AUTHPRIV
가 사용된다. LogLevel
은 로그의 상세한 수준을 결정하며, 기본적으로 INFO
로 설정되어 있다. 로그의 세부 사항을 더 많이 보려면 VERBOSE
로 설정할 수 있다.
로그의 주요 항목
SSHD 로그 파일에는 다음과 같은 중요한 정보가 포함된다.
- SSHD 시작/종료 로그: SSH 데몬이 시작되거나 종료될 때 기록된다.
- 클라이언트 접속 시도: 클라이언트가 접속을 시도할 때마다 기록되며, 성공한 접속과 실패한 접속 모두 로그에 기록된다.
- 인증 로그: 사용자 인증 시도가 성공하거나 실패한 경우가 기록된다.
- 세션 종료 로그: 클라이언트의 세션이 종료될 때 기록된다.
SSHD 시작 및 종료 로그
SSHD가 시작되거나 종료될 때 로그에 기록되는 메시지는 보통 다음과 같다.
sshd[1234]: Server listening on 0.0.0.0 port 22.
sshd[1234]: Received signal 15; terminating.
여기서 1234
는 프로세스 ID이다. 서버가 특정 포트에서 연결을 기다리고 있다는 메시지를 나타내며, 종료 시에는 Received signal
과 함께 종료 이유가 기록된다.
클라이언트 접속 시도 로그
클라이언트가 SSH 서버에 접속을 시도하면 다음과 같은 로그가 생성된다.
sshd[1234]: Connection from 192.168.0.2 port 54321 on 192.168.0.1 port 22
이 로그는 클라이언트의 IP 주소와 포트 번호, 서버의 IP 주소와 포트 번호를 보여준다. 이를 통해 특정 IP에서의 비정상적인 접속 시도를 파악할 수 있다.
인증 로그
인증 과정에서 발생하는 로그는 사용자 이름과 인증 방식, 성공 또는 실패 여부를 기록한다.
sshd[1234]: Accepted publickey for user from 192.168.0.2 port 54321 ssh2: RSA SHA256:abcdef12345
sshd[1234]: Failed password for user from 192.168.0.2 port 54321 ssh2
여기서 Accepted publickey
는 공개 키 인증 방식으로 접속이 성공했음을 나타낸다. 반면, Failed password
는 비밀번호 인증 실패를 나타낸다. 인증 실패 로그는 보안 측면에서 매우 중요하며, 비정상적인 로그인 시도를 파악하는 데 사용된다.
세션 종료 로그
클라이언트의 SSH 세션이 종료될 때에도 로그가 기록된다. 이는 정상적인 종료뿐만 아니라 비정상적인 종료도 포함한다.
sshd[1234]: Disconnected from user@192.168.0.2 port 54321
이 로그는 user
가 192.168.0.2 IP 주소에서 접속하여 세션을 종료했음을 나타낸다. 비정상적인 세션 종료는 공격의 징후일 수 있으므로 주의 깊게 모니터링해야 한다. 예를 들어, 비정상적인 대량의 세션 연결과 해제는 DoS 공격과 관련이 있을 수 있다.
비정상적인 접속 시도 로그
비정상적인 접속 시도는 보통 비밀번호 또는 공개 키 인증 실패와 관련된 로그로 나타난다. 다수의 실패한 접속 시도는 무차별 대입 공격의 증거일 수 있다.
sshd[1234]: Failed password for invalid user admin from 192.168.0.2 port 54321 ssh2
위 로그는 admin
이라는 존재하지 않는 사용자가 비밀번호 인증을 시도했지만 실패했음을 나타낸다. 또한, invalid user
라는 메시지가 포함되어 있어 유효하지 않은 사용자가 접속을 시도했음을 알 수 있다.
이러한 로그는 특정 IP에서 다수의 비정상적인 로그인 시도가 발생하는지를 추적하는 데 유용하다. 만약 다수의 실패한 시도가 특정 IP에서 계속된다면 해당 IP를 차단하거나 추가적인 보안 조치를 고려할 수 있다.
SSHD 로그 분석을 위한 도구
로그 파일을 수동으로 분석하는 것은 비효율적일 수 있다. 따라서 다양한 로그 분석 도구를 사용하여 SSHD 로그를 효과적으로 관리할 수 있다.
- grep: 특정 키워드를 검색하여 로그에서 필요한 부분만 추출할 수 있다.
grep "Failed password" /var/log/auth.log
이 명령어는 실패한 비밀번호 인증 시도만을 로그 파일에서 추출한다.
-
logwatch: 시스템 로그를 자동으로 분석하고 보고서를 생성하는 도구이다. SSHD 로그를 요약하여 이메일로 받을 수 있다.
-
fail2ban: 다수의 실패한 접속 시도를 자동으로 차단하는 보안 도구이다. 로그 파일을 모니터링하여 비정상적인 패턴을 감지하고 자동으로 방화벽 규칙을 적용한다.
SSHD 로그 레벨 설정
sshd_config
파일에서 LogLevel
을 조정하여 로그의 상세도를 제어할 수 있다. LogLevel
은 다음과 같은 옵션을 가질 수 있다:
- QUIET: 로그 출력을 최소화한다.
- FATAL: 치명적인 에러만 기록한다.
- ERROR: 에러 메시지만 기록한다.
- INFO: 일반적인 로그를 기록한다. 기본 설정이다.
- VERBOSE: 자세한 로그를 기록한다.
- DEBUG: 디버깅 정보를 기록한다. 주로 문제 해결 시 사용되며,
DEBUG1
,DEBUG2
,DEBUG3
까지의 세부 단계가 있다.
LogLevel VERBOSE
위 설정을 통해 SSHD에서 생성되는 로그의 자세한 정보를 확인할 수 있다. 이 설정은 SSH 문제 해결에 매우 유용하며, 특히 비정상적인 접속 시도를 분석할 때 필수적이다.
로그 파일 순환
로그 파일이 장시간 동안 기록되면 파일의 크기가 매우 커질 수 있다. 이를 방지하기 위해 로그 순환(log rotation) 설정이 필요하다. 보통 Linux 시스템에서는 logrotate
라는 도구를 사용하여 로그 파일의 크기가 일정 이상 커지면 자동으로 로그를 순환시키고, 오래된 로그 파일은 삭제하거나 압축하는 방식으로 관리한다.
/etc/logrotate.d/
디렉터리에 있는 설정 파일을 확인하여 SSHD 로그 파일에 대한 순환 설정을 지정할 수 있다. 다음은 예시 설정이다.
/var/log/auth.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
/etc/init.d/rsyslog reload > /dev/null
endscript
}
이 설정은 /var/log/auth.log
파일을 매일 순환하며, 총 7개의 백업 로그를 보관한다. 오래된 로그 파일은 압축되며, 비어 있는 로그 파일은 순환하지 않는다.
SSHD 디버깅 모드
SSHD에서 문제가 발생했을 때, 디버깅 모드를 사용하여 SSHD의 동작을 자세히 추적할 수 있다. 디버깅 모드는 특히 접속이 실패하거나 인증이 되지 않는 문제를 분석할 때 유용하다.
/usr/sbin/sshd -d
-d
옵션을 사용하여 SSHD를 디버그 모드로 실행하면, SSHD는 더 많은 정보를 출력하며 이 정보를 기반으로 문제를 추적할 수 있다. 디버그 모드에서는 다음과 같은 정보를 확인할 수 있다:
- 클라이언트가 전송한 메시지
- SSH 프로토콜의 흐름
- 암호화 및 인증 절차의 자세한 내용
디버깅 로그는 보통 매우 상세하므로 문제 해결에 필요한 부분만 골라서 분석하는 것이 중요하다.
SSHD 로그 예제 분석
아래는 SSHD 로그의 실제 예시와 그 분석이다.
sshd[2345]: Accepted password for user1 from 192.168.1.100 port 52632 ssh2
sshd[2345]: pam_unix(sshd:session): session opened for user user1 by (uid=0)
sshd[2346]: Connection closed by 192.168.1.100 port 52632 [preauth]
이 예제는 사용자가 비밀번호 인증을 통해 성공적으로 로그인했음을 보여준다. 첫 번째 라인은 사용자가 비밀번호 인증에 성공했음을 나타내며, 두 번째 라인은 사용자 세션이 시작되었음을 알리는 pam_unix
메시지이다. 마지막 라인은 클라이언트가 세션을 종료했음을 나타낸다.
sshd[2345]: Failed password for invalid user admin from 192.168.1.100 port 52632 ssh2
이 로그는 admin
이라는 잘못된 사용자로 로그인하려는 시도가 실패했음을 보여준다. 이 같은 로그가 반복되면, 무차별 대입 공격을 의심해 볼 수 있으며, fail2ban
과 같은 도구를 사용하여 이 IP 주소를 차단하는 것이 좋다.
무차별 대입 공격 탐지
무차별 대입(brute force) 공격은 여러 비밀번호를 시도하여 인증을 우회하려는 시도를 말한다. SSHD 로그에서 무차별 대입 공격을 탐지하는 방법은 실패한 로그인 시도 횟수를 모니터링하는 것이다. 예를 들어, 다음과 같은 로그가 다수 나타난다면 무차별 대입 공격일 가능성이 높다.
sshd[2345]: Failed password for root from 192.168.1.200 port 65432 ssh2
sshd[2345]: Failed password for root from 192.168.1.200 port 65433 ssh2
sshd[2345]: Failed password for root from 192.168.1.200 port 65434 ssh2
이 경우, 공격이 진행 중인 IP를 차단하거나 SSH 접근 제한 설정을 통해 보호할 수 있다.