Синий экран смерти при копировании через Remote Desktop теперь доступен и на серверной платформе


30 сентября 2016 г вышел Windows Server 2016. К сожалению, вместе с положительными новшествами пришли и отрицательные. В Windows Server успешно перенесена ошибка из Windows 10 Anniversary Update, вызывающая падение удалённого сервера при обращении из него к локальному пути \\tsclient через FAR Manager.

С самого первого проявления данной проблемы я пытался обратить на это внимание фирмы Microsoft, но безуспешно. Решения нет до сих пор.
UPDATE. Ошибка была исправлена в рамках обновления 14.03.2017 как в Windows 10, так и в Windows Server 2016. Версия исправленного драйвера rdbss.sys — 10.0.14393.953 (04.03.2017).

Проблема


В процессе работы мне часто приходится обращаться к удалённым компьютерам через Remote Desktop. Иногда приходится копировать файлы туда/обратно; при этом бывает весьма полезна возможность обратиться к дискам моего компьютера из клиента RDP по пути вида \\tsclient\d. Также нужно упомянуть, что привык пользоваться FAR Manager.

После выпущенного в августе 2016 г обновления Windows Anniversary Update, в котором, как я надеялся, компания Microsoft исправит ряд своих ошибок, произошло обратное. При обращении к пути \\tsclient\d через FAR удалённая машина стала падать в синий экран. Конкретно виновным оказался драйвер rdbss.sys.

Проблема повторялась на раз-два-три, и дальнейшие тесты прекрасно проходили на виртуальных машинах с поставленной «с нуля» операционной системой. Виновник был чётко виден при просмотре дампа ядра.

BugCheck 27, {fcb0027c, ffffd5073f279eb8, ffffd5073f279af0, 0}

