Все любят shell-скрипты! Неудивительно, что в большинстве продуктов безопасности для Linux они используются повсеместно. В большинстве случаев их проще разрабатывать по сравнению с программами на C/C++, поскольку нет проблем с компиляцией и их легко прототипировать.
Однако, помимо бесконечного количества вариантов применения, скрипты оболочки таят в себе множество скрытых опасностей в плане безопасности — это часто упускается из виду при написании скриптов оболочки.
Например, рассмотрим скрипт оболочки, который просто использует команду ping для проверки соединения между двумя хостами.
#! / Bin / Баш
пинг –c1 «$1»
В данном случае $1 — это входные данные, которые могут быть получены из CGI-кода или другого скрипта. Если входные данные не прошли надлежащую проверку, хакер может легко воспользоваться подменой команд.
ping –c1 «8.8.8.8 && команда»
В этом примере скрипт оболочки будет обрабатывать аргументы, переданные пинг как отдельная команда при выполнении. Однако существует несколько других способов добиться такой замены команд.
ping –c1 «8.8.8.8`команда`»
пинг –c1 8.8.8.8|команду
ping –c1 8.8.8.8; команда
В большинстве продуктов безопасности на уровне шлюза, таких как Единое управление угрозами (UTM)Межсетевые экраны предоставляют порталы для конечных пользователей. Порталы обеспечивают доступ ко многим сервисам, включая загрузку инструментов удалённого доступа, извлечение писем из карантина, изменение пользовательских настроек и т. д.
Эти службы ожидают определенную форму ввода данных пользователем и могут вызывать сценарий оболочки в бэкэнде программного продукта.
Благодаря таким эксплойтам злоумышленник может получить права root для удалённого выполнения команд на уязвимом устройстве, отправляя вредоносные данные. Получив доступ к уязвимому устройству, злоумышленник может проникнуть в сеть организации.
Несмотря на то, что вводимые пользователем данные в большинстве случаев проверяются, всегда существует вероятность того, что некоторые проверки могут время от времени отсутствовать.
Эта атака с заменой команд также известна как «удалённое выполнение команд до аутентификации», поскольку злоумышленник может запустить эту уязвимость без каких-либо действительных учетных данных.
Совсем недавно этот недостаток был обнаружен в брандмауэре известного бренда.
In Seqrite UTM, мы уделяем особое внимание таким областям в процессе разработки, чтобы сделать устройства неуязвимыми для столь распространенных уязвимостей.
Ниже приведены некоторые рекомендации по написанию безопасных сценариев оболочки:
- Используйте абсолютные или относительные пути для команд, используемых в скриптах.
- Установите правильные значения переменной PATH в скриптах.
- Используйте правильные кавычки для переменных, передаваемых в качестве аргументов.



