중국시가넷 - 개인 서명 - openssh 네트워크 보안 분석

openssh 네트워크 보안 분석

SSH 프로토콜이 등장하기 전에는 Telnet이 네트워크 장치 관리에 널리 사용되는 방법이었습니다. Telnet 프로토콜의 장점은 네트워크 장치에 원격으로 로그인하고 네트워크 장치를 구성할 수 있다는 점입니다. 이는 네트워크 관리자가 원격 위치에서 네트워크 장치를 관리할 때 매우 편리합니다. 그러나 Telnet 프로토콜에는 세 가지 치명적인 약점이 있습니다.

A. 일반 텍스트 전송: 데이터 전송은 일반 텍스트로 이루어지며 전송된 데이터에는 기밀성이 없습니다.

B. 인증 메커니즘은 취약합니다. 사용자의 인증 정보는 네트워크에서 일반 텍스트로 전송되므로 쉽게 도청될 수 있습니다. Telnet은 기존 비밀번호 인증 방법만 지원하므로 공격을 받기 쉽습니다.

C. '의사 서버 스푸핑': 클라이언트는 서버의 신원을 실제로 식별할 수 없으며, 공격자가 '의사 서버 스푸핑'을 수행하기 쉽습니다. SSH 프로토콜은 Telnet 프로토콜의 문제점을 극복하기 위해 탄생했습니다.

D. 데이터 전송 프로세스가 변조되었으며 전송 프로세스 중 데이터 무결성을 보장할 수 없습니다.

SSH는 위의 보안 문제를 어떻게 해결할 수 있습니까? 하나씩 분석해 보겠습니다.

통신 양쪽에 '암호화된 채널'을 설정하면 전송되는 데이터가 도청되지 않도록 할 수 있습니다. 그리고 통신 당사자 모두의 비밀 키의 보안을 보장할 수 있는 적절한 수단이 필요합니다.

소위 암호화된 채널은 보낸 사람이 데이터를 보내기 전에 암호화 키를 사용하여 데이터를 암호화한 다음,

데이터는 상대방에게 전송됩니다. 데이터를 수신한 후 수신자는 해독 키를 사용하여 암호문에서 일반 텍스트를 얻습니다.

암호화 및 복호화 알고리즘은 두 가지 범주로 구분됩니다. 대칭 키 알고리즘: 데이터 암호화 및 복호화에 동일한 키와 동일한 알고리즘이 사용됩니다. ? 비대칭 키 알고리즘: 데이터를 암호화하고 해독할 때 서로 다른 키가 사용되며, 하나는 공개 공개 키이고 다른 하나는 사용자가 비밀리에 보관하는 개인 키입니다.

비대칭 키 알고리즘은 시간이 많이 걸리기 때문에 일반적으로 디지털 서명 및 신원 인증에 사용됩니다. SSH 암호화 채널의 데이터 암호화 및 암호 해독은

대칭 키 알고리즘을 사용합니다. 현재 지원되는 주요 알고리즘은 DES, 3DES, AES 등입니다. 이러한 알고리즘은 대화형 데이터를 효과적으로 방지할 수 있습니다. 도청 및 초기화 벡터 보호 사용으로 인해 비밀번호 스트림 재사용과 같은 암호해독 도구와 유사한 공격을 방지할 수 있습니다.

대칭 키 알고리즘에서는 암호문을 성공적으로 해독하고 일반 텍스트를 얻으려면 해독 키와 암호화 키가 정확히 동일해야 합니다

. 따라서 암호화된 채널을 설정하려면 두 통신 당사자 모두에 일관된 암호화 및 암호 해독 키를 배포해야 합니다. 암호화 및 복호화 키를 배포하는 방법에는 수동 구성 및 제3자 기관에 의한 배포 등 여러 가지가 있습니다. 수동 구성은 확장성이 낮고 일부 소규모 로컬 네트워크에만 적합합니다. 타사 에이전시를 사용하여 키를 배포하려면 추가 타사 서버가 필요하며 키는 네트워크의 전송을 쉽게 도청할 수 있습니다.

