Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
Денис Авилов
Member

Откуда: Украина, Днепропетровск
Сообщений: 185
Всем привет. Собственно, сабж.
То, что в 2000-м можно элементарно расшифровать любую процедуру/функцию/вьюху/триггер, который создан с WITH ENCRYPTION, я знаю. И скрипты, которые сами все расшифровывают, видел, и даже софтинку в свое время накатал для тех же целей.

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

Теперь, в связи с массовым переходом клиентов на 2005-й, ребром встал вопрос: делать то же и на этой версии сервера, или там такой проблемы нет? Правда, стандартные средства расшифровки хранимок на 2005-м уже не работают (что дает некоторую надежду), но это вполне может быть не потому, что алгоритм стал надежным, а просто из-за небольшого изменения метаданных, например. Пока что просто не было времени детально с этим разобраться.

Кто-нибудь может ответить определенно: стал ли намного более надежным алгоритм шифрования хранимок на 2005-м сервере или остался (почти) на прежнем уровне? Буду благодарен за ответ.
7 июн 08, 19:54    [5777530]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
aleks2
Guest
Блин... мечтатели. Как может быть "надежным" алгоритм шифрования, ежели он содержит ключ в коде самой процедуры шифрования? Вопрос только в выцеплении этого ключа.

Типа сунул голову в песок - спрятался?
7 июн 08, 20:40    [5777602]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
IamZet
Member

Откуда:
Сообщений: 37
К сожалению, ситуация с шифрованием в SQL 2005 особо лучше не стала. Поменялся набор объектов для хранения кода объектов, а принцип тот же. В подтверждение в аттаче несложная хранимая процедура, которая на ура расшифровывает encrypted объекты. Запускать ее надо, естественно, в DAC.

Хотя может, все это к лучшему. Был момент один деятель случайно удалил одну процедурку в базе Team Foundation Server (а там ребята из Microsoft все зачем-то зашифровали), и процедура в аттаче стала для меня спасением - удалось расшифровать процедуру на тестовом сервере и перенести на рабочий. А иначе можно было бы стреляться.

К сообщению приложен файл (procDecryptObject.sql - 6Kb) cкачать
8 июн 08, 13:24    [5778509]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
Денис Авилов
Member

Откуда: Украина, Днепропетровск
Сообщений: 185
Ошибочка, однако!

Msg 208, Level 16, State 1, Procedure procDecryptObject, Line 103
Invalid object name 'sys.sysobjvalues'.

Даже обычный "SELECT * FROM sysobjvalues" выдает ту же ошибку.

Мой @@Version (на всякий случай):
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)
Oct 14 2005 00:33:37
Copyright (c) 1988-2005 Microsoft Corporation
Standard Edition on Windows NT 5.1 (Build 2600: Service Pack 2)
9 июн 08, 15:28    [5782709]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
Денис Авилов
Member

Откуда: Украина, Днепропетровск
Сообщений: 185
P.S. Последний пост был адресован IamZet'у, это я пытался выполнить хранимку из аттача.
9 июн 08, 15:29    [5782722]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
Денис Авилов
Member

Откуда: Украина, Днепропетровск
Сообщений: 185
Извиняюсь, дико протупил, щаз только прочитал описание процедуры и Ваше замечание про DAC-режим... 10 минут, сейчас проверю... :-)
9 июн 08, 15:31    [5782741]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
IamZet
Member

Откуда:
Сообщений: 37
Как я писал в своем посте, процедуру надо запускать в режиме DAC (dedicated administrative access), это же написано в комментариях в коде процедуры. Вьюв sysobjvalues доступен только в этом режиме. Management Studio не поддерживает DAC. Попробуйте из командной строки

osql -s ADMIN:[server] -E -d [database] -Q "exec procDecryptObject '[yourprocname]'"
9 июн 08, 15:37    [5782787]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
Денис Авилов
Member

Откуда: Украина, Днепропетровск
Сообщений: 185
IamZet: а и правда, пашет, как часы! Спасибо за исчерпывающий ответ, подкрепленный столь весомым аргуменом! :-)

Хотя с другой стороны, для нашей конторы в общем и лично для меня в частности это означает дополнительный гемор... Все как всегда...
9 июн 08, 15:40    [5782809]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
Денис Авилов
Member

