Зашифровать пароль

Как защититься от хаков, спрятать БД и прочие премудрости и настройки

Модератор: kdv

JOHN_PROFF
Сообщения: 15
Зарегистрирован: 17 ноя 2006, 13:11

Зашифровать пароль

Сообщение JOHN_PROFF » 17 ноя 2006, 17:06

Нужно подключиться к FB так, что бы невозможно было перехватить пароль (не снифиром, не анализируя память и т.п.)
Дело в том, что в проге он зашифрован, но в памяти лежит в открытом виде, т.к. в компонент TpFIBDatabase должна передоваться строка password=***

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Зашифровать пароль

Сообщение WildSery » 17 ноя 2006, 17:52

JOHN_PROFF писал(а):что бы невозможно было перехватить пароль (не снифиром, не анализируя память и т.п.)
1. Не подлкючаться по сети, использовать Embedded + комплекс мер по локальному сокрытию пароля и кода подключения.
2. Embedded не использовать, оставить комплекс мер из п.1 + дополнительный комплекс мер по шифрованию трафика, ZeBeDee например. Плюс, конечно, защита сервера.
3. При чём тут FB ?

JOHN_PROFF
Сообщения: 15
Зарегистрирован: 17 ноя 2006, 13:11

Re: Зашифровать пароль

Сообщение JOHN_PROFF » 17 ноя 2006, 18:04

WildSery писал(а):1. Не подлкючаться по сети
Нужно именно по сети
WildSery писал(а):оставить комплекс мер из п.1 + дополнительный комплекс мер по шифрованию трафика, ZeBeDee например. Плюс, конечно, защита сервера.
все есть

короче нужно передать пароль в fbclient.dll в зашифрованном виде (на локальной машине)

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Зашифровать пароль

Сообщение WildSery » 17 ноя 2006, 18:16

JOHN_PROFF писал(а):Нужно именно по сети...
...(на локальной машине)
Ы?

JOHN_PROFF
Сообщения: 15
Зарегистрирован: 17 ноя 2006, 13:11

Сообщение JOHN_PROFF » 17 ноя 2006, 18:32

из проги пароль на подключение сначала передается в fbclient.dll (который лежит на локальной машине) а из него на удаленный сервак. Или я чтото путаю?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 17 ноя 2006, 20:16

клиент передает серверу пароль в зашифрованном виде. затем сервер шифрует его еще раз и сравнивает с тем что лежит в isc4.gdb/admin.ib/security.fdb.

JOHN_PROFF
Сообщения: 15
Зарегистрирован: 17 ноя 2006, 13:11

Сообщение JOHN_PROFF » 17 ноя 2006, 20:37

kdv писал(а):клиент передает серверу пароль в зашифрованном виде. затем сервер шифрует его еще раз и сравнивает с тем что лежит в isc4.gdb/admin.ib/security.fdb.
Тогда подскажите пожалуйста как подключиться из Delphi к FB что бы в оперативной памяти клиента не светился пароль.
Для доступа использую компоненты FIBPlus.

JOHN_PROFF
Сообщения: 15
Зарегистрирован: 17 ноя 2006, 13:11

Сообщение JOHN_PROFF » 17 ноя 2006, 20:47

Вот пример кода

Код: Выделить всё

pFIBDatabase1.DBParams.Add('password=' + deshifr('зашифрованный пароль'))
после запуска программы в оперативной памяти можно найти это: "password=не зашифрованный пароль"
вопрос: что нужно сделать, чтобы не был виден не зашифрованный пароль

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 17 ноя 2006, 22:06

ну вы что, не можете IBDatabase.Params.Clear сделать после коннекта?

JOHN_PROFF
Сообщения: 15
Зарегистрирован: 17 ноя 2006, 13:11

Сообщение JOHN_PROFF » 17 ноя 2006, 22:57

не могу
Cannot perform operation -- DB is currently open
даже если бы и получилось, то это не выход. В момент коннекта всеравно будет доступен пароль. Достаточно сразу после запуска проги делать дамп с определенным промежутком.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 17 ноя 2006, 23:02

Если так прёт, применяют трёхзвенку. Да и то, при наличии ехешника в руках раскрутить его - не особая и проблема. Определиться со способом шифрации и послать правильно шифрованный.

JOHN_PROFF
Сообщения: 15
Зарегистрирован: 17 ноя 2006, 13:11

Сообщение JOHN_PROFF » 17 ноя 2006, 23:18

ну что? выходит что жопа? или есть предложэния?

JOHN_PROFF
Сообщения: 15
Зарегистрирован: 17 ноя 2006, 13:11

Сообщение JOHN_PROFF » 17 ноя 2006, 23:35

kdv писал(а):ну вы что, не можете IBDatabase.Params.Clear сделать после коннекта?
Подправил исходник компонента что бы не выдавал ошибку. Параметры очищаются после открытия, база работает нормально, а пароль как был в памяти, так там и остался :(

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 17 ноя 2006, 23:56

а пароль как был в памяти, так там и остался
значит надо забить чем-нибудь другим. попробовать переприсвоить значения параметрам, и т.п.

JOHN_PROFF
Сообщения: 15
Зарегистрирован: 17 ноя 2006, 13:11

Сообщение JOHN_PROFF » 18 ноя 2006, 00:03

Фиг. И один и другой в памяти.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 20 ноя 2006, 11:31

Фиг. И один и другой в памяти.
тогда так

1. читать про менеджер памяти в дельфях
2. используй short strings, и коннект напрямую через api. исходники ibx тебе в помощь.

Al.x
Сообщения: 1
Зарегистрирован: 15 окт 2007, 01:49

Сообщение Al.x » 15 окт 2007, 02:09

1. сделать dllку с функцией автогенерации пароля по к-либо алгоритму (я делал от времени), туда же запихнуть API потроха для работы с пользователями isc_add_user и т. д.
2. на основе dllки сделать UDF->ХП с созданием пользователя и размещением инфо о нем в таблице например SEC$USERS
3. в коде клиента предоставить пользователю задавать данные о себе, в т. ч. user_name (для маньяков можно автоматически генерировать) и пароль (ненастоящий)
4. юзер вводит инфу она передается в ХП, та обращается к UDF dllки, dllка генерит настоящий пасс, регистрирует юзера, отдает пасс в UDF->ХП, та заносит всю инфу в т. ч. пользовательский пароль (ненастоящий), пароль (настоящий), user_name и прочее в табличку SEC$USERS
5. при авторизации инфа (имя, пользовательский пароль) передается в ХП авторизации, та сравнивает пароль с настоящим паролем и авторизует пользователя (средствами API)
Способ конечно еще тот, но, по крайней мере, обычный юзер не войдет напрямую в БД (при помощи админ утилит) под своим "ненастоящим" паролем, настоящий пароль можно конечно поймать, но сложнее, чем когда он напрямую передается от клиента к серверу.
Есть одно НО, если злоумышленник получает физический доступ к БД, все пользователи у него как на ладони:) но это вопрос защиты БД

wordofjustice
Сообщения: 6
Зарегистрирован: 11 мар 2008, 13:26

Сообщение wordofjustice » 11 мар 2008, 13:34

Прошу прощения за археологию, но слова "авторизует пользователя (средствами API)" мне к сожалению совсем непонятны. Возможно этих методов нет в той документации которая скачана.
Пожалуйста те кто понимает - ткните в документацию в которой это есть.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 11 мар 2008, 14:05

например я не знаю, о каком в пункте пять API идет речь. Или имелся в виду обычный коннект IBDatabase?
Какой-то замудренный метод.

kostyl
Сообщения: 47
Зарегистрирован: 06 фев 2008, 10:24

Сообщение kostyl » 11 мар 2008, 16:30

Можно вообще делать базу открытой но писать туда зашифрованные данные, при этом ключ - пароль пользователя, который нигде не храниться - вот и будет операция Ы)) :wink:

Ответить