SSH: Difference between revisions
From CS Wiki
(새 문서: '''Secure Shell''' TCP 보안 터널을 형성하여 그 위에서 기타 응용 프로토콜이 안전하게 데이터를 교환하는 채널 * 적은 비용으로, 비교적 쉽...) |
No edit summary |
||
Line 3: | Line 3: | ||
TCP 보안 터널을 형성하여 그 위에서 기타 응용 프로토콜이 안전하게 데이터를 교환하는 채널 | TCP 보안 터널을 형성하여 그 위에서 기타 응용 프로토콜이 안전하게 데이터를 교환하는 채널 | ||
* 적은 비용으로, 비교적 쉽게 구현 가능하고, 안전하여 널리 사용됨 | *적은 비용으로, 비교적 쉽게 구현 가능하고, 안전하여 널리 사용됨 | ||
== 개요 == | ==개요== | ||
* 표준: SSH Ver.2(SSH-2) <nowiki>RFC 4250</nowiki> ~ 4256 | *표준: SSH Ver.2(SSH-2) <nowiki>RFC 4250</nowiki> ~ 4256 | ||
* 프로토콜 및 포트 번호 | *프로토콜 및 포트 번호 | ||
** 전송계층 프로토콜 : TCP 만 가능 (TCP 상에 보안 채널 형성됨) | **전송계층 프로토콜 : TCP 만 가능 (TCP 상에 보안 채널 형성됨) | ||
** 포트 번호 : 22 (SSH 서버에 개방되는 포트) | **포트 번호 : 22 (SSH 서버에 개방되는 포트) | ||
== 주요 특징 == | ==주요 특징== | ||
* '보안 통신', '포트 포워딩(일종의 터널링)' 등의 기능을 제공 | *'보안 통신', '포트 포워딩(일종의 터널링)' 등의 기능을 제공 | ||
** 암호화되지 않은 telnet,rlogin,SMTP 등에 대한 패킷 스니핑 등의 보안공격 방지 | **암호화되지 않은 telnet,rlogin,SMTP 등에 대한 패킷 스니핑 등의 보안공격 방지 | ||
** ex) [[텔넷]]은 로그인명,암호 등 모든 정보를 평문으로 보내므로 중간자 공격에 취약 | **ex) [[텔넷]]은 로그인명,암호 등 모든 정보를 평문으로 보내므로 중간자 공격에 취약 | ||
* 클라이언트/서버 형태 | *클라이언트/서버 형태 | ||
** 사용자 클라이언트 및 응용 서버 사이에서 SSH 클라이언트 및 SSH 서버가 존재함 | **사용자 클라이언트 및 응용 서버 사이에서 SSH 클라이언트 및 SSH 서버가 존재함 | ||
** 설치된 두 S/W(SSH 클라이언트 및 SSH 서버) 사이에서 TCP 보안 채널이 형성됨 | **설치된 두 S/W(SSH 클라이언트 및 SSH 서버) 사이에서 TCP 보안 채널이 형성됨 | ||
** 여기서, 서버는 원격 접근하려는 호스트, 클라이언트는 원격 접근하는 사용자 | **여기서, 서버는 원격 접근하려는 호스트, 클라이언트는 원격 접근하는 사용자 | ||
== 주요 기능 == | ==주요 기능== | ||
* 인증(Authentication) | *인증(Authentication) | ||
** 클라이언트 인증 및 서버 인증 | **클라이언트 인증 및 서버 인증 | ||
** 클라이언트 및 서버 간에 보안 채널이 설정되고, 서버 인증이 된 후, | **클라이언트 및 서버 간에 보안 채널이 설정되고, 서버 인증이 된 후, | ||
** 서버가 클라이언트를 인증할 수 있도록 관련 소프트웨어를 호출하게됨 | **서버가 클라이언트를 인증할 수 있도록 관련 소프트웨어를 호출하게됨 | ||
* 기밀성 유지 : 암호화(Encryption) | *기밀성 유지 : 암호화(Encryption) | ||
** 데이터 전송 전에 암호화하여 전송 | **데이터 전송 전에 암호화하여 전송 | ||
** 암호 알고리즘 (대칭키 암호 방식의 사용을 기본으로 함) : BlowFish, 3DES, IDEA | **암호 알고리즘 (대칭키 암호 방식의 사용을 기본으로 함) : BlowFish, 3DES, IDEA | ||
* 무결성(Integrity) | *무결성(Integrity) | ||
** 데이터 전송 중에 중간자 공격에 의한 변경 방지를 위해, MAC 코드를 통해 구현 | **데이터 전송 중에 중간자 공격에 의한 변경 방지를 위해, MAC 코드를 통해 구현 | ||
* 압축(Compression) | *압축(Compression) | ||
** 보낼 데이터를 압축 수행하고 이를 암호화하여 전송 | **보낼 데이터를 압축 수행하고 이를 암호화하여 전송 | ||
* 포트 포워딩(일종의 터널링) | *포트 포워딩(일종의 터널링) | ||
[[파일:SSH의 포트 포워딩.jpg]] | [[파일:SSH의 포트 포워딩.jpg]] | ||
* 다중화 | *다중화 | ||
** 클라이언트와 서버 간에 보안 채널이 형성된 후에, | **클라이언트와 서버 간에 보안 채널이 형성된 후에, | ||
** 클라이언트 측에서 복수의 논리 채널을 설정 가능 | **클라이언트 측에서 복수의 논리 채널을 설정 가능 | ||
== 프로토콜 계층 구조 == | ==프로토콜 계층 구조== | ||
[[파일:SSH 스택 구조.jpg]] | [[파일:SSH 스택 구조.jpg]] | ||
* SSH 전송 프로토콜 (SSH Transport Layer Protocol, SSH TLP) | *SSH 전송 프로토콜 (SSH Transport Layer Protocol, SSH TLP) | ||
** 서버 인증, 기밀성, 무결성, 압축(옵션) 제공 | **서버 인증, 기밀성, 무결성, 압축(옵션) 제공 | ||
** 주요 협상 대상 : 키 교환 방식, 공개 키 방식, 대칭 키 방식, 메세지 인증 방식, 해시 알고리즘 등이 클라이언트,서버 간에 협상되어짐 | **주요 협상 대상 : 키 교환 방식, 공개 키 방식, 대칭 키 방식, 메세지 인증 방식, 해시 알고리즘 등이 클라이언트,서버 간에 협상되어짐 | ||
* SSH 인증 프로토콜 (SSH User Authentication Protocol) | *SSH 인증 프로토콜 (SSH User Authentication Protocol) | ||
** 해당 서버에 대한 사용자 인증(User Authentication) 제공 | **해당 서버에 대한 사용자 인증(User Authentication) 제공 | ||
* SSH 연결 프로토콜 (SSH Connection Protocol) | *SSH 연결 프로토콜 (SSH Connection Protocol) | ||
** 암호화된 터널들 각각에 다수 논리채널들을 다중화 (1:N) 가능 | **암호화된 터널들 각각에 다수 논리채널들을 다중화 (1:N) 가능 | ||
* SSH 응용 프로토콜 : TELNET,RLOGIN,SMTP 등 | *SSH 응용 프로토콜 : TELNET,RLOGIN,SMTP 등 | ||
== 패킷 구성 == | ==패킷 구성== | ||
[[파일:SSH 패킷.jpg]] | [[파일:SSH 패킷.jpg]] | ||
* length : type ~ CRC 까지의 길이 | *length : type ~ CRC 까지의 길이 | ||
* padding : 보안공격이 쉽지 않도록 1~8 바이트 추가 | *padding : 보안공격이 쉽지 않도록 1~8 바이트 추가 | ||
* type : SSH 프로토콜 패킷 유형 | *type : SSH 프로토콜 패킷 유형 | ||
* 데이터 : 운반되는 실제 데이터 | *데이터 : 운반되는 실제 데이터 | ||
* CRC : 오류검출 | *CRC : 오류검출 | ||
== 키 구성 == | ==키 구성== | ||
* '''호스트 키''' : 공개 키(공개) 및 자신의 개인 키(미공개)의 쌍 | *'''호스트 키''' : 공개 키(공개) 및 자신의 개인 키(미공개)의 쌍 | ||
** 최초로 서버에 접속 시도하는 클라이언트는, 해당 서버의 개인 키와 수학적 쌍을 이룬 서버의 '''공개 키'''를 서버로부터 부여 받음 | **최초로 서버에 접속 시도하는 클라이언트는, 해당 서버의 개인 키와 수학적 쌍을 이룬 서버의 '''공개 키'''를 서버로부터 부여 받음 | ||
** 부여 받은 공개키를 저장한후 이를 통해 데이터 교환 및 향후 접속 때 사용 | **부여 받은 공개키를 저장한후 이를 통해 데이터 교환 및 향후 접속 때 사용 | ||
** 클라이언트는 자신이 관리하는 호스트 키 DB에 향후 비교를 위해, '''공개된 호스트(서버)의 공개 키'''의 복사본을 저장 | **클라이언트는 자신이 관리하는 호스트 키 DB에 향후 비교를 위해, '''공개된 호스트(서버)의 공개 키'''의 복사본을 저장 | ||
* '''세션 키''' : 서버 및 클라이언트가 협상하여 서로 공유하게된 대칭 키 | *'''세션 키''' : 서버 및 클라이언트가 협상하여 서로 공유하게된 대칭 키 | ||
** 클라이언트는 서버의 '''공개 호스트 키'''로써 서버를 인증하고는 '''임의 키'''를 생성하고, | **클라이언트는 서버의 '''공개 호스트 키'''로써 서버를 인증하고는 '''임의 키'''를 생성하고, | ||
** '''임의 키'''와 서버의 공개 호스트 키로 암호화한 키를 서버로 보내면, | **'''임의 키'''와 서버의 공개 호스트 키로 암호화한 키를 서버로 보내면, | ||
** 서버는 자신의 '''개인 키'''로 클라이언트가 암호화한 키를 해독, 클라이언트를 인증하면, | **서버는 자신의 '''개인 키'''로 클라이언트가 암호화한 키를 해독, 클라이언트를 인증하면, | ||
** 세션의 나머지를 이 암호화된 키로써 클라이언트/서버 간 '''세션 키'''를 삼게된 (보안 채널) | **세션의 나머지를 이 암호화된 키로써 클라이언트/서버 간 '''세션 키'''를 삼게된 (보안 채널) | ||
== | == 같이 보기 == | ||
* 정보통신기술용어해설 | * [[리눅스 ssh]] | ||
==참고 문헌== | |||
*정보통신기술용어해설 | |||
[[분류:보안]] | [[분류:보안]] | ||
[[분류:프로토콜]] | [[분류:프로토콜]] |
Latest revision as of 00:17, 8 February 2022
Secure Shell
TCP 보안 터널을 형성하여 그 위에서 기타 응용 프로토콜이 안전하게 데이터를 교환하는 채널
- 적은 비용으로, 비교적 쉽게 구현 가능하고, 안전하여 널리 사용됨
개요[edit | edit source]
- 표준: SSH Ver.2(SSH-2) RFC 4250 ~ 4256
- 프로토콜 및 포트 번호
- 전송계층 프로토콜 : TCP 만 가능 (TCP 상에 보안 채널 형성됨)
- 포트 번호 : 22 (SSH 서버에 개방되는 포트)
주요 특징[edit | edit source]
- '보안 통신', '포트 포워딩(일종의 터널링)' 등의 기능을 제공
- 암호화되지 않은 telnet,rlogin,SMTP 등에 대한 패킷 스니핑 등의 보안공격 방지
- ex) 텔넷은 로그인명,암호 등 모든 정보를 평문으로 보내므로 중간자 공격에 취약
- 클라이언트/서버 형태
- 사용자 클라이언트 및 응용 서버 사이에서 SSH 클라이언트 및 SSH 서버가 존재함
- 설치된 두 S/W(SSH 클라이언트 및 SSH 서버) 사이에서 TCP 보안 채널이 형성됨
- 여기서, 서버는 원격 접근하려는 호스트, 클라이언트는 원격 접근하는 사용자
주요 기능[edit | edit source]
- 인증(Authentication)
- 클라이언트 인증 및 서버 인증
- 클라이언트 및 서버 간에 보안 채널이 설정되고, 서버 인증이 된 후,
- 서버가 클라이언트를 인증할 수 있도록 관련 소프트웨어를 호출하게됨
- 기밀성 유지 : 암호화(Encryption)
- 데이터 전송 전에 암호화하여 전송
- 암호 알고리즘 (대칭키 암호 방식의 사용을 기본으로 함) : BlowFish, 3DES, IDEA
- 무결성(Integrity)
- 데이터 전송 중에 중간자 공격에 의한 변경 방지를 위해, MAC 코드를 통해 구현
- 압축(Compression)
- 보낼 데이터를 압축 수행하고 이를 암호화하여 전송
- 포트 포워딩(일종의 터널링)
- 다중화
- 클라이언트와 서버 간에 보안 채널이 형성된 후에,
- 클라이언트 측에서 복수의 논리 채널을 설정 가능
프로토콜 계층 구조[edit | edit source]
- SSH 전송 프로토콜 (SSH Transport Layer Protocol, SSH TLP)
- 서버 인증, 기밀성, 무결성, 압축(옵션) 제공
- 주요 협상 대상 : 키 교환 방식, 공개 키 방식, 대칭 키 방식, 메세지 인증 방식, 해시 알고리즘 등이 클라이언트,서버 간에 협상되어짐
- SSH 인증 프로토콜 (SSH User Authentication Protocol)
- 해당 서버에 대한 사용자 인증(User Authentication) 제공
- SSH 연결 프로토콜 (SSH Connection Protocol)
- 암호화된 터널들 각각에 다수 논리채널들을 다중화 (1:N) 가능
- SSH 응용 프로토콜 : TELNET,RLOGIN,SMTP 등
패킷 구성[edit | edit source]
- length : type ~ CRC 까지의 길이
- padding : 보안공격이 쉽지 않도록 1~8 바이트 추가
- type : SSH 프로토콜 패킷 유형
- 데이터 : 운반되는 실제 데이터
- CRC : 오류검출
키 구성[edit | edit source]
- 호스트 키 : 공개 키(공개) 및 자신의 개인 키(미공개)의 쌍
- 최초로 서버에 접속 시도하는 클라이언트는, 해당 서버의 개인 키와 수학적 쌍을 이룬 서버의 공개 키를 서버로부터 부여 받음
- 부여 받은 공개키를 저장한후 이를 통해 데이터 교환 및 향후 접속 때 사용
- 클라이언트는 자신이 관리하는 호스트 키 DB에 향후 비교를 위해, 공개된 호스트(서버)의 공개 키의 복사본을 저장
- 세션 키 : 서버 및 클라이언트가 협상하여 서로 공유하게된 대칭 키
- 클라이언트는 서버의 공개 호스트 키로써 서버를 인증하고는 임의 키를 생성하고,
- 임의 키와 서버의 공개 호스트 키로 암호화한 키를 서버로 보내면,
- 서버는 자신의 개인 키로 클라이언트가 암호화한 키를 해독, 클라이언트를 인증하면,
- 세션의 나머지를 이 암호화된 키로써 클라이언트/서버 간 세션 키를 삼게된 (보안 채널)
같이 보기[edit | edit source]
참고 문헌[edit | edit source]
- 정보통신기술용어해설