Page c920 not present in the dump file. Type ".hh dbgerr004" for details
Probably caused by : rdbss.sys ( rdbss! ?? ::FNODOBFM::`string'+1f09 )

nt!KeBugCheckEx
rdbss! ?? ::FNODOBFM::`string'+0x1f09 (в реальности  RxSelectAndSwitchPagingFileObject)
rdbss!RxCommonClose+0x126
rdbss!RxFsdCommonDispatch+0x55b
rdbss!RxFsdDispatch+0x86
rdpdr!DrPeekDispatch+0x203
mup!MupStateMachine+0x1dc
mup!MupClose+0x8c
FLTMGR!FltpLegacyProcessingAfterPreCallbacksCompleted+0x1a6
FLTMGR!FltpDispatch+0xb6
nt!IopDeleteFile+0x12d
nt!ObpRemoveObjectRoutine+0x78
nt!ObfDereferenceObjectWithTag+0xc6
nt!ObCloseHandleTableEntry+0x28f
nt!NtClose+0xcb
nt!KiSystemServiceCopyEnd+0x13
0x00007ffa`8c925034

Переписка


Что же, подумал я, обратимся в компанию Microsoft. Поскольку форм отправки сообщений по подобным поводам я не нашёл (а заводить платный support request как-то не хотелось), была создана тема в technet forum. В сообщении я описал последовательность воспроизведения проблемы и приложил анализ дампа Windows от WinDBG.

В результате получил ответ от модератора:
По данным вашего анализа, проблема связана с «rdbss.sys». Это драйвер подсистемы буферизации перенаправленного диска. Поскольку проблема наблюдается на любой машине, я подозреваю, драйвер несовместим с функционалом Windows 10 RDP. Вам лучше подтвердить это у разработчика данного программного обеспечения.

Попытка указать, что разработчиком модуля rdbss.sys в составе Windows 10 является компания Microsoft, не привели к успеху. «Обращайтесь к компании-разработчику; у меня нет возможности это проверять», пишет модератор, сотрудник Microsoft.

Здесь я подумал, что проблема повторяется и для непривилегированного пользователя (действительно), и решил написать в Microsoft Security Report. К отправке подобного сообщения Microsoft относится серьёзно — по электронной почте нужно отправить зашифрованное письмо (S-MIME или OpenPGP с ключом Microsoft), на которое дадут ответ в течении суток.

Действительно, ответ дали:
Видимо, эта проблема FAR Manager, а не Windows 10. Однако это нельзя считать проблемой безопасности, поскольку вы уже имеете доступ к системе и возможность выполнять код на машине.

На вопрос, нормально ли, если непривилегированный пользователь может вызвать BSOD, ответа не было.

Когда появились релизные сборки Window Server 2016, в которой повторилась данная проблема, я отправил ещё одно письмо, обращающее внимание на недопустимость подобного для серверной платформы. Ответ был аналогичным:
Спасибо за дополнительную информацию. К сожалению, это всё ещё похоже на проблему в FAR Manager. Также это могло бы являться DOS-атакой локально аутентифицированного пользователя, но мы не находим это достаточным для обеспечения поддержки в рамках задач безопасности.

Анализ


Ради интереса я посмотрел, проявляется ли эта проблема в других версиях Windows – оказывается, нет. Ни в Windows 10 1511, ни в Windows Server 2016 TP5 она не наблюдалась.

Краткий обзор кода в WinDBG выявил весьма интересную вещь. Функция RxSelectAndSwitchPagingFileObject, которая, собственно, и вызывала Bugcheck 0x27, не сильно изменилась по сравнению с Windows 10 1511. Но в предыдущей версии при обнаружении ошибок они просто игнорировалась, а в новой был явно добавлен вызов KeBugCheckEx. Видимо, разработчики никак не могли исправить какие-то свои баги и решили работать «по бразильской системе» — если что, то система просто упадёт, и тогда удастся найти причины каких-то внутренних (возможно, и не фатальных) ошибок.

Однако в реальности получается странная ситуация — пользователи находят данную ошибку и описывают последовательность её воспроизведения, а техническая поддержка стоит барьером — «это не наша проблема». До разработчиков, подозреваю, информация так и не доходит.

В Windows Server 2016 TP5, кстати, этой функции вообще не было. Однако в релизной версии она появилась и абсолютно также вызывает синий экран, как и в Windows 10 Anniversary. Стоит отметить, что с выхода Windows Anniversary Update было несколько обновлений модуля rdbss.sys, но данную проблему они не решили.

Со стороны FAR Manager ситуация такова, что он активно использует Native API, и для операций с каталогами использует не классические функции модуля kernel32 (FindFirstFile/FindNextFile), а функции модуля ntdll (NtQueryDirectoryFile). Возможно, здесь и получается какая-то неожиданная комбинация параметров/вызовов, которую разработчики rdbss.sys не учли (система падает на NtClose, когда идёт очистка открытого объекта файла).

Надеюсь, данная статья предупредит системных администраторов о новой напасти и позволит избежать неожиданных падений удалённых серверов. Также лелею жалкую надежду, что представители Microsoft, присутствующие на Harbahabr, донесут необходимую информацию до разработчиков rdbss.sys через стену «технической поддержки».
Поделиться публикацией
Похожие публикации
Ой, у вас баннер убежал!

Ну. И что?
Реклама
Комментарии 48
    +12
    Знаком с техподдержкой МС не по наслышке — оцените длительность ожидания по этому кейсу — даже такие мелкие патчи на Win10 не могут запилить уже несколько лет.

    Зато сервис телеметрии оперативно переименовали, молодцы

    Как клиент с Software Assurance с ежегодным платежом в пару-тройку миллионов после всего этого (+ изменения в политике лицензирования Windows 2016) искренне считаю, что меня кинули, и никому не посоветую наступать на эти же грабли. Сомневающимся могу посоветовать посмотреть стоимость продления SA контрактов за 2016 год (даже с левелом), и сравнить их с забугорными — там заложен курс под 90 rub\usd. Если это не свинство, то как это называть?

      0
      Судя по кейсу, проблем ничтожная и явно стоит в низком приоритете. Оценивать по такому кейсу техподдержку в общем это смех. Факт таков, что у них там явно сотни куда более важных вещей и нет никому никакого дела до какой-то мелочи, которая просто раздражает несколько человек. Да и вообще, всегда такое происходит. Как только чей-то пост не получает должного по их личному мнению отклика, то автоматически все плохо и техподдержка никакая.

      При чем тут Software Assurance тоже непонятно. Что-то не видно гарантий, что любой каприз будет реализован. Это и невозможно в принципе. А раз уж есть какая-то реальная проблема, то с ней явно не через публичные форумы надо обращаться, а через поддержку самого Software Assurance.
        +11
        SA — это лояльность клиентов. Для работы мне вполне бы хватило 2012 + Windows 7, и в 2023 году я бы снова заново купил свежий OLP. Но вот в 2013-м году я почему-то подумал, что bleeding edge — это неплохо.

        В итоге в 2016 стоимость SA выше, чем SaaS, а одна лицензия Windows 2012 std стоит больше штуки баксов по SA. К тому же — забагованный клиент, неотключаемая телеметрия, а важные импрувменты для небольшого бизнеса (я о Storage Spaces Direct, например) вынесены в Datacenter версию.

        Я промолчу о том, что в 2014 я специально приобретал дорогущие десятиядерные ксеоны для уплотнения вм и экономии на лицензиях, а в 2016 я получил необходимость лицензировать под 2016 все ядра этого кластера, хотя винды там процентов 20 от силы.

        А тут ещё и новости о Remote DoS, который не хотят чинить.

        Ну это ж бред какой-то. Нафига так плевать в морду лояльным клиентам?
          –2
          Вероятно, в микрософте завелись переодетые линуксоиды :)
        0
        … там заложен курс под 90 rub\usd. Если это не свинство, то как это называть?

        Чтобы не ошибиться с правильным названием, нужно подождать хотя бы до конца 1 квартала 2016 года.

        Может тогда это захочется назвать не «свинством», а «хорошим прогнозированием» или «удивительной информированностью». Не дай Бог, конечно, чтобы «щедростью».

        А что, платеж за год вперед сейчас сделать не вариант?
        Может в компании есть экономия и еще можно убедить перекинуть её на бюджет платежей для ИТ на этот год?
          +1
          1 квартала 2016 года?
            0
            2017, конечно.
        +5
        Может стоит написать короткую программу на C, которая воспроизводит баг (даже у непривилегированного пользователя) и заслать им, чтобы на Far Manager не сваливали?
          0
          сейчас такие программы у каждого второго школьника появятся, т.к. для написания такой штуки достаточно любого апи сниффера.
          По мне — это типичный Remote DoS, и отличный повод не вытаскивать Terminal Services за периметр сети (впрочем, как и любой другой продукт MS)
            +4
            Чем раньше появятся, тем большим стимулом это будет исправить. :)
              0
              Поддерживаю, гугл их тоже информировал, они толком зашевелились только после того, как информация об уязвимости в общем доступе появилась. Так еще и ныли, что времени не дали на закрытие, хотя Adobe за ту же самую неделю нужные патчи выложила. За такие деньги «безопасность корпоративного уровня», как сказано на официальном сайте, неплохо бы и обеспечить.
            +3
            И куда-нибудь в metasploit добавить.
            0
            Захотелось поставить серверную винду, и проверить… Хотя в статье пишется, что на 10ке проблема тоже имеет место быть. Как сторонник использовать Far было интересно прочесть статью. Спасибо!
            Надеюсь информация дойдет до разработчиков
              +3
              У них до сих пор Сапёр поломаный! А вы о каком-то локальном DoS'е.

              Так как падение на KeBugCheckEx, то кроме DoSа ничего не получить.
              А винда еще с 9x билдов всегда в себе дос содержала… ;D
                +1
                А что не так с сапёром? Или это шутка, которую я не понял?
                0
                О чём речь, если даже в 10-й винде не пофиксен баг с Ctrl+backspace?
                0
                Я возможно что-то не так делаю, но у немя не получилось воспроизвести.
                Client: Windows 10 Pro x64 14393.351
                Server: Windows 2016 Standard x64 14393.351
                Far Manager: 3.0 build 4774 x64
                Тестовый файл успешно скопирован с \\tsclient\D на локальный диск на сервере и отправлен обратно.
                  +1
                  Подозреваю, что зависит от количества процессоров. После некоторого момента (кажется версии rdbss 10.0.14393.82) проблема на виртуальной машине стала проявляться только после того, как отдаю VM два процессора.

                  Вероятно всего, проблема возникает при чтении каталога (точнее, закрытия хендла поиска).
                    0
                    Хм. Видимо, они этот поиск пытались распараллелить, но что-то пошло не так.
                      0
                      Да. На 2 виртуальных процессорах падает.
                      Кстати, важно именно 2 процессора или 2 ядра?
                      На реальной машине проверять сам не хочу.
                        0
                        Ядра/процессора — не важно. Наиболее вероятной причиной предполагаю race condition.
                    +1
                    Еще интересно наблюдал как разворачивалась история с поддержкой Bluetooth в WinRT приложениях на Win10. В Windows 8 WinRT (для Windows Store) нельзя было просто взять и обратиться к Bluetooh устройству, т.е. к его RFCOMM протоколу. В 8.1 уже можно было. Но в Win10 (которая неожиданно «САМА» ставилась у клиентов) просто вновь забили на RFCOMM Bluetooth протокол и все вылетало с ошибкой. Ветка форума висела несколько лет. Не знаю, вышло ли обновление уже. Просто подумать: в сумме пару лет Microsoft-у было не в приоритете подключение внешних Bluetooth устройств, отличных от наушников и гарнитур.
                      0
                      Постараюсь помочь с этой проблемой. Я тоже очень люблю в Far Manager рабоать.
                      У нас примьер контракт с Microsoft, открою кейс, посмотрим.
                      Версия Far какая?
                        0
                        Как я понимаю, любая.
                        Например, 4747 x64 или даже 4040
                        +7
                        У них 100500 более важных задач:
                        1) перерисовать меню пуск еще раз к новому релизу
                        2) задвинуть кнопку подключения по VPN еще дальше
                        3)…

                        100501) Починить rdbss.sys сломанный 40 лет назад, в 2016-ом.
                          –7
                          Воу, кто-то еще пользуется программой 90-х — FAR Manager? Ощущение что дизайнер ПО застрял в 90х…
                            +8
                            Вообще-то, его дизайн уходит корнями в NortonCommander, который вышел в 1986 году. И да — это образец самого правильного дизайна, который за столько лет никто не смог сделать лучше.
                              0
                              Скорее тут вопрос привычки. Обычный эксплорер если бы обзавелся табами был бы удобнее. Хотя в коммандере это и реализованно, но там очень много всего завязанно на хоткеи, и если ты не проводишь 100500 часов удаляя и перемещая файлы, то обычный эксплорер удобнее…

                              P.S. Увы, на дворе 2016 год, а до сих пор табы можно в эксплорер добавить только глючными и падающими сторонними программами…
                                0
                                интерфейс — дело наживное, кмк фар в основном жив и востребован из-за своей функциональности, отсутствующей в гуе (и я не про двухпанельность).
                                  0
                                  Точно! Не только в двухпанельности дело. Мне очень нравятся и плагины (для просмотра и управления списками процессов и служб) и «Главное меню» в котором можно задать кучу полезных вещей (от мгновенного перехода в нужный каталог, до запуска программ с кучей ключей) и повесить это на нажатие какой-нибудь своей клавиши, встроенный архиватор (когда в архив входишь, как просто в папку), редактор (по F4) с подсветкой синтаксиса. Всё это (и наверняка многое другое, чего так сразу и не вспомнишь) создают такую удобную и родную атмосферу, что ничего другое как-то не приживается.
                                  +1
                                  Табы не главное — можно открыть два окна и по разным сторонам монитора приляпать их. Всё равно это необходимо только при копированиях файлов, а это не основная его задача. Обычный эксплорер ещё любит по-тормозить. И чем больше файлов, тем быстрее тормозит. Ну и вообще удобным его тоже сложно назвать.
                                  0
                                  Нортон застолбил цветовую гамму и воплотил панельный менеджер таким образом, что он стал массовым.
                                  Но корни растут еще раньше. Были и другие панельные менеджеры на древних ОС, таких как RT11SJ.
                                  +1
                                  Скорость работы Far, особенно на сетевых дисках, недостижима для красивых новых программ.
                                    +1

                                    К сожалению, в последней версии это уже не так. Все чаще пользуюсь проводником чтобы зайти на сетевой ресурс — потому что в нем я могу набрать путь к папке с клавиатуры.


                                    FAR Manager же пытается после ввода каждого символа делать сетевой запрос для вывода контекстной подсказки:(

                                      0
                                      Это AutoComplete. Отключается через Options->AutoComplete Settings.
                                        0

                                        Ага, спасибо. Пойду теперь отключать AutoComplete на сотне серверов...

                                    0
                                    Многие разработчики вообще не пользуются файловыми менеджерами. Если умеешь командную строку, настроено автодополнение и тп, то быстрее вбить команду, чем ползать по папкам, а с помощью мыши или стрелочек, это уже дело десятое. А этому интерфейсу еще больше лет чем нортону.

                                    Сила интерфейса не в новых стильных иконках.
                                    0
                                    Ну так есть исходники Far. В них, кстати, куча мест с пометкой bug :)
                                      0
                                      Напишите в Feedback Hub. Если запись наберет достаточно «лайков», до разработчиков дойдет быстрее.
                                        0
                                        А можете написать точную конфигурацию при которой проблема воспроизводилась? Я бы хотел попробовать у себя.
                                          0
                                          Чтобы не рушить реальную машину, тесты проводил под Hyper-V. Пока критичным моментом является наличие двух и более ядер. Остальное — стандартная установка Windows 10 1607 или Windows Server 2016 Release, разрешение подключения через Remote Desktop. Далее — подключение к ней через RDС; в «Local Resources» клиента нужно разрешить доступ к локальным дискам (например, к диску D). Можно устанавливать FAR Manager, а можно запустить его из самой сетевой папки \\tsclient\d. После этого нужно побегать в FAR'е туда-сюда по каталогам \\tsclient\d. Всё.
                                            +2
                                            В общем да. Воспроизводится проблема довольно легко. Проблема возникает на любых клиентских ОС. Однако заметил, что на win7 надо дольше ковыряться по папкам. Создается ощущение, что чем больше объектов в папке, тем больше шансов на падение. Например, если в папке всего 2-3 файла, то ничего не падает.
                                            На win7 заметил, что открываются папки вообще любого размера. Но если начинаешь быстро входить и выходить из такой папки, то синий экран все равно приходит. Единственное что win7 сидел на вафле. Как вариант что-то может быть связано со скорость коммуникации. Другой ноут на вафле и win 8.1, например, успевает прочитать где-то 80 файлов.
                                            http://doublecmd.sourceforge.net/forum/viewtopic.php?f=6&t=3598 вот тут с аналогичной проблемой встретились, но под другим файловым менеджером.
                                            Самое стремное, что синему экрану не нужны какие-либо повышенные права, только доступ по rdp.
                                            Проблема то не кислая такая…
                                          +2
                                          а если в powershell консоли сделать cd \\tsclient\d повторяется? что бы на фар не сваливали…
                                            0
                                            В описании говорится что far использует свои, особые вызовы. Весьма вероятно, что powershell так не делает.
                                              0
                                              Специально в виртуальной машине развернул windows 10 с последними патчами (правда терминальный режим включил через rdpwrap). Проблема с far-ом воспроизводится легко. Средствами powershell и проводника синий экран получить не удалось. Похоже это именно проблема взаимодействия фара и windows.

                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                            Самое читаемое