010

01. SSH 프로토콜

  • 한 컴퓨터에서 다른 컴퓨터로 보안성 있는 원격 로그인을 위한 방법
  • SSH(Secure Shell) 프로토콜은 보안을 중요시하는 프로토콜.
  • 암호화된 통신을 지원한다. (데이터 암호화 후 교환) → 식별할 수 없는 내용으로 패킷 전송 → 누군가 정보를 탈취하더라도 쉽게 해석하지 못하도록 보안성 향상
  • 포트의 기본값은 22

01-1. SSH 프로토콜은 언제 사용할까?

  • 사용자 및 자동화 된 프로세스에 대한 안전한 엑세스 제공
  • 자동화된 파일 전송
  • 원격 명령 실행
  • 네트워크 인프라 및 기타 미션 크리티컬한 시스템 구성요소 관리

01-2. SSH 프로토콜 기능

  • 보안 접속을 통한 rsh, rcp, rlogin, rexec, telnet, ftp 제공
  • IP Spoofing(IP 위/변조 기법)을 방지
  • X11 패킷 포워딩 및 일반적인 TCP/IP 패킷 포워딩 제공



02. SSH 프로토콜 작동 방식

SSH 서버에 연결되는 SSH 클라이언트에 의해 연결이 설정됨

  1. SSH 클라이언트가 연결 설정 프로세스를 구동
  2. Handshake 개시
    1. 접속하려는 서버가 올바른 서버인지 검증하고, 이후의 데이터 통신을 안전하게 진행하기 위한 세션 키 생성
    2. 클라이언트가 해당 서버에 대한 올바른 접근 권한을 가지고 있는지 검증

setup flow

Untitled

02-1. 올바른 서버인지 검증

  1. 클라이언트가 서버에 SSH 접속을 요청하면, 서버는 자신의 공개키를 클라이언트에게 전송

( SSH 서버를 설치할 때, 내부적으로 공개키와 개인키는 자동으로 생성된다. )

만약 클라이언트가 해당 서버에 최초로 접속 요청을 했다면, 서버로부터 전달받은 공개키를 로컬에 저장할 건지 선택함

The authenticity of host ‘ec2-1-2-3-4.ap-northeast-2.compute.amazonaws.com (1.2.3.4)’ can’t be established. ECDSA key fingerprint is SHA256:F7H01iae8u5uIfi7BrySvlORfBAFwvpEeXj2U5pzTVY.

Are you sure you want to continue connecting (yes/no)?

→ 동의 시, 해당 공개키가 홈 디렉토리의 .ssh/known_hosts 파일 안에 추가.

  1. 해당 서버에 접속 요청을 할 때마다 서버로부터 전달받은 공개키가 로컬에 저장되어 있는 공개키와 같은지 검증.
  2. 동시에 세션 키 생성

세션 키 : 클라이언트가 서버와 데이터 통신을 할 때, 암호화 및 복호화를 위해 사용할 대칭키

키 교환(key Exchange, KEX) 알고리즘 중 가장 대표적인 것은 디피-헬만(Diffle-Hellman)알고리즘

02-2. 클라이언트 인증

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

인증 방식

  1. 비밀번호 인증
    1. 사용자가 입력한 비밀번호를 세션키로 암호화하여 서버에게 보내고, 서버는 이를 검증한다.
    2. 자동화된 스크립트를 이용하면 적절한 길이의 비밀번호는 노출될 위험이 크므로, 이 방식은 권장되지 않음.
  2. SSH 키 페어(공개키, 개인키) 인증
    1. 클라이언트에서 키 페어, 즉 공개키와 개인키를 생성하고 이를 서버 홈 디렉토리의 ssh./authorized_keys 파일 안에 작성해둬야 해당 방식의 인증 가능.
      • 클라이언트는 해당 서버에 접속하기 위해 사용할 키 페어의 ID를 서버에게 전송
      • 해당 ID에 매칭되는 공개키가 홈 디렉토리의 .ssh/authorized_keys 파일 안에 작성되어있는지 확인
      • 존재한다면, 난수 값을 생성하고 이를 해당 공개키로 암호화하여 클라이언트에게 전송 (랜덤 데이터 스트링 전송)
      • 클라이언트는 전달받은 암호화된 난수 값을 해당 서버의 개인키로 복호화
      • 그 후, 복호화한 난수 값을 이용하여 MD5 해시 값을 계산하고 다시 서버에게 전송
      • 서버도 원래의 난수 값을 이용하여 MD5 해시 값을 계산하고, 클라이언트에게 받은 값과 같은지 검사
      • 같다면, 올바른 클라이언트로 간주하고 본격적인 데이터 통신 시작.

Untitled 1

포인트 공개키로 해석할 수 있는 메세지는 그 쌍이 되는 개인키를 가진 사람만이 만들 수 있다

이를 이용해서 암호화 → 복호화 값 인증 진행

MD5? 128비트 암호화 해시 함수 주로 프로그램이나 파일이 원본 그대로인지를 확인하는 ‘무결성 검사’등에 사용한다.

02-3. 데이터 통신

서버와 클라이언트를 각각 검증하는 과정(Handshake)가 이루어지면, 본격적인 데이터 통신이 가능하다.

세션 키를 사용하여 서로 데이터를 주고받으며 통신할 수 있다.

세션 키는 대칭키이기 때문에, 보낼 때 세션 키로 암호화하고 받을 때 세션 키로 복호화하게 된다.

통신이 종료되면(SSH 세션이 종료되면) 해당 세션 키는 무의미해지며 사용이 불가하다.


참고

https://it-eldorado.tistory.com/157

https://leejiwoo2002.tistory.com/21

https://ko.wikipedia.org/wiki/시큐어_셸

카테고리: ,

업데이트:

댓글남기기