SSH 프로토콜은 통신 당사자 간에 키를 배포하는 안전한 방법인 키 교환 알고리즘을 사용합니다. 키 교환

알고리즘을 사용하면 통신 당사자 간에 키를 동적으로 생성할 수 있습니다. 이 키는 통신 당사자만 얻을 수 있으며 제3자가 도청할 수 없습니다. 이것이 바로 사용되는 키의 보안입니다. 암호화 및 복호화는 소스에서 보장되며 키 분배 문제는 잘 해결됩니다.

지원되는 데이터 암호화 알고리즘은 다음과 같습니다:

3des-cbc

aes128-cbc

aes192-cbc

aes256-cbc

aes128-ctr

aes192-ctr

aes256-ctr

aes128-gcm@openssh.com

aes256-gcm@openssh.com

chacha20-poly1305@openssh.com

기본적으로 사용되는 알고리즘:

chacha20-poly1305@openssh .com,

aes128-ctr,aes192-ctr,aes256-ctr,

aes128-gcm@openssh.com,aes256-gcm@openssh.com

"Ciphers"라는 키워드를 통해 사용할 알고리즘을 지정할 수 있습니다. 여러 알고리즘은 쉼표로 구분해야 합니다.

알고리즘을 지정하는 방법은 세 가지가 있습니다.

방법 1: 암호 키워드 뒤에 알고리즘 이름이 옵니다. 예: Ciphers aes256-ctr, aes192-ctr은 두 가지 알고리즘만 사용함을 의미합니다: aes256-ctr 및 aes192-ctr

방법 2: Ciphers 키워드 뒤에 알고리즘 이름이 옵니다. 알고리즘 이름 앞에 "+"가 옵니다. 이는 "+" 이후의 알고리즘이 기본 알고리즘을 기반으로 추가된다는 의미입니다.

방법 3: Ciphers 키워드 뒤에 알고리즘 이름이 오고, 알고리즘 이름이 앞에 옵니다. "-"로, 기본 알고리즘을 기반으로 "-"를 잘라낸 후의 알고리즘을 나타냅니다.

지원되는 키 교환 알고리즘은 다음과 같습니다:

curve25519-sha256

curve25519 -sha256@libssh.org

diffie-hellman-group1-sha1

diffie-hellman-group14-sha1

diffie-hellman-group-exchange-sha1

diffie-hellman-group-exchange-sha256

ecdh-sha2-nistp256

ecdh-sha2-nistp384

ecdh-sha2 -nistp521

기본 키 교환 알고리즘은 다음과 같습니다:

curve25519-sha256, curve25519-sha256@libssh.org,

ecdh-sha2-nistp256, ecdh- sha2-nistp384,ecdh-sha2-nistp521,

diffie-hellman-group-exchange-sha256,

diffie-hellman-group14-sha1

다음을 수행할 수 있습니다. "

KexAlgorithms" 키워드를 통해 사용할 알고리즘을 지정합니다. 여러 알고리즘은 쉼표로 구분해야 합니다.

알고리즘을 지정하는 방법에는 세 가지가 있습니다

방법 1: KexAlgorithms 키워드 뒤에 알고리즘 이름이 옵니다. 예: KexAlgorithms

diffie-hellman-group-exchange-sha256, diffie-hellman-group14-sha1

는 diffie만 사용함을 의미합니다. -hellman- 그룹-교환-sha256,diffie-hellman-group14-sha1

>

두 가지 알고리즘

방법 2: KexAlgorithms 키워드 뒤에는 알고리즘 이름이 오고, 알고리즘 이름 앞에는 "+"가 옵니다. 이는 "+" 뒤에 새 알고리즘이 추가됨을 나타냅니다.

방법 3: KexAlgorithms 키워드 뒤에는 알고리즘 이름이 오고, 알고리즘 이름 앞에는 "-"가 옵니다. 이는 "-" 뒤의 알고리즘이 기본 알고리즘에 따라 잘린다는 것을 나타냅니다.

