신뢰할 수 없는 SSH 호스트 키 허용 (Paramiko Missing Host Key Validation)

Accepting Unknown SSH Host Keys when using Paramiko

설명

SSH(Secure Shell) 프로토콜에서는 원격 호스트의 신원을 확인하기 위해 호스트 키(host key) 를 사용합니다. 호스트 키 검증 없이 자동으로 허용하면 중간자 공격(Man-in-the-Middle, MitM) 에 취약해질 수 있습니다.

paramiko.SSHClient.set_missing_host_key_policy(AutoAddPolicy)를 사용하면 보안 위협이 발생할 수 있습니다. 이 정책을 사용하면 신뢰할 수 없는 호스트 키도 자동으로 허용되므로 공격자가 가짜 서버를 이용해 접속을 가로챌 가능성이 있습니다.

잠재적 영향

  • 중간자 공격(MitM): 공격자가 가짜 SSH 서버를 설정하여 사용자의 인증 정보를 탈취할 수 있음.

  • 세션 하이재킹: 악성 서버가 SSH 세션을 탈취하여 명령을 실행할 가능성이 있음.

  • 데이터 조작: 공격자가 SSH 통신을 가로채고 조작할 수 있음.

해결 방법

  1. AutoAddPolicy 사용 금지

    • AutoAddPolicy를 사용하면 인증되지 않은 호스트 키도 자동으로 저장되므로 보안에 취약함.

    • 대신, RejectPolicy를 사용하여 신뢰할 수 없는 호스트 키를 거부해야 합니다.

  2. 신뢰할 수 있는 호스트 키를 load_host_keys() 또는 known_hosts 파일에서 로드

    • 사전에 저장된 호스트 키를 로드하여 검증하는 것이 가장 안전한 방법입니다.

취약한 코드 및 안전한 코드 예시

취약한 코드

안전한 코드

설명:

  • 취약한 코드:

    • set_missing_host_key_policy(AutoAddPolicy)를 사용하여 미검증 호스트 키를 자동으로 허용함.

  • 안전한 코드:

    • load_system_host_keys()를 사용하여 로컬의 ~/.ssh/known_hosts 파일에서 신뢰할 수 있는 호스트 키를 로드함.

    • set_missing_host_key_policy(RejectPolicy)를 사용하여 미검증 호스트 키를 거부함.

참조

Last updated