RFC: 4251
Оригинал: SSH Protocol Architecture
Категория: Предложенный стандарт
Дата публикации:
Авторы: ,
Перевод: Николай Малых

В оптимальном варианте от разработчика требуется добавление только одного пакета, если пакет уже передан в сеть и нет других пакетов, ожидающих передачи. Разработчики могут проверить наличие пакетов ожидающих передачи, однако получение такой информации от ядра или буферов может оказаться достаточно сложной задачей. Если ожидающие передачи пакеты отсутствуют, следует передавать пакет, содержащий SSH_MSG_IGNORE. Если новый пакет будет добавляться в поток всякий раз, атакующий, даже зная IV (который по его предположению будет использоваться для шифрования следующего пакета), не сможет корректно предсказать IV и атака, таким образом, не достигнет успеха.

Рассмотрим пример:

Клиент                                                  Сервер
------                                                  ------
TCP(seq=x, len=500)             ---->
 содержит запись Record 1

                    [прошло 500 ms, пакета ACK нет]

TCP(seq=x, len=1000)            ---->
 содержит запись Records 1,2

                                                          ACK
  1. Алгоритм Nagle в купе с алгоритмом повтора передачи TCP подразумевают возможность включения двух записей в один сегмент TCP.
  2. Запись Record 2 не находится в начале сегмента и никогда не будет там, поскольку она уже подтверждена с помощью ACK.
  3. Возможность атаки сохраняется, поскольку запись Record уже передана в сеть.

Этот пример показывает опасность опасность использования имеющихся в буфере TCP неотправленных данных в качестве признака необходимости передачи пустого пакета, поскольку в этом случае на момент повторного вызова write() в буфере содержится неподтвержденная запись Record 1.

Показанная ниже ситуация является совершенно безопасной:

Клиент                                                  Сервер
------                                                  ------
TCP(seq=x, len=500)             ---->
   содержит SSH_MSG_IGNORE

TCP(seq=y, len=500)             ---->
   содержит данные (Data)

В предположении, что IV для второй записи SSH Record фиксировано после получения данных для пакета Data, нужно выполнить следующие операции:

  • чтение пользовательских данных;
  • шифрование пустого пакета;
  • шифрование пакета данных.
2007 - 2017 © Русские переводы RFC, IETF, ISOC.