Откуда: Украина, Днепропетровск
Сообщений: 185
IamZet, Management Studio поддерживает DAC, но не весь (только query, а object tree - нет).

aleks2, ключ в коде процедуры не содержится, Вы немного не правы. Он генерируется по определенному правилу.

А алгоритм может быть надежен, если для кодирования одной и той же процедуры в разные моменты времени используются РАЗНЫЕ ключи (случайные). Храниться же они могут где угодно, главное, чтобы сторонние приложения не имели к нему доступа. В сиквелле же допущена роковая ошибка - если я изменю текст атакуемой процедуры (ALTER), то для кодирования будет использован тот же ключ, что и при создании. В результате, зная исходный и закодированный текст, я вычисляю сам ключ и потом расшифровываю исходную процедуру.

Т.е., мелкомягкие опять подтверждают свое амплуа - будучи способными делать в общем-то неплохие продукты, нередко они не только допускают глупейшие, банальнейшие ошибки, но еще и потом годами их не исправляют (а иногда и говорят при этом, что так и должно быть, как в случае с циклическими каскадными связями).
9 июн 08, 15:53    [5782935]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5503
Блог
Денис Авилов
А алгоритм может быть надежен, если для кодирования одной и той же процедуры в разные моменты времени используются РАЗНЫЕ ключи (случайные). Храниться же они могут где угодно, главное, чтобы сторонние приложения не имели к нему доступа. В сиквелле же допущена роковая ошибка - если я изменю текст атакуемой процедуры (ALTER)
Да поймите, шифрование бессильно в принципе, поскольку есть... дебагер.
Шифрование вообще не должно происходить на компьютере, на котором может залогиниться тот, "от кого шифруем". Иначе рано или поздно все будет расшифровано.
Ведь сиквел сам расшифровывать умеет. Ему деваться некуда. ;)
Вот если бы можно было хранить планы процедур без необходимости хранения текста... но это малореально.
9 июн 08, 16:25    [5783267]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
Денис Авилов
Member

Откуда: Украина, Днепропетровск
Сообщений: 185
Я понимаю. Если человек умеет пользоваться отладчиком / дизассемблером, теоретически от него спрятать ничего невозможно. Но все-таки хотелось бы более-менее надежной встроенной в сиквелл защиты исполняемого кода, которая, по крайней мере, не ломается тривиальными скриптами на том же SQL или клиентскими приложениями. Т.е., если расшифровать процедуру нельзя, не хакнув сиквелл - с моей точки зрения это уже надежно. С такой защитой я, по крайней мере, отсеку не в меру любопытных DBA-шников от нашего кода, в котором есть критические секции. А для взлома нужно уже привлекать спецов, это уже, так-сказать, другой уровень.

P.S. Ладно, это я уже скорее на жизнь жалуюсь... :) Ибо влом писать очередной патч к сиквеллу...
9 июн 08, 18:01    [5784099]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5503
Блог
Денис Авилов
Я понимаю. Если человек умеет пользоваться отладчиком / дизассемблером, теоретически от него спрятать ничего невозможно.
Тут дело не только в дизассемблере.
И не в конкретном алгоритме шифрования.
Проблема в том, что SQL должен иметь возможность расшифровать процедуру, имея в распоряжении только ее зашифрованный текст.
А раз он имеет возможность - значит, человек и подавно.

Пароли/ключи вне самого зашифрованного текста - это только запутывание, они в любом случае должны быть в том или ином виде в руках у админа на случай, если для восстановления базы придется переустанавливать сервер целиком.
9 июн 08, 18:14    [5784185]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
Yustas
Guest
Вот запустил Вашу процедуру на SQl 2005 с сервис паком:

osql -s ADMIN:(local) -E -d agencydb -Q "exec procDecryptObject 'dbo','GA_CommCalcExpected'"
процедура ругается что
Msg 208, Level 16, State 1, Server (local), Procedure procDecryptObject, Line 103
Invalid object name 'sys.sysobjvalues'. т.е что получается, что у меня нету этого объекта - sys.sysobjvalues ????
21 янв 09, 13:53    [6715717]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Yustas
Вот запустил Вашу процедуру на SQl 2005 с сервис паком:

