«Компилятору не место на боевом сервере» ‒ истина или предрассудок?
Недавно мой собеседник на Хабре при обсуждении некоего вопроса как бы между прочим обмолвился о том, что компилятор с тулчейном следует удалять с продакшн-серверов из соображений безопасности. Я не стал тогда ему возражать, но много с тех пор размышлял на эту тему и, честно говоря, мне так и не пришло в голову, в чём конкретно эти соображения могут заключаться.
Обобщённо говоря, в gcc, ld, as, make и прочих инструментах нет такого кода, который можно было бы эксплуатировать для повышения привилегий; эти функции там не нужны. Если же у злоумышленника уже есть лишние права или способ их поднять, то неважно, как именно он доставит эксплойт на машину-жертву: в виде текста или готового бинарника.
Подходя к вопросу с другой стороны, я не припомню ни одного массового эксплойта, который был бы основан на уязвимости компилятора. Ну, и ещё мне как-то трудно представить безопасный сервер на Gentoo или FreeBSD, на котором не было бы компилятора.
Разумеется, мой кругозор в области инфобеза весьма ограничен, поэтому обращаюсь к коллективному разуму. Может ли удаление компилятора из инсталляции UNIX-подобного или Linux-сервера повысить безопасность, и если да, то каким именно образом? И если есть какие-то исторические прецеденты, которые сейчас неактуальны, то было бы очень интересно узнать о них.
Вы правы.
Компилятор не является способом получения удаленного доступа.
Основные способы - ошибки в ftp, ssh, smtp, web сервера, интерпретатора либо слабые пароли.
наличие компилятора - просто дополнительное облегчение для взломщика.
Пример. Допустим, на сервере живет хостинг. И на одном из сайтов обнаружилась дырочка, позволяющая заливать файлы. И предположим у взломщика есть описание уязвимости, имеющейся на сервере. Для того, чтобы ей воспользоваться - надо собрать код, запустить бинарник и радоваться )
Так вот, проще загрузить исходник, собрать его на месте, и запустить. Бинарник залить тоже можно, но надо соблюсти архитектуру, версии библиотек, ядра... А загружать кроме исходника трояна еще и тулчейн по его сборке....
Мне кажется, это как-то надуманно. Эксплойт ‒ это же не какой-нибудь навороченный комбайн с кучей зависимостей. Единственная динамическая библиотека, которая ему может понадобиться, кроме glibc ‒ это, собственно, таргетная уязвимость. А всё остальное можно и нужно встроить в него статически. Остаётся предусмотреть по версии бинарника для каждой уязвимой архитектуры. А это значит, что бинарников будет, скорее всего, два: для x86 и amd64, либо вообще один. Это всё в том редком случае, если эксплойт обязан быть бинарником, а не скриптом на bash, php или python. Получается, что компилятор на атакуемой машине может облегчить взлом в таком ничтожном количестве случаев, что взломщику проще на него вообще никогда не рассчитывать.
Японский Городовой: можете пояснить, в какой ситуации необходимо эти действия кодить именно на C? Чем скрипт на Perl/awk/Python/shell хуже? Мне в голову приходят только микроконтроллеры и embedded решения.
Валерий Рябошапко: конкретно по тем скриптам - на сях быстрей и проще, нежели на баше + кое-какие вещи на баше вообще не сделать (например, рисование по экрану).
Еще на сях у меня все вычислялки, CGI и прочие демоны. Естественно, МК туда же.
Смысл учить 100500 ЯП, если одного С за глаза на все хватает (правда, для веба еще жабоскрипт надо знать, а для верстки — латех).
Японский Городовой: рисование по экрану, CGI, демоны — это прекрасно пишется на Python. Многие вычислялки (хотя, конечно, не все) тоже прекрасно на нём пишутся и хорошо вычисляются. И код гораздо лаконичнее и читабельнее получается. Хотя да, это уже спор о вкусах. Спасибо за Ваше мнение.
В контексте той дискуссии отсутствие компилятора само по себе не было бредом. Метод состоял в том, чтобы всё, то есть буквально всё: утилиты-рисовалки, CGI-скрипты, конфигурации сайтов и т. д. − доставлять на сервер только с помощью пакетной системы данного дистрибутива. Я сейчас думаю, что здравое зерно в этом подходе есть, мне только один аргумент показался подозрительным; про него и вопрос.
Валерий Рябошапко: мне нафиг не сдался питон, когда есть С! И уж тем паче для вычислялок. Хуже питона я видел разве что жабку. Джок Таннер: можно и бинари переносить, но тогда нужно где-то иметь идеальную копию системы, где их собирать.