Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

Маленькие хитрости твоего мыла

div.main {margin-left: 20pt; margin-right: 20pt}

Маленькие хитрости твоего мыла


Крис Касперски


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

Краткое содержание:


Создание скрипта, отправляющего сообщения Обеспечение анонимности отправителя письма Фальсификация заголовков сообщения Обеспечение анонимности получателя письма

Анонимная рассылка корреспонденции


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

В Сети существует множество служб, предоставляющих услуги подобного рода (например, proxy-серверы, анонимайзеры), но многие анонимайзеры явно указывают на желание отправителя остаться неизвестным, а по поводу анонимности некоторых proxy-серверов меня терзают смутные сомнения.

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

Врезка "для начинающих"


Часто начинающие вредители не могут придумать ничего оригинальнее, чем заставлять сервер с помощью скрипта получать самый свежий дистрибьютив бета-версии Windows 2000 и посылать его на ящик жертвы в немерянных количествах. Куда привлекательнее выглядит попытка принудительного приобщения атакуемого к миру прекрасного, например, ознакомление его с космическими исследованиями NASA (для чего используются фотографии, доступные на сайте www.nasa.gov )

На языке Perl такая программа могла бы выглядеть приблизительно так (подробное объяснение ее работы выходит за рамки этой статьи, однако, структура программы достаточно роста, чтобы в ней мог разобраться даже неподготовленный читатель):

use Socket; ·
my($mailFrom) = 'KPNC@APORT.RU'; ·
my($MailTo) = 'KPNC@APORT.RU';

socket(SMTP, PF_INET(), SOCK_STREAM(), 6);
connect(SMTP,sockaddr_in(25,inet_aton("mail.aport.ru")));

recv(SMTP, $buffer, 200, 0);
print "$buffern";

send(SMTP, "HELO kpncn",0);
print ">HELOn";

my($buffer) = @_;
recv(SMTP, $buffer, 200, 0);
print "$buffern";

send(SMTP, "MAIL FROM: n",0);
print ">MAIL FROM:n";
recv(SMTP, $buffer, 200, 0);
print "$buffern";

send(SMTP, "RCPT TO: n",0);
print ">RCPT TO: n";
recv(SMTP, $buffer, 200, 0);
print "$buffern";

send(SMTP, "DATAn",0);
print ">DATAn";
recv(SMTP, $buffer, 200, 0);
print "$buffern";

send(SMTP, "From: Kris Kasperskyn", 0);
print ">From: Kris Kaspersky";
print "nn";
send(SMTP, "Subject: Testn", 0); ·
print ">Subject: Testn";

send(SMTP, "Hello, KPNC!n", 0);
print ">Hello, KPNC!n";

send(SMTP, "rn.rn",0);
print "rn.rn";
recv(SMTP, $buffer, 200, 0);
print "$buffern";

send(SMTP, "QUITn",0);
print ">QUITn";
recv(SMTP, $buffer, 200, 0);
print "$buffern";

close(SMTP);

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

Скрипт необходимо разместить на сервере, который поддерживает удаленное выполнение программ, разрешает telnet-вход, имеет в наличие интерпретатор Perl и допускает установку соединений с другими узлами сети. Перечисленным требованиям удовлетворяет, например, hobbiton.org и некоторые другие бесплатные сервера.

Для размещения скрипта на сервере лучше всего воспользоваться ftp-протоколом (подробнее о том, как это сделать рассказано в статье "Десять уроков сетевого хака"), а запустить его из telnet-сессии проще всего так: "perl имяфайла.pl".

Для облегчения понимания этот пример не имеет никаких изменяемых настоек и все данные прописаны непосредственно в теле программы.

Заголовок письма, отправленного с ее помощью на ящик "kpnc@aport.ru" (или по любому другому адресу) должен выглядеть приблизительно так:

