Pull to refresh

Современные спам фильтры и End-to-End шифрование

Reading time12 min
Views13K
Original author: Mike Hearn

Привет

Тревор (пер: — насколько я понял, речь идёт о Trevor Perrin) попросил написать свои мысли по поводу … спам фильтров и сквозного (end-to-end) шифрования, чтобы вся информация была собрана в одном сообщении, а не разбросана по всему форуму. В частности, он попросил сдампить мои знания по следующим темам:
  • Как сейчас работают спам-фильтры в крупных почтовых сервисах?
  • Как повлияет широкое распространение сквозного E2E шифрования?
  • Что можно перенести на клиента (а также вытекающие плюсы и минусы)?
  • Реально ли это проделать с электронной почтой?
  • Что изменится при переходе от электронной почты к другим асинхронным системам (например, чатам) или новым протоколам; то есть, проблемы спама — это проблемы email протокола или глобальный изъян системы?

Кратко опишу свой опыт в данной сфере, чтобы уточнить компетенции: я (пер.:страница на Google+) работал в Google 7 с половиной лет. Из них 4,5 года я работал в команде безопасности GMail, которая очень плотно связана с анти-спам командой (они используют те же приложения, те же системы оповещения).
Где-то с 2010 года мы дали хороший отпор спамерам, в результате они не смогли зарабатывать деньги, используя старые методы. Некоторые из них перешли ко взлому аккаунтов в промышленных масштабах с использованием скомпроментированных паролей. Потом с этих взломанных учётных записей рассылался спам. Я был техническим руководителем (tech lead) новой команды борьбы с угонами аккаунтов. Мы потратили 2,5 года на борьбу с угоном учётных записей. В начале 2013 года мы объявили о своей победе, а через несколько месяцев Эдвард Сноуден опубликовал информацию о том, что NSA/GCHQ прослушивало систему безопасности, которую мы разработали.
С тех пор похоже всё затихло. Можно сказать, что с точки зрения GMail была одержана победа над спамом … по крайней мере на текущий момент.
Если вы предпочитаете видео, то несколько лет назад я делал доклад на конференции RIPE64 в Любляне: ripe64.ripe.net/archives/video/25
В январе я покинул Google чтобы посвятит всё свободное время Bitcoin’у. Сейчас я работаю над проектом приложения для P2P краудфандинга, которое позволит находить финансирование используя децентрализованную структуру.
Итак, поехали.

Краткая история спамерской войны

