WhatsApp — история мессенджера номер один

  • Мессенджер WhatsApp выпущен в 2009 году.
  • Стартовые платформы: iOS.
  • Базовые функции первой версии: отправка push-уведомлений.
  • Итоги проекта: в пятерке мировых лидеров по численности аудитории и времени использования.

Поддерживаемые языки по состоянию на декабрь 2017 года: английский, арабский, бенгальский, каталанский, хорватский, чешский, датский, голландский, финский, французский, немецкий, греческий, гуджарати, иврит, хинди, венгерский, индонезийский, ирландский, итальянский, японский, корейский, малайский, маратхи, норвежский букмол, персидский, польский, португальский, румынский, упрощенный китайский, словацкий, испанский, шведский, тайский, традиционный китайский, турецкий, украинский, урду, вьетнамский.
Инвестиции по состоянию на декабрь 2017 года:
— в октябре 2009 года Брайан Эктон собрал первые $250 тысяч;
— в апреле 2011 года венчурный капитал от Sequoia в размере $8 млн;
— в июле 2013 года WhatsApp получил от Sequoia еще $50 млн;
— в феврале 2014 года компания продана за $19 млрд*.

История одного скандала

В 2016 году в WhatsApp была найдена уязвимость, позволяющая подменить ключ шифрования. В этой связи, возник вопрос: действительно ли Signal protocol небезопасен?
Исходные коды WhatsApp недоступны, однако известно, что разработчики Signal сотрудничали с WhatsApp при добавлении поддержки шифрования.
Уязвимость состоит в том, что если сообщение не было доставлено из-за того, что устройство собеседника было недоступно, а затем он подключил устройство и анонсировал новый ключ, то клиентское приложение WhatsApp зашифрует сообщение новым ключом и повторно передаст его. При этом будет выведено сообщение о том, что ключ собеседника сменился, если включена соответствующая опция приложения, однако она отключена по умолчанию.
Мессенджер Signal же, в этом случае, не пересылает сообщение, а выводит диалоговое окно с сообщением о том, что ключ изменился, и предлагает выбрать, нужно ли отменить передачу или передать сообщение с новым ключом.
Таким образом, эта уязвимость не является уязвимостью протокола, а является особенностью реализации интерфейса пользователя в WhatsApp.
Уязвимость была обнаружена Tobias Boelter 16 апреля 2016 года. 13 января 2017 года The Guardian опубликовало новость об уязвимости, назвав это бэкдором. В ответ Moxie Marlinspike опубликовал в блоге Open Whisper Systems пост с объяснением причины такого поведения WhatsApp. Обсуждение с участием Moxie развернулось на Hacker News.
Объяснение свелось к тому, что уведомление о смене ключа по умолчанию отключено для всех пользователей, так как оно срабатывает в случае переустановки приложения, смены прошивки или смене устройства собеседника, а не только в случае атаки. Поэтому возможность включения уведомлений оставлена для людей, которые опасаются проведения атаки на них. Из-за того, что уведомления сделаны опциональными, блокировку пересылки сообщений пришлось отключить. В противном случае задержка между анонсом смены ключа и повторной передачей сообщения свидетельствовала бы о том, что пользователь включил уведомления. По собранной статистике можно было бы выделить пользователей, у которых данная опция отключена, и в дальнейшем практически без риска обнаружения проводить на них MITM-атаки.
Отсутствие блокировки защищает пользователей от таргетированных атак: при проведении атаки невозможно заранее узнать, включены ли уведомления, но в то же время — это очень вероятно для целей, интересующих атакующих, поэтому велика вероятность обнаружения атаки.

Итог — хорошая пресса

TechCrunch опубликовали подробную статью со ссылкой на аудиты протокола и независимым обсуждением реализации протокола Signal в WhatsApp. Открытое письмо в адрес издания The Guardian, с призывом отозвать статью, в которой уже известную особенность реализации назвали «бэкдором», подписали множество известных криптографов.
Таким образом, публично подтвердилось следующее принципиальное утверждение: сам протокол безопасен, однако реализация в WhatsApp содержит особенность, позволяющая провести таргетированную атаку.
Мнение одного из участников сообщества крипто энтузиастов:

Больше похоже на то, что условия контракта с Facebook, по которому OWS помогли им портировать протокол в WhatsApp и дали проприетарную лицензию, включают поддержку, которая обычно 5 лет или около того. И им просто невыгодно признавать любые ошибки там, потому что в рамках требований на UI их исправить не получится. WhatsApp просто не может позволить себе выводить «варнинги» на весь экран.

Эта история с найденной спорной уязвимостью — хороший пример привлечения экспертного сообщества к поискам проблем с безопасностью, что в конечном итоге является отличной рекламой продукта. Безусловное лидерство WhatsApp в индустрии, в числе прочего, время от времени подкрепляется такими всплесками медийной активности.

* Стоимость в $19 млрд — не окончательная. По сведениям из различных источников, помимо этой суммы, основатели проекта получили пакеты акций Facebook и WhatsApp. Таким образом, финальная цена сделки могла превысить публично заявленную цифру на 10-30%.

Техническая реализация WhatsApp

Сотрудники WhatsApp не особенно распространяются на тему технических решений, но в сентябре 2015 года в Сан-Хосе, Калифорния, разработчик компании Джамшид Махдави (Jamshid Mahdavi) дал интервью, в ходе которого коротко рассказал об используемых технологиях. Часть секрета заключается в том, что компания строит свой сервис, используя язык программирования Erlang.
Erlang берет свое начало в 80-х годах прошлого века. Инженеры из Ericsson, компании, занимающейся созданием аппаратного и программного обеспечения для телекоммуникационных компаний, разработали язык, который бы подходил для работы с высокоскоростными телефонными сетями.

«Вместо того, чтобы создавать язык, а потом решать, что с ним делать, они сразу выделили определенную специфическую задачу, для которой он предназначен, – говорит Франческо Чезарини (Francesco Cesarini), гуру языка Erlang. – Он решал проблемы масштабируемости и надежности. В тот момент телефонные сети являлись единственной системой, которая должна была обладать этими двумя свойствами»

Более того, Erlang предлагает «горячую» замену кода, когда в приложении могут работать как старая, так и новая версия кода одновременно. Получается, что программное обеспечение на Erlang можно модернизировать без простоев.
Для передачи сообщений в WhatsApp используется модифицированный протокол обмена сообщениями и информацией о присутствии XMPP (ранее известный как Jabber) с шифрованием SSL и TLS. SSL и TLS – это широко используемые криптографические протоколы, обеспечивающие защищённую передачу данных по сети Интернет. Помимо WhatsApp протокол применяется в веб-браузерах и при работе с электронной почтой.
Пока пользователь не запустит приложение, все входящие сообщения выстраиваются в очередь и хранятся в памяти сервера. Как только сообщение попадает на устройство пользователя, оно стирается из памяти сервера, а отправитель получает подтверждение о его получении.
В качестве СУБД используется многопользовательская распределенная система Mnesia DB, которая использует около 2 ТБ RAM и хранит порядка 18 миллиардов записей. Она написана на Erlang. С точки зрения скорости обработки запросов получается достаточно эффективная интеграция. Фото, аудио и видео, прикрепленные к сообщению, загружаются на веб-сервер YAWS, а ссылки на них высылаются получателю.
Использование Erlang принесло невероятные показатели масштабируемости. Первоначальная нагрузка WhatsApp составляла 200 000 одновременных соединений на сервер. Чуть позднее этот показатель значительно вырос и достиг 2,8 миллионов соединений. Все это великолепие обрабатывают примерно 550 серверов, из которых 150 – это чат-серверы, поддерживающие до 1 миллиона смартфонов. Еще около 250 машин – это мультимедиа серверы. Узлы, отвечающие за работу баз данных, имеют 512 ГБ оперативной памяти, а обычные вычислительные узлы – 64 ГБ. Подробнее о тонкостях и характеристиках процесса масштабирования можно узнать из этого поста от High Scalability.