LLM предлагает shell-команду: как ограничить исполнение
Предпочитайте узкие операции с фиксированными аргументами произвольной командной строке. Проверять намерение модели полезно, но окончательные ограничения файлов, сети и процесса должны действовать вне неё.
Где появляется ошибка
Помощник должен конвертировать загруженный файл. Он строит строку для shell из имени файла, которое пришло от пользователя. Необычное имя меняет смысл команды, и программа выполняет действие, не связанное с конвертацией. Даже без специальной инъекции агент может предложить команду с широким шаблоном удаления или неверным рабочим каталогом. Разрешение «работать с файлом» не означает доступ ко всей машине.
Рабочее решение
Вызывайте конкретную программу через безопасный интерфейс аргументов, когда это возможно, без интерпретации shell. Ограничьте каталог, права процесса, сеть и время исполнения. Проверяйте разрешённые типы операций и допустимость путей, а не только наличие опасного символа. Для удаления и публикации требуются дополнительные бизнес-ограничения. Если shell действительно необходим, изоляция и контроль становятся важнее: нельзя обещать безопасность исключительно на основании списка запрещённых слов.
Контрольные случаи
| Проверка | Ожидаемое поведение |
|---|---|
| Имя файла содержит пробелы и специальные символы | Оно остаётся одним значением аргумента и не превращается в дополнительную команду. |
| Путь указывает за пределы разрешённого каталога | Операция отклоняется до чтения или изменения чужого файла; права процесса тоже ограничивают ущерб. |
| Конвертер зависает или создаёт слишком большой результат | Процесс остановлен по лимитам, временные ресурсы учтены, приложение сообщает понятный отказ. |
Перед разрешением команды фиксируйте рабочий каталог и действующего пользователя процесса. Одинаковая строка может иметь разный эффект в тестовой папке и каталоге с рабочими данными приложения.
Отсутствие shell не устраняет уязвимости самой запускаемой программы. Ей по-прежнему нужны обновления, ограничения ресурсов и изоляция при обработке недоверенных файлов.
При построении агентов безопасность определяется не красотой команды, а границами того, что реально сможет сделать исполнитель. В платном курсе LLM Security PRO: Prompt Injection, утечки, tool-abuse можно продолжить изучение соответствующего инженерного направления. Перед покупкой сравните программу и открытые материалы со своей задачей.
Документация для проверки технических деталей: OWASP: защита от командных инъекций.
Следующий шаг: Безопасность LLM-приложений: практические проверки. По смежным вопросам: HTML из ответа LLM: как не превратить чат в XSS, Память AI-агента: как не сохранить чужую команду навсегда.
