недавно напоролся на такую штуку: gdb может подключиться к ЛЮБОМУ процессу в рамках пользователя и можно лазать по памяти процесса и т.п..
Вопрос: что мешает любому другому процессу делать так же? что если некоторый процесс будет лазать по памяти чужих процессов и творить что хочет?
ЗЫ: то же самое есть и в dbx на Solaris. В чём же фишка? неужели любой процесс может хозяйничать? А мне самому как быть при написании программ? мне что, контрольные суммы памяти сверять и данные хранить в зашифрованном виде??
I want to Believe!
They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
Ага, и в Windows тоже. Только там было хуже, пока не заделали эту дыру: обычный процесс, через отладочные функции, мог получить доступ к процессам системы и/или администратора.
Иными словами: процесс не может находиться в безопасности и ни о какой изоляции процессов не идёт и речи. Разве что изоляция от случайного воздействия. В любом случае это неправильно: любой процесс может проникнуть и выкрасть какую-то конфиденциальную инфу, например, какой-нибудь яндекс-кошелёк или что-то типа него. Выходит что он невероятно уязвим как под виндой, так и под солярой. Так что все разговоры о безопасности и т.п. это просто болтовня, когда и так все всё могут.
I want to Believe!
They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
Изоляция есть. ptrace API можно образно представить в виде ключа и двери, которыми управляет ОС по запросу приложения. Система привилегий (capabilites) и различные модули безопасности LSM, а так же SELinux могут помочь ужесточить взаимодействие между процессами одного пользователя.
как видишь, mpd имеет собственного одноименного пользователя и запускается с его правами.
а сейчас я пытаюсь под своим пользователем приаттачиться...
Код:
fantom@ghost:~$ whoami
fantom
fantom@ghost:~$ gdb
(gdb) attach 18725
Attaching to process 18725
ptrace: Operation not permitted.
так что самый простой вариант, без использования доп.патчей ядра, просто запускать под другим пользователем, тогда в его память только из рута можно будет попасть, ну или через эксплоит какой-нибудь