Home SSH (Secure Shell)
Post
Cancel

Computer › SSH (Secure Shell)

SSH 기초

1. SSH란?

Secure Shell = 보안 셸

원격지 호스트 컴퓨터에 접속하기 위해 사용하는 인터넷 프로토콜이다.

과거에 주로 사용되던 Telnet은 암호화가 이루어지지 않아 보안 상 취약했으므로,

기존의 기능에 암호화 기능을 추가하여 1995년에 나온 프로토콜이다.

현재는 원격 접속 보안을 위한 필수적인 요소로 자리잡고 있다.

Port 번호는 22번이다.

2. SSH의 강점

사용자 인증부터 데이터 전송까지 모든 과정이 암호화되기 때문에 보안성이 매우 높다.

  • 만약 통신이 노출되더라도 이해할 수 없는 암호화된 문서로 보인다.

3. SSH의 주요 기능

  1. 보안 접속을 통한 Rsh, Rcp, Rlogin, Rexec, Telnet, Ftp 등을 제공한다.

  2. IP Spoofing*을 방지하기 위한 기능을 제공한다.

  3. X11 패킷 포워딩 및 일반적인 TCP/IP 패킷 포워딩을 제공한다.

  • IP Spoofing : IP 위/변조 기법 중 하나

4. SSH 작동 원리의 핵심

SSH의 핵심은 ‘Key’ 다.

SSH는 키를 기반으로 통신한다고 해도 과언이 아니다.

클라이언트와 서버는 각각의 키를 보유하고 있으며,

이 키를 이용해 연결 상대를 인증하고 안전하게 데이터를 주고 받는다.

키를 생성하는 방식에는 아래의 두 가지가 있다.

  1. 비대칭키 (= 공개키, 개인키) : 접속 시도 시 클라이언트와 서버가 서로를 알아보기 위해 사용

  2. 대칭키 : 접속이 허용된 상태에서 정보를 안전하게 주고 받기 위해 사용

4-1. 비대칭키란?

클라이언트와 서버가 서로를 인증하기 위해 사용하는 서로 다른 두 개의 키를 말한다.

SSH를 통해 서버로 접속을 시도하면, 먼저 이 비대칭키라는 것을 사용하여 인증 과정을 거쳐야한다.

SSH에서 비대칭키란 공개키와 개인키를 뜻하며, 이 둘은 묶어서 Key Pair라고도 불린다.

4-2. 대칭키란?

비대칭키 인증 방식을 거쳐 접속이 허용되었다고 하더라도,

클라이언트와 서버가 정보를 안전하게 교환하기 위해서는 추가적인 암호화 과정이 필요하다.

이 경우, 비대칭키 방식과는 달리 한 개의 키만을 사용하며, 이 키를 대칭키라고 부른다.


SSH 심화

1. SSH는 왜 안전한가?

SSH는 커넥션을 맺을 때 3가지 암호화 방식을 사용하여 보안성을 확보한다.

이 과정이 상당히 정교하기 때문에, 제 3자가 통신 내용을 확인할 수 없으며 아무나 서버에 접속하지 못 한다.

1-1. SSH 암호화

SSH 암호화에는 총 3가지 방식이 사용된다.

  1. 비대칭키 암호화

  2. 대칭키 암호화

  3. 해시

2. SSH 접속 과정

2-1. 서버 인증 및 세션 키 생성

접속하려는 서버가 올바른 서버인지 검증하고, 이후의 데이터 통신을 안전하게 진행하기 위한 세션 키를 생성하는 과정이다.

  1. 접속 요청을 받은 서버는 클라이언트에게 자신의 공개키를 전송한다.

  2. 최초 접속이라면, 서버로부터 전달받은 공개키를 로컬에 저장할 건지 물어봐온다.

  3. 동의한다면 해당 공개키가 클라이언트 측 홈 디렉토리의 .ssh/known_hosts 파일 안에 추가된다.

  4. 이후부터는 해당 서버에 접속 요청을 할 때마다 서버로부터 전달받은 공개키가 로컬에 저장되어 있는 공개키와 같은 것인지 검증하게 되며, 같다면 올바른 서버로 판단하게 된다.

  5. 이 과정에서, 데이터 통신 시 암호화 및 복호화를 위해 사용될 대칭키 (= 세션키) 가 생성된다.


2-2. 클라이언트 인증

클라이언트가 해당 서버에 대한 올바른 접근 권한을 가지고 있는지 검증하는 과정이다.

클라이언트 인증에는 아래의 두 가지 방식이 있다.

  1. Password 인증

    • 보안 상 취약하여 권장되지 않는 방식이다.
  2. SSH 공개키 인증

    • 권장되는 인증 방식이다. 인증 절차는 아래와 같다.


2-3. SSH 공개키 인증

클라이언트 측에서 Key Pair를 생성하고 서버에 공개키를 전송하는 작업은 이미 완료한 상태라고 가정한다.

  1. 클라이언트는 해당 서버에 접속하기 위해 사용할 Key Pair의 ID를 서버에 전송한다.

  2. 서버는 해당 ID에 매칭되는 공개키가 홈 디렉토리의 .ssh/authorized_keys 파일 안에 작성되어 있는지 찾는다.

  3. 존재한다면, 난수 값을 생성하고 이를 해당 공개키로 암호화하여 클라이언트에 전송한다.

  4. 클라이언트는 전달받은 암호화된 난수 값을 해당 개인키로 복호화한다.

  5. 이후 복호화한 난수 값을 이용하여 MD5 해시 값을 계산하고, 이를 다시 서버에 전송한다.

  6. 서버도 생성했던 난수 값을 이용하여 MD5 해시 값을 계산하고, 클라이언트로부터 받은 값과 같은지 검사한다.

  7. 같다면, 올바른 클라이언트임이 인증되어 본격적인 데이터 통신이 가능해진다.

3. SSH 데이터 통신 과정

접속 시 생성한 대칭키 (= 세션키) 를 이용하여 서로 데이터를 주고 받으며 통신한다.

보낼 때는 대칭키로 암호화하고, 받을 때는 대칭키로 복호화하는 방식이다.

통신이 종료되면 (= SSH 세션이 종료되면) 해당 대칭키는 폐기되며,

다시 접속할 때마다 새로운 대칭키가 생성되어 통신에 사용된다.

❤ Recent Post
❤ How About This
❤ Visitor Counter