The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Yandex опубликовал статический анализатор файлов конфигурации nginx

11.05.2017 22:35

Компания Яндекс опубликовала исходные тексты проекта Gixy, в рамках которого развивается статический анализатор, предназначенный для выявления проблемных настроек в файлах конфигурации nginx, которые могут отрицательно повлиять на безопасность. Код написан на языке Python и распространяется под лицензией MPL 2.0.

В настоящее время Gixy включает следующие плагины, выявляющие различные классы проблем:

  • ssrf - выявляет уязвимость Server Side Request Forgery, позволяющую выполнять различного рода запросы от имени Nginx. Проблема возникает, когда атакующий может контролировать адрес проксируемого сервера (второй аргумент директивы proxy_pass);
  • http_splitting - выявляет уязвимость HTTP Splitting, возникающую из-за неправильной обработки входных данных. Уязвимость может применяться для атак на приложение стоящее за Nginx (HTTP Request Splitting) или на клиентов приложения (HTTP Response Splitting).
  • origins - выявляет проблемы с проверкой заголовка запроса Referer или Origin, обычно возникающие из-за некорректного составления регулярного выражения;
  • add_header_redefinition - выявляет проблемы с переопределением "вышестоящих" заголовков ответа директивой "add_header";
  • host_spoofing - определяет возможность подмены заголовка запроса Host;
  • valid_referers - выявляет проблемы при конфигурировании модуля ngx_http_referer_module, вызванные использованием "none" в качестве принимаемого значения заголовка Referer;
  • add_header_multiline - определяет факты использования многострочных заголовков ответа.


  1. Главная ссылка к новости (https://news.ycombinator.com/i...)
  2. OpenNews: Компания Яндекс подготовила собственную прошивку на базе платформы Android
  3. OpenNews: Яндекс начал формирование коллекции своих открытых проектов
  4. OpenNews: Яндекс подготовил репозиторий пакетов для распространения своих Linux-программ
  5. OpenNews: Опубликованы исходные тексты Яндекс-клиента для мгновенного обмена сообщениями
  6. OpenNews: Yandex выпустил браузер на основе Chromium
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/46535-nginx
Ключевые слова: nginx
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (43) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Andrey_Karpov (ok), 23:18, 11/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Статический анализ, статический анализ везде....

    Методология растёт и ширится. И это неизбежно. Сложность и размер программных проектов растёт и чем дальше, тем сложнее будет обходиться без вспомогательных средств статического анализа. Просто невозможно уже всё знать, помнить и иметь возможность просмотреть.

     
     
  • 2.4, Анонистый калий (?), 23:27, 11/05/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А вы почему раньше Яндекса ничего не сделали?
     
     
  • 3.6, Sw00p aka Jerom (?), 02:04, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Потому-что внимательно читает документацию по настройке нгинкса.
    И описанные аля мисконфигурейшен не страшен локалхостам с дефолтовым конфигом, просто складывается такое ощущение, что в яндексе криворукие нгинкс админы, вот и написали этот анализатор, а написали - ИБешники, как я понял.


     
     
  • 4.14, Аноним (-), 07:15, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >в яндексе криворукие нгинкс админы

    Yandex распался несколько лет назад. Многие крутые дяди (и тети), которые там работали с начала 2000х разошлись в разные стороны. А современный Yandex это уровень студентов и школоты. Доказательства этому будут все чаще и чаще появляться.

    Ах да, криворукие у них не только админы. Удивил HR с психическим расстройством. Были все признаки панической атаки, когда не дал ему ответ в течении нескольких дней.

     
     
  • 5.17, тигар (ok), 09:05, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >>в яндексе криворукие нгинкс админы
    > Yandex распался несколько лет назад. Многие крутые дяди (и тети), которые там
    > работали с начала 2000х разошлись в разные стороны. А современный Yandex
    > это уровень студентов и школоты. Доказательства этому будут все чаще и
    > чаще появляться.

    ну потому там и мигрировали на *бунту ;-)

     
     
  • 6.20, Аноним (-), 09:36, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    У тебя комплекс неполноценности.
     
     
  • 7.22, тигар (ok), 09:47, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > У тебя комплекс неполноценности.

    обоснуй;)

     
  • 6.31, Аноним (-), 18:33, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ну да, а во фрю коммитят чисто из альтруистических соображений code commit fe... большой текст свёрнут, показать
     
     
  • 7.32, тигар (ok), 18:53, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >> ну потому там и мигрировали на *бунту ;-)
    > Ну да, а во фрю коммитят чисто из альтруистических соображений:
    >


    > commit fed97f3094ee0c71bc2ae864dce888257108122c
    > Author: ae <ae@FreeBSD.org>

    ..
    >

    ну не нужно путать NOCов и проектных админов. Вменяемые проектные закончились - набрали убунтоголовых и как-то живут.
    Закончится ae@ (и еще 1 товарищ) в ноках - наймут цискоголовых убунтоводов - мигрируют и там.
    p.s. до этого еще melifaro@ был там же где и ae@. был.

     
     
  • 8.35, пох (?), 19:55, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    если присмотреться к патчам - там далеко не один ae - просто не всем дано напря... текст свёрнут, показать
     
     
  • 9.36, тигар (ok), 21:37, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    речь выше шла о конкретной компании и там реально мало кого осталось с коммит-б... текст свёрнут, показать
     
     
  • 10.42, пох (?), 00:22, 14/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    работать приходится, да, а не развивать опенсорсе в рабочее время, кризис гово... текст свёрнут, показать
     
  • 4.19, пох (?), 09:35, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Потому-что внимательно читает документацию

    чтение документации совершенно не помогает от ошибок.

    > И описанные аля мисконфигурейшен не страшен локалхостам с дефолтовым конфигом

    и с недефолтным тоже. Это верно. В трех недефолтных строках очень сложно ошибиться.

    Пока конфиг можно прочитать, пару раз нажав pg-dn, ошибки в нем бывают в основном те, которые nginx -t покажет. А когда он громадный, потому что система, ну надо же, посложнее твоего локалхоста не в разы, а на пару порядков - то очень быстро превращается в очень запутанный ком спагетти. Там и собственно структура конфига весьма этому помогает, но в первую очередь - сложность задачи, которая очень маловероятно имеет простые решения.
    И оно именно что может работать, до определенного момента, вылезая в каких-то специфических случаях, которые не так просто или совсем нельзя протестировать "вживую".

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

    P.S. напишите уже кто-нибудь анализатор конфигов asterisk, 1.4-style хотя бы. Без lua ;-)

     
     
  • 5.24, PnDx (ok), 13:56, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    "анализатор конфигов asterisk"
    Если Вы про диалплан, то рассматривать/работать с ним, как с конфигом — фатальная ошибка. Последствия которой я изредка разбираю, делая терпилам разбор слива через какой-нибудь freepbx|asterisknow.
    У себя в профильной конторе я делал по этому поводу ORM, открытая часть выложена в районе https://github.com/ds-voix/VX-PBX/tree/master/UPSERT https://github.com/ds-voix/VX-PBX/tree/master/VX
    ("Закрытая" часть содержит ряд известных ошибок и (до их исправления) на github публиковаться не будет.)
     
     
  • 6.26, пох (?), 14:15, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > "анализатор конфигов asterisk"
    > Если Вы про диалплан, то рассматривать/работать с ним, как с конфигом —
    > фатальная ошибка.

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

    > У себя в профильной конторе я делал по этому поводу ORM, открытая

    ну, может для профильной конторы это и метод (а кто будет писать анализатор уже теперь исходного формата? ;-)

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

     
  • 5.30, Sw00p aka Jerom (?), 17:20, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >>чтение документации совершенно не помогает от ошибок.

    http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_set_header

    Внимательное чтение этого уже защитит от спуфинга Host заголовка

    >>то очень быстро превращается в очень запутанный ком спагетти.

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

     
     
  • 6.33, пох (?), 19:39, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Внимательное чтение этого уже защитит от спуфинга Host заголовка

    осспди... вы вообще конфиги нетривиальных систем-то видели хоть по телевизору?
    (я уж молчу, что "от спуфинга хост заголовка" в принципе ничего не защитит, не надо ему доверять вообще, если ты его не сам только что установил - но это генитальным программистам еще надо суметь разжевать)

    >>>то очень быстро превращается в очень запутанный ком спагетти.
    > какой ком ? какой спагетти код ? программировать на конфигах нгинкса не

    в общем, админ локалхоста детeктед.

    > нужно, не нужна на нём никакая логика вынесенная из контроллеров приложения.

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

    P.S. интересно, среди чудо-скриптов есть скрипт проверки на "квадратик" ?

     
     
  • 7.37, Аноним (-), 22:26, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > вы вообще конфиги нетривиальных систем-то видели

    Я (другой аноним) не видел. Можете показать примерчик, чтоб понимать, о чём речь?

     
     
  • 8.40, Sw00p aka Jerom (?), 01:00, 13/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    список рассылки нгинкса вам в помощь там куча нетривиальных конфигов, иногда ... текст свёрнут, показать
     
     
  • 9.45, пох (?), 10:24, 14/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    я что-то очень сомневаюсь, что вы там увидите хоть один кусок конфига крупных пр... текст свёрнут, показать
     
  • 8.43, пох (?), 00:41, 14/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    не, не могу - даже если б унес на память, там потроха конкурента яндекса, унылые... текст свёрнут, показать
     
  • 7.39, Sw00p aka Jerom (?), 00:54, 13/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >>осспди... вы вообще конфиги нетривиальных систем-то видели хоть по телевизору?

    хех с основания нгинкса вижу )) ток они не содержат логику приложений

    >>не надо ему доверять вообще,

    в принципе суть в том, что реальный "пряморукий" админ нгинкса должен знать рфс протокола ХТТП, а если он знает - зачем какой-то ещё анализатор ))

    >>в общем, админ локалхоста детeктед.

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

    >>вас не будут в яндексе спрашивать, что нужно, а что не нужно.

    всё правильно, так и есть - главное чтобы работало, вот и бесятся ИБ-ешники яндекса от таких админов и проггеров, решили написать скрипт для "статического анализа" ))))))))


    >>И ни в одном более-менее крупном проекте тоже не будут, это не яндекс такой плохой.

    я кстате не говорил, что яндекс плохой. Я предположил, что у них на столько криворукие нгинкс админы, что ИБ-ешники, которые замучались от их косяков, решили написать "анализатор"

    >>Некоторые, не будем показывать пальцем, еще и на lua туда писают.

    АГА )))) эт уже другая тема )) ждём ещё статического анализатора для lua, js, perl и тд ))


    >>P.S. интересно, среди чудо-скриптов есть скрипт проверки на "квадратик" ?

    ???

     
  • 3.18, anonymous (??), 09:24, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > А вы почему раньше Яндекса ничего не сделали?

    Потому что опенсорс живёт по принципу DIY (do it yourself). Вот новичок боится запутаться в конфигах и думает "хорошо бы написать утилиту для проверки конфигов на типичные ошибки". Садиться писать. В процессе изучает все детали конфигурации и способы настройки. Потом понимает, что можно не продолжать написание инструмента - ему он уже не нужен.

     
  • 2.12, Vkni (ok), 06:05, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Только использовать для этого Питон - это надо себя сильно не любить. У вас там ведь весь код анализатора, скорее всего, сплошь из ветвлений. На Питоне их нужно все проверять. :-)
     
     
  • 3.41, Sw00p aka Jerom (?), 01:04, 13/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Только использовать для этого Питон - это надо себя сильно не любить.
    > У вас там ведь весь код анализатора, скорее всего, сплошь из
    > ветвлений. На Питоне их нужно все проверять. :-)

    так говорю же эт тока ИБ-ещники так любят питон, вот и накалякали анализатор на коленке )

     

  • 1.2, kai3341 (ok), 23:21, 11/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    ммм, NGINX-Studio
     
     
  • 2.3, Andrey_Karpov (ok), 23:26, 11/05/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Между прочим, масса ниш ещё не занято. Выбирай и делай. И анализаторы потихоньку пишут, кто для Ada, кто для 1C. Тренд (хотя конечно маленький в сравнении, скажем, с играми для телефонов).
     
     
  • 3.5, kai3341 (ok), 23:39, 11/05/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Техническая сингулярность всё ближе. Вокруг куча способов прострелить себе ногу.
    Я имел короткий опыт разработки на JavaScript. Из-за автоматического приведения типов заведомо ошибочный код работал. И самое страшное, что работал правильно. Но при этом код совсем не соответствовал спецификации.
    Ошибаться больно. Мне повезло, что ошибку я заметил сразу, отладка могла растянуться на недели
     
     
  • 4.8, Аноним (-), 05:17, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Да еще вспомнити npm leftpad...
     
  • 3.13, Vkni (ok), 06:08, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Между прочим, масса ниш ещё не занято.

    Да. Только сложно, извините, поляну не испоганить. В науке, к которой OSS по своим свойствам близок, есть такое понятие. Это когда один кадр берётся за задачу, довольно криво и плохо её решает. И, с одной стороны, решения нет, а с другой стороны, делать правильное - это выступать в роли дворника.

     

  • 1.7, Аноним (-), 02:22, 12/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    хорошо было бы вдобавок выпустить анализатор кода анализатора файлов конфигурации nginx. вдруг в нём самом ошибка и он неверно толкует конфигурацию nginx? ведь в конфигурации nginx полно можно мест найти что вызывают сомнения - с виду работают, но не корректно. к примеру add_header и proxy_pass_header (и другие подобные) - для сервера целиком, для пути и т.п при использовании mod_proxy.
     
  • 1.10, Аноним (-), 05:59, 12/05/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Проверил. Ошибок нет. Непонятно, то ли конфиги хорошие, то ли тулза плохая...
     
     
  • 2.16, Аноним (-), 09:02, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Просто тулза - не панацея. В статье описано, что она проверяет. Неправильно сконфигурированный location под php или случаи, когда ты думаешь, что запрос придётся на один location, а он приходится на другой этот анализатор не выявит. А эти ошибки случаются куда чаще.
     
     
  • 3.21, пох (?), 09:40, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Просто тулза - не панацея. В статье описано, что она проверяет. Неправильно
    > сконфигурированный location под php или случаи, когда ты думаешь, что запрос

    зависит от того, что такое "неправильный". Не так заполняет переменные - не выявит, конечно.
    > придётся на один location, а он приходится на другой этот анализатор
    > не выявит. А эти ошибки случаются куда чаще.

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

     
     
  • 4.23, Аноним (-), 13:49, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну или писать полный парсер регексов

    Ты каждый раз, когда тебе нужны регексы, пишешь свой парсер?

     
     
  • 5.25, пох (?), 14:01, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Ты каждый раз, когда тебе нужны регексы, пишешь свой парсер?

    Тебе в данном случае нужны не регексы в общем виде, а _проверка_ что написанное совпадает с желаемым (и с учетом остального конфига). Так что да, придется именно свой - regex предназначена чтоб скрыть от разработчика ненужные детали, а тебе их наоборот анализировать надо.

    Занятие представляющееся мне унылым до чрезвычайности.

     
     
  • 6.27, Аноним (-), 14:58, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > _проверка_ что написанное совпадает с желаемым

    libpcre + libastral решат проблему. Правда лицензия на libastral дороговата, но как без неё — я не представляю.

     
     
  • 7.28, пох (?), 16:34, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    еще раз, медленно: pcre не помогает анализировать регексы, совсем.
    Так же как си-компилятор не помогает анализировать сишный код.

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

     
     
  • 8.29, Аноним (-), 16:41, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    А что в них анализировать-то, в регексах Ну, допустим, можно отсеять регексы, к... текст свёрнут, показать
     
     
  • 9.34, пох (?), 19:48, 12/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    для начала, как обычно - typical human error, когда написано одно, а подразумева... текст свёрнут, показать
     
     
  • 10.38, Аноним (-), 00:21, 13/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Вот я и спрашиваю, что это за ошибки такие могут быть, что их можно отловить без... текст свёрнут, показать
     
     
  • 11.44, пох (?), 00:59, 14/05/2017 [^] [^^] [^^^] [ответить]  
  • +/
    я ж говорю - я, слава Аллаху, не девоп, мои ошибки могут быть нереферрентными Н... текст свёрнут, показать
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру