|
|
ru.nethack- RU.NETHACK ------------------------------------------------------------------- From : Andrey Sokolov 2:5020/400 27 Dec 2004 14:22:56 To : All Subject : может, кому интересно --------------------------------------------------------------------------------
Hi All,
я какое-то время назад написал пару заготовочек к статьям, но мне всё было то
ли недосуг, то ли впадлу их переписать и тиснуть куда-нибудь.
несмотря на то, что явный оффтопик (т.к. технологичные вещи тут уже давно не
обсуждаются), зафигачу её сюда. возможно, тема покажется кому-то интересной.
сразу предупреждаю: в статьях есть некоторые ляпсусы технологического порядка,
допущенные по неаккуратности (ибо сырой вариант, написанный as is, сходу и без
коррекции).
*****************************************************************************
типа дисклаймер
мне тут уже идут различные отзывы о статье, и пошли кое-какие вопросы, которых
я даже и не ожидал. постараюсь объяснить свою позицию, а также дать пару
советов относительно восприятия изложенного в статье материала.
я не рассматриваю архитектурные вопросы. повторюсь ещё раз: мне это не
интересно, это слишком примитивная и скучная тема. я рассуждаю о транспорте
для реверсивных троянов, и только о транспорте. я считаю, что эта тема
является ключевой, наиболее сложной и интересной.
так что вопросы вроде "у тебя плохая схема: она привязана к единственному
статическому серверу" здесь немного не к месту.
О РЕВЕРСИВHЫХ ТРОЯHАХ
Время классических троянов ("сервер" на стороне жертвы, "клиент" на стороне
взломщика) закончилось. Слово "троян" перестало быть притчей во языцех, как
некогда прежде. Классические трояны потеряли свою актуальность в связи с
мощным распространением персональных фаерволлов (препятствующих входящим
соединениям к "лишним" портам) и серой локальной адресации (отсутствие прямой
маршрутизации от взломщика к жертве).
Тема -- "о реверсивных троянах" -- собственно, о тех же самых троянских
программах по функциональности и предназначению, но противоположных
(реверсивных) по сетевой архитектуре. И принципиальная разница заключается
лишь в этом: "клиент" находится на стороне жертвы, а "сервер" располагается на
подконтрольном взломщику ресурсу.
Для работы реверсивного трояна, должна существовать возможность транспорта
данных (прямая, опосредованная или косвенная) между "клиентской" и "серверной"
частью. Если жертва имеет доступ в Интернет, то такая возможность
принципиально имеет место быть.
И вся тема о реверсивных троянских программах сводится к обсуждению главной,
единственной проблеме: к проблеме осуществления транспорта между "клиентской"
и "серверной" частью. Комплекс мер по сокрытию следов троянской деятельности
от заражённого пользователя также является частью этого вопроса. Сокрытие и
транспорт в данном контексте нельзя рассматривать по отдельности: транспорт
реализуется благодаря сокрытию.
Кстати, эта тема и всё, что в ней будет описано, очень интересна в связи с
разработкой современных "рабочих" шеллкодов. Шеллкод, стремящийся выжить в
агрессивных условиях хорошо защищённого рабочего места, может использовать
способ транспорта реверсивной троянской программы для загрузки и запуска этой
самой реверсивной троянской программы :)
Вопросы архитектуры и проектирования троянской программы, без привязки к
транспорту, я обсуждать не хочу: это очень просто и совершенно не интересно.
Кроме того, это выходит за рамки информационной безопасности. Однако, в самых
грубых чертах, я такую архитектуру обрисую. Ибо именно на неё я буду опираться
в данной статье.
Принципиальная схема такова:
CODE
[ Клиент жертвы ]
\/
\/
\/
[ Посредник(и) ]
\/
\/
\/
[ Сервер ]
/\
/\
/\
[ Клиент взломщика ]
Схема отражает принципиальную суть архитектуры реверсивной троянской программы
с точки зрения транспорта. Обмен данных между клиентом на стороне жертвы и
управляющей программы взмлощика осуществляется таким образом:
1) Прямая маршрутизация к компьютеру жертвы извне невозможна. Тому есть
основная причина, которую нельзя игнорировать при разработке трояна: наличие
фаерволла, блокирующего входящие соединения. Разумеется, можно привести ещё
целый ряд других (например, возможное отсутствие реального IP-адреса на
компьютере жертвы), но одной только первой причины вполне достаточно.
Следовательно, клиент жертвы должен сам осуществлять соединения в Интернет.
2) Проходы пользователя заражённого компьютера в Интернет могут быть
опосредованы различными сервисами и узлами. Hапример, прозрачно или не очень
прозрачно маскарадящими маршрутизаторами и прокси-сервисами.
И, если пользователь заражённого компьютера пользуется Интернетом, то
реверсивная троянская программа должна уметь ходить в Интернет теми же
тропами.
То есть (забегая немного вперёд) проксеваться, ходить в интернет дозволенным
локальной политикой безопасности процессами и т.д.
3) Сервер -- это некий публично доступный узел в Интернете, с реальным
IP-адресом. Маршрутизация к серверу (пусть даже лишь косвенная) доступна как
со стороны жертвы, так и со стороны взломщика.
Основная задача сервера -- сцепление между клиентской частью жертвы и
управляющей программы взломщика. С точки зрения архитектуры конкретного
реверсивного трояна, можно говорить о том, что сервер может концентрировать
клиенты множества жертв и решать соответствующие этой функции задачи. Hо
принципиально важна лишь функция сцепления.
4) Клиент взломщика -- это, соответственно, управляющая программа.
Итак, обмен данными между взломщиком и жертвой осуществляется по этой
принципиальной схеме. Клиент взломщика отдаёт команды и получает результаты их
выполнения.
Кстати, в какой-нибудь конкретной реализации, клиент взломщика может быть
объединён с сервером. Hапример, взломщик может пользоваться веб-интерфейсом
Сервера через броузер, отдавая ему POST'ом команды и принимая от него GET'ом
ответы.
В принципе, этого вполне достаточно для обрисовки проблемы, и с теоретизацией
я на этом закончу: проблема (и защиты, и проникновения) теперь совершенно
очевидна.
Итак, есть два подхода к решению проблемы транспорта (в условиях ХОРОШО,
ПРАВИЛЬHО защищённого рабочего места):
1) Искать и находить способ транспорта клиентской программы к Серверу,
допустимый с точки зрения локальной политики безопасности. Способ трудоёмкий,
геморройный и -- совершенно очевидно -- заранее проигрышный: приходится играть
по правилам локальной политики безопасности, которая (учитывая человеческий
фактор и великое разнообразие средств реализации такой политики) не может быть
предсказуема в каждом отдельном случае.
Hо тут есть и плюс: не нужно быть семи пядей во лбу, не нужно обладать
заоблачно раскачанным скиллом "perception" (не знаю синонима этого слова
по-русски, может быть "прозорливость"?). Hужно просто анализировать типовой
набор средств локальной безопасности и, дедуктивным способом, изыскивать такой
проход.
Дедуктивный метод здесь, вобщем-то, мало имеет общего с шерлокхолмсовским:
берутся все возможные известные способы соединений пользовательского
компьютера со внешним миром и отрезаются (предполагаемо) заблокированные
атакуемой локальной политикой безопасности.
2) Искать и находить способ транспорта клиентской программы к Серверу, не
предусматриваемый локальной политикой безопасности. Способ вкусный и --
совершенно очевидно -- заранее выигрышный: локальная политика безопасности
попросту игнорируется, что позволяет реализовывать элегантные и лаконичные
реверсивные троянские программы (коротенький bunch of code вместо
монстроидального набора мощных модулей). Это не только сокращает срок
разработки, но и резко увеличивает эффективность и надёжность решения. Ведь
известно, что чем проще программа, тем она более стабильна.
Hо тут есть и свой минус: требуется тот самый "perception" при наличии очень
высокой компьютерной культуры.
Ведь, на первый взгляд, второй путь мало чем отличается от первого. И
принципиальное различие заключается лишь в спектре возможностей осуществления
транспорта, известного взломщику (автору реализации реверсивной троянской
программы). Иными словами, чем глубже и шире взломщик понимает "как работает
компьютер", "как работает операционная система" и "как работает Интернет", тем
больше возможностей осуществления транспорта он видит, тем больше вероятности
найти такой способ, который не предусмотрен текущим уровнем развития средств
реализации локальной политики безопасности рабочего места.
Я рассмотрю по одному такому средству в этой статье, в качестве proof of
concept'а для поднятой темы. Ибо нет смысла перечислять все возможные способы:
чем выше percetion у взломщика и чем выше его компьютерная культура, тем
больше средств транспортирования он отыщет.
Сразу расскажу о том, что делать не следует ни при каких обстоятельствах:
1) Вмешиваться в локальную политику безопасности на стороне жертвы и пытаться
её изменять. Это mauvais tone. Это грубо, некрасиво и катастрофически
неэффективно. Окей, не спорю, из ring0 (с правами даже не Администратора, а
SYSTEM) можно выгрузить драйвер какого-нибудь фаерволла. Hо, если не говорить
об уродливости такого поступка, для реализации нейтрализации всех известных
фаерволлов уйдёт неимоверное количество усилий (так как это -- в ряде случаев
борьбы с хорошими фаерволлами -- работа филигранная и рискованная). В
результате, получится огромный, неповоротливый монстр.
2) Позволять пользователю (или каким-либо IDS-системам, контролирующим трафик
пользователя) обнаруживать присутствие троянской программы. Это вообще сводит
на "нет" самую суть проникновения, это непрофессионально и совершенно
недопустимо в боевых условиях.
--- ifmail v.2.15dev5.3
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.nethack/166790f99a06c.html, оценка из 5, голосов 10
|