시큐어 셸
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
시큐어 셸(SSH)은 안전한 원격 접속을 위한 암호화 네트워크 프로토콜이다. 1995년 타투 일로넨에 의해 개발되었으며, 초기 버전인 SSH-1은 보안 취약점으로 인해 SSH-2로 대체되었다. SSH-2는 보안 및 기능이 향상되었으며, OpenSSH가 널리 사용되는 구현체이다. SSH는 셸 로그인, 파일 전송, 포트 포워딩, 터널링 등 다양한 기능을 제공하며, 클라이언트-서버 모델을 사용한다. 다양한 암호화 알고리즘을 지원하며, IETF에서 표준으로 문서화되었다. 그러나, 서버 키의 지문 확인 미흡, 브루트 포스 공격, CBC 모드 취약점, 테라핀 공격과 같은 보안 취약점이 존재한다.
더 읽어볼만한 페이지
- 시큐어 셸 - PuTTY
PuTTY는 SSH, 텔넷 등 다양한 통신 프로토콜을 지원하는 자유-오픈 소스 터미널 에뮬레이터로, 여러 운영체제에서 사용 가능하며 터미널 에뮬레이션, 포트 포워딩 기능과 함께 PSCP, PSFTP, Plink 등의 유틸리티 및 PuTTYgen, Pageant를 제공한다. - 시큐어 셸 - SSH 파일 전송 프로토콜
SSH 파일 전송 프로토콜(SFTP)은 SSH를 통해 안전한 파일 전송 및 관리를 제공하며, SCP보다 플랫폼 독립적이고 정부 및 공공기관에서 사용이 권장되는 네트워크 프로토콜이다. - 핀란드의 발명품 - 사우나
사우나는 핀란드에서 유래한 뜨거운 방에서 증기욕을 즐기는 시설 또는 행위로, 건식과 습식으로 나뉘며 혈액 순환 촉진, 스트레스 해소 등의 효과가 있어 전 세계적으로 이용되고 핀란드 문화의 중요한 요소이다. - 핀란드의 발명품 - 단문 메시지 서비스
단문 메시지 서비스(SMS)는 휴대전화로 짧은 텍스트 메시지를 주고받는 서비스이며, 1980년대 초에 시작되어 2세대 이동 통신 시스템에서 표준으로 채택되었고, 개인 간 통신 및 다양한 분야에서 활용되지만 스팸, 스미싱 등의 문제점도 존재한다. - 인터넷 표준 - DNSSEC
DNSSEC는 DNS의 보안 취약점을 개선하기 위해 도메인 정보에 디지털 서명을 추가하여 응답 레코드의 무결성을 보장하고 DNS 위장 공격을 막는 기술로, RRSIG, DNSKEY 등 다양한 리소스 레코드 유형을 사용하여 인증 체인을 구성하며 공개 키 암호 방식을 활용한다. - 인터넷 표준 - IPv6
IPv6는 IPv4 주소 고갈 문제를 해결하고자 개발된 차세대 인터넷 프로토콜로, 128비트 주소 체계를 통해 사실상 무한대에 가까운 IP 주소를 제공하며, 주소 자동 설정, 패킷 처리 효율성 향상, 보안 기능 강화 등의 특징을 갖는다.
시큐어 셸 | |
---|---|
일반 정보 | |
이름 | 시큐어 셸 |
다른 이름 | SSH |
종류 | 암호 네트워크 프로토콜 |
용도 | 안전한 연결, 원격 접근 |
개발자 | Tatu Ylönen, IETF |
OSI 계층 | 전송 계층 ~ 응용 계층 |
포트 번호 | 22 |
RFC | RFC 4250 RFC 4251 RFC 4252 RFC 4253 RFC 4254 |
발표 년도 | 1995년 |
2. 역사
과거 텔넷, rsh, rlogin 등 원격 호스트의 셸을 이용하기 위한 프로토콜이 존재했지만, 이러한 프로토콜은 네트워크에 평문으로 비밀번호를 전송하여 도청의 위험성이 높았다. SSH는 이러한 문제를 해결하기 위해 통신을 암호화한 프로토콜이다.
1995년 핀란드 출신의 프로그래머 타투 율료넨 (Tatu Ylönen)이 SSH를 개발하여 처음에는 무료로 공개했다. 그러나 같은 해 12월, SSH사(SSH Communications Security)가 설립되면서 상업용 소프트웨어가 되었다.[56]
SSH는 scp, sftp와 같이 파일 전송에도 사용된다.
SSH의 암호 통신 방식은 다음과 같다.
- 키 교환 알고리즘(디피-헬만 키 교환 등)으로 공통 키 암호의 세션 키를 생성한다.
- 공통 키 암호(트리플 DES, AES 등)로 통신을 암호화한다.
- 공개 키 암호(RSA 및 DSA)로 호스트 및 사용자 인증을 수행한다.
공개 키인증 외에도 비밀번호인증, 일회용 비밀번호 등 다양한 인증 방식이 제공되며, 각 개인/기업의 정보 보안 정책에 맞춰 선택할 수 있다.
현재는 버전 1과 2의 두 가지 프로토콜이 공존하고 있으며, 버전 1은 알려진 취약점이 있어 권장되지 않는다. 2006년에는 SSH 및 관련 기술이 RFC로 제정되었다.[57] 2008년 시점에서 가장 널리 사용되는 것은 오픈 소스의 OpenSSH이며,[58] Linux 등에서도 표준으로 사용된다.
2. 1. 버전 1.x
1995년 핀란드 헬싱키 공과 대학교의 연구원 타투 일로넨은 자신의 대학망에서 발생한 암호 스니핑 공격을 이유로 SSH-1라는 이름의 최초 버전의 프로토콜을 설계하였다.[13] SSH의 목표는 강력한 인증 및 신뢰성 보장을 하지 않는 초기의 rlogin, 텔넷, rsh 프로토콜을 대체하기 위함이었다. 일로넨은 1995년 7월 자신의 구현체를 프리웨어로 출시하였고 이 도구는 빠르게 인기를 끌게 되었다.1995년 12월, 일로넨은 SSH를 마케팅하고 개발하기 위해 SSH Communications Security를 설립했다. SSH 소프트웨어의 초기 버전은 GNU libgmp와 같은 다양한 자유 소프트웨어를 사용했지만, SSH Communications Security에서 출시한 후속 버전은 점점 더 독점 소프트웨어로 발전했다.
2. 2. 버전 2.x
2006년에 프로토콜의 개정된 버전인 '''SSH-2'''가 표준으로 채택되었다.[18] 이 버전은 SSH-1과 호환되지 않는다. SSH-2는 디피-헬만 키 교환과 같은 새로운 키 교환 메커니즘을 도입하고, 메시지 인증 코드를 통한 데이터 무결성 검사를 개선하는 등 SSH-1에 비해 보안과 기능이 모두 개선되었다. MD5 또는 SHA-1과 같이 클라이언트와 서버 간에 협상될 수 있는 메시지 인증 코드를 통해 데이터 무결성 검사를 수행한다. SSH-2는 또한 AES와 같이 더 강력한 암호화 방법을 추가하여, 3중 DES와 같은 이전 표준의 더 약하고 손상된 암호를 대체했다.[19][20][21] SSH-2의 새로운 기능으로는 단일 SSH 연결을 통해 여러 개의 유닉스 셸 세션을 실행하는 기능이 있다.[22] SSH-1보다 SSH-2가 우수하고 인기가 높아짐에 따라, libssh (v0.8.0+),[23] Lsh[24] 및 Dropbear[25]와 같은 일부 구현은 결국 SSH-2 프로토콜만 지원하게 되었다.2. 3. 버전 1.99
2006년 1월, RFC 4253은 SSH 버전 2.0 및 이하를 모두 지원하는 SSH 서버가 프로토콜 버전을 1.99로 식별해야 한다고 규정했다.[62][26] 이는 실제 버전이 아니며 하위 호환성을 식별하기 위한 방식이다.2. 4. OpenSSH / OSSH
1999년 자유 소프트웨어 버전을 기대하던 개발자들은 오픈 소스 라이선스로 마지막으로 출시된 오리지널 SSH 프로그램의 1.2.12 릴리스를 기반으로 개발을 시작했다. Björn Grönvall의 OSSH는 이 코드 기반에서 개발되었으며, 얼마 지나지 않아 OpenBSD 개발자들이 Grönvall의 코드를 포크하여 OpenSSH를 만들었고 OpenBSD 2.6 릴리스에 포함되었다. 이 버전부터 "portability" 브랜치가 만들어져 OpenSSH를 다른 운영 체제로 이식하게 되었다.[63]1999년, 개발자들은 자유 소프트웨어 버전의 가용성을 원하여, 최초의 SSH 프로그램 1.2.12 릴리스(오픈 소스 라이선스로 마지막으로 배포된 버전)에서 소프트웨어 개발을 다시 시작했다.[27] 이는 비요른 그뢴발(Björn Grönvall)의 OSSH 소프트웨어의 코드 기반이 되었다.[28] 그 직후, OpenBSD 개발자들은 그뢴발의 코드를 포크하여 OpenSSH를 생성했으며, 이는 OpenBSD 릴리스 2.6과 함께 배포되었다. 이 버전부터 OpenSSH를 다른 운영 체제로 이식하기 위한 "이식성" 브랜치가 형성되었다.[29]
2005년 기준으로, OpenSSH는 가장 널리 사용되는 SSH 구현체였으며, 많은 운영 체제 배포판에서 기본 버전으로 사용되었다. 반면 OSSH는 구식이 되었다.[30] OpenSSH는 계속 유지 관리되고 있으며, OpenSSH 7.6 릴리스에서 SSH-1 지원을 코드베이스에서 제거하여 SSH-2 프로토콜을 지원한다.
2. 5. SSH3 (논란 중)
2023년, 프랑수아 미셸(François Michel) 박사 과정 학생과 올리비에 보나벤처(Olivier Bonaventure) 교수가 SSH3[31][32][33]라는 이름으로 기존 SSH의 대안을 제안했으며, 해당 코드는 오픈 소스로 공개되었다.[34] 이 새로운 버전은 기존 SSH 연결 프로토콜을 구현하지만, HTTP/3를 기반으로 작동하며, 이는 QUIC 위에서 실행된다. SSH3는 다음과 같은 여러 기능을 제공한다.- 더 빠른 세션 설정: 왕복 지연 시간을 5-7회에서 3회로 줄인다.
- 높은 보안성: SSHv2가 자체 프로토콜에 의존하는 반면, SSH3는 TLS 1.3, QUIC, 및 HTTP를 활용한다.
- UDP 포트 포워딩
- X.509 인증서
- OpenID Connect
하지만, SSH3라는 이름에 대한 논의가 진행 중이며, 이 프로젝트는 보다 적절한 이름으로 변경하는 것을 목표로 하고 있다.[35] 이러한 논의는 이 새로운 구현이 SSH 프로토콜을 상당히 수정했기 때문에 SSH3라고 부르는 것이 적절하지 않다는 점에 기인한다.
3. 주요 기능
4. 인증 방식
SSH는 공개 키 암호 방식을 사용하여 원격 컴퓨터를 인증하고, 필요한 경우 사용자를 인증할 수 있게 해준다.[2] SSH는 여러 가지 방법으로 사용될 수 있는데, 가장 간단한 방법은 통신 채널의 양쪽 끝에서 자동으로 생성된 공개-개인 키 쌍을 사용하여 네트워크 연결을 암호화한 다음, 비밀번호를 사용하여 사용자를 인증하는 것이다.
사용자가 공개-개인 키 쌍을 수동으로 생성하는 경우, 인증은 본질적으로 키 쌍이 생성될 때 수행되며, 비밀번호 입력 없이 세션을 자동으로 열 수 있다. 이 시나리오에서 공개 키는 일치하는 개인 키의 소유자에 대한 액세스를 허용해야 하는 모든 컴퓨터에 배치되며, 소유자는 개인 키를 비공개로 유지한다. 인증은 개인 키를 기반으로 하지만, 인증 과정에서 키는 네트워크를 통해 전송되지 않는다. SSH는 공개 키를 제공하는 사람이 일치하는 개인 키도 소유하고 있는지 확인한다.
SSH의 모든 버전에서 알려지지 않은 공개 키를 검증하는 것, 즉 공개 키를 식별자와 연결하는 것은 매우 중요하다. 검증 없이 공격자의 공개 키를 허용하면 권한이 없는 공격자를 유효한 사용자로 인증하게 된다.
유닉스 계열 시스템에서, 원격 로그인이 허용된 사용자의 공인 키 목록은 일반적으로 해당 사용자의 홈 디렉토리의 `~/.ssh/authorized_keys` 파일에 저장된다.[4] 이 파일은 소유자와 루트를 제외한 다른 사용자가 쓰기 권한을 갖지 않아야 SSH에 의해 적용된다. 공인 키가 원격 측에 존재하고, 일치하는 개인 키가 로컬 측에 존재하면, 비밀번호를 입력할 필요가 없어진다. 그러나 보안을 위해 개인 키 자체에 암호를 걸어 잠글 수 있다.
개인 키는 표준 위치에서도 검색될 수 있으며, 전체 경로는 명령줄 설정(ssh의 `-i` 옵션)으로 지정할 수 있다. ssh-keygen 유틸리티는 공인 키와 개인 키를 항상 쌍으로 생성한다.
5. 키 관리
유닉스 계열 운영 체제에서 권한이 있는 공개 키 목록은 일반적으로 사용자의 홈 디렉터리에 `~/.ssh/authorized_keys` 파일로 저장되며, 이는 원격 로그인을 허용한다.[64] 이 파일은 소유자와 루트 외에는 쓰기 권한이 없어야 SSH에 의해서만 유효하다. 공개 키가 원격에 위치하고 개인 키가 로컬에 존재하는 경우 비밀번호 입력 없이 접근이 가능하다. 그러나 추가적인 보안을 위해 개인 키는 통과암호로 잠글 수 있다.
개인 키는 표준 위치에서 검색될 수 있으며, 전체 경로는 `ssh`의 `-i` 옵션을 사용하여 명령줄 설정으로 지정할 수 있다. ssh-keygen 유틸리티는 공개 키와 개인 키를 항상 쌍으로 생성한다.
6. 아키텍처
SSH 프로토콜은 전송 계층, 사용자 인증 계층, 연결 계층의 세 가지 개별 구성 요소로 구성된 계층화된 아키텍처를 갖는다.[2]
- '''전송 계층'''은 TCP/IP의 전송 제어 프로토콜(TCP)을 일반적으로 사용하며, 서버 리스닝 포트로 22번 포트를 예약한다. 이 계층은 초기 키 교환 및 서버 인증을 처리하고, 암호화, 압축 및 무결성 검증을 설정한다. 최대 32,768바이트 크기의 평문 패킷을 송수신하는 인터페이스를 상위 계층에 제공하지만, 각 구현에서 더 많은 바이트를 허용할 수 있다. 전송 계층은 또한 키 재교환을 구성하며, 일반적으로 1GB의 데이터가 전송되거나 한 시간이 경과한 후, 먼저 발생하는 시점에 수행된다.
- '''사용자 인증 계층'''은 클라이언트 인증을 처리하고, 일련의 인증 알고리즘을 제공한다. 인증은 ''클라이언트 주도'' 방식으로 이루어진다. 암호를 묻는 메시지가 표시될 때, 이는 서버가 아니라 SSH 클라이언트가 표시하는 것일 수 있다. 서버는 단순히 클라이언트의 인증 요청에 응답한다. 널리 사용되는 사용자 인증 방법에는 다음이 포함된다.
- ''password'' : 간단한 암호 인증을 위한 방법으로, 암호 변경 기능을 포함한다. 모든 프로그램이 이 방법을 구현하는 것은 아니다.
- ''publickey'' : 공개 키 암호화를 기반으로 하는 인증 방법으로, 일반적으로 최소한 DSA, ECDSA 또는 RSA 키 쌍을 지원하며, 다른 구현에서는 X.509 인증서도 지원한다.
- ''keyboard-interactive'' : 서버가 정보를 입력하라는 하나 이상의 프롬프트를 보내고 클라이언트가 이를 표시하여 사용자가 입력한 응답을 다시 보내는 다용도 방법이다. S/Key 또는 SecurID와 같은 일회용 암호 인증을 제공하는 데 사용된다. PAM이 기본 호스트 인증 제공자인 일부 OpenSSH 구성에서 사용되어 효과적으로 암호 인증을 제공하며, 때로는 일반 ''password'' 인증 방법만 지원하는 클라이언트로 로그인할 수 없게 된다.
- GSSAPI 인증 방법은 Kerberos 5 또는 NTLM과 같은 외부 메커니즘을 사용하여 SSH 인증을 수행하는 확장 가능한 방식을 제공하여 SSH 세션에 단일 로그인 기능을 제공한다. 이러한 방법은 일반적으로 조직에서 사용하기 위해 상용 SSH 구현에서 구현되지만 OpenSSH에도 작동하는 GSSAPI 구현이 있다.
- '''연결 계층'''은 SSH 서비스가 제공하는 채널, 채널 요청 및 글로벌 요청의 개념을 정의한다. 단일 SSH 연결은 여러 논리 채널로 동시에 다중화될 수 있으며, 각 채널은 양방향으로 데이터를 전송한다. 채널 요청은 터미널 창의 크기 변경 또는 서버 측 프로세스의 종료 코드와 같은 채널별 대역 외 데이터를 릴레이하는 데 사용된다. 또한 각 채널은 수신 창 크기를 사용하여 자체 흐름 제어를 수행한다. SSH 클라이언트는 글로벌 요청을 사용하여 서버 측 포트가 전달되도록 요청한다. 표준 채널 유형에는 다음이 포함된다.
- 터미널 셸, SFTP 및 exec 요청 (SCP 전송 포함)에 대한 ''shell''
- 클라이언트-서버 전달 연결을 위한 ''direct-tcpip''
- 서버-클라이언트 전달 연결을 위한 ''forwarded-tcpip''
이 개방형 아키텍처는 상당한 유연성을 제공하여 보안 셸 외에도 다양한 목적으로 SSH를 사용할 수 있다. 전송 계층의 기능만으로도 전송 계층 보안 (TLS)과 유사하다. 사용자 인증 계층은 사용자 지정 인증 방법으로 확장성이 뛰어나다. 연결 계층은 여러 보조 세션을 단일 SSH 연결로 다중화하는 기능을 제공하며, 이는 BEEP와 유사하며 TLS에서는 사용할 수 없다.
7. 알고리즘
SSH는 다양한 암호화 알고리즘을 사용한다.
구분 | 사용 알고리즘 |
---|---|
공개 키 암호 방식 | EdDSA,[37] ECDSA, RSA, DSA[38] |
키 교환 | ECDH, 디피-헬만[38] |
MAC | HMAC, AEAD, UMAC[39] |
대칭 암호화 | AES (더 이상 사용되지 않는 RC4, 3DES, DES[40]) |
AEAD 암호화 | AES-GCM[41], ChaCha20-Poly1305 |
키 지문 | SHA (더 이상 사용되지 않는 MD5) |
SSH의 암호 통신은 하이브리드 암호이며 다음과 같은 특징을 갖는다.
8. 활용
SSH는 일반적으로 원격 컴퓨터의 셸 또는 명령줄 인터페이스(CLI)에 로그인하고, 원격 서버에서 명령을 실행하는 데 사용된다.[2] 또한 터널링 프로토콜 메커니즘, TCP 포트 및 X11 연결의 포워딩을 지원하며, SSH 파일 전송 프로토콜(SFTP) 또는 보안 복사 프로토콜(SCP)을 사용하여 파일을 전송하는 데 사용할 수 있다.[2]
SSH는 클라이언트-서버 모델을 사용한다. SSH 클라이언트는 원격 연결을 허용하는 SSH 데몬에 연결을 설정하는 데 사용된다. SSH는 macOS, 대부분의 리눅스 배포판, OpenBSD, FreeBSD, NetBSD, Solaris 및 OpenVMS를 포함한 대부분의 최신 운영 체제에 일반적으로 존재한다. Windows 10 버전 1709 이전의 Windows 버전에는 기본적으로 SSH가 포함되어 있지 않았지만, 2018년 마이크로소프트는 OpenSSH 소스 코드를 Windows로 포팅하기 시작했으며,[5] Windows 10 버전 1709에서는 OpenSSH의 공식 Win32 포트가 제공된다.
UNIX 계열 시스템(예: Konqueror)용 파일 관리자는 FISH 프로토콜을 사용하여 드래그 앤 드롭을 지원하는 분할 창 GUI를 제공할 수 있다. 오픈 소스 Windows 프로그램 WinSCP[6]는 PuTTY를 백엔드로 사용하여 유사한 파일 관리 기능을 제공한다. WinSCP[7]와 PuTTY[8]는 USB 드라이브에서 직접 실행할 수 있도록 패키지되어 있다. ChromeOS의 Crostini는 기본적으로 OpenSSH를 제공한다.
SSH는 클라우드 컴퓨팅에서 연결 문제를 해결하고 클라우드 기반 가상 머신을 인터넷에 직접 노출하는 보안 문제를 방지하는 데 중요하며, SSH 터널은 방화벽을 통해 가상 머신까지 인터넷을 통해 안전한 경로를 제공할 수 있다.[9]
IANA는 이 프로토콜에 대해 TCP 포트 22, UDP 포트 22 및 SCTP 포트 22를 할당했다.[10] IANA는 2001년부터 SSH 서버에 대한 표준 TCP 포트 22를 잘 알려진 포트 중 하나로 나열했다.[11] SSH는 연결 지향 전송 계층 프로토콜로 TCP 대신 SCTP를 사용하여 실행할 수도 있다.[12]
SSH는 여러 플랫폼에서 많은 응용 프로그램에 사용할 수 있는 프로토콜이며, 아래의 일부 응용 프로그램은 특정 SSH 클라이언트 또는 서버에서만 사용할 수 있다.
- 원격 호스트에서 셸에 로그인 (Telnet 및 rlogin 대체)
- 원격 호스트에서 단일 명령 실행 (rsh 대체)
- 원격 서버에 자동 (비밀번호 없는) 로그인을 설정 (예: OpenSSH 사용[36])
- rsync와 함께 사용하여 파일을 효율적이고 안전하게 백업, 복사 및 미러링
- 포트 포워딩
- 터널링
- 완전한 암호화 VPN으로 사용 ( OpenSSH 서버와 클라이언트만 지원)
- 원격 호스트에서 X를 포워딩
- SOCKS 프로토콜을 지원하는 SSH 클라이언트를 사용하여 암호화된 프록시 연결을 통해 웹 탐색
- SSHFS를 사용하여 원격 서버의 디렉토리를 로컬 컴퓨터의 파일 시스템으로 안전하게 마운트
- 서버의 자동화된 원격 모니터링 및 관리
- SSH를 지원하는 모바일 또는 임베디드 장치에서 개발
- 파일 전송 프로토콜 보안
과거부터 텔넷, rsh, rlogin 등 원격 호스트의 셸을 이용하기 위한 프로토콜이 존재했다. 그러나, 이러한 프로토콜은 네트워크에 평문으로 비밀번호를 전송하기 때문에 비밀번호를 엿보는(도청) 위험성이 높았고, 특히 인터넷상에서는 큰 문제였다. SSH는 통신을 암호화한 대체 통신 프로토콜이다.
오리지널 SSH는 핀란드 출신의 프로그래머인 타투 울로넨 (Tatu Ylönen)에 의해 1995년에 개발되었고, 처음에는 무료로 공개되었다. 그러나, 같은 해 12월에는 SSH사(SSH Communications Security)가 설립되어 상업용 소프트웨어가 되었다.[56]
파일 복사용 명령어 rcp를 대체하는 scp나, FTP를 대체하는 sftp도 제공된다.
SSH의 암호 통신은 다음과 같다.
- 키 교환 알고리즘(디피-헬만 키 교환 등)으로 공통 키 암호의 세션 키를 생성
- 공통 키 암호(트리플 DES, AES 등)로 통신을 암호화
- 공개 키 암호(RSA 및 DSA)로 호스트 및 사용자 인증
인증 방식은 공개 키인증 외에도, 비밀번호인증, 일회용 비밀번호 등이 제공되며, 각 개인/기업의 정보 보안 정책에 맞춰 선택할 수 있다.
가짜 신분 위장을 방지하기 위한 메커니즘도 충실하다.
현재는 버전 1과 2의 두 가지 프로토콜이 공존하고 있다. 버전 1은 알려진 취약점이 있어 권장되지 않는다.
상업용, 자유 소프트웨어를 포함하여 여러 구현이 있으며, 2006년에 SSH 및 관련 기술이 RFC로 제정되었다.[57] 2008년 시점에서 가장 널리 사용되는 것은 오픈 소스의 OpenSSH이다.[58] Linux 등에서도 표준으로 사용되며, 현재는 단순히 SSH라고 하는 경우 OpenSSH의 구현을 의미하는 경우가 많다.
9. 파일 전송 프로토콜
시큐어 셸 프로토콜은 여러 파일 전송 메커니즘에서 사용된다.
- 시큐어 카피(SCP): SSH를 통해 RCP 프로토콜을 발전시킨 방식이다.
- rsync: SCP보다 효율성을 높이기 위해 설계되었다. 일반적으로 SSH 연결을 통해 실행된다.
- SSH 파일 전송 프로토콜(SFTP): FTP의 보안 대안이다. (SSH를 통한 FTP 또는 FTPS와 혼동하지 않도록 주의해야 한다.)
- 셸 프로토콜을 통한 파일 전송(FISH): 1998년에 출시되었으며, SSH를 통해 유닉스 셸 명령어를 발전시킨 방식이다.
- 고속 보안 프로토콜(FASP), 일명 ''Aspera'': 제어를 위해 SSH를 사용하고 데이터 전송을 위해 UDP 포트를 사용한다.
10. 보안 취약점
SSH 접속 시 서버 키의 핑거프린트를 확인하지 않으면, 의도하지 않은 원격 컴퓨터에 접속하고 있다는 것을 깨닫지 못하고, 통신 내용을 도청당할 우려가 있다.
SSH 서버 설정에 따라 브루트 포스 공격으로 셸에 대한 접근이 허용될 수 있다. IPA는 SSH 포트를 경유한 패스워드 크래킹 사례가 반복적으로 발생하고 있다고 발표했다[59][60]. IPA는 "패스워드 관리 철저", "보안 패치 적용", "액세스 로그 감시를 통한 공격의 신속한 발견"과 같은 대책과 더불어, 공개 키 인증을 채택할 것을 권장한다.
2023년 10월경에는 테라핀 공격이라는 중간자 공격법이 보고되었다[61].
10. 1. SSH-1
1998년, SSH 1.5에서 CRC-32의 불충분한 데이터 무결성 보호로 인해 암호화된 SSH 스트림에 권한 없는 콘텐츠 삽입을 허용하는 취약점이 발견되었다.[42][43] SSH 보상 공격 감지기[44]로 알려진 수정 사항이 대부분의 구현에 도입되었으나, 많은 구현에는 공격자가 SSH 데몬, 일반적으로 루트의 권한으로 임의 코드를 실행할 수 있는 새로운 정수 오버플로 취약점[45]이 포함되어 있었다.2001년 1월에는 공격자가 IDEA로 암호화된 세션의 마지막 블록을 수정할 수 있는 취약점이 발견되었다.[46] 같은 달, 악의적인 서버가 클라이언트 인증을 다른 서버로 전달할 수 있는 또 다른 취약점이 발견되었다.[47]
10. 2. CBC 평문 복구
2008년 11월, 당시 표준 기본 암호화 모드였던 CBC를 사용하여 암호화된 암호문 블록에서 최대 32비트의 평문을 복구할 수 있는 SSH의 모든 버전에 대한 이론적인 취약점이 발견되었다.[49] 가장 간단한 해결책은 CBC 모드 대신 CTR 모드를 사용하는 것이다. 이는 SSH를 공격에 저항하게 만든다.[49]10. 3. NSA에 의한 해독 의혹
2014년 12월 28일, 에드워드 스노든의 내부 고발로 유출된 기밀 정보를 슈피겔이 공개했는데, 이 정보에 따르면 국가안보국(NSA)이 일부 SSH 트래픽을 해독할 수 있을 것으로 보인다.[50] 이러한 과정과 관련된 기술적인 세부 사항은 공개되지 않았다. 2017년 CIA 해킹 도구인 ''BothanSpy''와 ''Gyrfalcon''에 대한 분석 결과, SSH 프로토콜은 손상되지 않은 것으로 나타났다.[51]10. 4. Terrapin 공격
2023년에 대부분의 최신 SSH 구현에 대한 새로운 중간자 공격이 발견되었다. 발견자들은 이 공격을 테라핀 공격이라고 명명했다.[52][53] 그러나 실제 SSH 세션을 가로채야 한다는 요구 사항 때문에 위험이 완화되며, 공격 범위가 제한되어 우연히 연결 실패가 주로 발생한다.[54][55] SSH 개발자들은 이 공격의 주요 영향이 SSH의 키 입력 시간 난독화 기능을 저하시키는 것이라고 밝혔다.[55] 이 취약점은 OpenSSH 9.6에서 수정되었지만, 수정 사항이 완전히 효과를 발휘하려면 클라이언트와 서버를 모두 업그레이드해야 한다.11. 소프트웨어
SSH 서버 및 클라이언트 소프트웨어는 다양하게 존재한다.
(하위 섹션 'SSH 서버', 'SSH 클라이언트'에서 각각 구현체 목록을 다루고 있으므로, 이 섹션에서는 구현체에 대한 자세한 설명은 생략한다.)
11. 1. SSH 서버
1999년, 개발자들은 자유 소프트웨어 버전 가용성을 원하여, 최초의 SSH 프로그램 1.2.12 릴리스(오픈 소스 라이선스로 마지막으로 배포된 버전)에서 소프트웨어 개발을 다시 시작했다.[27] 이는 비요른 그뢴발(Björn Grönvall)의 OSSH 소프트웨어 코드 기반이 되었다.[28] 그 직후, OpenBSD 개발자들은 그뢴발의 코드를 포크하여 OpenSSH를 생성했으며, 이는 OpenBSD 릴리스 2.6과 함께 배포되었다. 이 버전부터 OpenSSH를 다른 운영 체제로 이식하기 위한 "이식성" 브랜치가 형성되었다.[29]2005년 기준으로, OpenSSH는 가장 널리 사용되는 SSH 구현체였으며, 많은 운영 체제 배포판에서 기본 버전으로 사용되었다. 반면 OSSH는 구식이 되었다.[30] OpenSSH는 계속 유지 관리되고 있으며, OpenSSH 7.6 릴리스에서 SSH-1 지원을 코드베이스에서 제거하여 SSH-2 프로토콜을 지원한다.
다음은 주요 SSH 서버 구현체 목록이다.
- OpenSSH (멀티 플랫폼)
- SSH Tectia Server (멀티 플랫폼)
- https://www.attachmate.jp/Products/Security/security.htm Reflection for Secure IT (멀티 플랫폼)
- Dropbear (유닉스 계열)
11. 2. SSH 클라이언트
OpenSSH는 2005년 기준으로 가장 널리 사용되는 SSH 구현체이며, 많은 운영 체제 배포판에서 기본 버전으로 사용된다.[30] 다음은 주요 SSH 클라이언트 목록이다.클라이언트 이름 | 운영 체제 |
---|---|
OpenSSH | 멀티 플랫폼 |
PuTTY | 윈도우, 유닉스 |
[https://www.netsarang.com Xshell] | 윈도우 |
Tera Term | 윈도우 |
Poderosa | 윈도우 |
RLogin | 윈도우 |
SSH Tectia Client | 멀티 플랫폼 |
[http://www.attachmate.jp/Products/Security/security.htm Reflection for Secure IT] | 멀티 플랫폼 |
[http://webssh.uni.me WebSSH] | 웹 브라우저 |
12. 인터넷 표준 문서
SSH-2는 IETF의 "secsh" 작업 그룹에서 발행한 다음의 RFC 문서로, 인터넷 표준으로 제안되었다.
RFC 번호 | 제목 | 발행일 |
---|---|---|
RFC 4250 | Secure Shell (SSH) 프로토콜 할당 번호 | |
RFC 4251 | Secure Shell (SSH) 프로토콜 아키텍처 | |
RFC 4252 | Secure Shell (SSH) 인증 프로토콜 | |
RFC 4253 | Secure Shell (SSH) 전송 계층 프로토콜 | |
RFC 4254 | Secure Shell (SSH) 연결 프로토콜 | |
RFC 4255 | DNS를 사용하여 Secure Shell (SSH) 키 지문 안전하게 게시하기 | |
RFC 4256 | Secure Shell 프로토콜 (SSH)에 대한 일반 메시지 교환 인증 | |
RFC 4335 | Secure Shell (SSH) 세션 채널 브레이크 확장 | |
RFC 4344 | Secure Shell (SSH) 전송 계층 암호화 모드 | |
RFC 4345 | Secure Shell (SSH) 전송 계층 프로토콜에 대한 개선된 Arcfour 모드 | |
RFC 4419 | Secure Shell (SSH) 전송 계층 프로토콜에 대한 Diffie-Hellman 그룹 교환 | 2006년 3월 |
RFC 4432 | Secure Shell (SSH) 전송 계층 프로토콜에 대한 RSA 키 교환 | 2006년 3월 |
RFC 4462 | Secure Shell (SSH) 프로토콜에 대한 일반 보안 서비스 응용 프로그램 인터페이스 (GSS-API) 인증 및 키 교환 | 2006년 5월 |
RFC 4716 | Secure Shell (SSH) 공개 키 파일 형식 | 2006년 11월 |
RFC 4819 | Secure Shell 공개 키 서브시스템 | 2007년 3월 |
RFC 5647 | Secure Shell 전송 계층 프로토콜에 대한 AES 갈루아 카운터 모드 | 2009년 8월 |
RFC 5656 | Secure Shell 전송 계층에서 타원 곡선 알고리즘 통합 | 2009년 12월 |
RFC 6187 | Secure Shell 인증에 대한 X.509v3 인증서 | 2011년 3월 |
RFC 6239 | Secure Shell (SSH)에 대한 Suite B 암호화 제품군 | 2011년 5월 |
RFC 6594 | SSHFP 리소스 레코드에서 RSA, 디지털 서명 알고리즘 (DSA) 및 타원 곡선 DSA (ECDSA)와 함께 SHA-256 알고리즘 사용 | 2012년 4월 |
RFC 6668 | Secure Shell (SSH) 전송 계층 프로토콜에 대한 SHA-2 데이터 무결성 검증 | 2012년 7월 |
RFC 7479 | Ed25519 SSHFP 리소스 레코드 | 2015년 3월 |
RFC 5592 | 단순 네트워크 관리 프로토콜 (SNMP)에 대한 Secure Shell 전송 모델 | 2009년 6월 |
RFC 6242 | Secure Shell (SSH)을 통한 NETCONF 프로토콜 사용 | 2011년 6월 |
RFC 8332 | Secure Shell (SSH) 프로토콜에서 SHA-256 및 SHA-512를 사용한 RSA 키 사용 | 2018년 3월 |
또한, OpenSSH 프로젝트에는 여러 벤더 프로토콜 사양/확장이 포함되어 있다.
- [http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/usr.bin/ssh/PROTOCOL?content-type=text/plain OpenSSH PROTOCOL 개요]
- [http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/usr.bin/ssh/PROTOCOL.certkeys?content-type=text/plain OpenSSH 인증서/키 개요]
- [https://tools.ietf.org/html/draft-miller-ssh-agent-04 draft-miller-ssh-agent-04] - SSH 에이전트 프로토콜 (2019년 12월)
참조
[1]
웹사이트
Missouri University S&T: Secure Telnet
https://it.mst.edu/p[...]
[2]
간행물
The Secure Shell (SSH) Authentication Protocol
IETF Trust
2006-01
[3]
간행물
The Secure Shell (SSH) Protocol Architecture
IETF Trust
2006-01
[4]
웹사이트
How To Set Up Authorized Keys
http://wiki.qnap.com[...]
2011-05-10
[5]
Github
Win-32 OpenSSH
https://github.com/P[...]
[6]
웹사이트
WinSCP home page
http://winscp.net/en[...]
2014-02-17
[7]
웹사이트
WinSCP page for PortableApps.com
http://portableapps.[...]
2014-02-16
[8]
웹사이트
PuTTY page for PortableApps.com
http://portableapps.[...]
2014-02-16
[9]
웹사이트
Networking on the cloud
http://www.ibm.com/d[...]
2013-06-14
[10]
웹사이트
Service Name and Transport Protocol Port Number Registry
https://www.iana.org[...]
[11]
웹사이트
Service Name and Transport Protocol Port Number Registry
https://www.iana.org[...]
2001-06-04
[12]
conference
SSH over SCTP — Optimizing a multi-channel protocol by adapting it to SCTP
2012-07-18–20
[13]
웹사이트
The new skeleton key: changing the locks in your network environment
https://www.scmagazi[...]
2017-08-20
[14]
웹사이트
SSH Port
https://www.ssh.com/[...]
2017-08-03
[15]
웹사이트
The story of the SSH port is 22.
https://www.ssh.com/[...]
2023-11-30
[16]
웹사이트
How and Why More Secure Technologies Succeed in Legacy Markets: Lessons from the Success of SSH
http://www.cs.virgin[...]
Dept. of Computer Science, Univ. of Virginia
2006-05-19
[17]
문서
IETF (Internet Engineering Task Force): datatracker for secsh
https://datatracker.[...]
[18]
문서
RFC4252: The Secure Shell (SSH) Authentication Protocol, Jan 2006
https://datatracker.[...]
[19]
문서
O'Reily: Secure Shell, The Definitive Guide
https://docstore.mik[...]
[20]
문서
RFC4250: The Secure Shell (SSH) Protocol: Assigned names, Jan 2006, page 16
https://datatracker.[...]
[21]
문서
RFC4252: The Secure Shell (SSH) Authentication Protocol, Jan 2006
https://datatracker.[...]
[22]
웹사이트
SSH Frequently Asked Questions
http://www.snailbook[...]
2004-10-10
[23]
웹사이트
libssh
https://www.libssh.o[...]
[24]
웹사이트
A GNU implementation of the Secure Shell protocols
http://www.lysator.l[...]
2012-02-04
[25]
웹사이트
Dropbear SSH
https://matt.ucc.asn[...]
2011-10-14
[26]
간행물
The Secure Shell (SSH) Transport Layer Protocol
IETF
[27]
문서
ssh-1.2.13 now available: copying policy changed (permission now required to sell ssh commercially, use is still permitted for any purpose)
https://marc.info/?l[...]
[28]
문서
OSSH sources
http://www.mirrorser[...]
[29]
웹사이트
OpenSSH: Project History and Credits
http://www.openssh.c[...]
openssh.com
2004-12-22
[30]
웹사이트
OSSH Information for VU#419241
https://www.kb.cert.[...]
2006-02-15
[31]
웹사이트
Remote terminal over HTTP/3 connections
https://datatracker.[...]
2024-08-01
[32]
웹사이트
Secure shell over HTTP/3 connections
https://www.ietf.org[...]
2024-02-28
[33]
웹사이트
Towards SSH3: how HTTP/3 improves secure shells
https://arxiv.org/ab[...]
2023-12-12
[34]
웹사이트
ssh3
https://github.com/f[...]
2024-07-12
[35]
웹사이트
Secure shell over HTTP/3 connections
https://datatracker.[...]
2024-02-28
[36]
서적
A Practical Guide to Linux Commands, Editors, and Shell Programming
Prentice Hall
2012
[37]
간행물
Ed25519 and Ed448 Public Key Algorithms for the Secure Shell (SSH) Protocol
2020-02
[38]
간행물
Elliptic Curve Algorithm Integration in the Secure Shell Transport Layer
2012-11-12
[39]
간행물
The use of UMAC in the SSH Transport Layer Protocol
2007-09-03
[40]
간행물
The Secure Shell (SSH) Transport Layer Protocol
IETF
[41]
간행물
AES Galois Counter Mode for the Secure Shell Transport Layer Protocol
2009-08
[42]
웹사이트
SSH Insertion Attack
http://www.coresecur[...]
[43]
웹사이트
Vulnerability Note VU#13877 - Weak CRC allows packet injection into SSH sessions encrypted with block ciphers
http://www.kb.cert.o[...]
[44]
웹사이트
SSH CRC-32 Compensation Attack Detector Vulnerability
http://www.securityf[...]
[45]
웹사이트
Vulnerability Note VU#945216 - SSH CRC32 attack detection code contains remote integer overflow
http://www.kb.cert.o[...]
[46]
웹사이트
Vulnerability Note VU#315308 - Weak CRC allows last block of IDEA-encrypted SSH packet to be changed without notice
http://www.kb.cert.o[...]
[47]
웹사이트
Vulnerability Note VU#684820 - SSH-1 allows client authentication to be forwarded by a malicious server to another server
http://www.kb.cert.o[...]
[48]
웹사이트
How to use SSH keys for authentication
https://upcloud.com/[...]
2019-11-29
[49]
웹사이트
Vulnerability Note VU#958563 - SSH CBC vulnerability
http://www.kb.cert.o[...]
[50]
뉴스
Prying Eyes: Inside the NSA's War on Internet Security
http://www.spiegel.d[...]
2014-12-28
[51]
웹사이트
BothanSpy & Gyrfalcon - Analysis of CIA hacking tools for SSH
https://www.ssh.com/[...]
2018-07-15
[52]
웹사이트
Terrapin Attack
https://terrapin-att[...]
2023-12-20
[53]
웹사이트
SSH shaken, not stirred by Terrapin downgrade vulnerability
https://www.theregis[...]
2023-12-20
[54]
웹사이트
SSH shaken, not stirred by Terrapin downgrade vulnerability
https://www.theregis[...]
2023-12-20
[55]
웹사이트
OpenSSH 9.6 release notes
https://www.openssh.[...]
2023-12-18
[56]
문서
デジタル・インフォメーション・テクノロジーが フィンランドのサイバーセキュリティ企業 SSH Communications Securityと協業 ~ベストな補完関係により特権管理ソリューションを提供へ~
https://www.atpress.[...]
[57]
간행물
IETF RFC 4250, IETF RFC 4251, IETF RFC 4252, IETF RFC 4253, IETF RFC 4254, IETF RFC 4255, IETF RFC 4256 을 참조
[58]
웹사이트
Statistics from the current scan results
http://www.openssh.c[...]
2009-03-08
[59]
웹사이트
コンピュータウイルス・不正アクセスの届出状況(2005年11月分)について
http://www.ipa.go.jp[...]
정보처리추진기구
2013-05-18
[60]
웹사이트
コンピュータウイルス・不正アクセスの届出状況(2008年9月および第3四半期分)について
http://www.ipa.go.jp[...]
정보처리추진기구
2013-05-18
[61]
뉴스
SSH接続への中間者攻撃を可能にするエクスプロイト「Terrapin Attack」が発見される (Gigazine, 2023年12月20日)
https://gigazine.net[...]
[62]
간행물
RFC 4253, section 5. Compatibility With Old SSH Versions
http://tools.ietf.or[...]
IETF
[63]
웹인용
OpenSSH: Project History and Credits
http://www.openssh.c[...]
openssh.com
2014-04-27
[64]
웹인용
SSH setup manual
http://wiki.qnap.com[...]
2017-09-03
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com