전통 이 방법은 비밀번호 인증 모드를 채택합니다. 사용자는 SSH 클라이언트에 계정 번호와 비밀번호를 입력하고 openssh는 로그인한 사용자에 대한 비밀번호 인증을 완료합니다. 사용자 신원 정보 등 주요 데이터는 인증 서버에 저장된다

비밀번호 인증 방식의 인증 강도가 약하기 때문에 SSH 프로토콜에서는 공개키 인증 방식을 도입한다. 현재 openssh

는 RSA와 DSA라는 두 가지 비대칭 키 알고리즘을 사용하여 공개 키 인증을 달성할 수 있습니다.

공개 키 인증 프로세스는 두 부분으로 나뉩니다.

(1) 공개 키 확인: 클라이언트는 먼저 로컬 키 쌍의 공개 키 부분을 다음에 따라 변환합니다. 문자열 형식으로 서버에 전송되는 문자

. 서버는 로컬에 저장된 클라이언트의 공개 키를 사용하여 이를 메시지에 포함된 클라이언트의 공개 키와 비교

하여 클라이언트가 보유한 공개 키가 올바른지 확인합니다.

(2)? 디지털 서명 확인: 공개 키 확인이 성공하면 클라이언트는 계속해서 자체 로컬 키 쌍의 개인 키

부분을 사용하여 다이제스트 작업을 수행합니다. 특정 메시지를 서버에 전송하여 서버에 대한 신원을 증명합니다. 서버는 미리 구성된 사용자의 공개 키를 사용하여 전송된 디지털 서명을 확인합니다.

공개키 확인이나 디지털 서명 확인에 실패하면 공개키 인증이 실패하게 됩니다.

인증 방법

PubkeyAuthentication: 공개 키 인증을 사용할지 여부, 기본값은 yes입니다.

UsePAM: 이 키워드는 이식된 버전에서만 지원됩니다. PAM은 "

PubkeyAcceptedKeyTypes: 공개 키 인증 알고리즘

ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384-에 대한 플러그 가능" "인증 모듈 플러그 아웃" cert-v01 @openssh.com, ecdsa-sha2-nistp521-cert-v01@openssh.com, ssh-ed25519-cert-v01@openssh.com, ssh-rsa-cert-v01@openssh.com, ecdsa-sha2- nistp256,ecdsa -sha2-nistp384,ecdsa-sha2-nistp521, ssh-ed25519,ssh-rsa

공개키 인증 구성 방법:

1. 먼저, client:

# ssh-keygen -t rsa

공개/개인 rsa 키 쌍을 생성합니다.

키를 저장할 파일을 입력하세요(/root/ .ssh /id_rsa):

암호 입력(암호가 없는 경우 비어 있음):

동일한 암호를 다시 입력:

귀하의 ID가 /root/에 저장되었습니다. .ssh /id_rsa.

공개 키가 /root/.ssh/id_rsa.pub에 저장되었습니다.

키 지문은 다음과 같습니다.

fa: 49: 6c:0a:90:0e:0f:57:2e:21:79:f6:65:7f:8d:42

여기서는 rsa 알고리즘을 사용하고, dsa 알고리즘도 사용할 수 있습니다. :

ssh-keygen -t dsa

위에서 볼 수 있듯이 개인 키의 보호 비밀번호를 입력하라는 메시지가 표시됩니다. 또한 선택할 수 없습니다. Enter를 누르세요!

이제 키가 생성되었습니다:

id_rsa(개인 키) id_rsa.pub(공개 키)

dsa 알고리즘에 의해 생성된 경우:

id_dsa id_dsa.pub

2. 공개 키를 서버의 .ssh 디렉토리로 전송합니다.

scp id_rsa.pub user@hostname:/home/user/ .ssh/authorized_keys

3. /etc/ssh/sshd_config에서 rsa 인증 기능을 활성화합니다.

(주석 제거)

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

그런 다음 sshd를 다시 시작하세요.

DSA 알고리즘인 경우에도 동일하게 적용됩니다.

질문: 공개 키 인증에 PAM이 사용됩니까? 아니면 openssh가 스스로 수행했습니까?

