Online Documentation Server
 ПОИСК
ods.com.ua Web
 КАТЕГОРИИ
Home
Programming
Net technology
Unixes
Security
RFC, HOWTO
Web technology
Data bases
Other docs

 


 ПОДПИСКА

 О КОПИРАЙТАХ
Вся предоставленная на этом сервере информация собрана нами из разных источников. Если Вам кажется, что публикация каких-то документов нарушает чьи-либо авторские права, сообщите нам об этом.




Ключ от комнаты или дырявая сеть

Вследствие роста темпов развития Internet в России защита данных в сетях Internet/Intranet приобретает не меньшую, чем на Западе, актуальность.

Александр Авдуевский

НАСКОЛЬКО ЖЕ ВЕЛИК РИСК?
КЛЮЧ ПОД КОВРИКОМ
И У СТЕН ЕСТЬ... НОСЫ
МЕТОДИКА ЗАХВАТА СОЕДИНЕНИЯ TCP/IP
УСТАНОВЛЕНИЕ СОЕДИНЕНИЯ TCP/IP
АТАКА СОЕДИНЕНИЯ
НАСКОЛЬКО НАДЕЖНЫ СЕГОДНЯШНИЕ МЕТОДЫ ЗАЩИТЫ СЕТЕЙ?
ЗАКЛЮЧЕНИЕ

КАК ЗАЩИТИТЬ WEB-СЕРВЕР - ВОПРОС ОСТАЕТСЯ ОТКРЫТЫМ
Новые развлечения хакеров ставят новые проблемы


Вы уверены, что сеть защищена на 100%? Вследствие изначального отставания, отечественный сетевой бизнес миновал ряд детских болезней Internet (не ходили со всеми в детский сад и ветрянкой не болели), но тем не менее проблема защиты данных Internet до сих пор воспринимается многими довольно абстрактно. Цель нашей статьи - обратиться к корням проблемы.

НАСКОЛЬКО ЖЕ ВЕЛИК РИСК?

Сколько же потенциально уязвимых мест у сетей, подключенных к Internet или, употребляя более корректную формулировку, использующих службы и сервисы Сети? Если сильно обобщать, то слабых мест найдется не больше, чем два десятка, если же опускаться до конкретики каждого аппаратно-программного решения, их будут уже сотни. При сбалансированном подходе правде положено лежать где-то посередине, поэтому, наверное, можно согласиться с оценкой специалистов компании Internet Security Systems, считающих,что в любой сети, основанной на протоколе TCP/IP, существует около 135 потенциальных лазеек для хакеров. Заметим, речь идет именно о TCP/IP. Если сервер в имеющей выход в Internet сети работает под Novell NetWare, применяющей протокол IPX/SPX, и к тому же у него даже нет IP-адреса, то дотянуться до него злоумышленник попросту не сможет. Не стоит, думается, называть взлом такой сети абсолютно невозможным, но без серьезной помощи изнутри организации проникнуть в сеть точно не удастся.

Если же TCP/IP - базовый протокол корпоративной сети (что, как правило, следует из использования Unix-систем, входящих в группу риска), то ее уязвимость многократно возрастает. Самые незащищенные конфигурации сетей имеют, прежде всего, крупные компании - наиболее вероятная жертва происков мошенников. Правда, даже структурно небольшие организации рискуют конфиденциальной информацией, если в качестве магистрали глобальной сети они применяют Internet. При необходимости в такой магистрали компании с небольшим бюджетом обращаются в первую очередь к Internet, как к готовому недорогому решению, и сталкиваются с незащищенностью открытых систем.

КЛЮЧ ПОД КОВРИКОМ

В недалеком будущем протокол TCP/IP и разновидности Unix, точнее, их сетевые разделы, станут более защищенными, но пока нам приходится пожинать плоды того, что при их разработке никто и не задумывался толком, какие проблемы могут возникнуть в будущем, то есть сегодня. Какое же наследие старорежимных времен мешает нам жить?