В начале было … регулярное выражение. Gmail действительно поддерживает фильтрацию по регулярным выражениям, но только как крайнюю меру. С ними легко наделать ошибок. Однажды мы заблокировали письмо от несчастной итальянки по имени «Olivia Gradina» (пер.: — увидели намёк на силденафил?). Плюс такой подход плохо поддерживает интернационализацию и легко обходится рандомизацией.
Потом Email сообщество начало составлять списки плохих IP адресов и обмениваться ими. Так появился Spamhouse. Такой подход давал свои плоды, потому что обесценивались ресурсы, за которые спамеры платили деньги. Но вокруг списков велись ожесточённые сражения, потому что хранители чёрных списков становились судьями, жюри присяжных и палачами в вопросах потоков писем. Оказалось, вопрос «Что есть спам, а что нет» — очень спорный. Многие списки рассылок не считали себя спамерами, но в отсутствие чёткого определения, они иногда попадали в чёрные списки.
Чтобы обойти RBL (Realtime Blocking List) спамеры начали использовать ботнеты. В ответ борцы со спамом построили карту интернета и сформировали «Список политик блокировок» (PBL, Policy Block List) — диапазоны IP адресов, которые были привязаны к жилым подсетям, и поэтому в принципе не должны заниматься отправкой почты. Ботнеты генерируют невероятные объёмы спама, но этот спам проще всего фильтровать. Во времена моей работы в GMail в команде спама и угроз безопасности на борьбу с ботнетами тратилось очень мало времени.
Итак, появились веб-почтовики по типу GMail. Самая первая версия GMail просто использовала spamassassin. Но такой подход был быстро признан недостаточно хорошим, и мы построили свой фильтр. Архитектура фильтра в GMail была описана в научной статье 2006 года: Sender Reputation in a Large Webmail Service.
Я кратко перескажу суть этой статьи. Главная методика нового фильтра заключалась в эвристической попытке угадать домен отправителя письма (домены сложнее получить и они стабильнее чем IP адреса), а затем вычислить репутацию для него. Репутация — это баллы от 0 до 100, где 100 — это идеально хорошая репутация, а 0 — однозначно спам. То есть, если у отправителя репутация 70, значит около 30% случаев мы считаем, что письмо спамерское, а в остальных случаях — пропускаем. Репутации — это скользящее среднее, вычисленное на основе аккуратного подсчёта ручных отзывов по средством кнопок «Пожаловаться на спам/Не спам», и автоматического отклика от самого фильтра. Очевидно, что ручные жалобы имеют гораздо больший вес для системы и позволяют фильтрам само-корректироваться.
У этого подхода есть ещё одно преимущество — он исключает все спорные вопросы вокруг точного определения понятия «спам». Новое определение звучит следующим образом: спам — это всё, что наши пользователи называют спамом. Против такого определения не попрёшь. При этом его очень легко реализовать на практике, и оно достаточно гибко подстраивается под новые придумки спамеров.
Стоит отметить несколько пунктов:
  • Система репутаций должна иметь возможность читать все письма. Недостаточно видеть только спам, потому что репутации не сможет само-корректироваться. Кнопка «Не спам» так же важна как и кнопка «Пожаловаться на спам». Большая часть пометок «не спам» происходит неявно, когда пометка «спам» просто не ставится.
  • Репутацию нужно вычислять быстро. Если вы получили письмо с неизвестной репутацией, у вас нет другого выбора, кроме как разрешить этому письму пройти. Это стимулирует спамеров попытаться опередить систему обучения. Первая версия репутационной системы использовала MapReduce и вычисляла репутации партиями. Запаздывание исчислялось часами. В итоге её заменила интерактивная система, которая вычисляла баллы на лету. Эта система — невероятный, впечатляющий экземпляр инженерного мастерства. Это, по сути, глобальная peer-to-peer обучающаяся система реального времени. Нет центральных узлов. Фильтр распределён по всему миру и может пережить потерю нескольких дата центров.
    Мне страшно подумать, как можно построить такую систему вне хорошо контролируемого окружения. Даже в рамках проприетарного/централизованного окружения пришлось изрядно поломать голову...
  • Репутация распространяется между доменами. Если нам известно, что конкретная ссылка плохая, и она появляется в письме от IP адреса с неизвестной репутацией, то этот IP адрес тоже получает плохую репутацию. И наоборот. Оказалось, что это важный пункт. По мере того, как количество критериев для определения репутации растёт, спамерам становится всё сложнее менять их все одновременно. Особенно это верно для ботнетов, где точный контроль за отправляющими машинами затруднителен. Если спамеру не удастся рандомизировать даже один микро аспект во всех их письмах одновременно, то все их ссылки и IP адреса автоматически будут скомпрометированы и они потеряют деньги.
  • Репутациям присущи естественные проблемы. Вам необходимо большое количество пользователей. Следовательно учётные записи должны быть бесплатными. Если они бесплатные, то спамеры могут нарегистрировать много таких учётных записей, помечать собственные письма как «не спам» и произвести Sybil attack. И это не гипотетическая проблема.

Репутационная система была разработана, чтобы вычислять репутацию на основе ряда особенностей в письмах помимо домена отправителя. Одна из особенностей — это домены кликабельных ссылок в тексте. Ссылки стали критичным полем боя, за которое активно велись битвы уже несколько лет. Причина понятна: спамерам нужно что-то продать. Значит им нужно привести пользователя в свой магазин. Не важно как они назовут свой товар, ссылка на конечный сайт должна работать. Бои проходили следующим образом:
  1. Всё началось с простых ссылок в HTML коде писем. Фильтры начали блокировать письма с такими ссылками.
  2. Спамеры начали запутывать (обфусцировать) ссылки и просили пользователей вручную собрать и ввести ссылку в адресную строку. Но этот способ работал плохо. Большинство пользователей не хотели или не могли это сделать. Доходы падали.
  3. Спамеры начали покупать и создавать случайные домены пачками. Домены верхнего уровня, такие как .com, стоят дорого, но есть другие — подешевле. И репутация отдельного домена верхнего уровня падала ниже плинтуса (например .cc)
  4. Когда регистраторы начали закручивать гайки, у спамеров закончились домены верхнего уровня. Они начали промышлять воровством репутаций. Например, они создавали блоги на сайтах, которые давали возможность зарегистрировать домен: *.blogspot.com, *.livejournal.com и другие. Сервисы сокращённых ссылок стали лучшими друзьями спамеров. Буквально каждый сервис сокращения URL становился полем битвы операторов против спамеров за репутацию домена.
  5. Спамеры начали взламывать веб сайты. Но такой подход не всегда хорошо работал, потому что редкий веб сайт мог предложило легальную почту с хорошей репутацией. И ещё это хороший источник паролей.
  6. Крупные площадки хостинга контента, такие как Google, объединяют спам фильтр с движком хостинга. И как только репутация пользовательского URL падает, хостинг для него автоматически закрывается. Первые версии таких систем были слишком медленными. Одним из моих проектов в Google был связан с построением системы реального времени для автоматического удаления такого контента.

Между 2006 (открытие регистрации) и 2010 годами был построен спам фильтр при регистрации учётных записей. Мы проделали очень хорошую работу, несмотря на то, что я сам себя хвалю. Посмотрите на расценки «бесплатных» учётных записей веб почтовиков на сайте buyaccs.com (русский магазин учёток). Заметьте, что учётные записи на hotmail/outlook.com стоят по 10$ за тысячу, а GMail — уже на порядок дороже. Когда мы только начали, учётки на GMail стоили по 25$ за 1000 штук. И нам удалось увеличить цену в 4 раза. Дальше улучшать показатели уже тяжело, так как все крупные веб сайты используют проверку номера телефона, чтобы исключать ложно положительные регистрации, и при текущем уровне цен становится выгодным покупать SIM карты большими партиями.
Чтобы бороться с массовыми регистрациями используется большое количество магии. Например, я создал систему, которая генерирует случайным образом зашифрованный JavaScript, который противостоит попыткам обратного инженеринга. Этот скрипт умеет определять программы автоматической регистрации и выкашивает их [1].

Как на всё это повлияет сквозное шифрование?


Из моих рассказов выше можно сделать следующие выводы:
  • Большие объёмы данных действительно важны как для блокировки спама, так и для определения хороших писем.
  • Скорость реакции системы важна. Многие битвы со спамерами сводились к испытаниям «кто быстрее». Если твоя репутация определяется за 3 минуты, то тебя обогнали.
  • Важно патрулировать своих пользователей. Нельзя вычислять репутации если нет доверия пользовательским действиям. При этом создаётся теоретически парадоксальная ситуация: бесплатные аккаунты всё равно стоят денег (если вам их нужно большое количество).

