Безопасно ли для производственного сервера устанавливать make?

42

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

У меня также есть gccкомпилятор на сервере, который я использую для создания приложений перед развертыванием.

SK»
источник
4
Если вам становится легче, любое программное обеспечение, установленное где-либо, создает уязвимость.
MDMoore313
1
И тот, кто имеет доступ к серверу без
1
Это я или комбинация "это безопасно?" а "рут доступ" довольно неудобный ?
ДНК
2
Если у вас уже есть установленный gcc, make практически не может усугубить потенциальную проблему безопасности.
Шадур
1
@Shadur Какая разница, что делает GCC? Если пользователь уже имеет доступ к машине, он может загрузить любую копию gcc тривиально. В любом случае, gcc может быть полезен для непривилегированных пользователей и не представлять угрозы безопасности, если его не запускают никакие привилегированные пользователи.
Vality

Ответы:

50

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

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

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

  • Пакет может содержать исполняемый файл suid или sgid.
  • Пакет может запускать службы в системе.
  • Пакет может устанавливать сценарии, которые вызываются автоматически при определенных обстоятельствах (это включает в себя задания cron, но сценарии могут вызываться другими событиями, например, когда изменяется состояние сетевого интерфейса или когда пользователь входит в систему).
  • Пакет может установить inode устройства.

Я не ожидал бы, что инструменты разработки будут соответствовать одному из вышеперечисленных, и, как таковой, это не пакет высокого риска.

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

Если вы обнаружите, что вам не нужны эти инструменты на сервере, вам следует воздерживаться от их установки по нескольким причинам:

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

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

kasperd
источник
6
Я хотел бы добавить к этому, что некоторые производственные системы полагаются на интерпретируемый код (например, PHP, Perl, Python, ...). Запрещать инструменты разработки в этом контексте не имеет смысла. Я бы посоветовал компиляторам gccне представлять более высокий риск, чем эти. Как вы говорите, злоумышленник, имеющий возможность использовать компиляторы, установленные в системе, обычно в любом случае может делать худшие вещи, такие как загрузка собственного (возможно, статически связанного) исполняемого файла.
Бруно
3
Соответствующий: крошечная версия wget (51 байт?) . Пример из реальной жизни, когда злоумышленник перемещает двоичный файл на сервер, используя последующие echoоператоры в файл. Весь процесс автоматизирован с помощью скрипта, найденного по той же ссылке.
Ади
2
@ Аднан, интересно. Насколько я могу судить, главный недостаток безопасности в этом примере DVR заключается в том, что злоумышленник может сначала подключиться к нему с правами root с паролем 123456. Наличие или отсутствие wget или других инструментов (перед атакой) в действительности едва уместно.
Бруно,
15

makeпредставляет собой оболочку , которая имеет другой синтаксис , чем bash.

Подобный компилятор gcc- это мощная awkконфигурация с набором замен, которые стандарт awkне поддерживает. Это не POSIX-совместимый sortили catвводит мусор в вывод. Это интерактивный текстовый редактор (думаю vi), который настроен на редактирование при запуске, а затем выход перед отображением пользовательского интерфейса.

В них нет ничего небезопасного, они не делают вашу машину более небезопасной, чем та, где у вас есть catперенаправление оболочки bash + +.

обманчивая надежда
источник
2
Ответ дзен, я не знаю, как это оценить.
Касперд
4
@kasperd Этот ответ должен быть серьезным. Я думал, что привлечение точки зрения программиста может быть полезным. Функция, которая переводит входные данные в выходные, не создает уязвимости только потому, что ее выходные данные представлены в формате, понятном для процессора.
ignis
1
Я согласен с тем, что вы делаете. Я думаю, что ваш ответ отлично подходит для тех, кто уже согласен с этим. Я просто беспокоюсь, что ваш ответ может показаться шуткой тому, кто с ним не согласен.
Касперд
Мне нравится этот ответ намного больше, чем принятый :)
Руслан
15

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

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

Примечание: родная упаковка инструментов отстой . Даже не пытайтесь их обмануть. Вместо этого проверьте Джордана Сиссела fpm. Это делает упаковку абсолютной радостью.

EEAA
источник
8
Я спрашиваю здесь из любопытства и невежества: почему вы говорите, что наличие компиляторов является «существенной проблемой безопасности»? В чем проблема безопасности с установленным компилятором? Вы просто не должны в первую очередь создавать свой код на рабочем сервере, и поэтому компилятор излишен, или на самом деле существует серьезная проблема безопасности с наличием самого компилятора?
Рейраб
11
Хотя создание приложений на отдельном сервере - хорошая идея, заявить, что наличие компиляторов в производственной системе является серьезной проблемой безопасности, не имеет смысла. А как насчет языков сценариев и JIT-скомпилированных систем (Perl, Python, Java, ...)?
Бруно
3
Наличие компиляторов в производственной среде не является «существенным риском для безопасности». Я сам переместил двоичные файлы в скомпрометированные ящики, используя echoи base64. На самом деле, вы даже можете сделать это с помощью ряда echoутверждений и без какого-либо другого инструмента .
Ади
1
Хорошие моменты, все. Я отредактировал свой ответ, чтобы уточнить.
EEAA
9

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

Джон
источник
4

Вы спрашиваете, makeдолжен ли он быть установлен на производственном сервере, но мой реальный вопрос будет таким: у кого есть доступ к этому производственному серверу и какие у вас есть меры безопасности для борьбы с вторжением? Если makeне был установлен, но кто-то получить rootдоступ, угадайте, что? Их можно установить вручную makeи все, что угодно.

Суровая реальность компьютерной безопасности настолько важна, насколько вы хотите предотвратить нежелательный доступ, поэтому одержимость блокированием доступа не так важна, как:

  1. У кого есть доступ к серверу?
  2. Что вы можете сделать, чтобы откатиться после взлома?

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

JakeGould
источник
1

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

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

Ложка
источник