12장. OpenSSH
SSH
(Secure Shell)는 클라이언트-서버 아키텍처를 사용하여 두 시스템 간 보안 통신을 용이하게 하고 사용자가 서버 호스트 시스템에 원격으로 로그인할 수 있도록 하는 프로토콜입니다. FTP
또는 Telnet
과 같은 다른 원격 통신 프로토콜과 달리 SSH는 로그인 세션을 암호화하여 침입자가 암호화되지 않은 암호를 수집하는 것을 어렵게 만듭니다.
ssh 프로그램은 telnet
또는 rsh
와 같은 원격 호스트에 로그인하는 데 사용되는 더 오래되고 안전하지 않은 터미널 애플리케이션을 대체하도록 설계되었습니다. scp
라는 관련 프로그램은 rcp
와 같은 호스트 간에 파일을 복사하도록 설계된 이전 프로그램을 대체합니다. 이러한 이전 애플리케이션은 클라이언트와 서버 간에 전송된 암호를 암호화하지 않으므로 가능하면 사용하지 마십시오. 보안 방법을 사용하여 원격 시스템에 로그인하면 클라이언트 시스템과 원격 호스트의 위험이 줄어듭니다.
Red Hat Enterprise Linux에는 일반 OpenSSH 패키지인 openssh, OpenSSH 서버, openssh-server, 클라이언트, openssh-clients 가 포함됩니다. OpenSSH 패키지에는 몇 가지 중요한 암호화 라이브러리를 설치하여 OpenSSH가 암호화된 통신을 제공할 수 있도록 하는 OpenSSL 패키지 openssl-libs 가 필요합니다.
12.1. SSH 프로토콜
12.1.1. SSH를 사용하는 이유는 무엇입니까?
잠재적인 침입자는 시스템에 액세스하기 위해 네트워크 트래픽을 중단, 인터셉트하고 다시 라우팅할 수 있도록 다양한 도구를 폐기하고, 가로채고, 다시 라우팅할 수 있도록 합니다. 일반적으로 이러한 위협은 다음과 같이 분류될 수 있습니다:
- 두 시스템 간의 통신 차단
공격자는 통신 당사자 간의 네트워크에 있을 수 있으며, 그 사이에 전달된 정보를 복사하십시오. 그는 정보를 가로채거나 보관하거나 정보를 변경하고 의도된 수신자에게 보낼 수 있습니다.
이 공격은 일반적으로 패킷 스니퍼 (Sniffer)를 사용하여 수행되며, 네트워크를 통해 이동하는 각 패킷을 캡처하고 콘텐츠를 분석하는 다소 일반적인 네트워크 유틸리티입니다.
- 특정 호스트 가장
공격자의 시스템은 의도된 전송 수신자로서 발생하도록 구성되어 있습니다. 이 전략이 작동하는 경우 사용자의 시스템은 잘못된 호스트와 통신하는 것을 인식하지 못합니다.
이 공격은 DNS 중독 이라는 기술을 사용하거나 IP 스푸핑 을 통해 수행 할 수 있습니다. 첫 번째 경우, 침입자는 분산된 DNS 서버를 사용하여 클라이언트 시스템을 악의적인 중복 호스트를 가리킵니다. 두 번째 경우, 침입자는 신뢰할 수 있는 호스트에서 나타나는 falsified 네트워크 패킷을 보냅니다.
두 기술 모두 잠재적으로 민감한 정보를 인터셉트하고, 적대적인 이유로 가로채기된 경우, 결과는 해체될 수 있습니다. SSH가 원격 쉘 로그인 및 파일 복사에 사용되는 경우 이러한 보안 위협은 크게 저하될 수 있습니다. 이는 SSH 클라이언트와 서버가 디지털 서명을 사용하여 ID를 확인하기 때문입니다. 또한 클라이언트와 서버 시스템 간의 모든 통신이 암호화됩니다. 각 패킷은 로컬 및 원격 시스템에서 알려진 키를 사용하여 암호화되므로 통신 양쪽의 ID를 스푸핑하려고 합니다.
12.1.2. 주요 기능
SSH 프로토콜은 다음과 같은 보안 장치를 제공합니다.
- 원하는 서버를 지정할 수 없습니다.
- 초기 연결 후 클라이언트는 이전에 연결된 동일한 서버에 연결되어 있는지 확인할 수 있습니다.
- 아무도 인증 정보를 캡처할 수 없습니다.
- 클라이언트는 강력한 128비트 암호화를 사용하여 인증 정보를 서버로 전송합니다.
- 아무도 통신을 가로 둘 수 없습니다.
- 세션 중에 전송 및 수신되는 모든 데이터는 128비트 암호화를 사용하여 전송되므로 가로채기된 전송은 암호 해독 및 읽기가 매우 어렵습니다.
또한 다음 옵션을 제공합니다.
- 네트워크를 통해 그래픽 애플리케이션을 사용할 수 있는 안전한 방법을 제공합니다.
- X11 전달 이라는 기술을 사용하여 클라이언트는 서버에서 X11 (X Window System) 애플리케이션을 전달할 수 있습니다.
- 다른 안전하지 않은 프로토콜을 보호하는 방법을 제공합니다.
- SSH 프로토콜은 전송하는 모든 것을 암호화합니다. 포트 전달 이라는 기술을 사용하여 SSH 서버는 POP 와 같은 안전하지 않은 프로토콜을 보호하고 전체 시스템 및 데이터 보안을 늘리는 데 도움이 될 수 있습니다.
- 보안 채널을 생성하는 데 사용할 수 있습니다.
- OpenSSH 서버와 클라이언트는 서버와 클라이언트 시스템 간의 트래픽에 대해 가상 사설 네트워크와 유사한 터널을 생성하도록 구성할 수 있습니다.
- Kerberos 인증을 지원합니다.
- OpenSSH 서버 및 클라이언트는 Kerberos 네트워크 인증 프로토콜의 GSSAPI (Generic Security Services Application Program Interface) 구현을 사용하여 인증할 수 있습니다.
12.1.3. 프로토콜 버전
현재 SSH의 두 가지 유형이 있습니다: 버전 1 및 최신 버전 2. Red Hat Enterprise Linux 7의 OpenSSH 제품군은 SSH 버전 2를 사용하며, 버전 1의 알려진 취약점에는 영향을 받지 않는 향상된 키 교환 알고리즘이 있습니다. Red Hat Enterprise Linux 7에서 OpenSSH 제품군은 버전 1 연결을 지원하지 않습니다.
12.1.4. SSH 연결의 이벤트 순서
다음 일련의 이벤트는 두 호스트 간의 SSH 통신 무결성을 보호하는 데 도움이 됩니다.
- 클라이언트가 올바른 서버와 통신하는지 확인할 수 있도록 암호화 핸드셰이크를 만듭니다.
- 클라이언트와 원격 호스트 간 연결 전송 계층은 대칭 암호를 사용하여 암호화됩니다.
- 클라이언트는 서버에 대해 자체적으로 인증합니다.
- 클라이언트는 암호화된 연결을 통해 원격 호스트와 상호 작용합니다.
12.1.4.1. 전송 계층
전송 계층의 주요 역할은 인증 시점과 후속 통신 중에 두 호스트 간의 안전하고 안전한 통신을 용이하게 하는 것입니다. 전송 계층은 데이터의 암호화 및 암호 해독을 처리하고 전송 및 수신 시 데이터 패킷의 무결성 보호 기능을 제공하여 이를 수행합니다. 전송 계층은 또한 압축을 제공하여 정보 전송 속도를 높입니다.
SSH 클라이언트가 서버에 접속하면 두 시스템이 전송 계층을 올바르게 구성할 수 있도록 키 정보가 교환됩니다. 이 교환 중에 다음 단계가 수행됩니다.
- 키가 교환됩니다.
- 공개 키 암호화 알고리즘이 결정됨
- 대칭 암호화 알고리즘이 결정됩니다.
- 메시지 인증 알고리즘이 결정됨
- 해시 알고리즘이 결정됩니다.
키 교환 중에 서버는 고유한 호스트 키가 있는 클라이언트 자체를 식별합니다. 클라이언트가 이전에 이 특정 서버와 통신하지 않은 경우 서버의 호스트 키는 클라이언트에 알 수 없으며 연결되지 않습니다. OpenSSH는 서버의 호스트 키를 수락하여 이 문제를 해결합니다. 이는 사용자에게 알림을 받은 후 수행되며 새 호스트 키를 승인하고 검증했습니다. 후속 연결에서 서버의 호스트 키가 클라이언트의 저장된 버전과 비교하여 클라이언트가 실제로 의도된 서버와 통신한다는 확신을 제공합니다. 나중에 호스트 키가 더 이상 일치하지 않으면 연결이 이루어지기 전에 사용자가 클라이언트의 저장된 버전을 제거해야 합니다.
공격자는 로컬 시스템이 의도한 서버와 공격자가 설정한 거짓 서버 간의 차이점을 알지 못하기 때문에 초기 연결 중에 SSH 서버로 가장할 수 있습니다. 이 문제를 방지하려면 호스트 키가 일치하지 않는 경우 처음으로 연결되기 전에 서버 관리자에게 문의하여 새 SSH 서버의 무결성을 확인합니다.
SSH는 거의 모든 종류의 공개 키 알고리즘 또는 인코딩 형식으로 작동하도록 설계되었습니다. 초기 키 교환이 교환 및 공유 비밀 값에 사용되는 해시 값을 생성한 후 두 시스템은 연결을 통해 전송된 인증 및 향후 데이터를 보호하기 위해 새 키와 알고리즘을 즉시 계산하기 시작합니다.
지정된 키와 알고리즘을 사용하여 특정 양의 데이터를 전송한 후( 정확하게는 SSH 구현에 따라 다름) 다른 키 교환이 발생하고 다른 해시 값 세트와 새 공유 시크릿 값을 생성합니다. 공격자가 해시 및 공유 비밀 값을 결정할 수 있더라도 이 정보는 제한된 기간 동안만 유용합니다.
12.1.4.2. 인증
전송 계층에서 두 시스템 간에 정보를 전달하도록 보안 터널을 구성하면 서버는 개인 키 인코딩 서명을 사용하거나 암호 입력과 같은 다양한 인증 방법을 클라이언트에 알립니다. 그런 다음 클라이언트는 지원되는 방법 중 하나를 사용하여 서버에 자신을 인증하려고 합니다.
SSH 서버와 클라이언트는 다양한 유형의 인증을 허용하도록 구성할 수 있으므로 각 측에서 최적의 제어 용량을 제공합니다. 서버는 보안 모델에 따라 지원되는 암호화 방법을 결정할 수 있으며 클라이언트는 사용 가능한 옵션에서 시도할 인증 방법 순서를 선택할 수 있습니다.
12.1.4.3. 채널
SSH 전송 계층을 성공적으로 인증한 후 멀티플렉싱이라는 기술을 통해 여러 채널을 열 수 있습니다.[1]. 이러한 각 채널은 서로 다른 터미널 세션에 대한 통신과 전달된 X11 세션의 통신을 처리합니다.
클라이언트와 서버 모두 새 채널을 생성할 수 있습니다. 그런 다음 각 채널에 연결 끝에 다른 번호가 할당됩니다. 클라이언트가 새 채널을 열려고 하면 클라이언트는 요청과 함께 채널 번호를 보냅니다. 이러한 정보는 서버에 의해 저장되고, 그 채널로 통신할 때 사용됩니다. 이는 다른 유형의 세션이 서로 영향을 미치지 않도록 하기 때문에 지정된 세션이 종료될 때 기본 SSH 연결을 중단하지 않고 채널을 닫을 수 있습니다.
채널은 또한 흐름 제어 기능을 지원하므로 데이터를 순서대로 전송하고 받을 수 있습니다. 이러한 방식으로 클라이언트는 채널이 열려 있는 메시지를 수신할 때까지 데이터를 채널을 통해 전송되지 않습니다.
클라이언트 및 서버는 클라이언트가 요청하는 서비스 유형과 사용자가 네트워크에 연결된 방식에 따라 각 채널의 특성을 자동으로 협상합니다. 따라서 프로토콜의 기본 인프라를 변경하지 않고도 다양한 유형의 원격 연결을 유연하게 처리할 수 있습니다.