Первая проблема с E2E криптографией состоит в том, что база репутаций требует данных от всех писем. Мы можем представить себе почтовый клиент, который расшифровывает и анализирует письмо, а затем отправляет отчёт «хорошее/плохое» в какое-то гипотетическое центральное хранилище. Но в итоге это центральное хранилище будет изучать не только информацию о том, с кем вы общаетесь, но и ссылки в письмах. Это крайне ценная информация. Чем больше факторов приходится анализировать, тем более остро становится эта проблема.
Вторая проблема — если центральное хранилище не может прочитать ваши письма, то оно не может быть уверено в правдивости ваших отчётов. В случае незашифрованных писем такой проблемы не стоит, потому что спам фильтр сам достаёт нужную информацию из писем. Если спамеры захотят обыграть систему, им всё равно придётся отправлять реальные письма самим себе, что приводит к росту стоимости. В мире, где спам фильтры не могу читать письма, спамеры могу свободно отправлять целиком выдуманные отчёты о «хороших письмах». Всё ещё хуже, ведь спамеры могу начать соревноваться и отправлять ложные негативные отчёты. Нечто подобное мы наблюдали с нашей системой AdWords.
Третья проблема заключается в том, что спам фильтры сильно полагаются на безопасность через неясность (пер.: — та самая «security through obscurity»), потому что она хорошо работает. Часть используемых при анализе факторов широко известна (например IP адрес отправителя, ссылки), но существует множество других, покрытых тайной. Если логика фильтрации будет перенесена на клиентов, то спамеры смогут увидеть, что именно им нужно рандомизировать, чтоб запутать систему сквозной репутации.
Возможно упомянутые две проблемы удастся решить с помощью доверенных вычислений (Trusted Computing). С их помощью можно запускать зашифрованные программы на личных данных и железо сможет «доказать» центральному серверу, что программа действительно выполнялась. Но сложно будет совместить безопасность через неясность и сквозное шифрование — если ваше письмо проходит через чёрный ящик, этот ящик теоретически может украсть содержимое письма. Вам придётся положиться на нечто, что будет вычислять секретные критерии на основе ваших сообщений. Тогда почему бы просто не довериться GMail уже сегодня?
Четвёртая проблема: анонимность и спам фильтры плохо сочетаются. По сути необходимо отрезать спам на корню в точке отправки письма. Уничтожение учётных записей — это фундаментальный инструмент борьбы со спамом. Все основные веб почтовики и социальные сервисы вынуждают пользователей пройти проверку номера телефона если фильтр безопасности забьёт тревогу. Обычно высылается случайный код в SMS сообщении или происходит вызов по телефону, чтобы проверить реальность пользователя. Такой подход работает, потому что номера телефонов стоят денег, и почти у всех нас есть как минимум один номер. Но во многих странах запрещено иметь анонимный номер телефона, и операторы вынуждены проверять документы удостоверяющие личность перед продажей SIM карты. Тот факт, что вас могут «пробить по базе» совершенно безнаказанно (пер.: — есть такой юридический термин «plausible deniability»), означает, что, даже если при регистрации вы не передаёте свои личные данные, правительство может заставить вас открыть своё местоположение и/или личность в любое время. Для этого не нужно делать ничего особенного. Если они могут перехватить ваш пароль, то могут вызвать подозрение у системы безопасности сайта, дождаться когда пользователь введёт номер телефона, и вытянуть все нужные им метаданные (я никогда не сталкивался с такими ситуациями, но теоретически это возможно).
И последняя проблема: спам фильтры требовательны к ресурсам CPU и дисковому хранилищу. Много пользователей сегодня работают с почтой исключительно через мобильные телефоны. Ресурсы смартфонов ограничены, и чем сильнее их нагрузить, тем быстрее сядет батарея. На то, чтобы просто включить радиомодуль и скачать сообщение, уходит некоторый заряд батареи. Даже если попробовать запустить на телефоне устаревшие способы борьбы со спамом из 90-х, телефон скорее всего будет обречён. Его может спасти только какой-нибудь революционный прорыв в технологиях аккумуляторов.
В итоге, я не вижу реалистичного способа вернуться к фильтрации спама целиком на стороне клиента.

Что будет если все перейдут от email к другим системам обмена сообщениями?


