LINUX.ORG.RU

Очень нужна .so для сокрытия аргументов командной строки

 , ,


0

1

Я не программист, но очень нужна .SO'шка (которую потом можно было бы LDPRELOAD), которая бы прятала аргументы запущенного под ней приложения (чтобы не показывать всем пароль mysqldump, 7z, rar, etc.)

strncpy(argv[0], "mynewcmdlinehere", strlen(argv[0]));

Заранее огромное человеческое спасибо.



Последнее исправление: Klymedy (всего исправлений: 1)

argv[0]

0 — это всё, что до первого параметра, т.е. обычно путь к программе. Нужно от 1 до argc-1 тереть.

И это плохой костыль, потому что strncpy вызовется не сразу и в течение очень небольшого времени аргументы могут таки спалиться. Лучше брать что-то типа selinux, который может прятать процессы других пользователей.

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

И да, IRCC, само приложение должно считать аргументы до того, как они будут потёрты, поэтому so-шка, скорее всего, не подойдёт, т.к. она не может синхронизироваться с выполнением целевой программы и узнать, когда можно тереть аргументы.

gentoo_root ★★★★★
()

чтобы не показывать всем пароль mysqldump

~/.my.cnf

7z, rar, etc.

Пиши во временный файл и перенаправляй на стандартный ввод.

Deleted
()

Выдуманное тобой в первом посте «решение» - полное говно. Если прятать пароль *после* запуска приложения, то всегда будет оставаться возможность поймать его до того, как сработает пряталка.

Deleted
()
Ответ на: комментарий от Deleted

Не говно, допустим, если в цикле 0.01sec скрыть все аргументы прятать, то атакующий заколебётся ловить пароль )))

juk4windows
() автор топика
Ответ на: комментарий от juk4windows

атакующий заколебётся ловить пароль )))

Если повесить inotify на /proc, то пароль можно словить сразу после запуска программы перед скрытием аргументов. Так что это всё же плохой вариант.

gentoo_root ★★★★★
()
Ответ на: комментарий от juk4windows

в цикле 0.01sec

Не понял, зачем такой цикл, но он сожрёт весь процессор.

gentoo_root ★★★★★
()

ТС, в общем, самый простой выход из положения - монтировать корень по sshfs на компьютере, к которому ни у кого, кроме как у тебя, доступа нет. И там-то все это дело запускать.

Кстати, на кой хрен скрывать эти аргументы, если любой может, перезагрузив компьютер, прочесть файл, в котором этот пароль plain text'ом написан?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от juk4windows

Не говно, допустим, если в цикле 0.01sec скрыть все аргументы прятать, то атакующий заколебётся ловить пароль )))

Смотри:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import os

old_procs = []
while True:
        new_procs = [i for i in os.listdir("/proc") if i.isdigit()]
        for p in new_procs:
                if p not in old_procs:
                        try:
                                cmdline = open("/proc/" + p + "/cmdline").read()
                        except:
                                print p, "FAILED"
                        else:
                                cmdline = ", ".join(cmdline.split('\0'))
                                print p, "-", cmdline
        old_procs = new_procs
Запускаем на одной вкладке терминала, а на другой делаем:
$ 7z -p1213143

7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=ru_RU.UTF-8,Utf16=on,HugeFiles=on,2 CPUs)


Error:
Incorrect command line
На глаз - эта команда выполнилась мгновенно, но на первой вкладке скрипт с очень большой вероятностью выдаст вот такое:
31521 - /bin/sh, /usr/bin/7z, -p1213143, 

Если переписать ловилку паролей на C, причём запускать сразу десятком процессов, то можно будет даже вот такое вылавливать:

/bin/true muahaha
=)

Deleted
()
Ответ на: комментарий от Eddy_Em

inotify же сис. вызовы перехватывает. Почему бы ему и на VFS не работать?

Раньше не работало. Причина: ядро при создании элементов в procfs не вызывало соответствующие вызовы, связанные с inotify. Как сейчас - хз.

Deleted
()
Ответ на: комментарий от Deleted

Понял, наглядно, страшно, буду думать. Спасибо!

juk4windows
() автор топика
Ответ на: комментарий от xpahos

Судя по тому, что хочется preload, вполне возможно ситуация с закрытой поделкой; или же ваш волшебный ~/.my.cnf справится и с этой задачей?

anonymous
()

В общем, советую-таки подумать над предложением купить отдельный «серкетный» компьютер и там все операции выполнять. Храня пароль в серкете, а ФС - в зашифрованном виде.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от anonymous

да, я ступил. Тогда уже писать обертку для mysql нужно.

xpahos ★★★★★
()
Ответ на: комментарий от Eddy_Em

Решил отказаться от встроенного шифрования в rar/7z в пользу PGP с открытым ключом.

Чем ещё круче - старые данные не увидит и не сможет прочитать даже хостер ))

juk4windows
() автор топика
Ответ на: комментарий от anonymous

в последних ядрах можно установить группу и владельца для procfs

А есть какая-нибудь документация на эту тему? А то не гуглится.

Deleted
()
Ответ на: комментарий от Eddy_Em

inotify же сис. вызовы перехватывает. Почему бы ему и на VFS не работать?

Сейчас проверил: inotify ловит только события, порождённые другими юзерспейсными процессами. Создание нового процесса ядром никак не ловится.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.