Я запускаю программный демон, который требует от определенных действий ввести ключевую фразу, чтобы разблокировать некоторые функции, которые выглядят, например, так:
$ darkcoind masternode start <mypassphrase>
Теперь у меня возникли проблемы с безопасностью на моем безголовом сервере Debian.
Всякий раз, когда я просматриваю свою историю bash, например, с помощью, Ctrl+R
я вижу этот сверхнадежный пароль. Теперь я представляю, что мой сервер скомпрометирован, и у какого-то злоумышленника есть доступ к оболочке, и он может просто Ctrl+R
найти мой пароль в истории.
Есть ли способ , чтобы ввести ключевую фразу без него будет показано в Баш истории ps
, /proc
или где - нибудь еще?
Обновление 1 : передача пароля демону не приводит к ошибке. Это не вариант.
Обновление 2 : Не говорите мне, чтобы удалить программное обеспечение или другие полезные советы, такие как зависание разработчиков. Я знаю, что это не лучший пример, но это программное обеспечение основано на биткойнах, и все клиенты, основанные на биткойнах, являются своего рода сервером json rpc, который слушает эти команды, и его известная проблема безопасности все еще обсуждается ( a , b , c ) ,
Обновление 3 : демон уже запущен и работает с командой
$ darkcoind -daemon
Выполнение ps
показывает только команду запуска.
$ ps aux | grep darkcoin
user 12337 0.0 0.0 10916 1084 pts/4 S+ 09:19 0:00 grep darkcoin
user 21626 0.6 0.3 1849716 130292 ? SLl May02 6:48 darkcoind -daemon
Таким образом, передача команд с парольной фразой не обнаруживается в ps
или /proc
вообще.
$ darkcoind masternode start <mypassphrase>
$ ps aux | grep darkcoin
user 12929 0.0 0.0 10916 1088 pts/4 S+ 09:23 0:00 grep darkcoin
user 21626 0.6 0.3 1849716 130292 ? SLl May02 6:49 darkcoind -daemon
Это оставляет вопрос, где история появляется? Только в .bash_history
?
источник
Ответы:
Действительно, это должно быть исправлено в самом приложении. И такие приложения должны быть с открытым исходным кодом, так что решение проблемы в самом приложении должно быть вариантом. Приложение, связанное с безопасностью, которое допускает подобные ошибки, может совершать и другие ошибки, поэтому я бы не стал доверять.
Простой вставщик
Но вы просили другой путь, поэтому вот один:
Скомпилируйте это с
затем запустите ваш процесс с
Библиотека Interposer запустит этот код до того, как будет выполнена
main
функция из вашего приложения. Он заменит последний аргумент командной строки фактическим паролем в вызове main. Командная строка, напечатанная в/proc/*/cmdline
(и, следовательно, видимая такими инструментами, какps
), все равно будет содержать ложный аргумент. Очевидно, что вам нужно сделать исходный код и библиотеку, которую вы компилируете из него, доступной для чтения только для себя, поэтому лучше всего работать вchmod 0700
каталоге. А поскольку пароль не является частью вызова команды, ваша история bash также безопасна.Более продвинутый вставщик
Если вы хотите сделать что-то более сложное, имейте в виду, что оно
__libc_start_main
выполняется до того, как библиотека времени выполнения была должным образом инициализирована. Поэтому я бы рекомендовал избегать любых вызовов функций, если они не являются абсолютно необходимыми. Если вы хотите иметь возможность вызывать функции на свое усмотрение, убедитесь, что вы делаете это непосредственно передmain
тем, как вызывать себя, после того, как завершена вся инициализация. В следующем примере я должен поблагодарить Grubermensch, который указал, как скрыть пароль, переданный в качестве аргумента командной строки, который привлекgetpass
мое внимание.Это запрашивает пароль, поэтому вам больше не нужно хранить секретную библиотеку промежуточных программ. Аргумент placeholder повторно используется как запрос пароля, поэтому вызывайте его следующим образом:
Другая альтернатива будет считывать пароль из файлового дескриптора (как, например,
gpg --passphrase-fd
делает), или изx11-ssh-askpass
, или что-то еще.источник
strings
уязвимость. См. SO: Скрыть ввод пароля на терминале .__libc_start_main
.Это не просто история. Это также будет отображаться в выводе ps .
Кто бы ни написал это программное обеспечение, его следует повесить, нарисовать и расквартировать. Абсолютно НЕТ, чтобы вводить пароль в командной строке независимо от того, какое это программное обеспечение.
Для процесса демона это даже БОЛЬШЕ непростительно ...
Кроме rm -f на самом программном обеспечении я не знаю никакого решения для этого. Честно говоря: найти другое программное обеспечение, чтобы сделать работу. Не используйте такой мусор.
источник
rm -f
сейчас.ps
. Поэтому, пока разработчик не сможет это исправить, он предлагает использовать что-то еще.ps
, так что это не лучше, чемrm
решение.Это очистит
ps
вывод.БУДЬТЕ ОЧЕНЬ ОСТОРОЖНЫМ . Вы должным образом предупреждены, что здесь будут драконы.
Теперь вы должным образом уведомлены об этих страшных предупреждениях. Это очистит вывод, отображаемый в
ps
. Он не очистит вашу историю и не очистит историю заданий bash (например, запуск процесса какmyprocess myargs &
). Ноps
больше не буду показывать аргументы.Вызовите программу, сохранив
chmod +x
ее. Затем делать./whatever <pidoftarget>
Если это работает, он не будет производить вывод. Если не получится, он пожалуется на что-то и уйдет.источник
gdb
можно изменить память о запущенных процессах (с гораздо большей хирургической точностью, чем я мог бы добавить).Можете ли вы передать аргумент из файла, доступного только пользователю root или требуемому пользователю?
Это ОГРОМНОЕ нет-нет, чтобы вводить пароли в консоли, но последнее обращение ... начинайте свою строку с пробела, чтобы он не появлялся в истории.
источник
export HISTCONTROL=ignoreboth
игнорирует как дубликаты, так и строки с пробелом для ввода в историю. Добавьте его в свой .bashrc или .bash_profile.Может быть, это работает (?):
источник
darkcoind masternode start `head -1`
, если вы хотите ввести пароль вручную.ps
и подобные утилиты..bash_history
к открытому паролю вpassword.txt
выигрыше, что именно?К сожалению, если ваша
darkcoind
команда ожидает пароль в качестве аргумента командной строки, то он будет доступен через такие утилиты, какps
. Единственное реальное решение - обучить разработчиков .Хотя это
ps
может быть неизбежным, вы можете, по крайней мере, сохранить пароль от записи в файле истории оболочки.Файл истории должен только записывать
xargs darkcoind masternode start
, а не пароль.источник
ignorespace
в$HISTCONTROL
, а затем вы можете предотвратить любую команду из вдаваясь в историю оболочки, предварив команду с пробелом.Как уже говорили другие, загляните в свой контроль истории оболочки, чтобы скрыть информацию из истории.
Но одна вещь, которую никто еще не предложил, это монтировать
/proc
сhidepid
параметром. Попробуйте изменить вашу/proc
строку,/etc/fstab
чтобы включитьhidepid
, как это:источник
Вы можете сохранить пароль в истории вашей оболочки, выполнив команду из нового процесса оболочки, который вы немедленно прекратите. Например:
Убедитесь, что
sh
настроен не сохранять свою историю в файл.Конечно, это не решает другие проблемы, такие как пароль, видимый в
ps
. Я полагаю, что у самойdarkcoind
программы есть способы скрыть информациюps
, но это только сокращает окно уязвимости.источник
ps
и подобные утилиты.Для Bitcoin официальный ответ разработчика заключается в использовании предоставленной оболочки Python
contrib/bitrpc/bitrpc.py
( github ):а также:
Источник: № 2318
Разблокировать кошелек:
Изменить пароль:
https://github.com/bitcoin/bitcoin/tree/master/contrib/bitrpc
Для Darkcoin это работает anlogue:
https://github.com/darkcoin/darkcoin/tree/master/contrib/bitrpc
источник