На главную | Содержание | Назад | Вперёд
Наши друзья

 

 

Взлом клиентских программ

Если вы думаете, что вы хакер и что достаточно усесться за монитор и дать команду на проведение атаки против определенного IP-адреса, то подобные за­блуждения могут привести к ужасным последствиям. Можно самому стать жертвой атаки, поскольку вы проникаете на "вражескую" территорию. Вы не знаете, что представляют собой "атакуемые" системы, как устроено их программное обеспече­ние. Зато противник может вас видеть. Он может использовать любые ваши предпо­ложения, сделанные во время атаки. Если он обладает информацией о вашей систе­ме, он вполне способен "заразить" ее вирусом. В конце концов, код клиентского при­ложения обрабатывает то, что ему отправляет сервер!
Вы всегда рискуете встретить "ответный огонь", когда взламываете чужие систе­мы. Они способны уничтожить вас с помощью ваших собственных соединений.
Теперь рассмотрим ситуацию с другой стороны. Предположим, ваша сеть подвер­глась атаке. Каждый хост, который подключается к TCP-порту вашей системы, от­крывает себя для проведения контратаки. Вполне реально уничтожить злоумыш­ленника ответной атакой. Но как? Прекрасным методом возмездия является взлом клиентских программ.
Клиентские программы в качестве цели атаки
Как известно, клиентское программное обеспечение может использоваться для подключения к серверу, но злоумышленник может использовать взломанную кли­ентскую программу или непосредственно взаимодействовать с сервером (как мы рассказали в главе 4, "Взлом серверных приложений"). Еще раз повторим наш стан­дартный совет, что серверы никогда не должны доверять данным, получаемым от клиента, а в клиентском коде никогда не должны реализовываться какие-либо функ­ции защиты сервера.
Использование клиентского кода для защиты сервера от атак называют безопас­ностью на стороне клиента (client-side security). Любые подобные механизмы прак­тически наверняка указывают на уязвимую архитектуру обеспечения безопасности. К счастью, эта глава не посвящена рассмотрению подобных вопросов.
Когда мы говорим об атаках на клиентские программы и внесении данных на клиентский компьютер, то подразумеваем совсем иной тип "безопасности на стороне

клиента". В данном случае мы говорим о клиенте, который не доверяет серверу. Другими словами, сервером может управлять хакер и он может попытаться взломать компьютер пользователя посредством клиентской программы. Что дальше?
Зачастую клиентская программа — это только один из уровней между сервером и файловой системой или локальной сетью пользователя. Если вредоносный сервер способен проникать в систему клиента, то с помощью такого сервера можно скачать файлы пользователя или даже заразить вирусом всю его сеть. Эта идея полностью меняет модель безопасности, поскольку безопасность в основном обеспечивается для сервера, в ущерб интересам клиента. Однако с появлением огромных компаний и мощных сетевых служб сейчас многие люди совместно используют общедоступ­ные серверы с другими, незнакомыми людьми. Если эти серверы не защищены, по­тенциальные хакеры могут захватить управление сервером и провести атаку на дру­гих клиентов посредством скомпрометированной службы.
Представьте себе сервер в виде общедоступной комнаты отдыха. Серверное при­ложение обычно принимает соединения от тысяч клиентов, позволяет проведение транзакций и сохраняет данные пользователей. Во многих случаях сервер позволяет клиентам обмениваться данными, например, при общении в чате или при обмене файлами. В течение рабочего дня клиентам, как правило, просто необходимо взаи­модействовать с сервером.
Сервер обычно физически установлен отдельно от клиентов, и в качестве среды для обмена информацией используется сеть. Для обеспечения дружественного пользова­тельского интерфейса взаимодействия с сервером и созданы клиентские программы. Таким образом, клиентские и серверные программы часто связаны очень тесно.
Сервер управляет клиентом
В начале эпохи сетевого взаимодействия клиенты обычно представляли собой монохромные терминалы, связанные с мэйнфреймом, установленным в другой ком­нате. Такие терминалы были лишены каких-либо интеллектуальных свойств. Безус­ловно, пользователи хотят видеть на своих терминалах не только монохромные сим­волы, но и цветные, четкие изображения. Для этой цели был разработан специаль­ный управляющий код, который сервер может использовать для форматирования данных на стороне клиента. Теперь многие символы, отправляемые сервером, стали интерпретироваться как "управляющий код", который мог использоваться для раз­ных действий, например для активизации звонка, подачи бумаги в телетайп, очистки экрана и т.д. Управляющие коды были определены для определенных типов терми­налов, включая vtlOO, vt220, adm5 ANSI color и др. В спецификациях было опреде­лено, как терминалы должны интерпретировать последовательности символов для конкретного форматирования, создания цветов и меню.
В настоящее время клиенты встроены в Web-браузеры, приложения настольных компьютеров, программы воспроизведения медиа-данных и в сетевые устройства. Клиенты эволюционировали до программ общего назначения, разработанных на ос­нове различных технологий, включая программный код на C/C++, программы на различных языках сценариев (Visual Basic, Perl, tcl/tk) и Java-приложения. Клиент­ские программы становятся все сложнее и все мощнее, но старые правила для пре­доставляемых серверами управляющих кодов по-прежнему остаются в силе для многих клиентских программ. После непомерного увеличения управляющих кодов