From kpnc@aport.ru Mon Jun 05 11:51:53 2000
Received: from hobbiton.org ([216.161.239.42] helo=kpnc)
by hearst.mail.ru with smtp (Exim 3.14 #3)
id 12yrfs-000KGD-00
for KPNC@APORT.RU; Mon, 05 Jun 2000 11:51:53 +0400
From: Kris Kaspersky
Subject: Test
Message-Id: < E12yrfs-000KGD-00@hearst.mail.ru >
Date: Mon, 05 Jun 2000 11:51:53 +0400

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

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

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

Для этого достаточно вставить в заголовок одно (или несколько) полей "Received", например, так "Received: from mail.pets.ja" (конечно, это очень грубая подделка, но в качестве примера вполне сойдет). Модифицированный вариант скрипта отличается от оригинальной программы следующими строками:

send(SMTP, "Received: from mail.pets.jan", 0);
print ">Received: from mail.pets.ja";

Заголовок письма, отправленного с его помощью, должен выглядеть приблизительно так:

From kpnc@aport.ru Thu Apr 06 10:57:30 2000
Received: from [209.143.154.93] (helo=kpnc)
by camel.mail.ru with smtp (Exim 3.02 #107)
id 12d6EL-000NmZ-00
for KPNC@APORT.RU; Thu, 06 Apr 2000 10:57:30 +0400
Received: from mail.pets.ja
From: Kris Kaspersky
Subject: Test
Message-Id: < E12d6EL-000NmZ-00@camel.mail.ru >
Bcc:
Date: Thu, 06 Apr 2000 10:57:30 +0400

Проанализировав строку, выделенную жирным шрифтом, получатель, скорее всего, решит, что письмо пришло с сервера mail.pets.ja, и вряд ли обратит внимание на ретрансляторы, находящиеся выше. Выявление истинного получателя можно значительно затруднить, если не класть письмо непосредственно в почтовый ящик клиента, а пересылать его через несколько транзитных серверов. Если задействовать несколько десятков узлов и вставить в письмо несколько десятков подложных строк "Received", то установить истинного отправителя сообщения станет практически невозможно, вернее сказать, нецелесообразно.

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

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

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

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

From owner-sf-news@securityfocus.com Wed Sep 06 03:00:03 2000
Received: from lists.securityfocus.com ([207.126.127.68])
          by hearst.mail.ru with esmtp (Exim 3.14 #4)
          id 13WRh6-000LBx-00; Wed, 06 Sep 2000 02:59:57 +0400
Received: from lists.securityfocus.com (lists.securityfocus.com [207.126.127.68])
          by lists.securityfocus.com (Postfix) with ESMTP
          id E62DC1EF74; Tue, 5 Sep 2000 15:58:34 -0700 (PDT)
Received: from LISTS.SECURITYFOCUS.COM by LISTS.SECURITYFOCUS.COM
             (LISTSERV-TCP/IP release 1.8d) with spool id 13121453 for
             SF-NEWS@LISTS.SECURITYFOCUS.COM; Tue, 5 Sep 2000 15:58:31 -0700
Approved-By: se@SECURITYFOCUS.COM

Впрочем, маловероятно, чтобы получатель обладал квалификацией, достаточной для проведения анализа подобного уровня. И большинство пользователей можно ввести в заблуждение даже грубой подделкой заголовка.

Анонимное получение корреспонденции


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

Для сохранения полной анонимности можно воспользоваться специально разработанным скриптом, который читает корреспонденцию и выкладывает ее на какой-нибудь анонимный ftp-сервер. Это позволяет убить сразу двух зайцев - скрыть собственный адрес и обойти один из недостатков POP3 протокола - отсутствие докачки.

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

В приведенном ниже примере в качестве альтернативы Perl использован язык Python, основные достоинства которого - простота и огромное количество всевозможных библиотек, поставляемых вместе с языком. Ниже будет продемонстрировано использование одной из них.

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

#!/usr/local/bin/python
import poplib
print "Python's Mail client"
print "Connecting..."
M = poplib.POP3("mail.ru")
print "Login..."
M.user("MyLogin")
print "Password...."
M.pass_("MyUnpublishedPassword")
print "Get List of message"
numMessages = len(M.list()[1])
print "Numers of message : ",numMessages
for i in range(numMessages):
for j in M.retr(i+1)[1]:
print j

Вероятно, единственной проблемой окажется поиск сервера с установленным интерпретатором Python. На худой конец, можно попробовать умаслить вашего администратора и уговорить его установить питончика в системе.



  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте