SSH(시큐어 셸, SecureSHell) 란?

: 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜을 가리킨다.     

- 위키백과 -

  • Default로 22번 포트를 사용
  • Sender - Receiver 간 주고 받는 데이터 자체가 암호화되어, 해당 패킷이 스니핑 되더라도 복호화할 수 있는 Key를 획득하지 못하면 해당 정보를 알 수 없게끔 설계되어 있다.
  • SSH Client : SSH 프로토콜을 이용하여 원격 시스템(SSH Server)에 접속 및 명령을 내리도록 하는 주체
  • SSH Server : SSH Client로부터 SSH 프로토콜을 통해 받은 명령을 수행하는 주체(?). 쉽게 말해, 원격지 서버 또는 컴퓨터.

등장 배경

사실 원격 시스템에서의 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 동일한 기능을 가진 응용 프로그램은 기존에도 있었다.

rsh, rlogin, telnet, ftp 등이 그것들인데, 이러한 응용 프로그램 또는 프로토콜들은 세션을 맺는 과정 또는 데이터를 통신하는 과정 등에서 암호화가 되어 있지 않아, *스니핑(Sniffing) 공격에 늘 노출되어 있었다.

 

스니핑(Sniffing) : 사전적 의미로는 ‘코를 킁킁거리다’, ‘냄새를 맡다’로, IT 용어에서는 송신자(Sender)와 수신자(Receiver) 간 교환되는 패킷 정보를 네트워크 상에서 도청하는 행위를 말한다.


SSH 통신 과정

1. Session Authentication

SSH Client와 Server 간 세션이 맺어지려면, Client와 Server 가 서로가 올바른 노드인지 인증하는 절차가 필요하다. SSH 프로토콜에서는 이를 Public Key(공개키)Private Key(개인키)로 이루어지는 비대칭키 암호화 방식을 이용한다.

 

세션이 맺어지기 전부터 이러한 인증 과정을 거치는 이유는, SSH Client 가 최초에 요청한 SSH Connection Request를 Attacker가 가로채어 SSH Server인 척 하지 못하게 하려는 이유이다.

 

Linux 에서는 대부분 OpenSSH 라는 프로그램을 통해 SSH 프로토콜을 이용하게 된다.

SSH 프로토콜은 기본적으로 Client의 Public Key, Private Key / Server의 Public Key, Private Key 가 갖추어져 있어야만 통신이 가능하다.

 

우선 SSH 프로토콜의 세션 인증 과정이 어떻게 진행되는 지 다음 그림을 통해 살펴보자.

SSH 프로토콜에서 SSH Client와 SSH Server 간 세션을 맺는 인증 과정

 

KEX : SSH에서 Key Exchange Algorithm 을 가리키는 말로, SSH Client와 Server가 서로의 Public Key를 공유할 때, Attacker가 해당 Public Key를 가로채어 SSH Client인 척 또는 SSH Server인 척 하지 못하도록 방지하는 알고리즘이다. 여기서 알아두어야 할 점은, 이 KEX 알고리즘은 암호화 알고리즘이 아니며, 서로 간 안전하게 Public Key를 공유할 수 있도록 해주는 알고리즘이라는 점이다.

 

해시 함수(Hashing) : 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수.

해시 함수에 의해 만들어진 출력값을 가지고 역으로 입력값을 찾는 것이 계산적으로 불가능하기 때문에, 암호화-복호화의 용도로 보기에는 어렵다.

SSH 프로토콜에서는, SSH Connection 이 성공적으로 이루어지기 전에, 즉 위 과정 중간에 Attacker가 잠입하여 교환되는 모든 정보를 조작할 수도 있으므로, 이를 방지하기 위해 **Sender 가 보낸 메시지가 변조되지 않았는지 확인(데이터의 무결성 보증)**하는 절차가 존재한다. 이 때 사용하는 알고리즘이 MAC(Message Authentication Code) Algorithms 이다.

 

 

2. User Authentication