для клиентских программ были разработаны технологии HTML, SGML, AML, ActiveX, JavaScript, VBScript, Flash и т.д. и т.п. Все эти технологии могут использо­ваться сервером для того, чтобы (в некотором смысле) управлять клиентской про­граммой. Современные серверы способны отправлять специальные сценарии, кото­рые интерпретируются (исполняются) на клиентском терминале, наиболее распро­страненным из которых является Web-браузер. Вспомните наши предыдущие предупреждения о расширяемых системах, таких как JVM и исполняемая среда .NET. В современных клиентах практически всегда существует встроенная возмож­ность расширяемости, и в качестве входных данных они способны принимать пере­носимый код. Это мощные возможности, и этой мощностью вполне может восполь­зоваться хакер1.
Пользователь, который работает на подключенном к сети сервере, должен осоз­навать, что на этой системе работают и другие пользователи (т.е. они совместно используют одну систему). Данные общедоступного сервера доступны всем желаю­щим. При каждом доступе к Web-странице или чтении файла можно получить ин­формацию, предоставленную другим пользователем. Таким образом, клиентская программа осуществляет чтение данных из потенциально опасных источников. Как сервер не должен доверять клиентам, так и клиент никогда не должен слепо дове­рять любому серверу. Если сервер способен отправить клиенту код для вызова звон­ка, представьте себе, что может произойти, когда один из пользователей совместно используемой системы отправит сообщение, в котором будет содержаться этот спе­циальный управляющий код. Вы правильно догадались: зазвенит звонок. Пользова­тели обладают возможностью передачи данных клиентской программе других поль­зователей системы. Хотя наш пример со звонком достаточно прост, представьте, что может случиться, когда хакер вместо кода для вызова звонка предоставит полную программу JavaScript.
Ловушка для хакера
В военных и других секретных организациях распространена практика создания подложных или т.н. обманных систем. Только подумайте, почему так просто найти узлы военных организаций? Просканируйте только несколько российских сетей и вы найдете достаточное количество Web-сайтов военных организаций России. Ка­жется, что на этих сайтах содержится подробная техническая информация о воору­жениях и военных ведомствах. Разведывательные службы используют многие из этих сайтов для сбора информации об IP-адресах интересующих пользователей и составления "профиля" интересов посетителей таких сайтов. Бывает очень полезно знать, какие данные интересуют ваших противников.
Наши читатели, наверное, не удивятся, когда узнают, что после посещения таких обманных сайтов выполняется ответное сканирование компьютера посетителя. Но можно задать себе и такой вопрос: зачем проводить сканирование клиента, если его можно заразить вирусом?
1 Безусловно, не во всех клиентских программах поддерживается работа с переносимым ко­дом. Существует множество клиентских программ, в которых отсутствуют встроенные расширяемые системы.
В этой главе в достаточной степени уделено внимание тому, как "заразить" посе­тителей сервера вредоносным кодом. Если сделать цель достаточно привлекатель­ной, то "жертвы" сами придут и попадут в расставленную ловушку. Чтобы лучше понять, в чем здесь суть, задумайтесь над таким вопросом: если отправить файл под названием WINNT_SOURCECODE.ZIP размером 90Мбайт на общедоступный FTP-сайт, сколько людей скачают этот файл?

 

На главную | Содержание | Назад | Вперёд
 
Яндекс.Метрика