SSH: группа DH_GEX вне диапазона

18

Недавно мы применили поставляемое поставщиком исправление для OpenSSH. Этот патч отключил несколько протоколов обмена ключами в ответ на недавнюю атаку Logjam. После применения этого патча у нас появилось несколько поставщиков, с которыми мы не смогли обмениваться файлами через sftp из-за сбоя согласования соединения (вероятно, из-за устаревших алгоритмов обмена ключами).

Я просто хотел бы проверить пару вещей, которые мы видим, прежде чем говорить с нашими поставщиками. Вот пример сеанса SSH с одним из проблемных поставщиков (добавлены номера строк):

# ssh -vv user@host.domain.com
01 OpenSSH_6.2p2, OpenSSL 0.9.8j-fips 07 Jan 2009
02 debug1: Reading configuration data /etc/ssh/ssh_config
03 debug1: /etc/ssh/ssh_config line 20: Applying options for *
04 debug2: ssh_connect: needpriv 0
05 debug1: Connecting to host.domain.com [1.2.3.4] port 22.
06 debug1: Connection established.
07 debug1: permanently_set_uid: 0/0
08 debug1: identity file /root/.ssh/id_rsa type -1
09 debug1: identity file /root/.ssh/id_rsa-cert type -1
10 debug1: identity file /root/.ssh/id_dsa type -1
11 debug1: identity file /root/.ssh/id_dsa-cert type -1
12 debug1: identity file /root/.ssh/id_ecdsa type -1
13 debug1: identity file /root/.ssh/id_ecdsa-cert type -1
14 debug1: Enabling compatibility mode for protocol 2.0
15 debug1: Local version string SSH-2.0-OpenSSH_6.2
16 debug1: Remote protocol version 2.0, remote software version GXSSSHD_Comments
17 debug1: no match: GXSSSHD_Comments
18 debug2: fd 3 setting O_NONBLOCK
19 debug1: SSH2_MSG_KEXINIT sent
20 debug1: SSH2_MSG_KEXINIT received
21 debug2: kex_parse_kexinit: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
22 debug2: kex_parse_kexinit: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-rsa,ssh-dss
23 debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
24 debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
25 debug2: kex_parse_kexinit: hmac-md5-etm@openssh.com,hmac-sha1-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-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
26 debug2: kex_parse_kexinit: hmac-md5-etm@openssh.com,hmac-sha1-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-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
27 debug2: kex_parse_kexinit: none,zlib@openssh.com,zlib
28 debug2: kex_parse_kexinit: none,zlib@openssh.com,zlib
29 debug2: kex_parse_kexinit:
30 debug2: kex_parse_kexinit:
31 debug2: kex_parse_kexinit: first_kex_follows 0
32 debug2: kex_parse_kexinit: reserved 0
33 debug2: kex_parse_kexinit: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256
34 debug2: kex_parse_kexinit: ssh-dss,ssh-rsa
35 debug2: kex_parse_kexinit: aes128-cbc,3des-ctr,aes128-ctr,3des-cbc,blowfish-cbc,arcfour,arcfour128
36 debug2: kex_parse_kexinit: aes128-cbc,3des-ctr,aes128-ctr,3des-cbc,blowfish-cbc,arcfour,arcfour128
37 debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-md5-96,hmac-sha1-96,hmac-sha256,hmac-sha256@ssh.com
38 debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-md5-96,hmac-sha1-96,hmac-sha256,hmac-sha256@ssh.com
39 debug2: kex_parse_kexinit: none,zlib
40 debug2: kex_parse_kexinit: none,zlib
41 debug2: kex_parse_kexinit:
42 debug2: kex_parse_kexinit:
43 debug2: kex_parse_kexinit: first_kex_follows 0
44 debug2: kex_parse_kexinit: reserved 0
45 debug2: mac_setup: found hmac-md5
46 debug1: kex: server->client aes128-ctr hmac-md5 none
47 debug2: mac_setup: found hmac-md5
48 debug1: kex: client->server aes128-ctr hmac-md5 none
49 debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1536<3072<8192) sent
50 debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
51 DH_GEX group out of range: 1536 !< 1024 !< 8192`

Поэтому во время согласования обмена ключами клиент и сервер обмениваются списками поддерживаемых алгоритмов (строки 21 и 33). В этом случае они соглашаются использовать первое совпадение, найденное в двух списках diffie-hellman-group-exchange-sha1. Насколько я понимаю, этот алгоритм поддерживает диапазон длин битов, которые клиент и сервер должны согласовать. При нормальных обстоятельствах клиент и сервер согласовывают длину в битах и ​​обмениваются ключами, используя простое число DH из moduliфайла, например /etc/ssh/moduli(я знаю, что это последнее утверждение очень «говорит дилетант», но это примерно длинная и короткая из Это).

В этом случае, я думаю, что я вижу, что согласование по битам терпит неудачу. В строке 49 клиент (я) говорит: «Я поддерживаю битовую длину от 1536 до 8192 и хочу использовать 3072 бит». Однако сервер отвечает обратно и говорит: «Я поддерживаю только 1024 бита». В этот момент клиент сдается и говорит: «Я не могу говорить с вами». Это разумное описание того, что здесь происходит?

Насколько я понимаю, проблема полностью на стороне сервера на данный момент (при условии, что мы не договариваемся о более слабом алгоритме, как diffie-hellman-group1-sha1). Сервер должен быть модифицирован для поддержки большей битовой длины в процессе обмена ключами.

Я хотел бы убедиться, что я правильно понимаю это, прежде чем продолжить. Вклад приветствуется.

sbrown
источник
1
Вы читаете это правильно. Что на земле на другом конце? Это не похоже на обычный сервер ssh.
Майкл Хэмптон
Понятия не имею, что это за сервер. У нас одна и та же проблема с двумя разными поставщиками, оба из которых являются банками. Ни один сервер не идентифицирует себя в сеансе (что неудивительно).
родилась
Вы могли бы подумать, что банки будут немного больше защищать, но увы ...
Майкл Хэмптон
2
Поиск «GXSSSHD_Comments» приводит к появлению комментариев на различных клиентских форумах SFTP, которые, в свою очередь, предполагают, что ваш сервер является приложением GXS MFT - очень предприимчивым.
Касталья

Ответы:

21

Если вы хотите использовать более новую версию OpenSSH для подключения к устаревшим серверам:

ssh -o KexAlgorithms=diffie-hellman-group14-sha1 -o HostKeyAlgorithms=+ssh-dss my.host.com

Добавьте -v, если вы хотите увидеть, что происходит, и -o HostKeyAlgorithms = ssh-dss, если он все еще не работает:

ssh -v -o HostKeyAlgorithms=ssh-dss -o KexAlgorithms=diffie-hellman-group14-sha1 my.host.com

Вы также можете, конечно, отредактировать / etc / ssh / ssh_config или ~ / .ssh / ssh_config и добавить:

Host my.host.com *.myinsecure.net 192.168.1.* 192.168.2.*
    HostKeyAlgorithms ssh-dss
    KexAlgorithms diffie-hellman-group1-sha1    

https://forum.ctwug.za.net/t/fyi-openssh-to-access-rbs-openssh-7/6069 упоминает следующее исправление на Mikrotik Routerboards:

/ip ssh set strong-crypto=yes

(Отметив это здесь, потому что этот ответ также появляется при веб-поиске при поиске аналогичного сообщения об ошибке.)

Если вы хотите использовать его поверх Git без редактирования вашего ssh_config или обновления SSH-сервера:

GIT_SSH="ssh -oHostKeyAlgorithms=+ssh-dss -oKexAlgorithms=diffie-hellman-group14-sha1" git clone ssh://user@host/path-to-repository
Dagelf
источник
2
это работает и для
sftp
11

Кажется, вы попали в эту ошибку .

причина

В пакет openssh было внесено изменение, касающееся Diffie-Hellman Group Exchange. Ранее ключи размером 1024 - 8192 можно было обменять. Минимум был повышен до 1536 для дополнительной безопасности и во избежание уязвимости «logjam». Однако при использовании с некоторыми реализациями ssh сторонних производителей, которые поддерживают только 1024, произойдет сбой. В идеале, сторонняя конфигурация или код ssh должны быть обновлены для использования ключей большего размера.

...

Вы можете найти 3 разных разрешения по ссылке. В ситуациях, когда у вас нет полномочий администратора или слишком много бюрократии, чтобы получить более глубокие изменения, избавление от проблемного алгоритма в ожидании доступности SHA-2 на сервере показалось мне лучшим вариантом. Вы даже можете выполнить это в пользовательском режиме в вашем файле $ HOME / .ssh / config.

KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
xmar
источник