위 세션 인증 과정을 거쳐 SSH Client와 SSH Server 간에 Connection이 열리게 되면, 이제 접속을 시도하는 User가 접속 권한이 있는 사람인지 확인하는 절차가 필요하다. 즉, 위 세션 과정에서 정상적인 과정을 거쳐 정상적으로 SSH Conneciton이 생성되었다 하더라도, SSH Client를 사용하는 유저 자체가 Attacker였다면, 말짱 도루묵이 된다.

 

SSH 프로토콜에서 유저에 대한 Authentication을 하는 방법은 크게 2가지가 있다.

 

2.1. Password 인증

  • 사용자가 입력한 비밀번호를 Session Authentication 과정에서 생성한 Session Key로 암호화하여 SSH Server에게 보내고, 이를 SSH Server가 검증하면 끝나는 방식
  • 보안상 권장하지 않는 방식이다.
    • Attacker가 Brute-Force 공격으로 Password를 알아낼 수 있다.
    • 사용자가 PW를 까먹어버리면 큰일이다!

 

2.2. Key-Pair 인증

  • SSH Client에서 Public Key, Private Key를 생성하고, 이를 SSH Server에 접속할 때 Public Key를 제출하여 인증되는 방식
  • Password 방식보다 높은 수준의 보안이다.
    • SSH Server에 기존에 등록되어 있는 user 및 host가 아니라면, 일단 Attakcer의 host라고 의심하고 보는 것이다.
    • Key-Pair 인증 방식을 적용하려면, 최초에 SSH Client가 ssh-copy-id 명령어를 사용하여 SSH Server에 Public Key 파일을 보내주어야 한다. 이때 SSH Server에 대한 PW를 입력하여, SSH Server에 Public Key 파일을 넣을 수 있도록 한다.
    • SSH Server에서 접속을 허용하는 Client의 Public Key가 authorized_keys 파일에 한번 등록되었다면, SSH Client는 추후 접속에서 해당 Key 파일에 대한 Passphrase를 입력하기만 하면 SSH 접속이 가능해진다. (Passphrase는 SSH Client에서 ssh-keygen 명령어를 이용하여 키 파일을 생성할 때 입력할 수도 있고, 입력하지 않으면 Passphrase는 존재하지 않게 된다.)

SSH Protocol의 User Athentication - Key-Pair 인증 방식

 

참고

https://veneas.tistory.com/entry/Linux-%EB%A6%AC%EB%88%85%EC%8A%A4-ssh-%EB%8F%99%EC%9E%91-%EB%B0%A9%EC%8B%9D-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%82%AC%EC%9A%A9%EB%B2%95

 

[Linux] 리눅스 ssh 동작 방식, 설치 및 사용법

목차 1. SSH SSH 이란 Secure Shell Protocol의 약자로, FTP / Telnet에 비해 보안에 초점을 맞춘 Protocol입니다. 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으

veneas.tistory.com

https://gwonbookcase.tistory.com/56

 

SSH 공개키 인증 과정

1. 공개키 암호화란? 공개 키 암호 방식은 암호 방식의 한 종류로 사전에 비밀 키를 나눠가지지 않은 사용자들이 안전하게 통신할 수 있도록 한다. 공개 키 암호 방식에서는 공개 키와 비밀 키가

gwonbookcase.tistory.com

https://swalloow.github.io/ssh-tunneling/

 

SSH 프로토콜과 Tunneling 이해하기

지금까지 아무 생각없이 SSH를 사용하다가 한번 정리해보았습니다. SSH Protocol SSH는 Secure Shell의 약자입니다. SSH는 한마디로 정의하면, 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에

swalloow.github.io

https://seunghyunson.tistory.com/4

 

SSH란 무엇일까?

SSH란 무엇일까? SSH를 왜 사용할까? SSH의 장단점은? GitHub 계정 연동까지! 다들 한 번쯤 SSH라는 단어를 들어보거나 본 적이 있을 것입니다. GitHub에서 repository를 clone 받을 때도 등장하고, 배포용으

seunghyunson.tistory.com

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기