멀티팩터 인증(MFA)은 OpenSSH에서 보안성을 크게 향상시킬 수 있는 중요한 설정 중 하나이다. 기본적인 비밀번호 인증 외에, 추가적인 인증 방법을 함께 사용하여 더욱 안전한 SSH 접속 환경을 구축할 수 있다.

MFA의 개념

멀티팩터 인증은 사용자가 시스템에 접근할 때 두 가지 이상의 서로 다른 인증 요소를 요구하는 보안 방식이다. 이를 통해, 한 가지 인증 방식이 손상되더라도 추가적인 보안 레이어가 존재하여 시스템을 보호할 수 있다. OpenSSH에서 주로 사용되는 두 가지 인증 방식은 다음과 같다:

멀티팩터 인증은 이 두 가지 방식을 조합하거나, 추가적으로 TOTP(Time-based One-Time Password)와 같은 방식을 포함시켜 보안을 강화한다.

PAM (Pluggable Authentication Modules)을 통한 MFA 설정

멀티팩터 인증을 구현하기 위해 PAM 모듈을 사용할 수 있다. PAM은 다양한 인증 방법을 시스템에 추가할 수 있는 모듈식 인증 프레임워크로, OpenSSH와 연동하여 다양한 인증 방식을 구현할 수 있다.

1. PAM 설정 파일 수정

먼저 /etc/pam.d/sshd 파일을 수정하여 PAM을 통해 MFA를 활성화해야 한다. 다음과 같은 구성을 사용할 수 있다:

auth required pam_unix.so
auth required pam_google_authenticator.so

이 구성에서는 pam_unix.so 모듈이 먼저 사용자 비밀번호를 요구하고, pam_google_authenticator.so 모듈이 TOTP 기반의 일회용 비밀번호를 요구하게 된다.

2. OpenSSH 설정 파일 수정

PAM 설정 후, OpenSSH의 설정 파일인 /etc/ssh/sshd_config에서 다음 항목을 활성화해야 한다:

ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,password

이 구성을 통해 공개키 인증과 비밀번호 인증을 함께 요구하는 MFA 구성을 구현할 수 있다.

MFA에서 사용하는 TOTP 설정

TOTP(Time-based One-Time Password)는 시간에 따라 생성되는 일회용 비밀번호로, 멀티팩터 인증에서 자주 사용된다. 사용자는 인증 시점에 TOTP를 생성할 수 있는 앱(예: Google Authenticator)을 이용하여 일회용 비밀번호를 입력한다.

1. Google Authenticator 설치

서버에 Google Authenticator PAM 모듈을 설치해야 한다. 우분투나 CentOS와 같은 리눅스 배포판에서는 다음 명령어로 설치할 수 있다:

sudo apt-get install libpam-google-authenticator

2. 사용자의 TOTP 설정

사용자는 TOTP를 설정하기 위해 google-authenticator 명령을 실행해야 한다. 이 명령은 사용자의 홈 디렉토리에 TOTP 관련 설정을 저장하고, 사용자가 모바일 디바이스에서 QR 코드를 스캔하여 TOTP 인증을 사용할 수 있도록 설정한다:

google-authenticator

위 명령을 실행하면 QR 코드가 화면에 출력되며, 사용자는 이를 스캔하여 인증 앱에 등록할 수 있다. 이후, 30초마다 새로운 일회용 비밀번호가 생성되며, SSH 접속 시 함께 입력하게 된다.

3. MFA를 통한 SSH 접속

설정이 완료되면 사용자가 SSH 접속을 시도할 때 다음과 같은 절차가 진행된다:

  1. 공개키 인증: SSH 클라이언트는 공개키를 사용하여 서버에 연결을 시도한다.
  2. 비밀번호 인증: 공개키 인증 후 서버는 사용자에게 비밀번호 입력을 요청한다.
  3. TOTP 인증: 비밀번호 인증이 완료되면 사용자는 TOTP 기반의 일회용 비밀번호를 입력한다.

MFA에서의 Backup Codes 설정

MFA를 사용할 때, TOTP 기반 인증이 불가능한 상황을 대비하여 Backup Codes를 설정하는 것이 좋다. 이는 TOTP 앱을 사용할 수 없을 때 대체할 수 있는 일회용 비밀번호 세트이다. Google Authenticator를 설정할 때 제공되는 옵션을 통해 이러한 Backup Codes를 생성할 수 있다.

1. Backup Codes 생성

google-authenticator 명령을 실행할 때, 다음과 같은 프롬프트가 나타난다:

Do you want me to update your "/home/user/.google_authenticator" file (y/n) 

여기서 y를 선택하면, 일회용 Backup Codes가 생성된다. 예시로 다섯 개의 코드를 제공하며, 각 코드는 한 번만 사용할 수 있다. 이는 TOTP를 사용할 수 없을 때 비상용으로 사용할 수 있는 암호들이다.

Your emergency scratch codes are:
  12345678
  23456789
  34567890
  45678901
  56789012

2. Backup Codes 관리

생성된 Backup Codes는 반드시 안전한 장소에 보관해야 하며, 사용자 계정이 차단되지 않도록 주기적으로 코드를 교체하는 것이 좋다. 이를 통해 MFA 시스템이 무력화되지 않도록 예방할 수 있다.

SSH 에이전트 포워딩과 멀티팩터 인증

멀티팩터 인증과 SSH 에이전트 포워딩을 함께 사용하는 경우에도 몇 가지 고려사항이 있다. SSH 에이전트 포워딩을 사용하면 SSH 클라이언트의 인증 에이전트가 원격 서버에 전달되며, 이를 통해 추가적인 로그인 과정 없이 연속적인 SSH 접속이 가능한다.

그러나 멀티팩터 인증이 활성화된 경우, SSH 에이전트 포워딩 중에도 다시 한번 TOTP 인증을 요구할 수 있다. 이는 시스템 설정에 따라 다르며, 다음과 같은 구성을 통해 관리할 수 있다:

ForwardAgent yes
AuthenticationMethods publickey,password publickey,keyboard-interactive

이 설정은 원격 서버에서 추가적인 MFA 인증을 요구하지 않고 SSH 에이전트 포워딩을 허용하는 방식이다.

MFA의 보안 이점과 한계

멀티팩터 인증은 단일 인증 방식에 비해 훨씬 높은 보안성을 제공한다. 특히, 비밀번호 탈취 등의 공격에 대응할 수 있는 강력한 방어 수단이 된다. 그러나 이 또한 완벽한 보안 솔루션은 아니며, 추가적인 보안 조치가 필요할 수 있다.

1. MFA의 장점

2. MFA의 단점