SSH   Secure Shell  

(2022-06-10)

1. SSH (Secure Shell)TCP 보안 채널(터널링)을 형성하여, 
     - 그 위에서, 기타 응용 프로토콜들이 안전하게 데이터 교환 가능

  ※ 적은 비용으로, 비교적 쉽게 구현 가능하고, 안전하여 널리 사용됨


2. SSH의 주요 특징

  ㅇ `보안 통신`, `포트 포워딩(일종의 터널링)` 등의 기능을 제공
     - 암호화되지 않은 telnet,rlogin,SMTP 등에 대한 패킷 스니핑 등의 보안공격 방지
        . 例) telnet은 로그인명,암호 등 모든 정보평문으로 보내므로 중간자 공격에 취약

  ㅇ 클라이언트/서버 형태
     - 사용자 클라이언트 및 응용 서버 사이에서 SSH 클라이언트 및 SSH 서버가 존재함
        . 설치된 두 S/W(SSH 클라이언트 및 SSH 서버) 사이에서 TCP 보안 채널이 형성됨
     - 여기서, 서버는 원격 접근하려는 호스트, 클라이언트는 원격 접근하는 사용자

  ㅇ 프로토콜포트 번호
     - 전송계층 프로토콜 : TCP 만 가능 (TCP 상에 보안 채널 형성됨)
     - 포트 번호 : 22 (SSH 서버에 개방되는 포트)

  ㅇ 표준 : SSH Ver.2(SSH-2) RFC 4250 ~ 4256


3. SSH의 주요 기능 인증 (Authentication)
     - 클라이언트 인증 및 서버 인증
        . 클라이언트서버 간에 보안 채널이 설정되고, 서버 인증이 된 후, 
        . 서버클라이언트를 인증할 수 있도록 관련 소프트웨어를 호출하게됨

  ㅇ 기밀성 유지 : 암호화 (Encryption)
     - 데이터 전송 전에 암호화하여 전송
     - 암호 알고리즘 (대칭키 암호 방식의 사용을 기본으로 함) : BlowFish, 3DES, IDEA

  ㅇ 무결성 (Integrity)
     - 데이터 전송 중에 중간자 공격에 의한 변경 방지를 위해, MAC 코드를 통해 구현

  ㅇ 압축 (Compression)
     - 보낼 데이터압축 수행하고 이를 암호화하여 전송포트 포워딩(일종의 터널링)
      다중화
     - 클라이언트서버 간에 보안 채널이 형성된 후에, 
     - 클라이언트 측에서 복수의 논리 채널을 설정 가능


4. SSH 프로토콜스택 구조

    

  ㅇ SSH 전송 프로토콜 (SSH Transport Layer Protocol, SSH TLP)
     - 서버 인증, 기밀성, 무결성, 압축(옵션) 제공
     - 주요 협상 대상 : 키 교환 방식, 공개 키 방식, 대칭 키 방식, 메세지 인증 방식, 
                        해시 알고리즘 등이 클라이언트,서버 간에 협상되어짐

  ㅇ SSH 인증 프로토콜 (SSH User Authentication Protocol)
     - 해당 서버에 대한 사용자 인증(User Authentication) 제공

  ㅇ SSH 연결 프로토콜 (SSH Connection Protocol)
     - 암호화된 터널들 각각에 다수 논리채널들을 다중화 (1:多) 가능

  ㅇ SSH 응용 프로토콜 : TELNET,RLOGIN,SMTP5. SSH 프로토콜패킷 형식

   

  ㅇ length  : type ~ CRC 까지의 길이
  ㅇ padding : 보안공격이 쉽지 않도록 1~8 바이트 추가
  ㅇ type    : SSH 프로토콜 패킷 유형
  ㅇ 데이터  : 운반되는 실제 데이터CRC     : 오류검출


6. SSH의 키 구성호스트 키  :  공개 키(공개) 및 자신의 개인 키(미공개)의 쌍
     - 최초로 서버에 접속 시도하는 클라이언트는,
        . 해당 서버개인 키수학적 쌍을 이룬 서버공개 키서버로부터 부여 받고, 
        . 이를 (~/.ssh/known_hosts)에 저장한후, 
           .. 처음 서버에 로그인 할 때, 연결 진행 중간에, 서버공개키가 해당 파일에 기록되어짐
        . 이를 통해 데이터 교환 및 향후 접속 때 사용
     - 즉, 클라이언트는,
        . 자신이 관리하는 호스트DB에 향후 비교를 위해,
        . 공개된 호스트(서버)의 공개 키의 복사본을 저장하여 둠

     * 클라이언트 자신의 공개키 생성 및 등록
        . ssh-keygen 명령어를 이용하여, 
        . 자신의 공개키 (~/.ssh/id_ras.pub) 및 개인키(~/.ssh/id_rsa) 생성
        . 접속할 서버의 authorized_keys 파일에, 생성한 자신의 공개키를 등록해야 함

  ㅇ 세션 키  :  서버클라이언트가 협상하여 서로 공유하게되는 대칭 키
     - 클라이언트는, 서버의 공개 호스트 키로써 서버를 인증하고는, 임의 키를 생성하고,
     - 이것(임의 키)과 서버의 공개 호스트 키로 암호화한 키를 서버로 보내면,
     - 서버는 자신의 개인 키로써 클라이언트암호화한 키를 해독, 클라이언트를 인증하면,
     - 세션의 나머지를 이 암호화된 키로써 클라이언트/서버세션 키를 삼게된 (보안 채널)


7. SSH 구현(수행) 방법 유형

  ※ ☞ SSH 구현 (사용 방식) 참조
     - 구현 목적 : 암호를 포함한 모든 트래픽암호화 
        . (도청, 암호 가로채기, 세션 하이재킹 등 방지)
     - 서버데몬 필요 : (Unix/Linux)  OpenSSH (서버 데몬명 : sshd)
     - 클라이언트측 응용 : (윈도우즈) PuTTY, Tera Term, Terminus 등, (Android/iOS) JuiceSSH 등
     - 클라이언트CLI 명령어
        . (Unix/Linux) ssh (secure shell), scp (secure copy), sftp (secure ftp) 등



Copyrightⓒ written by 차재복 (Cha Jae Bok)
"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"