SSH(시큐어 쉘, Secure Shell) 이란?
과거에는 주로 사용되던 Telnet은 암호화가 이루어지지 않아 보안상 취약한 스니핑 공격에 노출되어 있는 반면에 기존 기능에 암호화 기능을 추가하여 나온게 SSH 프로토콜이다.
마치 네트워크 상의 다른 컴퓨터에 로그인을 하거나 원격 시스템에서 명령을 실행하여 다른 시스템으로 파일을 복사할 수 있는 응용 프로그램 또는 프로토콜을 가지고 있다.
SSH 장점
- 사용자 인증부터 데이터 전송까지 모든 과정이 암호화 되어 보안성이 높다.(만약 통신이 노출이 되어도 이해할 수 없는 암호화된 문서로 보인다)
- 보안 접속을 통한 Telnet, FTP, RCP, Rlogin 등 기능을 제공한다
- IP Spoofing을 방지하기위한 기능을 제공한다.
- 일반적인 TCP/IP 패킷포워딩을 제공한다.
SSH 통신 과정
👉 Session Authentication
SSH Client와 Server 간 세션이 맺어질려면 Client와 Server가 서로 올바른 노드인지 인증하는 절차가 필요합니다.
이에 세션이 맺어지기 전부터 인증과정을 거치는 이유는
SSH Client가 최초에 요청한 SSH Connection Request를 Attacker가 가로채어 SSH Server인척 못하게 하기 위함이다.
그리하여, SSH 프로토콜에서는 Public Key(공개키)와 Private Key(개인키)로 이루어지는 비대칭키 암호화방식을 이용합니다.
👉 Client Authentication
위 세션 인증 과정을 거치면 SSH Client 와 SSH Server 간에 Connection이 열리게 되고 올바른 접근 권한을 가지고 있는지 검증하는 과정이다.
이에 클라이언트 인증에는 두가지 방식이 있다.
① Password 인증
사용자가 입력한 비밀번호를 Session Key로 암호화하여 SSH Server에게 보내고 이를 SSH Server가 검증하면 끝나는 방식이지만,
Attack가 Brute-Force 공격으로 패스워드를 알아낼수 있으므로 보안상 권장하지 않는 방식이다.
② Key-Pair 인증
SSH Client에서 Public Key, Private Key를 생성하고 이를 SSH Server에 접속할때 Public Key를 제출하여 인증하는 방식이
SSH Server에 기존에 등록되어 있는 user 및 host가 아니라면 일단은 Attack의 host라고 의심하고 보는것이다.