Подмена HTTP-заголовка Server для различных веб-серверов

    Привет, Хабрачитатели.

    Большинство (если не все) веб-серверы при ответе на HTTP-запрос по умолчанию заявляют о себе с помощью заголовка Server, сообщая в лучшем случае название используемого ПО, а в хучшем – версию, используемые модули и т.д. Их можно удобно просматривать с помощью таких дополнений, как например Server Spy для Mozilla Firefox.

    Server Spy

    Но далеко не все из веб-серверов позволяют в явном виде одной директивой отключить такое поведение. На мой взгляд, это потенциальная прореха в безопасности. В данной статье показано, как отключить отсылку заголовка Server или подменить его значение на произвольное для серверов Lighttpd, Nginx, Apache, G-WAN.
    Подробнее под катом.

    Lighttpd


    Lighttpd – единственный из перечисленных серверов, в файле конфигурации которого предусмотрена подмена заголовка Server. Выглядит это так:
    server.tag = "gws"

    Nginx


    Не раз встречал в Сети инструкции, как изменить заголовок Server в веб-сервере Nginx. Делается все в лоб – с помощью подмены значения в исходниках и перекомпиляции. Например www.xakep.ru/post/54168
    Есть метод более простой. Достигнуть результата можно использованием комбинации модулей HttpHeadersModule и HttpHeadersMoreModule или еще более простой вариант с помощью одного HttpHeadersMoreModule.

    С использованием комбинации модулей HttpHeadersModule и HttpHeadersMoreModule:
    # Удаляем существующее значение заголовка Server
    more_clear_headers 'Server';
    # Задаем новое
    add_header Server gws;


    С помощью одного HttpHeadersMoreModule:
    # только HttpHeadersMoreModule
    more_set_headers 'Server: my-server';


    Apache


    В веб сервере Apache содержимое заголовка Server настраивается с помощью ServerTokens
    По умолчанию используется значение Full. Показывается информация вида Apache/2.4.1 (Unix) PHP/4.2.2 MyMod/1.2
    Минимум, к которому можно свести – это Apache. С помощью mod_header пробовал сделать конфигурацию, аналогичную Nginx. Не получилось – Apache игнорирует настройки и продолжает упорно выставлять значение Server согласно ServerTokens и ServerSignature.
    Пришлось поставить mod_security и добавить в конфигурацию строку:
    SecServerSignature "gws"
    Заработало.

    G-WAN


    В случае с G-WAN конфига как такового не существует. Код на C в handler'е выглядит следующим образом:

    xbuf_xcat(get_reply(argv),
    "HTTP/1.1 200 OK\r\n"
    "Content-type: text/html\r\n"
    "Content-Length: 20\r\n"
    "Server: gws\r\n"
    "Connection: keep-alive\r\n\r\n"
    "Hello, World");

    // set the HTTP reply code
    int *pHTTP_status = (int*)get_env(argv, HTTP_CODE);
    if(pHTTP_status)
    *pHTTP_status = 200; // 200:OK
    return 2;


    Тонкости настройки G-WAN не являются темой данной статьи, поэтому в детали не вдаюсь.

    Замечания


    В данной статье рассмотрены те веб-сервера, с которыми я работаю, и для тестирования не нужно было отдельно инсталлировать ПО. Если по аналогии Вы настроите любой другой веб-сервер — пишите, дополню статью.
    Поделиться публикацией
    Похожие публикации
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 33
    • +2
      Попробовал, получилось. Спасибо, интересно!
      • +8
        ох сколько уже говорилось про security through obscurity… Про ложное чувство защищенности, про то, что подобные выкрутасы приносят больше головняка, чем профита. Но с завидной периодичностью возникают IS Rookies и пишут статьи как «сделать круто, бизипасна» путем сокрытия/подмены баннеров.
        Грустно все это.
        • –1
          Грустно или нет, но бесполезно в большинстве случаев точно.
          • 0
            дык о чем и речь.
            • 0
              Ну как же, знакомым «хацкерам» похвастаться)
            • +1
              Полезно было подменить имя сервера на IIS когда разыгрывали пивные бокалы от MS — вот тогда mod_security пригодился ))
            • 0
              С завидной периодичностью появляются и эксплоиты. Так какой смысл всем объявлять, под какой веб-сервер и под какую его версию искать эксплоит? Мало того, что по умолчанию включена полная информация в заголовке Server, так еще и нет в документации конкретных инструкций, как это отключить.
              А «круто, бизипасна» достигается не одним действием, а комплексом действий, в который по желанию можно включать и подмену Server.
              • +3
                Необходимо раз и навсегда уяснить, что сокрытие/подмена баннера не сделает сервер/сервис безопаснее. Ни на один процент. Но даст ложное ощущение безопасности и затруднит диагностику и сопровождение, если серверов много и ИТ-персонал — не один Вася в свитере в обнимку с парой серверов.
                Перебрать сканером вагон эксплойтов ничего не стоит, ни по времени, ни по ресурсам.
                • –2
                  >Ни на один процент.
                  Как померять процент?

                  >и затруднит диагностику и сопровождение
                  Как? Вы занимаетесь поддержкой серверов? Неужели ориентируетесь на заголовок Server? Не вижу никаких трудностей, связанных с этим.
                  • 0
                    Вопросы вида
                    Как померять процент?
                    и фразы
                    Не вижу никаких трудностей, связанных с этим.
                    собственно, и подтверждают ранг rookie (как и незнание нужных тегов).
                    Понимание придет, со временем. Из чужих уст оно не воспринимается, как правило, что мы и видим в данном посте.
                    • 0
                      собственно, и подтверждают ранг rookie (как и незнание нужных тегов).

                      Ага, особенно незнание нужных тегов.

                      Понимание придет, со временем. Из чужих уст оно не воспринимается, как правило, что мы и видим в данном посте.

                      Ушли от ответа, попутно обозначив собеседника rookie. Но главное, что теги нужные знаете. Похвально.
                      • 0
                        я уже дал ответы на вопросы, и продолжал бы их охотно давать, но ты не слушаешь, в чем смысл?
                        Ты вложил силы и время в то, что превратилось в топик, я прекрасно понимаю, почему ты не хочешь слышать ничего про то, что противоречит текущему состоянию твоих понятий о безопасности и защищенности. Это вполне нормально, у всех бывает такой этап, пожалуй. Rookie не я тебя обозначал, это просто констатация на основе простых фактов. Ничего обидного нет, даже наоборот, подумай над смыслом этого слова, можешь погуглить.
                  • 0
                    Ну давайте разберём:
                    — неправильное имя сервера (логичнее всего пытаться представиться совершенно другим реально существующим) отвлекает внимание потенциального хацкера (от профессионального взлома не защитит, там пойдут и fingerprint`ы в ход и прочие инструменты. Не защитит и от инструментального, если инструментарий тупо брутфорсит эксплоитами). ИМХО — это профит. Ну и увеличение времени на взлом (внимание-то будет отвлечено) — тоже профит.
                    — не надо ложных надежд — кому сильно надо, сломают любой уровень безопасности. Вопрос только в ресурсах необходимых для этого. В этом плане ни один уровень защиты не даёт защиту, они просто отсеивают очередной виток потенциальных нарушителей.

                    в чём я не прав?
                    и вдогонку: чем это затруднит диагностику и сопровождение?
                    • 0
                      Перечитай коммент, на который отвечаешь. Там есть ответы на все твои вопросы.
                      • 0
                        В том и дело — там мнение, а не ответ, взвешенный и обдуманный со всех сторон.

                        Ложное ощущение защищённости складывается только из непонимания ситуации и не более того.
                        • 0
                          За взвешенными ответами рекомендую проследовать в энциклопедию. В комментах на хабре (и подобных тусовках) кроме мнений ты ничего не найдешь, т.к. каждый взвешенный коммент будет размером с топик примерно (в противном случае он получится однобоким и не объективным). Такие комменты-топики попадаются, впрочем, можешь понаблюдать.
                          Необходимо учиться извлекать факты из мнений, а не кушать готовые ответы. Строить свое мнение.
                          Кроме того, например в риторике-софистике никогда не существует окончательного ответа, есть всего лишь противостояние мнений, побеждает тот, кто эффективнее способен убедить читателя (или даже соперника) в своей правоте, а отнюдь не тот, кто прав на самом деле.
                          • 0
                            Не представляю себе энциклопедии, содержащей данный материал.

                            Суть проблемы в том, что вы пытаетесь навязать своё мнение («Необходимо раз и навсегда уяснить»), но при этом не даёт даже отсылки на материал, который подтверждает оное. На уточняющие вопросы — так же не отвечаете (согласитесь, труд ответить на мой комментарий в вашем стиле и в стиле ссылка где почитать практически одинаков).
                            • 0
                              Мда, с хабра тебя не пускают во внешние инторнеты?
                              А меж тем на дворе 2012 год, информация стала более лучше доступна, овощи, там, рожь, это вот всё…
                              Почитай документы NIST, почитай ITIL Red Book, ISO 27001+27002, ну и так далее.
                              • 0
                                внешние энторнеты — они таки внешние, не всегда есть возможность что-то поискать (на грамотный поиск тоже нужно время, да и в теме желательно несколько разбираться, в противном случае найдёшь лишь подтверждение своим догадкам), да и результат будет разный у человека, который хочет что-то доказать и у человека, который хочет что-то изучить.

                                Спасибо за ссылки.
              • 0
                Полезно было научить астериск прикидываться тупой железкой:) Некоторые проввайдеры доставляли…
                • 0
                  А вы читали лицензионное соглашение, например, к серверу Apache HTTPD?

                  А там прямо написано, что хотя бы Server: Apache в заголовках ответа быть должно (по крайней мере, было написано для 1.3, как сейчас — не уверен, но вряд ли изменилось). Можно больше, но никак не меньше. Короче, уважаемый, вы так нарушаете условия использования сервера ;) За бесплатность вы должны платить, например, вот так.

                  • 0
                    В статье нет призыва, нарушать или не нарушать. Есть метод, а пользоваться или нет — дело ваше.
                  • +1
                    > На мой взгляд, это потенциальная прореха в безопасности.

                    Я так понимаю предполагается что кулхацкер зная версию вашего ПО и уязвимости в данной конкретной версии сможет ими воспользоваться?
                    Не проще ли озаботиться обновлением собственно версии ПО (все вэб-серверы которые вы перечислили более-менее активно развиваются), в которой устраняются указанные неисправности?

                    П.С. Хотя наверно после перекомпиляции вэб-серверов из сорцов либо установки всех модулей действо с обновление для вас перестает быть тривиальным…

                    • 0
                      >Не проще ли озаботиться обновлением собственно версии ПО (все вэб-серверы которые вы перечислили более-менее активно развиваются), в которой устраняются указанные неисправности?

                      Это вещи не взаимозаменяемые. Никто не мешает обновляться с двумя дополнительными строчками в конфиге, подменяющими Server.

                      >П.С. Хотя наверно после перекомпиляции вэб-серверов из сорцов либо установки всех модулей действо с обновление для вас перестает быть тривиальным…

                      Не совсем понял, что вы хотите сказать. В статье как раз расказано, как изменить Server без перекомпиляции, хотя в сети бытует мнение, что для этого она обязательно нужна.
                      • 0
                        Эмм, а ничего что для HttpHeadersMoreModule как бы?

                        ngx_headers_more — Set and clear input and output headers...more than «add»!
                        This module is not distributed with the Nginx source
                        • 0
                          Прошу прощения, не обратил внимания. Тестировал на фре, там при установке из портов все равно компилить приходится. Я этот модуль себе включил.
                        • 0
                          Мысль сводилась к тому что вместо того чтобы скрывать — правильнее устранять. Поскольку скрыв вы ничего не устраняете, а устранив вам незачем особо скрывать (при условии оперативности обновлений). Если у вас есть время и на то и на другое, думаю вы просто мало загружены :)

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

                      • 0
                        Для nginx есть опция малой параноидальности, — server_tokens.

                        И, скорее всего, также сработает add_header, который есть по умолчанию.

                        • +1
                          И, скорее всего, также сработает add_header, который есть по умолчанию.

                          Если воспользоваться просто add_header, предварительно не удалив существующее значение, то в ответ получите два заголовка:
                          Server: nginx
                          Server: gws
                          Server Spy покажет их значения через запятую. Проверено.
                          • 0
                            И, кстати, вот ссылка на интересную дискуссию по этой теме.
                          • 0
                            Такое «одурачивание», конечно, лишним не будет. Но оно должно быть последним (по приоритетам) приемом в обеспечении безопасности Вашего сервера. Иначе Ваш совет выглядит как: «носите свитер похожий на бронежилет и Вас, возможно, не застрелят».
                            • 0
                              Я ничего не советую. Я показал, что подмену Server можно сделать на перечисленных веб-серверах без перекомпиляции (в комментах уже выяснили, что в nginx модуль нужно вкомпилить, но сорцы править не надо).
                              • –1
                                отличная аналогия, возьму на вооружение ) Просто великолепно.

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

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