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

Например, вот что делает популярная программа WhatsApp, с помощью которой более 20 миллионов человек обмениваются личными сообщениями (1 миллиард сообщений в день, по данным на декабрь 2011 года). Их система работает на модифицированной версии XMPP (Extensible Messaging and Presence Protocol), что вполне нормально, но аутентификация пользователя при этом происходит довольно странным образом.

Имя пользователя — телефонный номер

Пароль — md5(strrev(‘здесь-номер-imei’))

В качестве пароля автоматически используется MD5-хэш номера IMEI с цифрами в обратном порядке, без соли. По крайней мере, в Android-версии программы происходит именно так. Вполне возможно, что то же самое под iOS, Windows Mobile и Blackberry, ходя из iOS-устройства вытянуть IMEI не так просто.

Нечего и говорить, что злоумышленник может без особого труда получить значения логина и пароля для любого пользователя, просто нажав *#06# на его телефоне.

Как вариант, можно написать приложения под Android, которое будет собирать номера IMEI пользователей и пополнять базу данных. После этого хакер сливает в открытый доступ базу номеров IMEI — и всё, сервис WhatsApp может сушить вёсла.

Получение номера IMEI на устройстве Android осуществляется с помощью такого кода:

TelephonyManager tm = (TelephonyManager)
getSystemService(Context.TELEPHONY_SERVICE);
String device_id = tm.getDeviceId();

Получение номера телефона:

TelephonyManager tMgr =
(TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
mPhoneNumber = tMgr.getLine1Number();

Получение номера голосовой почты:

TelephonyManager.getCompleteVoiceMailNumber()

Более подробно интерфейсы WhatsApp проанализированы в открытом проекте WhatsAPI.