Автоматически расшифровывать и запускать зашифрованный сценарий bash без сохранения расшифрованного файла в файловой системе.

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

  1. скрипт должен быть запущен как root
  2. сценарию должны быть переданы определенные аргументы командной строки для получения любого вывода
  3. script был закодирован компилятором оболочки "shc" для скрыть факты № 1 и № 2 от обычных пользователей (тех, кто не знает, как использовать TRACE или STRINGS для просмотра фактического кода).

Чтобы затем добавить уровень реальной безопасности для защиты более продвинутых пользователей и системных администраторов, я также зашифровал скрипт с помощью gpg.

Мой вопрос: есть ли команда gpg (или другой метод шифрования), которую я мог бы запустить, которая запрашивает парольную фразу для дешифрования, расшифровывает скрипт и запускает его только в памяти (без сохранения расшифрованной версии файла в файловой системе). )?

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


person user1880028    schedule 01.02.2013    source источник
comment
Создайте небольшой виртуальный диск, отформатируйте его, смонтируйте, сохраните файл, запустите его, отформатируйте виртуальный диск, освободите виртуальный диск. Но я должен спросить... нужен ли этот уровень защиты действительно?   -  person Nik Bougalis    schedule 01.02.2013


Ответы (3)


Вы можете зафиксировать вывод дешифрования с помощью

decrypted=$(gpg -d ...)

Затем вы можете оценить результат

eval "$decrypted"
person choroba    schedule 01.02.2013
comment
Спасибо за ответ! Я смог заставить это работать только после удаления требований к аргументам командной строки из зашифрованного скрипта. Я не знаю, почему я не додумался записать вывод команды в переменную! Мне, вероятно, не нужно сохранять требования к аргументам, но я предполагаю, что мне нужно настроить синтаксис в команде eval, если я хочу вернуть их обратно. Еще раз спасибо! - person user1880028; 01.02.2013

Еще один простой вариант, контрастирующий с ответом хоробы:

Сохраните расшифрованный вывод в файл в /dev/shm/. (Это встроенная файловая система tmpfs по умолчанию практически во всех дистрибутивах Linux.) Настройте trap, чтобы удалить файл при выходе из вашего скрипта.

person rsaw    schedule 04.02.2013

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

bash <( gpg -d ... ) arg1 arg2

... однако он «отменяет» интерпретатор. т.е. Я запускал свои сценарии с bash -ue. Может быть или не быть проблемой в зависимости от сценариев и от того, пишете ли вы их сами или нет :)

person bryn    schedule 09.12.2013