[네트워크] SSH 프로토콜
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 클라이언트에 의해 연결이 설정됨
- SSH 클라이언트가 연결 설정 프로세스를 구동
- Handshake 개시
- 접속하려는 서버가 올바른 서버인지 검증하고, 이후의 데이터 통신을 안전하게 진행하기 위한 세션 키 생성
- 클라이언트가 해당 서버에 대한 올바른 접근 권한을 가지고 있는지 검증
setup flow
02-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
파일 안에 추가.
- 해당 서버에 접속 요청을 할 때마다 서버로부터 전달받은 공개키가 로컬에 저장되어 있는 공개키와 같은지 검증.
- 동시에 세션 키 생성
세션 키 : 클라이언트가 서버와 데이터 통신을 할 때, 암호화 및 복호화를 위해 사용할 대칭키
키 교환(key Exchange, KEX) 알고리즘 중 가장 대표적인 것은 디피-헬만(Diffle-Hellman)알고리즘
02-2. 클라이언트 인증
클라이언트가 해당 서버에 대한 올바른 접근 권한을 가지고 있는지 검증하는 과정
인증 방식
- 비밀번호 인증
- 사용자가 입력한 비밀번호를 세션키로 암호화하여 서버에게 보내고, 서버는 이를 검증한다.
- 자동화된 스크립트를 이용하면 적절한 길이의 비밀번호는 노출될 위험이 크므로, 이 방식은 권장되지 않음.
- SSH 키 페어(공개키, 개인키) 인증
- 클라이언트에서 키 페어, 즉 공개키와 개인키를 생성하고 이를 서버 홈 디렉토리의
ssh./authorized_keys
파일 안에 작성해둬야 해당 방식의 인증 가능.- 클라이언트는 해당 서버에 접속하기 위해 사용할 키 페어의 ID를 서버에게 전송
- 해당 ID에 매칭되는 공개키가 홈 디렉토리의
.ssh/authorized_keys
파일 안에 작성되어있는지 확인 - 존재한다면, 난수 값을 생성하고 이를 해당 공개키로 암호화하여 클라이언트에게 전송 (랜덤 데이터 스트링 전송)
- 클라이언트는 전달받은 암호화된 난수 값을 해당 서버의 개인키로 복호화
- 그 후, 복호화한 난수 값을 이용하여 MD5 해시 값을 계산하고 다시 서버에게 전송
- 서버도 원래의 난수 값을 이용하여 MD5 해시 값을 계산하고, 클라이언트에게 받은 값과 같은지 검사
- 같다면, 올바른 클라이언트로 간주하고 본격적인 데이터 통신 시작.
- 클라이언트에서 키 페어, 즉 공개키와 개인키를 생성하고 이를 서버 홈 디렉토리의
포인트 공개키로 해석할 수 있는 메세지는 그 쌍이 되는 개인키를 가진 사람만이 만들 수 있다
이를 이용해서 암호화 → 복호화 값 인증 진행
MD5? 128비트 암호화 해시 함수 주로 프로그램이나 파일이 원본 그대로인지를 확인하는 ‘무결성 검사’등에 사용한다.
02-3. 데이터 통신
서버와 클라이언트를 각각 검증하는 과정(Handshake)가 이루어지면, 본격적인 데이터 통신이 가능하다.
세션 키를 사용하여 서로 데이터를 주고받으며 통신할 수 있다.
세션 키는 대칭키이기 때문에, 보낼 때 세션 키로 암호화하고 받을 때 세션 키로 복호화하게 된다.
통신이 종료되면(SSH 세션이 종료되면) 해당 세션 키는 무의미해지며 사용이 불가하다.
참고
https://it-eldorado.tistory.com/157
댓글남기기