Как включить diffie-hellman-group-exchange-sha1 в качестве типа обмена ключами в среде Twisted Python (Kippo HoneyPot Related)?

У меня есть приложение, которое является клиентом SSH, который поддерживает следующие ключевые алгоритмы для согласования.

diffie-hellman-group-exchange-sha1 diffie-hellman-group-exchange-sha256

У меня нет возможности изменить SSH-клиент, поэтому я пытаюсь решить проблему на SSH-сервере, который использует Twisted. Сервер SSH фактически реализован в Kippo Honeypot, но основная проблема связана с Twisted.

Я вижу, что Twisted поддерживает diffie-hellman-group-exchange-sha1 и diffie-hellman-group1-sha1 в строке 221 здесь: https://github.com/twisted/twisted/blob/38421d6fcffa1ddb590e51df0e1c6cba6f29d052/twisted/conch/ssh/transport.py

Я вижу, что diffie-hellman-group-exchange-sha1 отключен в строке 60 здесь: https://github.com/twisted/twisted/blob/38421d6fcffa1ddb590e51df0e1c6cba6f29d052/twisted/conch/ssh/factory.py

Diffie-hellman-group-exchange-sha1 поддерживается, но затем отключается. SSH-клиент моего приложения не может согласовать ключ для установления SSH-соединения с SSH-сервером, использующим Twisted.

Я вижу это примечание в коде до его отключения "log.msg('отключение diffie-hellman-group-exchange, потому что мы не можем найти файл модулей')" Если я попытаюсь заставить Twisted использовать diffie-hellman-group-exchange- sha1 я получаю следующую ошибку.

   Traceback (most recent call last):
      File "/usr/lib/python2.7/dist-packages/twisted/python/log.py", line 84, in callWithLogger
        return callWithContext({"system": lp}, func, *args, **kw)
      File "/usr/lib/python2.7/dist-packages/twisted/python/log.py", line 69, in callWithContext
        return context.call({ILogContext: newCtx}, func, *args, **kw)
      File "/usr/lib/python2.7/dist-packages/twisted/python/context.py", line 118, in callWithContext
        return self.currentContext().callWithContext(ctx, func, *args, **kw)
      File "/usr/lib/python2.7/dist-packages/twisted/python/context.py", line 81, in callWithContext
        return func(*args,**kw)
    --- <exception caught here> ---
      File "/usr/lib/python2.7/dist-packages/twisted/internet/posixbase.py", line 586, in _doReadOrWrite
        why = selectable.doRead()
      File "/usr/lib/python2.7/dist-packages/twisted/internet/tcp.py", line 199, in doRead
        rval = self.protocol.dataReceived(data)
      File "/home/sudopwn/kippo-master/kippo/core/ssh.py", line 150, in dataReceived
        transport.SSHServerTransport.dataReceived(self, data)
      File "/usr/lib/python2.7/dist-packages/twisted/conch/ssh/transport.py", line 438, in dataReceived
        self.dispatchMessage(messageNum, packet[1:])
      File "/usr/lib/python2.7/dist-packages/twisted/conch/ssh/transport.py", line 453, in dispatchMessage
        f(payload)
      File "/usr/lib/python2.7/dist-packages/twisted/conch/ssh/transport.py", line 950, in ssh_KEX_DH_GEX_REQUEST
        self.g, self.p = self.factory.getDHPrime(ideal)
      File "/usr/lib/python2.7/dist-packages/twisted/conch/ssh/factory.py", line 126, in getDHPrime
        primesKeys = self.primes.keys()
    exceptions.AttributeError: 'NoneType' object has no attribute ‘keys'

Есть ли обходной путь или решение, позволяющее включить diffie-hellman-group-exchange-sha1?

1 ответ

Не существует "обходного пути" к тому факту, что обмен ключами DH требует модулей. Вот как работает математика. Если вы посмотрите в openssh_compat.py вы увидите, что getPrimes имеет синтаксический анализатор для формата простых чисел openssh, и если у вас есть модули в /path/to/moduli затем twistd -n conch --data=/path/to разберу их. Вы можете создать их с ssh-keygen -G, Вам нужно реализовать что-то похожее на HoneyPotSSHFactory, реализовано здесь: https://github.com/desaster/kippo/blob/master/kippo/core/ssh.py

Помните, что генерация модулей занимает некоторое время, поэтому вы захотите сделать это заранее.

Другие вопросы по тегам