книги хакеры / журнал хакер / специальные выпуски / Специальный выпуск 52_Optimized
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
69 |
|||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
|
||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
сания COM-интерфейсов msxml2_tlb.pas ты можешь получить доступ к DOM XML. Ниже пример использования DOM для загрузки и выгрузки XML-документа в UDF:
uses msxml2_tlb, ActiveX;
…
var
xmldCom :CoDOMDocument; xmld :IXMLDOMDocument2;
…
procedure LoadFirstXML(const fileName:string); begin
xmld:=CoDOMDocument.Create;
xmld.async:=false;
xmld.load(fileName);
xmld.setProperty('SelectionLanguage','XPath'); if xmld.parseError.errorCode<>0 then begin exit; end;
procedure freeXML; begin
xmld:=nil;
end;
Для доступа к конкретным элементам документа можно использовать функцию selectSingleNode или SelectNodes:
xmld.documentElement.selectNodes(xPath)
xPath - текст выражения xPath.
При использовании в XML DOM некоторые выражения XPath интерпретируются неправильно. Для исправления этой ошибки нужно указать после создания COM-объекта вот это:
xmld.setProperty('SelectionLanguage','XPath');
xmld - название созданного COMобъекта. В документации говорится, что параметр SelectionLanguage установлен в XPath по умолчанию.
ПРОБЛЕМЫ С ЯЗЫКОМ
Язык XML - мультинациональный, но количество кодировок и поддерживаемых языков полностью остается на совести разработчиков парсеров. Для обозначения кодировки символов в заголовке документа нужно написать <?xml version=”1.0” encoding=”windows1251”?>, где windows-1251 - используе-
мая кодировка. Сейчас стало модным использовать кодировку UTF-8. Например, парсер libxml2 автоматически перекодирует в UTF-8 все загруженные файлы, поэтому при использовании DOM-функций это нужно учесть и использовать функции перекодировки, которые, кстати, есть в этой библиотеке. Следует заметить, что windows1251 - это только одно из указаний парсеру. Возможно, нужно будет писать win1251 или win-cur - опять же, на совести разработчиков парсеров.
В MSXML одновременно можно использовать только один язык и указывать его можно только один раз. То есть если в xml- и xsl-документе несколько раз будут указываться кодировки (пусть даже одинаковые), будет выдано сообщение об ошибке. Оптимально загружать сначала xml-доку- мент, а потом уже и xsl-шаблон (но уже без указания в нем кодировки). Шаблон будет правильно загружен и обработан. А вот парсер libxml2 принимает все без исключения кодировки и преобразует их в UDF-8.
Как видишь, проблема с адресной строкой легко решается. Данный пример можно усовершенствовать добавив кеширование поиска. В MSXML существует собственный кеш, но управлять им нельзя. В LibXML, напротив, ничего кеширующего замечено не было, зато есть методы прямого доступа к памяти libXML.
РЕЛЯЦИОННОСТЬ VS XML
Можно найти много общего между реляционным способом обработки данных и методами, которые предла-
гают технологии XML. Более того, практически все то, что может SQL (имеется в виду оператор select), умеет и XML. И даже больше. Я не хочу сказать, что технологии XML придут на смену реляционным. Наоборот: именно при их связке можно оценить мощь XML.
Хотя языки запросов, разработанные для XML (это в первую очередь XQuery), являются более мощными, чем SQL, структура реляционных таблиц отличается от структуры XML, так как XML в первую очередь создан для описания древовидных, а не линейных структур. Основное преимущество реляционных баз - это скорость работы с большими объемами данных. Для поиска по XML-документу его нужно полностью загрузить (разобрать) в оперативную память машины. Представь себе объем данных XML в 500 Мб. Конечно, при современном развитии вычислительной техники это не такая уж большая проблема (недостаток ума программиста компенсируется гигагерцами и гигабайтами), но в целом возможно оперировать с XML-данными только сравнительно небольшого размера.
Второй недостаток XML - это язык поиска данных, а не манипулирования ими. Сейчас для XML не существует механизмов, подобных транзакциям в реляционной среде, и, скорее всего, не появится. Несмотря на эти недостатки, XML – это мощная технология, которая не заменит реляционную, но улучшит ее возможности.E
XML в первую очередь создан для описания древовидных, а не линейных структур.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
i |
r |
|
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
||
|
|
|
|
-x cha |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
Ä À Í Í Û Õ |
|
|
|
|
|
|
|
|
|
|
|
Á À Ç Û |
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
||
|
|
|
C |
|
E |
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
||||||
|
|
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
|
|
|
|
|
|
- |
|
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
|
NOW! |
o |
|
|
|
|
|
|
P |
|
|
|
|
|
NOW! |
o |
||||||||
|
|
|
|
|
|
|
|
БЕЗОПАСНОСТЬ |
ПАДЕНИЕЧЕРНОГОЯСТРЕБА |
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
BUY |
|
|
70 |
|
|
|
|
|
|
BUY |
|
|
||||||||||||
|
|
|
|
to |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
to |
|
|
|
|
|
|
||
w Click |
|
|
|
|
|
|
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
o |
m |
Фленов Михаил aka Horrific www.vr-online.ru |
|
|
|
|
|
|
|
o |
m |
||||||||||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|||||||
w |
|
|
|
|
Content: |
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
|
|
||||||||
|
. |
|
|
|
|
g |
.c |
|
|
|
|
|
|
|
|
. |
|
|
|
|
g |
.c |
|
||||||
|
|
p |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
||||
|
|
|
df |
|
|
n |
e |
|
|
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
||||||
|
|
|
|
-xcha |
|
|
|
|
|
ПАДЕНИЕ |
|
|
|
|
|
|
-x cha |
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
ястреба |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
70 |
Падение черного |
ЧЕРНОГО |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
74 Разрешите войти? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
Как обеспечить безопасность |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
данных |
ЯСТРЕБА |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
78 Спасение утопающих – |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
Настройка прав доступа к базе |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
данных |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
äåëî ðóê, à íå íîã |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
Резервное копирование и |
КАК ОБЕСПЕЧИТЬ БЕЗОПАСНОСТЬ ДАННЫХ |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
восстановление данных |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
82 Эффективное |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
управление базой данных |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
Инструменты автоматизации в MS |
|
о, что данные нужно защищать, понятно даже ежику в тумане. Это |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
SQL Server |
Òособенно важно для баз данных, потому что в таких корпоративных |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
84 Атака SQL injection |
хранилищах очень часто складируется то, от чего зависит вся жизнь фирмы. |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
Что может сделать взломщик |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
90 Взлом СУБД |
|
|
СУПЕРАДМИН |
Теперь выбираем пункт This account (с |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
Обзор уязвимостей с наглядными |
» |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
примерами |
Во время установки MS |
учетной записью) и указываем имя и пароль |
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
SQL Server 7.0 и младше по |
нужного пользователя. В идеале необходимо |
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
умолчанию выбиралось имя |
создать в системе новую учетную запись, ко- |
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
БЕЗОПАСНОСТЬ |
администратора sa (System |
торой предоставлены только те права, кото- |
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
Administrator). Пароль можно было не указы- |
рые реально нужны этому сервису. Ничего |
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
Вместо newpass нужно указать новый па- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
вать. В MS SQL Server 2000 и старше уста- |
лишнего предоставлять нельзя. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
новщик уже будет предупреждать о возмож- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
ных проблемах, если не указать пароль (ви- |
РАБОТА ДЕМОНА |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
димо, кто-то увидел надпись на заборе о том, |
В Linux дела обстоят немного сложнее, |
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
что нельзя выбирать простые пароли и что |
но в результате все получается намного без- |
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
пустой пароль - это вообще пробоина в бе- |
опаснее. Здесь нужно создать виртуальную |
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
зопасности покруче отверстия в корме "Ти- |
директорию, которая будет являться корне- |
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
таника"). С такими паролями тонут в первые |
вой для сервиса, для чего я рекомендую ска- |
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
же дни плаванья. |
|
чать утилиту jail с сайта www.jmcresearch.com/proj- |
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
Пароль должен быть никак не короче вось- |
ects/jail. Пример работы утилиты здесь рас- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
ми символов, не должен представлять собой |
смотреть не успею, поэтому ограничусь толь- |
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
читаемое слово или дату, поскольку такое, |
ко принципом ее работы. За более подроб- |
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
если понадобится, угадают минут за пять. Я, |
ной информацией обращайся к справочным |
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
например, всегда наугад набираю что-нибудь |
файлам или купи книгу "Linux глазами Хаке- |
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
на клавиатуре, а потом просто сохраняю эту |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
ерунду в секретном файле. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
Заметь, что до сих пор при установке |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
MySQL в качестве администратора использу- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
ется учетная запись root без пароля. Эта за- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
пись не связана с пользователем root из ОС, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
поэтому пароль необходимо поменять сразу |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
после установки сервера. Для его смены вы- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
полняется команда: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
/usr/bin/mysqladmin –uroot password newpass |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
роль пользователя root. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
РАБОТА СЕРВИСА |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
Следующие замечания касаются только |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
Windows баз данных, потому что все они ра- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
ботают в системе как службы. По умолчанию |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
все службы в Windows работают под систем- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
ной учетной записью, однако у нее слишком |
Настройка учетной записи службы |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
много прав, и если хакер через баг сможет |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
проникнуть в сервер базы данных, то будет |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
выполнять команды в системе от имени ло- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
кального пользователя. Чтобы ограничить |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
права, нужно изменить пользователя, от |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
имени которого стартует служба. Для этого |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
зайди в "Панель управления"/"Администри- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
рование"/"Службы" и найди здесь службы |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
своего сервера. Для SQL Server это |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
MSSQLServer и SQLServerAgent. Дважды |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
щелкаем по обеим записям и в появившемся |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
окне свойств переходим на закладку Log on |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
("Вход в систему"). |
|
Виртуальная директория chroot |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
ХАКЕРСПЕЦ |
03(52) 2005 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
||||
|
|
X |
|
|
|
|
|
||||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
|
|
||||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
m |
||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
g |
.c |
|
|||
|
|
p |
|
|
|
|
|
|
|
||
|
|
|
df |
|
|
n |
e |
|
|||
|
|
|
|
-xcha |
|
|
|
|
|
Окно управления сервером в Enterprise Manager
ра", которая выйдет летом 2005 года. В ней по полочкам разложена вся основная информация по безопасности ОС Linux.
Итак, служба базы данных в Linux должна работать в своей виртуальной директории, выше которой программа попасть не может. На схеме виртуальной директории показана часть файловой системы Linux. Во главе всего стоит корневая директория /. В ней находятся /bin, /etc, /home, /usr и т.д. В /home расположены каталоги пользователей системы. Мы создаем здесь новую директорию, которая будет являться корнем для службы. Для примера назовем ее chroot. В ней будут свои каталоги /bin, /usr и т.д., и служба будет работать с ними, а все, что выше /home/chroot, окажется недоступным. Просто служба будет считать, что /home/chroot – это и есть корень файловой системы.
На рисунке рамкой выделены папки, которые будут видны службе. Именно в этом пространстве будет работать сервер баз данных, который будет считать, что это и есть реальная файловая система сервера.
Если хакер проникнет в систему че- рез защищенную службу и захочет просмотреть каталог /etc, то увидит каталог /home/chroot/etc, но никак не системный /etc. Чтобы взломщик ни- чего не заподозрил, в каталоге /home/chroot/etc можно расположить все необходимые файлы, содержащие некорректную информацию ;). Взломщик, запросив файл /etc/passwd через уязвимую службу, получит доступ к /home/chroot/etc/passwd, потому что служба видит его системным.
На работу системы в целом это не повлияет, потому что система будет брать пароли из файла /etc/passwd, а службе не нужны реальные пароли системы, поэтому в файл /home/chroot/etc/passwd можно засунуть все, что угодно.
ТИПЫ АУТЕНТИФИКАЦИИ
Перейдем к знакомству с пользователями базы данных. В большинстве баз данных учетные записи пользователей хранятся в самой базе
(в виде системных таблиц или настро- ечных файлов). Разработчики SQL Server 2000 пошли дальше. Здесь может быть два типа аутентификации – Windows и "Смешанная".
Если выбрана аутентификация Windows, то для проверки пользователей используются учетные записи Windows и ее встроенные механизмы проверки подлинности. Рекомендую использовать именно этот метод, потому что в нынешних дистрибутивах для аутентификации используется Kerberos, который достаточно надежен и к тому же проверен временем в *nix-подобных системах.
Âсмешанном режиме можно создавать пользователей, информация о которых будет храниться SQL-серве- ром в системных таблицах, что не есть хорошо по следующим причинам.
Нужно управлять двумя базами пользователей. Чаще всего заниматься этим лень, поэтому, как правило, все пользователи работают под одной учетной записью или записи соответствуют тем, которые заведены для них в ОС Windows. Таким образом, взломав SQL Server, злоумышленник получит доступ к паролю, который открывает все двери в системе.
Пользователям нужно знать два пароля: на вход в Windows-сервер для работы с файлами и на SQL Server. Конечно же, если пользователю нужен доступ только к базе данных, то для работы потребуется только один пароль – имеющий права доступа к SQL Server.
ОС хранит свои пароли более надежно, с хорошим шифрованием, в закрытом на чтение файле. В MS SQL сервере защита записей проще и все записи при наличии прав администратора легко прочитать в таблице sysusers базы данных Master.
Âэтой статье я расскажу об обоих способах хранения паролей, потому что не все базы данных (отличающиеся от MS) поддерживают аутентификацию Windows.
АУТЕНТИФИКАЦИЯ MS SQL
В MS SQL Server все настройки происходят в SQL Enterprise Manager.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
71 |
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
|
Click |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
m |
|||
w |
|
|
|
|
|
|
||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
||
|
|
|
|
|
|
|
|
Ä À Í Í Û Õ |
|
|
|
|
|
|
|
|
|
|
Á À Ç Û |
|
Настройка аутентификации
Запусти эту программу, и перед тобой откроется окно с разделенной на две части рабочей областью: слева дерево объектов, справа - то, что содержит выделенный в дереве объект.
Откроем ветку Microsoft SQL Servers, в которой содержатся группы серверов. По умолчанию создается группа с именем SQL Server Group. После выделения группы в ней становятся видны все серверы. Если есть локальный сервер, то он останется единственным до тех пор, пока не будут зарегистрированы другие серверы баз данных (удаленные или локальные). Щелкнем по имени сервера и в появившемся меню выберем пункт Properties. Перед тобой откроется окно свойств сервера. Идем на закладку Security – здесь к твоим услугам переключатель между режимами.
Здесь же можно выбрать уровень аудита (Audit Level). По умолчанию выбран None, а значит, сервер не будет сохранять в логах информацию об удачных или неудачных входах в систему. Все знают, что в продуктах MS настройки по умолчанию далеки от идеала, но то, что в логах не будет информации о входах пользователей, - просто катастрофа. Срочно переклю- чай аудит на All, чтобы можно было контролировать, кто и когда входил (или пытался войти).
ВНЕШНИЕ КЛЮЧИ
Как ключи могут повлиять на безопасность? Казалось бы, это всего лишь связь между двумя таблицами. Здесь все довольно просто. Чаще всего связь построена по принципу главный-подчиненный (один-ко-мно- гим). В одной таблице находится главная строка, а в другой - множество подчиненных строк. Допустим, у нас есть две таблицы: одна для хранения списка сотрудников (People), а другая с информацией об их зарплатах по
каждому месяцу (Salary). Если попы- »
Одна из причин падения курсов акций компаний, офисы которых находились во Всемирном торговом центре Нью-Йорка, - утрата корпоративных данных: в башняхблизнецах располагались крупнейшие коммерческие офисы и множество серверов с секретными и особо важными данными.
В истории известны случаи, когда уничтожение данных приводило к банкротству фирм, а виной всему было дилетантство админов.
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
||
|
Ä À Í Í Û Õ |
|
|
|
|
|
|
|
||
|
Á À Ç Û |
|
|
|
|
|
|
|
Дополнительную безопасность могут обеспечить constraint – ограничение на допустимые значения. Например, в колонку с информацией о поле человека вводить только значения "Мэ" и "Жэ" :).
Обязательно
используй внешние клю- чи для объединения таблиц. Эти ключи помогут сохранить целостность данных и не позволят удалить строки, если есть существующие связи.
В защите данных неплохо помогают триггеры – функции, которые выполняются на определенные действия (вставка, изменение, удаление).
72 БЕЗОПАСНОСТЬ ПАДЕНИЕЧЕРНОГОЯСТРЕБА
Страница MS с сервис-паком для SQL Server 2000
таться удалить запись из таблицы Peoples, для которой есть подчиненные записи в Salary, то произойдет ошибка (сначала нужно удалить все подчиненные записи).
Ты еще не видишь преимущество вторичных ключей? А я вижу. Таблицы сотрудников можно сильно не защищать, потому что с ними работает множество народа и текущий список может быть доступен через web. Другое дело - зарплата. Даже если хакер получит доступ к Peoples, то не сможет удалить все записи. Внешние ключи не дадут врагу сделать свое черное дело, пока не будут удалены соответствующие записи из Salary, что намного сложнее.
Из всего сказанного можно сделать такой вывод: если есть публичная таблица, из которой запрещено удалять (Public), создай для нее подчи- ненную таблицу (Slave), защищенную по полной программе, и свяжи обе таблицы внешним ключом. При создании новой записи в главной таблице в подчиненную должна добавляться связанная строка. Эта связь сделает удаление из Public невозможным до тех пор, пока хакер не найдет закрытую для бдительной общественности таблицу Slave.
расчетом контрольной суммы всех полей. Если пользователь изменил зна- чения какой-либо строки с помощью программы, то она автоматически пересчитывает контрольную сумму. Если строка изменена напрямую, то в поле Security будет некорректное зна- чение, которое легко определить в триггере (а он должен выполняться на события изменения данных) и откатить злостное изменение.
Точно так же можно защищать таблицы не только от изменения, но и от вставки (защита от флуда на базу данных) и удаления (попытки уничтожить важные данные).
ПРАВА ДОСТУПА
Любые попытки отконфигурировать базу данных на полную безопасность окажутся пустой тратой времени, если неправильно настроены права доступа к объектам. Если все объекты базы данных и сами данные светятся в интернете, как гирлянда на кремлевской елке, то работа админа пропала даром. Настроить права доступа – первое, что нужно сделать. В этом случае даже если взломщик проникнет в систему, у него не хватит прав на доступ ко всем секретам. О правах доступа читай в отдельной статье.
ТРИГГЕРЫ |
|
Не менее интересным способом |
|
обеспечения безопасности являются |
|
триггеры - коды, похожие на процеду- |
|
ры, хранящиеся на сервере. Такой код |
|
нельзя вызвать напрямую: он выпол- |
|
няется в ответ на определенные со- |
|
бытия (вставка, изменение и удале- |
|
ние строк). Внутри триггера можно |
|
проверить корректность выполняе- |
|
мых действий. Если хакер попытается |
|
испортить данные, в триггере можно |
|
будет увидеть этот подвиг. |
|
Рассмотрим пример защиты табли- |
|
цы от изменений через триггер. Для |
|
защищенной таблицы заводим поле |
|
Security. В этом поле должен хранить- |
|
ся код, который вычисляется извест- |
|
ным только тебе способом, например, |
Окно создания нового события |
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
|
X |
|
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
|||
|
|
F |
|
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
BUY |
|
|
||||
|
|
|
|
|
to |
|
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
|
|||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
ОБНОВЛЕНИЕ |
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
e |
|
||||
|
|
|
p |
df |
|
|
|
g |
.c |
|
||
|
|
|
|
|
|
n |
|
|
|
|
||
|
|
|
|
|
-x cha |
|
|
|
|
|
Как известно, в любой программе есть ошибки. Спроси любого хакера о том, какое ядро Linux самое безопасное. Ответ очевиден - самое последнее. Не торопись доверять этим слухам о ядре, не содержащем ошибок: просто о них еще никто не узнал. Задай тот же вопрос тому же гуру через полгода, и то ядро, которое хвалили полгода назад, назовут самым дырявым в истории Linux.
Что поделаешь, такова природа че- ловечества в целом и программного обеспечения в частности :). Ошибки есть всегда и везде. Как только появляется критическая ошибка в какойлибо базе данных, у админов всего мира начинается черная полоса в профессиональной деятельности, потому что в первые дни после выхода эксплойта хакеры ломают все, что только под руку попадется.
Основная задача специалиста по безопасности - вовремя выявлять эти ошибки и исправлять раньше, чем взломщик воспользуется уязвимостью. Для этого нужно быть подписанным на все основные BagTraq и регулярно следить за выходами обновлений базы данных. По своему опыту могу сказать, что лучше всего на это дело реагируют Oracle и MS. Их патчи выходят вовремя, и если не проспать нужный момент, вероятность взлома намного снизится.
Помни, что основными причинами взлома являются неправильное распределение прав и не пропатченный вовремя софт.
МОМЕНТАЛЬНАЯ РЕАКЦИЯ
Между взломщиками и специалистами по безопасности идет самая настоящая война, в которой побеждает тот, кто знает больше и реагирует на все быстрее. Если не хочешь оказаться в числе проигравших, научись быстро реагировать на происходящее. В базах данных для этого есть множество удобных прибамбасов, и в этом плане одним из лидеров является MS SQL Server. В этом сервере есть очень удобный помощник – события.
ХАКЕРСПЕЦ 03(52) 2005
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
|
i |
r |
|
P |
|
|
|
|
|
NOW! |
o |
|||||
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
|
|
|
||||
|
|
|
|
to |
|
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
e |
o |
|
||
|
. |
|
|
|
|
|
Сервер баз данных может ловить |
|||||
|
|
p |
df |
|
|
|
g |
.c |
|
|||
|
|
|
|
|
n |
|
|
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
достаточно много событий. Наиболее интересным с точки зрения безопасности может быть Insufficient permission (недостаточные права). Допустим, хакер пытается проникнуть в систему и удалить все данные. На какомто этапе исследования он узнает пароль доступа одного из пользователей и запустит команду DELETE FROM DatabaseName. Если прав недостаточ- но, то злодей будет искать другую учетную запись и пароль к ней до тех пор, пока не найдет интересующую его жертву.
Задача защищающей стороны - вовремя обнаружить попытку взлома, и в
этом ей помогают события. Когда хакер неудачно выполнил команду, система генерирует ошибку Insufficient permission, и чем быстрее обнаружится ошибка, тем быстрее можно будет предпринять меры пресечения. Например, узнав об ошибке, можно тут же добавить в сетевой экран фильтр и запретить любое подключение с IPадреса злоумышленника. Таким образом, можно выиграть время, пока хакер будет обходить правила сетевого экрана. Начинающего взломщика это может просто напугать, и он убежит сломя голову.
Как создаются события? В Enterprise Manager открываем ветку
Окно создания нового оператора
73
Management/SQL Server Agent/Alerts. Здесь щелкаем правой кнопкой и в появившемся меню выбираем New Alert. Открывается окно создания нового события, в котором нужно заполнить следующие поля:
-name – имя, которое может быть любым;
-type – тип события, может быть event alert (здесь все основные события) и performance condition alert (события производительности);
-Severity – здесь нужно указать конкретное событие, которое требуется отловить.
На закладке Response можно указать операторов, которым нужно отослать сообщения (e-mail, net send или пейджер) о возникновении события.
Операторы – это просто контактная информация людей, отвечающих за работу сервера. Например, можно указать себя и свой e-mail, и при возникновении события на твой ящик будет падать тревожное письмо с информацией об ошибке. Таким образом, как только возникнет критическое событие, не надо будет лишний раз осматривать весь журнал безопасности.
ИТОГО
В этой статье мы рассмотрели основы безопасности и средства, которые предоставляют базы данных. Но нельзя забывать, что уязвимыми могут быть не только настройки, но и сама ОС или программы базы данных.
Ошибки есть в любом софте, поэтому не забывай следить за сообщениями об ошибках и обновлять сервер. Надежда на то, что тебя не взломают, – рисковое дело. Когда-нибудь найдется человек, который просто от скуки или в отместку за что-нибудь напишет DROP DATABASE, и тогда, увы, ты распрощаешься с плодами своего многолетнего труда. E
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
||
|
D |
|
|
|
|
|
|
|
i |
r |
|
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
||
|
|
|
|
-x cha |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
Ä À Í Í Û Õ |
|
|
|
|
|
|
|
|
|
|
|
Á À Ç Û |
|
|