В общем, SMS спам — это хороший пример. Его не много, потому что телефонные компании выступают в роли спам фильтров. А ещё правительство старается участвовать, вводя наказания за SMS спам, чтобы отвадить будущих нарушителей. Так сказать, отправить потенциальным преступникам месседж. Спам в электронных письмах пережил бум задолго до того, как правительство начало на него реагировать. Поэтому интересно наблюдать разницу в подходах этих двух систем.
Не похоже, чтобы приложения наподобие WhatsApp страдали от спама. Но я думаю, что это скорее демонстрация хорошей работы их отдела борьбы со спамом/нарушениями. Они в наиболее выгодной позиции. В миллион раз легче бороться, когда есть единый центр, из которого можно всё контролировать и менять что угодно в любой момент. Вы можете убивать учётные записи и контролировать поток регистраций. Без единого центра управления приходится полагаться только на фильтрацию входящих и молча страдать, если спамеры найду как обойти вашу защиту. К тому же вы обычно просто не контролируете клиентов.

Общие мысли и выводы


Если взглянуть на то, чем была выиграна война со спамерами, то мы увидим невероятные усилия, приложенные в течении нескольких лет. На ум приходит аналогия с войной: было две противоборствующие стороны и множество интересных боёв, столкновений тактик и вооружения. Я бы мог продолжать травить байки целый день, но тогда это письмо сильно растянется.
Попытаться переиграть эту войну в контексте тотального шифрования будет похоже на попытку воевать с завязанными глазами и в наручниках. Вас раздавят за минуту.
Поэтому я думаю, что нам нужен принципиально новый подход. Первая идея, которая приходит на ум, это ввести плату за отправку писем. Но это хреновая идея по нескольким причинам: самое очевидное, бесплатные глобальные коммуникации — это величайшее достижение человечества, сравнимое с доставкой человека на луну. Человек из сельских районов Китая может прислать мне письмо в течении нескольких секунд, бесплатно, а я могу ответить, бесплатно! Задумайтесь на секунду.
Другая причина провала — плата за письма стирает разницу между спамерами и честными массовыми рассылками. Многие компании рассылают большие объёмы писем, которых ждут пользователи. Возьмём, например, Facebook. Если бы каждое письмо стоило денег, некоторые честные и полезные компании не смогли бы работать.
Ещё один подход — вносить некоторый денежный депозит. Существует протокол, который позволяет пожертвовать часть биткоинов в качестве комиссии майнерам. То есть можно доказать, что ты потратил деньги, подписав вызов ящику, который сделал то же самое. Это позволит очень точно легализовать анонимные ящики, с которых потом можно отправлять сколько угодно писем. Есть способ вычислять репутации. В отчётах «спам/не спам» можно хранить только доказательства отправки. И на основе этих отчётов затем определять значение репутаций. Письма, отправитель которых ещё не имеет репутации, можно придержать, пока их не проверят волонтёры. Другой вариант — позволить перекрёстную подпись. Участник с хорошей репутацией может временно удостоверить письмо, чтобы поднять его репутацию и вызвать ответный рост репутации. Такой доверенный участник может проверять достоверность отправителя любым понравившимся способом.
По этой причине я интересуюсь проектом на стыки Bitcoin и E2E сообщений. По-моему это фундаментально связанные вещи.
Подытожим. Я известен в сообществе Bitcoin за свои радикальные идеи. Например, я предположил, что существует компромисс между приватностью и злоумышленным поведением. Многие люди в криптографических сообществах страстно отвергают эту идею и (к сожалению) человека, рискнувшего её высказать. Надеюсь, что мои истории, описанные выше, показывают, как я пришёл к таким выводам. Я думаю, что стремление к идеальной приватности без учёта злоупотреблений такой приватностью — это плохой путь для любой системы, желающей достичь широкого распространения.
Tags:
Hubs:
+12
Comments9

Articles

Change theme settings