osql -s ADMIN:(local) -E -d agencydb -Q "exec procDecryptObject 'dbo','GA_CommCalcExpected'"
процедура ругается что
Msg 208, Level 16, State 1, Server (local), Procedure procDecryptObject, Line 103
Invalid object name 'sys.sysobjvalues'. т.е что получается, что у меня нету этого объекта - sys.sysobjvalues ????


процедуру надо запускать в режиме DAC
21 янв 09, 14:05    [6715815]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
ГостеГ
Guest
Предоставленная процедурка не выдает текст хранимки больше 4000 символов...
18 фев 09, 14:39    [6834633]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
ars22
Member

Откуда: Москва
Сообщений: 139
Клево)) Работает декриптор

Management Studio не поддерживает DAC

В общем, очень даже поддерживает SSMS соединение DAC. В строке Server Name окна подключения написал ADMIN:servername - подключился. Выполнил скачанную процедуру, получил принт расшифрованной процедуры.
19 фев 09, 09:34    [6837470]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
Flying-home
Member

Откуда: kart.vrostove.net
Сообщений: 15006
А в 2008 с этим как?
19 фев 09, 13:43    [6839230]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4540
Flying-home
А в 2008 с этим как?

Ничего принципиально не изменилось. Как и в 2005 доступно в DAC или из системных таблиц.
Впрочем вот мантра:
Microsoft

ENCRYPTION
Indicates that SQL Server will convert the original text of the CREATE PROCEDURE statement to an obfuscated format. The output of the obfuscation is not directly visible in any of the catalog views in SQL Server. Users that have no access to system tables or database files cannot retrieve the obfuscated text. However, the text will be available to privileged users that can either access system tables over the DAC port or directly access database files. Also, users that can attach a debugger to the server process can retrieve the decrypted procedure from memory at runtime. For more information about accessing system metadata, see Metadata Visibility Configuration.
19 фев 09, 13:54    [6839306]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
Idol_111
Member

Откуда:
Сообщений: 640
Только что тестил процедуру procDecryptObject.
С процедурами работает на ура, а вот когда попробовал расшифровать View and function, на выходе получаю вот такие сообщения:

Msg 156, Level 15, State 1, Procedure GetParamDate, Line 1
Incorrect syntax near the keyword 'WITH'.
Msg 102, Level 15, State 1, Procedure GetParamDate, Line 1
Incorrect syntax near 'AS'.
24 фев 09, 07:29    [6851821]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
угу...

потому что такой синаксис допустим

ALTER PROCEDURE [dbo].[TestProcedure] WITH ENCRYPTION AS---------------------

а тоже самое относительно view, function - синтаксически не допустимо и бьет ошибку

ALTER VIEW [dbo].[TestView] WITH ENCRYPTION AS---------------------
24 фев 09, 09:47    [6852017]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
Idol_111
Member

Откуда:
Сообщений: 640
Кудряшка,
простите, не уловил. В каком месте не допустим?
27 фев 09, 04:51    [6867597]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
В скрипте (процедуре) автор соадает строку типа

ALTER OBJECT WITH ENKRYPTION AS

OBJECT: prosedure, view, function

Строка эта должна содержать столько же символов, сколько и реальный обьект, поэтому автор дополняет строкy символами '-' до конца длины.

Потом он эту выполняет (sp_executesql) - фактически перезаписывая обьект в БД (но в транзакции, которая откатывается после того, как он считывает заскриптованный вариант с 'черточками'). Делает он это для того, чтобы получить ключ шифрования.

Так вот,

ALTER VIEW [vw_Name] WITH DECRYPTION AS----------------

Не выполняется, т.к. у VIEW sqlstatement - требуем.
27 фев 09, 09:31    [6867877]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Пардон, везде DECRYPTION (не ENCRYPTION)...
пятница, конец рабочего дня... :) :) :)
27 фев 09, 09:33    [6867885]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Кудряшка
Пардон, везде DECRYPTION (не ENCRYPTION)...
пятница, конец рабочего дня... :) :) :)


Где тут рыдающий смайл? ))))))))))))

WITH ENCRYPTION
27 фев 09, 09:36    [6867892]     Ответить | Цитировать Сообщить модератору
 Re: Решена ли проблема с шифрованием хранимых процедур в MS SQL 2005?  [new]
Idol_111
Member

Откуда:
Сообщений: 640
И что делать? Где чего подправить?
6 мар 09, 07:26    [6894535]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить