воскресенье, 12 июня 2011 г.

Проблема возможностей сетевого взаимодействия: первое дополнение из многих

Это перевод The network interoperability compatibility problem, first follow-up of many. Автор: Реймонд Чен.

Окей, вчера было ужасно много комментариев, и у меня ушло много времени на их разбор. Но я начну с другого - приведу больше информации по задаче и укажу на некоторые моменты, которые были неверно поняты.

Как угадали некоторые люди, сетевой файловый сервер, о котором шла речь - это Samba, версия которой включена в большинство популярных дистрибутивов Linux (мне нужно быть более осторожным в следующий раз, когда я буду маскировать вовлечённые в вопрос стороны). Samba также является очень популярным файловым сервером на embedded-устройствах, вроде сетевых хранилищ (network-attached storage, NAS). Баг, о котором я говорил, был исправлен в последних версии Samba, но ни один из основных дистрибутивов его ещё не содержит. Кроме того, это совсем не решение для сценария с сетевым хранилищем.

Кажется, что многие люди подумали, что речь идёт о баге в драйвере Windows Vista, потому что они говорили о сертификации драйверов и блокировки их установки. Но здесь проблема не в машине с Windows Vista; проблема в файловом сервере, который обычно работает под Linux. WHQL не сертифицирует драйвера Linux, и он не может предотвратить установку драйвера на Linux машину, и уж совершенно точно он не может скачать обновлённый драйвер и как-то обновить вашу Linux машину за вас. Запомните, что баг находится в сервере, который работает на машине под управлением другой ОС. Просить Windows обновить этот драйвер - это всё равно что просить Internet Explorer обновить Apache, под которым работает slashdot.org. Вы - просто клиент; у вас нет никакой власти над сервером.

Некоторые люди упустили из виду сценарий с NAS - видимо потому, что они просто не очень с ними знакомы. Устройство NAS (network-attached storage) - это автономное устройство, представляющее собой небольшую коробочку с ёмким жёстким диском (часто - дисками) и микро-компьютером, которое втыкается в компьтерную сеть. Интегрированный компьютер имеет на борту операционную систему, которая прошита в ROM (часто это ОС является обрезанной версией Linux с интегрированным сервером Samba), а когда вы его включаете, устройство включает компьютер, который запускает ОС и работает как файловый сервер в вашей сети, предоставляя доступ к своему(-им) жёсткому(-им) диску(-ам). Поскольку всё ПО зашито в ROM, вы не можете сказать, что обновление драйвера решит проблему и про неё скоро забудут. Вы не можете просто скачать обновлённый драйвер Samba и установить его на своё NAS-устройство. Вам нужно дождаться, пока производитель вашего устройства не выпустит обновлённую ROM-прошивку (если он вообще это сделает).

Что касается определения бажного драйвера, то протокол CIFS даёт вам не так уж много информации о том, что запущено на сервере. Единственная информация - это поле "family", которое указывает на общую категорию серверного ПО (OS/2, Samba, Windows NT и т.п.). Всё, что при этом может сказать клиент: "Ну, на сервере работает какая-то версия Samba". Он не может сказать, бажный ли это сервер или нет. Единственным способом узнать про баг будет работа с сервером, пока баг не произойдёт.

(Это также означает, что люди, которые говорят: "Windows Vista должна по умолчанию использовать медленную версию", хотят, чтобы Windows Vista работала медленным способом с Samba серверами и быстрым способом с серверами Windows NT. Но это только играет на руку теоретикам теорий заговора.)

Последнее замечание на сегодня - объяснение, как web-сайт может переполнить кэш известных хороших/плохих серверов и создать ситуацию отказа в обслуживании, если у сервера нет ограничения на размер кэша: во-первых, создайте DNS сервер, который перенаправляет все запросы с *.hackersite.com на вашу Linux-машину. Установите бажную версию Samba на этой Linux машине. Теперь сделайте такую web-страничку:
<IFRAME SRC="\\a1.hackersite.com\b" HEIGHT=1 WIDTH=1></IFRAME>
<IFRAME SRC="\\a2.hackersite.com\b" HEIGHT=1 WIDTH=1></IFRAME>
<IFRAME SRC="\\a3.hackersite.com\b" HEIGHT=1 WIDTH=1></IFRAME>
<IFRAME SRC="\\a4.hackersite.com\b" HEIGHT=1 WIDTH=1></IFRAME>
...
<IFRAME SRC="\\a10000.hackersite.com" HEIGHT=1 WIDTH=1></IFRAME>
Каждый из этих тэгов IFRAME показывает окно Проводника с содержимым каталога\\a1.hackersite.com\b (поскольку все имена резольвятся на одну и ту же машину, то все машины вида \\*.hackersite.com, на самом деле, являются одной и той же машиной). Разметите 200 файлов в этой папке, так чтобы вызвать баг и заставить Windows Vista запомнить сервер как "плохой". Таким образом, вы заставите Windows Vista создать десять тысяч записей для плохих серверов, которые вы попросили показать. Добавьте немного скриптом, чтобы превратить это в цикл, показывающий миллионы "различных" серверов (на самом деле - один и тот же сервер). Если бы кэш "плохих" не имел бы ограничения, то вы позволите такому серверу занять мегабайты памяти, которые никогда не будут освобождены, пока компьютер не перезагрузят. Клёвый трюк.

Что ещё хуже, если вы предлагаете хранить кэш между перезапусками, то вам нужно место на диске для хранения этой информации. Не важно, будет ли это файл на диске или реестр - этим вы открываете для атакующего возможность исчерпать место или квоту реестра и/или диска. После чего не только начнут происходить плохие вещи, но вы даже можете не знать, что нужно удалить, чтобы вернуть свободное место.

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

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.