Главным образом это недостатки системы аутентификации пользователей. Лично мне не так давно (без злого умысла, по необходимости) удалось подобрать чужой пароль вручную. Автор данной статьи имел представление, какие именно слова может использовать его коллега, и, применив метод Бивиса и Батт-Хэда, угадал с первой попытки. Конечно, простой перебор отнял бы у вас вечность, но программе хватит и нескольких часов. У хакера есть возможность запустить программу, делающую одну за другой попытки войти в сеть через telnet, и не исключено, что он добьется успеха, поскольку при довольно скромных ресурсах компьютера, на котором запускается программа-взломщик, можно производить до 1000 попыток регистрации в минуту, что составит 1152000 паролей в день. Для сравнения скажем, что, например, количество более-менее общеупотребительных слов в английском языке приблизительно равно 150000 (во всяком случае, столько их в Большом англо-русском словаре). Безусловно, администратор может обнаружить следы многократных исполнений команды login с определенного IP-адреса, но не факт, что по этому адресу он сумеет найти злоумышленника.

Впрочем, мы забегаем вперед. Вернемся к паролям: при всей своей простоте прямой перебор слишком легко фиксируется и может быть тут же пресечен, но арсенал взломщика им не исчерпывается. Предположим, удаленный пользователь, человек или программа, через telnet или ftp удаленно регистрируется в сети - что из этого следует? То, что имя пользователя и его пароль открытым текстом пропутешествуют через Internet. Отслеживание IP-пакетов, идущих на конкретный адрес, позволяет получить реквизиты зарегистрированного пользователя, правда, перехват трафика - методика далеко не тривиальная и требует реализации соответствующих условий, о чем еще пойдет речь.

Итак, пароль одного из пользователя у нас... то есть, мы хотели сказать, в руках у взломщика. Если перехвачен пароль администратора, то ключ от квартиры, где деньги лежат, уже в кармане, и остальное - дело времени. Но даже если получена возможность всего лишь легально зарегистрироваться в системе под именем первого попавшегося пользователя, то добиться можно очень и очень многого. Во-первых, этот первый попавшийся пользователь может иметь доступ к ценной корпоративной информации; во-вторых, даже если это не так, у него есть доступ к одному важному файлу - файлу паролей.

Все пароли в системе Unix лежат в зашифрованном виде в одном файле, доступном для чтения простым пользователям. Многочисленные программы взлома позволяют извлечь из файла все пароли, в том числе и пароль root - все тот же ключ от квартиры. В Windows NT, правда, такой открытости нет, но тем не менее если незваный гость закрепится на одном узле сети, то проникнуть дальше вглубь сети ему уже проще.

Распространенный метод сбора конфиденциальной информации - запуск на "инфицированных" рабочих станциях программ, считывающих ввод с клавиатуры. Эта методика дает шанс получить другие пароли, используемые в системе.

Кое-кто, возможно, уже удивился легкости, с которой наш гипотетический злоумышленник расправляется с паролями. Но тому есть сразу два объяснения: с одной стороны, методика взлома основывается на том допущении, что люди выбирают, как правило, легко запоминаемые пароли, а с другой стороны, программы-взломщики системных паролей распространяются не только хакерами-любителями, но и фирмами, занимающимися профессиональной разработкой ПО. Да-да, не удивляйтесь, они продаются на совершенно легальной основе, как инструменты сетевых администраторов для проверки надежности системы паролей. Администратор может найти слабый пароль до того, как это сделает кто-нибудь другой, и принять соответствующие меры, под которыми подразумевается воспитательная работа с пользователями (урезание бюджета, например) с последующей сменой пароля.

Если пароль состоит из 10 символов, то при приведенной выше производительности программы-взломщика на перебор всех возможных вариантов уйдет порядка двух миллиардов дней или трех миллионов лет. Поэтому методу атаки "в лоб" можно противостоять простыми организационными мероприятиями. Куда опаснее упомянутое вскользь "прослушивание" IP-пакетов.

И У СТЕН ЕСТЬ... НОСЫ

Если пользоваться английской терминологией, то IP-пакеты (и сеть вообще), не прослушивают, а пронюхивают. Соответствующие программы так и называются - снифферы (sniffer - буквально "нюхач"). Снифферы распространяются как в среде хакеров, так и на коммерческой основе. Тут, кстати, прослеживается традиция: точно так же профессиональный слесарный инструмент может с равным успехом применяться как мастерами, так и "медвежатниками". Технология вынюхивания все время совершенствуется, и, не останавливаясь подробно на истории ее развития, посмотрим, на что способны самые продвинутые и, соответственно, самые опасные снифферы.

Самый яркий представитель последнего поколения "слухачей" (назовем их по-русски так) - это IP-Watcher. Отличительными чертами программы является наличие пользовательского интерфейса, позволяющего выборочно отслеживать любые потоки пакетов, и, главное, примененная в ней технология активного сниффинга, позволяющего взаимодействовать с сетевыми соединениями. Под взаимодействием в данном случае подразумевается прерывание или даже захват активных соединений.

Захват законного соединения возможен даже при использовании в сети системы одноразовых или же зашифрованных паролей. Проникновение в систему при этом не только упрощается, но и становится практически незаметным: взломщик, по сути дела, лишь разбавляет поток пакетов (что избавляет его от необходимости подделывать свой IP-адрес в случае фильтрации системой входящих пакетов по этому признаку). Пользователь заметит только некоторое замедление сети, что свяжет с перегрузкой трафика или проблемами связи, а сервер, естественно, это никак не воспримет.

Обладая достаточной квалификацией, злоумышленник может заставить соединение существовать даже после того, как пользователь прекратит работу. В сочетании со способностью программы прерывать TCP-соединения это приводит к следующему возможному сценарию атаки. Взломщик, образно говоря, сидит на соединении, но пока не может зарегистрироваться на конкретной станции. Он прерывает соединение, что, с большой степенью вероятности, приводит к повторной регистрации пользователя и, соответственно, перехвату пароля. На период времени укоренения на станции сниффер может временно отсечь возможность удаленного мониторинга администраторами, происходящего на станции. Наконец, перекрыв все сетевые соединения на данной рабочей станции, атакующий вынуждает пользователя обратиться за помощью к администратору. Наиболее вероятный результат - администратор, пытаясь установить возможные причины сбоя сети, зарегистрируется на станции, и его пароль будет перехвачен. Очень похоже на кадры из фантастического боевика, с той только разницей, что все сделанные допущения не выходят за рамки сегодняшней реальности.

Возможность выборочного отслеживания трафика позволяет IP-Watcher собирать практически любую информацию, передаваемую в сети. Он может, во-первых, перехватывать все ту же удаленную регистрацию пользователей, и, во-вторых, либо перехватывать файлы, записываемые на сервер после обработки на рабочей станции, либо перехватывать изменения, вносимые пользователем в случае архитектуры клиент-сервер. Выборочное отслеживание трафика оказывается и хорошим средством защиты от обнаружения. Если администратор подозревает, что в системе работает сниффер, он ищет результат его деятельности, т.е. особо крупные файлы с записью перехваченного трафика. В случае IP-Watcher вместо всего, что "гуляет" по сети, записывается только необходимый минимум информации - это позволяет программе довольно долго скрывать свое присутствие.

Думается, нам удалось обосновать свое утверждение о том, что активный сниффинг на сегодняшний день - самая передовая технология обхода многих устоев протокола TCP/IP.

МЕТОДИКА ЗАХВАТА СОЕДИНЕНИЯ TCP/IP

Возможность захвата соединения - врожденный недостаток протокола TCP/IP. Правда, сей недостаток представляет не только инструмент для проникновения в чужую сеть, но и дополнительные средства управления и мониторинга потоков IP-пакетов, и, несомненно, знание этого механизма будет нелишним. Ознакомимся с упрощенной моделью захвата соединения, оговорив начальные условия.

Главным при захвате является возможность прослушивания соответствующего трафика, для чего, как мы уже говорили, требуется реализация определенных условий. Internet - это не широковещательная сеть (иначе сегодняшний трафик ее бы просто похоронил), а посему перехват чужих пакетов возможен, только когда взломщик по чистой случайности находится в одном сегменте с жертвой - раз; когда взломщик действует на уровне провайдера - два; когда подключение к трафику происходит на уровне кабельных соединений - три. Последние две ситуации -безусловно исключительные, но криминальным структурам и некоторым государственным органам они вполне по плечу.

Итак, предположив, что на двух концах соединения находятся клиент и сервер, примем следующую систему обозначений:

SVR_SEQ - порядковый номер очередного байта, посылаемого сервером;
SVR_ACK - следующий байт, который получит сервер (порядковый номер предыдущего байта + 1);
SVR_WIND - окно приема сервера;
CLT_SEQ, CLT_ACK, CLT_WIND - аналогичные величины для клиента.

Введем также обозначения для полей заголовка пакета TCP (см. Рис. 1):

SEG_SEQ - порядковый номер пакета;
SEG_ACK - ожидаемый порядковый номер следующего принимаемого байта;
SEG_FLAG - набор контрольных битов пакета.

Picture 1 (1х1)

Рисунок 1.
Краткие расшифровки полей.

Перечисленные параметры связаны между собой следующим образом:

всегда

CLT_ACK Ј SVR_SEQ Ј CLT_ACK+CLT_WIND и
SVR_ACK Ј CLT_SEQ Ј SVR_ACK+SVR_WIND;

как правило (при прямом соединении)

SEG_SEQ = CLT_SEQ и
SEG_ACK = CLT_ACK.

Теперь предположим, что установлено соединение TCP/IP.

УСТАНОВЛЕНИЕ СОЕДИНЕНИЯ TCP/IP

Процесс установления соединения, в предположении, что оно инициируется клиентом при отсутствии обмена информацией, потерях пакетов и т.д., проходит следующим образом (см. Рис. 2).

Picture 2 (1x1)

Рисунок 2.
Простейший случай установок.

Перед установлением соединение на стороне клиента находится в закрытом состоянии, а на стороне сервера - в состоянии ожидания.

Клиент сперва посылает свой начальный порядковый номер и устанавливает бит SYN:

SEQ_SEQ = CLT_SEQ_O,
SEG_FLAG = SYN.

Получив этот пакет, сервер подтверждает порядковый номер клиента, посылает свой собственный начальный номер и устанавливает бит SYN:

SEG_SEQ = SVR_SEQ_0,
SEQ_ACK = CLT_SEQ_0+1,
SEG_FLAG = SYN,

затем сервер задает

SVR_ACK= CLT_SEQ_0+1.

Получив этот пакет, клиент подтверждает порядковый номер сервера:

SEG_SEQ = CLT_SEQ_0+1,
SEQ_ACK = SVR_SEQ_0+1,

и устанавливает

CLT_ACK = SVR_SEQ_0+1, 

переходя в состояние установленного соединения.

По получении этого пакета на стороне сервера соединение также приходит в состояние "установлено". В итоге мы имеем:

CLT_SEQ = CLT_SEQ_0+1
CLT_ACK = SVR_SEQ_0+1
SVR_SEQ = SVR_SEQ_0+1
SVR_ACK = CLT_SEQ_0+1

из чего следует, что

SVR_SEQ=CLT_ACK и
CLT_SEQ=SVR_ACK.

После установления соединения пакет принимается сервером или клиентом, если его порядковый номер укладывается в интервал [XXX_ACK,XXX_ACK+XXX_WIND], где XXX - это SVR или CLT соответственно. Соединение прерывается после выставления флагов RST (получатель обрывает соединение немедленно) или FIN (получатель приступает к процедуре его постепенного закрытия).

АТАКА СОЕДИНЕНИЯ

Если два последних равенства перестают выполняться, то соединение (обмен данными в нашей модели отсутствует) переходит в десинхронизированное состояние. При отсутствии передачи информации такое состояние может оставаться стабильным сколь угодно долго. Если же передача начинается, то возможны две ситуации:

  • CLT_SEQ < SVR_ACK + SVR_WIND и CLT_SEQ > SVR_ACK - информация принимается для дальнейшего использования, но не посылается пользователю, поскольку начало потока (под номером SVR_ACK) потеряно;
  • CLT_SEQ > SVR_ACK + SVR_WIND или CLT_SEQ > SVR_ACK - пакет отбрасывается, а данные теряются.
  • И в том и в другом случае обмен данными, даже если соединение не прерывается, невозможен.

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

    Предположим, сеанс TCP/IP десинхронизирован, а клиент продолжает слать пакеты, у которых

    SEG_SEQ = CLT_SEQ, а
    SEG_ACK = CLT_ACK.

    Пакеты, вследствие нарушения все тех же равенств, отбрасываются. Атакующий меняет SEG_SEQ и SEG_ACK (корректируя при этом контрольную сумму), чтобы они были равны SVR_ACK и SVR_SEG соответственно. Фактически получается, что взломщик пропускает трафик через свою машину - это дает ему возможность по своему усмотрению добавлять и удалять пакеты. Эффект таких действий описан выше.

    Как же атакующий добивается десинхронизации? Самый простой метод - десинхронизация при помощи пакетов с отсутствием данных. Клиент и сервер забрасываются большим количеством пакетов. Посылаемая информация не будет ими воспринята, но приведет к рассогласованию порядковых номеров на обоих концах. Если атакуемый сеанс TCP/IP допускает пересылку пакетов с информацией нулевой длины, то этот метод самый удобный, хотя его применение может повлечь за собой ряд непредсказуемых эффектов. В частности, особенно сильно проявится одно из последствий любой десинхронизации - ураган из ACK-пакетов. Суть этого стихийного явления в том, что отброшенные ACK-пакеты влекут за собой генерирование все новых и новых - процесс замыкается в петлю или, если угодно, в воронку урагана. К счастью (или же к несчастью - как хотите), поддержка TCP соотношения потерь ненулевых пакетов приводит рано или поздно к разрыву петли. Таким образом, процесс саморегулируется и поддерживает избыточный трафик на определенном уровне, не давая ему захлестнуть сеть. Наличие ACK-урагана, кстати, позволяет обнаружить чужое вмешательство в работу сети.

    Есть ряд более сложных и надежных (что делает их узкоприменимыми) методов. В качестве примера рассмотрим десинхронизацию на стадии установления соединения. Метод заключается в прерывании соединения со стороны сервера на ранней стадии и установлении нового соединения (Рис. 3).

    Picture 3 (1x1)

    Рисунок 3.
    Схема атаки. Пакеты атакующего обозначены цветом.

  • Взломщик "высматривает" пакет SYN/ACK, идущий от сервера к клиенту (второй этап установления соединения).
  • Обнаружив этот пакет, он посылает серверу пакет с флагом RST, затем пакет, аналогичный перехваченному по параметрам (порт TCP), но с другим номером последовательности, в дальнейшем обозначаемым как ATK_ACK_0.
  • Получив RST-пакет, сервер прерывает первое соединение. Получив следом от атакующего SYN-пакет, он, используя тот же самый порт, откроет новое соединение c измененным номером последовательности (SVR_SEQ_0") и пошлет клиенту пакет SYN/ACK.
  • Определив это, атакующий посылает ему свой ACK-пакет и тем самым переводит сервер в состояние установленного соединения.
  • Клиент, получив пакет от сервера, также переходит в состояние установленного соединения.
  • Очевидно, что основные равенства не выполняются, и соединение оказывается изначально десинхронизированным. Главная сложность такого метода - правильный выбор атакующим поддельного номера последовательности. Если разногласие в номерах последовательности позволит серверу осуществлять прием пакетов от клиента (первый вариант десинхронизации), то вполне вероятны нежелательные побочные эффекты.

    НАСКОЛЬКО НАДЕЖНЫ СЕГОДНЯШНИЕ МЕТОДЫ ЗАЩИТЫ СЕТЕЙ?

    В свете вышеизложенного возникает вопрос: какие меры защиты сетей наиболее эффективны? В первую очередь, на ум приходит применение брандмауэров. Главное, это выбрать брандмауэр, соответствующий тому, в какой степени ваша сеть зависит от Internet. На сегодняшний день широкое распространение получили два типа брандмауэров: использующих фильтрацию пакетов и работающих на уровне приложений. Начали также появляться продукты, в которых в различной степени применяются обе технологии.

    Итак, мы имеем две технологии защиты сетей. Первая представляет собой исследование входящих и выходящих пакетов на предмет того, откуда - куда они направляются и какой тип соединения устанавливают. Недостатки этого подхода: очевидно, что он практически бессилен перед подделкой IP-адреса, пассивным и, тем более, активным сниффингом, привязка же к конкретным хостам (IP-адресам) ограничивает возможности удаленных пользователей. Применение брандмауэров такого типа - сети, в которых Internet используется только "изнутри", отсутствует связь с внешними сетями, и, безусловно, все пользователи в достаточной мере облечены доверием. Брандмауэр будет наглухо закрывать доступ извне: его можно также применять для предотвращения злоупотребления Internet сотрудниками компании.

    Брандмауэры, работающие на уровне приложений, предполагают наличие шлюза для каждого приложения, а также аутентификацию (с использованием) при любом соединении. Такой подход позволяет отказаться от проверки IP-адресов, но взамен требует наличие шлюза для каждого приложения, что представляется довольно серьезным ограничением. Насколько эффективна эта технология? Она, очевидно, устойчива перед пассивным сниффингом и подделкой адреса, но в любом случае надежность подобной защиты от активного сниффинга не может быть стопроцентной.

    Брандмауэры, по сути дела, предохраняют сеть только от случайной утечки информации и проникновения в нее, так сказать, первого встречного, что, впрочем, раз в десять снижает риск потери конфиденциальности хранимой и передаваемой информации и нарушения работоспособности информационной системы. Единственное же, что может гарантировать безопасность от "подслушивания" - шифрование всех внутренних (не говоря уже о внешних) потоков данных в сети и организация дополнительных уровней аутентификации. Все это не исключает возможности перехвата пакетов сниффером, но, в то же время, не дает взломщику воспользоваться перехваченной информацией.

    Определение необходимой степени защиты информации осуществляется при помощи несложных математических оценок: вероятность взлома умножается на размер возможного ущерба и на основе полученной величины определяются средства, которые требуется выделить на обеспечение соответствующих мер безопасности.

    ЗАКЛЮЧЕНИЕ

    Не хочется, чтобы у вас после прочтения статьи сложилось мнение, что наша задача - во что бы то ни стало запугать читателей (хотя, не спорим, краски в статье немного сгущены). Наоборот, мы рассчитывали на то, что осознание вероятности, масштабов и возможных последствий реализации потенциальной угрозы взлома сети поможет прочитавшим этот материал спланировать защиту своей информационной системы на уровне, соответствующем реальной необходимости. Если состояние дел с обеспечением защиты данных в Internet изменится в лучшую сторону, мы охотно вам об этом сообщим. Как, впрочем, и в обратном случае.


    С Александром Авдуевским можно связаться через Internet по адресу: shura@osp.msk.su.

    КАК ЗАЩИТИТЬ WEB-СЕРВЕР - ВОПРОС ОСТАЕТСЯ ОТКРЫТЫМ

    Новые развлечения хакеров ставят новые проблемы

    В последние дни все актуальней становится вопрос защиты информации, хранимой на WWW-серверах. Впрочем, в равной степени это относится и к серверам FTP. Любой, используемый в коммерческих целях, узел Web или FTP находится в довольно двусмысленном положении (даже если не учитывать того, что на нем могут быть организованы различные уровни доступа к хранимым на сервере данным).

    Любая общедоступная информация, будь то розничный прайс-лист или технические характеристики продукции, имеет несомненную коммерческую ценность, и возможные последствия их искажения выражаются в ощутимых убытках. Завышенные цены могут отпугнуть потенциальных клиентов, а применение страниц компаний в качестве забора, на котором пишутся известные слова, несомненно нанесет ущерб имиджу компании. Причем первое намного опасней, поскольку будет замечено далеко не сразу.

    Взлом FTP-серверов еще менее заметен и более опасен. Если хотя бы часть свободно распространяемого ПО (драйверы, shareware- и демоверсии продуктов) окажется дефектной, или, что еще хуже, зараженной вирусами, последствия катастрофы примут фатальный характер. Во-первых, пострадают тысячи ни в чем не повинных пользователей, а во-вторых, компании придется вернуться к традиционным методам распространения подобного ПО, что приведет к резкому увеличению расходов. Поскольку вы, наверно, уже читали раздел новостей, то не должно быть уже сомнений в реальности наших прогнозов.

    Защита узлов Web оказывается далеко не простой задачей, ведь они должны быть одновременно и защищены, и открыты для всех. Если закрывать их брандмауэром, разрешающим только HTTP- и FTP-соединения, то такой брандмауэр необходимо сделать выделенным, чтобы не осталось лазейки для проникновения в сеть - во-первых, обмен пакетами между ним и сервером должен шифроваться - во-вторых. Впрочем, стопроцентной защиты такая система может и не дать, а администратор сети будет вынужден как можно чаще проверять состояние Web-сервера, чем, кстати, неплохо заняться уже сейчас.



    With any suggestions or questions please feel free to contact us