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

С самого первого проявления данной проблемы я пытался обратить на это внимание фирмы Microsoft, но безуспешно. Решения нет до сих пор.

Проблема


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

После обновления 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 через стену «технической поддержки».
Поделиться с друзьями
-->

Комментарии (47)


  1. artemlight
    10.11.2016 11:20
    +12

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

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

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


    1. creker
      10.11.2016 11:35

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

      При чем тут Software Assurance тоже непонятно. Что-то не видно гарантий, что любой каприз будет реализован. Это и невозможно в принципе. А раз уж есть какая-то реальная проблема, то с ней явно не через публичные форумы надо обращаться, а через поддержку самого Software Assurance.


      1. artemlight
        10.11.2016 11:46
        +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, который не хотят чинить.

        Ну это ж бред какой-то. Нафига так плевать в морду лояльным клиентам?


        1. mickvav
          10.11.2016 15:58
          -2

          Вероятно, в микрософте завелись переодетые линуксоиды :)


    1. mtivkov
      11.11.2016 15:21

      … там заложен курс под 90 rub\usd. Если это не свинство, то как это называть?

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

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

      А что, платеж за год вперед сейчас сделать не вариант?
      Может в компании есть экономия и еще можно убедить перекинуть её на бюджет платежей для ИТ на этот год?


      1. vbif
        11.11.2016 18:24
        +1

        1 квартала 2016 года?


        1. mtivkov
          12.11.2016 22:30

          2017, конечно.


  1. Dimchansky
    10.11.2016 11:32
    +5

    Может стоит написать короткую программу на C, которая воспроизводит баг (даже у непривилегированного пользователя) и заслать им, чтобы на Far Manager не сваливали?


    1. artemlight
      10.11.2016 11:38

      сейчас такие программы у каждого второго школьника появятся, т.к. для написания такой штуки достаточно любого апи сниффера.
      По мне — это типичный Remote DoS, и отличный повод не вытаскивать Terminal Services за периметр сети (впрочем, как и любой другой продукт MS)


      1. Dimchansky
        10.11.2016 11:49
        +4

        Чем раньше появятся, тем большим стимулом это будет исправить. :)


        1. boris768
          10.11.2016 21:46

          Поддерживаю, гугл их тоже информировал, они толком зашевелились только после того, как информация об уязвимости в общем доступе появилась. Так еще и ныли, что времени не дали на закрытие, хотя Adobe за ту же самую неделю нужные патчи выложила. За такие деньги «безопасность корпоративного уровня», как сказано на официальном сайте, неплохо бы и обеспечить.


    1. varnav
      10.11.2016 12:43
      +3

      И куда-нибудь в metasploit добавить.


  1. evr1ka
    10.11.2016 12:14

    Захотелось поставить серверную винду, и проверить… Хотя в статье пишется, что на 10ке проблема тоже имеет место быть. Как сторонник использовать Far было интересно прочесть статью. Спасибо!
    Надеюсь информация дойдет до разработчиков


  1. datacompboy
    10.11.2016 12:35
    +3

    У них до сих пор Сапёр поломаный! А вы о каком-то локальном DoS'е.

    Так как падение на KeBugCheckEx, то кроме DoSа ничего не получить.
    А винда еще с 9x билдов всегда в себе дос содержала… ;D


    1. leschenko
      10.11.2016 13:01
      +1

      А что не так с сапёром? Или это шутка, которую я не понял?


      1. datacompboy
        10.11.2016 13:29

        https://drive.google.com/drive/folders/0B2EU-qCJx4c_fjJnWkU0RHU0TU1QRDhQWi12T2FweXMtWGZ2UHhBVmItWjFLZFE2OGxCSGs

        Баг с июля 2015 (с 8.1). Его спустя почти пол года починили. И через 2 апдейта сломали опять.



        1. dkv
          10.11.2016 23:37
          +2

          Похоже, где-то минус в коде потеряли. Надеюсь, калькулятором занимаются другие разработчики…


    1. vbif
      10.11.2016 13:33

      О чём речь, если даже в 10-й винде не пофиксен баг с Ctrl+backspace?


  1. leschenko
    10.11.2016 12:58

    Я возможно что-то не так делаю, но у немя не получилось воспроизвести.
    Client: Windows 10 Pro x64 14393.351
    Server: Windows 2016 Standard x64 14393.351
    Far Manager: 3.0 build 4774 x64
    Тестовый файл успешно скопирован с \\tsclient\D на локальный диск на сервере и отправлен обратно.


    1. Rend
      10.11.2016 21:58
      +1

      Подозреваю, что зависит от количества процессоров. После некоторого момента (кажется версии rdbss 10.0.14393.82) проблема на виртуальной машине стала проявляться только после того, как отдаю VM два процессора.

      Вероятно всего, проблема возникает при чтении каталога (точнее, закрытия хендла поиска).


      1. dkv
        10.11.2016 23:46

        Хм. Видимо, они этот поиск пытались распараллелить, но что-то пошло не так.


      1. leschenko
        12.11.2016 10:29

        Да. На 2 виртуальных процессорах падает.
        Кстати, важно именно 2 процессора или 2 ядра?
        На реальной машине проверять сам не хочу.


        1. Rend
          12.11.2016 11:32

          Ядра/процессора — не важно. Наиболее вероятной причиной предполагаю race condition.


  1. Vasyutka
    10.11.2016 13:19
    +1

    Еще интересно наблюдал как разворачивалась история с поддержкой Bluetooth в WinRT приложениях на Win10. В Windows 8 WinRT (для Windows Store) нельзя было просто взять и обратиться к Bluetooh устройству, т.е. к его RFCOMM протоколу. В 8.1 уже можно было. Но в Win10 (которая неожиданно «САМА» ставилась у клиентов) просто вновь забили на RFCOMM Bluetooth протокол и все вылетало с ошибкой. Ветка форума висела несколько лет. Не знаю, вышло ли обновление уже. Просто подумать: в сумме пару лет Microsoft-у было не в приоритете подключение внешних Bluetooth устройств, отличных от наушников и гарнитур.


  1. alex_kl
    10.11.2016 21:47

    Постараюсь помочь с этой проблемой. Я тоже очень люблю в Far Manager рабоать.
    У нас примьер контракт с Microsoft, открою кейс, посмотрим.
    Версия Far какая?


    1. Rend
      10.11.2016 21:50

      Как я понимаю, любая.
      Например, 4747 x64 или даже 4040


  1. Alex023
    10.11.2016 21:47
    +7

    У них 100500 более важных задач:
    1) перерисовать меню пуск еще раз к новому релизу
    2) задвинуть кнопку подключения по VPN еще дальше
    3)…

    100501) Починить rdbss.sys сломанный 40 лет назад, в 2016-ом.


  1. stanislavant
    10.11.2016 21:47
    -7

    Воу, кто-то еще пользуется программой 90-х — FAR Manager? Ощущение что дизайнер ПО застрял в 90х…


    1. zxweed
      10.11.2016 22:28
      +8

      Вообще-то, его дизайн уходит корнями в NortonCommander, который вышел в 1986 году. И да — это образец самого правильного дизайна, который за столько лет никто не смог сделать лучше.


      1. PsyHaSTe
        11.11.2016 02:27

        Скорее тут вопрос привычки. Обычный эксплорер если бы обзавелся табами был бы удобнее. Хотя в коммандере это и реализованно, но там очень много всего завязанно на хоткеи, и если ты не проводишь 100500 часов удаляя и перемещая файлы, то обычный эксплорер удобнее…

        P.S. Увы, на дворе 2016 год, а до сих пор табы можно в эксплорер добавить только глючными и падающими сторонними программами…


        1. vorphalack
          11.11.2016 05:49

          интерфейс — дело наживное, кмк фар в основном жив и востребован из-за своей функциональности, отсутствующей в гуе (и я не про двухпанельность).


          1. ChiefPilot
            11.11.2016 11:02

            Точно! Не только в двухпанельности дело. Мне очень нравятся и плагины (для просмотра и управления списками процессов и служб) и «Главное меню» в котором можно задать кучу полезных вещей (от мгновенного перехода в нужный каталог, до запуска программ с кучей ключей) и повесить это на нажатие какой-нибудь своей клавиши, встроенный архиватор (когда в архив входишь, как просто в папку), редактор (по F4) с подсветкой синтаксиса. Всё это (и наверняка многое другое, чего так сразу и не вспомнишь) создают такую удобную и родную атмосферу, что ничего другое как-то не приживается.


        1. vlivyur
          11.11.2016 10:49
          +1

          Табы не главное — можно открыть два окна и по разным сторонам монитора приляпать их. Всё равно это необходимо только при копированиях файлов, а это не основная его задача. Обычный эксплорер ещё любит по-тормозить. И чем больше файлов, тем быстрее тормозит. Ну и вообще удобным его тоже сложно назвать.


    1. Chaa
      12.11.2016 11:55
      +1

      Скорость работы Far, особенно на сетевых дисках, недостижима для красивых новых программ.


      1. mayorovp
        12.11.2016 18:28
        +1

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


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


        1. Rend
          14.11.2016 10:36

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


          1. mayorovp
            14.11.2016 11:00

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


    1. Deepwalker
      17.11.2016 09:01

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

      Сила интерфейса не в новых стильных иконках.


  1. pro100master
    11.11.2016 00:29

    Ну так есть исходники Far. В них, кстати, куча мест с пометкой bug :)


  1. les_sosna
    11.11.2016 09:11

    Напишите в Feedback Hub. Если запись наберет достаточно «лайков», до разработчиков дойдет быстрее.


  1. foxnet
    14.11.2016 09:23

    А можете написать точную конфигурацию при которой проблема воспроизводилась? Я бы хотел попробовать у себя.


    1. Rend
      14.11.2016 11:00

      Чтобы не рушить реальную машину, тесты проводил под Hyper-V. Пока критичным моментом является наличие двух и более ядер. Остальное — стандартная установка Windows 10 1607 или Windows Server 2016 Release, разрешение подключения через Remote Desktop. Далее — подключение к ней через RDС; в «Local Resources» клиента нужно разрешить доступ к локальным дискам (например, к диску D). Можно устанавливать FAR Manager, а можно запустить его из самой сетевой папки \\tsclient\d. После этого нужно побегать в FAR'е туда-сюда по каталогам \\tsclient\d. Всё.


      1. foxnet
        14.11.2016 13:19
        +2

        В общем да. Воспроизводится проблема довольно легко. Проблема возникает на любых клиентских ОС. Однако заметил, что на win7 надо дольше ковыряться по папкам. Создается ощущение, что чем больше объектов в папке, тем больше шансов на падение. Например, если в папке всего 2-3 файла, то ничего не падает.
        На win7 заметил, что открываются папки вообще любого размера. Но если начинаешь быстро входить и выходить из такой папки, то синий экран все равно приходит. Единственное что win7 сидел на вафле. Как вариант что-то может быть связано со скорость коммуникации. Другой ноут на вафле и win 8.1, например, успевает прочитать где-то 80 файлов.
        http://doublecmd.sourceforge.net/forum/viewtopic.php?f=6&t=3598 вот тут с аналогичной проблемой встретились, но под другим файловым менеджером.
        Самое стремное, что синему экрану не нужны какие-либо повышенные права, только доступ по rdp.
        Проблема то не кислая такая…


  1. diamon
    15.11.2016 19:01
    +2

    а если в powershell консоли сделать cd \\tsclient\d повторяется? что бы на фар не сваливали…


    1. Deepwalker
      17.11.2016 09:03

      В описании говорится что far использует свои, особые вызовы. Весьма вероятно, что powershell так не делает.


    1. Lelik13a
      17.11.2016 11:51

      Специально в виртуальной машине развернул windows 10 с последними патчами (правда терминальный режим включил через rdpwrap). Проблема с far-ом воспроизводится легко. Средствами powershell и проводника синий экран получить не удалось. Похоже это именно проблема взаимодействия фара и windows.