플러그형 인증 모듈 소개: <

/p>

/articles/wjl-linux-pluggable-authentication-module

/articles/linux-pam-one

ChrootDirectory:

다음을 지정합니다.

2.3.1 ?원리

사용자 인증 메커니즘은 클라이언트에 대한 서버의 인증만 실현하며 클라이언트는 서버를 인증할 수 없으므로

이는 "의사 서버 스푸핑"의 보안 위험에 직면해 있습니다.

그림 4 가짜 서버 기만

그림 4와 같이 클라이언트 호스트가 서버와 연결을 설정해야 할 때 제3자 공격자가 실제 서버인 것처럼 가장합니다.

서버, 클라이언트와 상호 작용하여 클라이언트 호스트의 보안 정보를 훔치고, 이 정보를 이용하여 실제 서버에 로그인하거나 서버 자원을 얻거나 서버를 공격합니다.

이와 같은 의사 서버 스푸핑을 방지하기 위해 SSH 프로토콜은 서버의 클라이언트 인증을 지원합니다.

키 교환 단계에서 서버는 자체 개인 키를 사용하여 고정된 형식의 데이터에 디지털 서명을 하고

클라이언트에 서명을 보냅니다. 로컬에 저장된 서버 공개 키를 사용하여 서명을 인증함으로써

서버 인증 목적을 달성합니다.

호스트 키

호스트 키 알고리즘

ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384-cert-v01@openssh.com , ecdsa-sha2-nistp521-cert-v01@openssh.com, ssh-ed25519-cert-v01@openssh.com, ssh-rsa-cert-v01@openssh.com, ecdsa-sha2-nistp256,ecdsa-sha2-nistp384 ,ecdsa-sha2-nistp521, ssh-ed25519,ssh-rsa

Macs

지원되는 메시지 인증 코드(Mac) 알고리즘은 다음과 같습니다:

hmac-md5

hmac-md5-96

hmac-sha1hmac-sha1-96

hmac-sha2-256

hmac-sha2-512

umac-64@openssh.com

umac-128@openssh.com

hmac-md5-etm@openssh.com

hmac-md5-96-etm@openssh.com

hmac-sha1-etm@openssh.com

hmac-sha1-96-etm@openssh.com

hmac-sha2-256-etm@openssh.com

hmac-sha2-512-etm@openssh.com

umac-64-etm@openssh.com

umac-128-etm@openssh.com

기본적으로 사용되는 키 교환 알고리즘은 다음과 같습니다:

umac-64-etm@openssh.com,umac-128 -etm@openssh.com,

hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,

hmac-sha1-etm @openssh.com,

umac-64@openssh.com,umac-128@openssh.com,

hmac-sha2-256,hmac-sha2-512,hmac-sha1

"Macs"라는 키워드를 통해 사용할 알고리즘을 지정할 수 있습니다. 여러 알고리즘은 쉼표로 구분해야 합니다.

알고리즘을 지정하는 방법은 세 가지가 있습니다

방법 1: Macs 키워드 뒤에 알고리즘 이름이 옵니다. 예: KexAlgorithms

hmac-sha2-256, hmac-sha2-512

는 hmac-sha2-256만 사용하는 것을 의미합니다. hmac-sha2- 512

두 가지 알고리즘

방법 2: Macs 키워드 뒤에는 알고리즘 이름이 오고, 알고리즘 이름 앞에는 "+"가 옵니다. 기본 알고리즘, "" 뒤에 새로운 "+" 알고리즘

방법 3: Macs 키워드 뒤에는 알고리즘 이름이 오고, 알고리즘 이름 앞에는 "-"가 옵니다. "-"는 기본 알고리즘을 기준으로 잘립니다.

openssh는 다음 4가지 유형의 알고리즘을 통해 전송 과정에서 네트워크 보안을 보장합니다.

A. 전송 데이터 암호화: 전송 암호화 알고리즘, 키 일치 알고리즘,

B. 공개 키 인증 알고리즘

C, Mac 알고리즘