Сегодня наткнулся на обсуждение в ru_mac о безопасности данных на iPhone, вызванная возможностью получения доступа ко всем данным на Linux через библиотеку libimobiledevice. Всё было бы не так грустно, если бы в определённых случаях нельзя было бы получить доступ к iPhone, который заблокирован с помощью PIN-кода (PIN на вход в систему, к PIN-коду SIM-карты это не имеет отношения). Описание уязвимости я прочитал 28.05.2010 в статье “iPhone security flaw: Using a PIN won’t help you“, но только сейчас решил её проверить.

Развитие подобных тем очень предсказуемо. Появляется информация об уязвимости, какое-то время все её обсуждают, проверяют, и приходят к выводу, что всё в порядке. Затем через пару недель подключаются журналисты, которые на основании “исследований британских исследователей из британского исследовательского института” подымают панику начиная от газет, заканчивая телевидением. Мда…

Забегая наперёд скажу, что уже 02.06.2010 было установлено:

It appears the issue only applies if you switch the device off during an “unlocked” state (thus you entered the passcode already and see the icons) but not if you power it down while it requests you to enter a passcode making this whole mess less dramatic…

“Определённые случаи”, которые подвержены проблеме, это телефоны, на которых был включен PIN-код, но они после этого не перезагружались (я никогда не перезагружался после этой операции, согласитесь, что это явная проблема в iPhone OS).

Таким образом, если вы не хотите, чтобы к вашим данным могли получить доступ злоумышленники, умыкнувшие iPhone, установить PIN и перезагрузитесь.

Но вернёмся к теме. 21.03.2010 вышел релиз libimobiledevice и ifuse, использование которых сделало возможным работать с iPhone, iPod Touch и затем с iPad (когда он вышел). Продемонстрирую, как их использовать на примере Ubuntu Linux 10.04 и iPhone 3Gs 3.1.3. Я использовал информацию, приведённую в статье “iPhone syncing on Linux“.

Подчёркиваю – все операции проводим на Ubuntu Linux, не на Mac’е.

Ставим нужные библиотеки и утилиты (libgpod4 и gtkpod особо не нужны, поставил за компанию):

$ sudo aptitude install libimobiledevice-utils libimobiledevice-doc
$ sudo aptitude install libplist-dev libplist-utils
$ sudo aptitude install ifuse
$ sudo aptitude install libgpod4
$ sudo aptitude install gtkpod

Мой iPhone перезагружался несколько раз после установки PIN’а, но меня как раз интересовало, можно ли получить доступ при включенном PIN. Я не искал, где записывается информация о “спаривании” телефона с Linux, если найду, то проверю утверждение насчёт подверженности именно неперезагруженых iPhone после установки PIN.

Телефон залочен. Пытаюсь примонтировать его – ответ отрицательный, ни получить информацию, ни примонтировать телефон нельзя:

$ mkdir ~/tmp/iphone
$ ideviceinfo
$ ifuse ~/tmp/iphone
Please disable the password protection on your device and try again.
The device does not allow pairing as long as a password has been set.
You can enable it again after the connection succeeded.

Ввожу PIN. Теперь всё доступно:

$ ideviceinfo
ActivationPublicKey: ...
ActivationState: WildcardActivated
ActivationStateAcknowledged: true
BasebandBootloaderVersion: 6.4_M3S2
BasebandSerialNumber: 0a49987a4a145d057fc4cccc
BasebandVersion: 05.12.01
BluetoothAddress: 04:1e:64:cc:cc:cc
BuildVersion: 7E18
CPUArchitecture: armv7
...
DeviceClass: iPhone
DeviceName: ole_iphone
...

Монтирую:

$ ifuse ~/tmp/iphone
$ ls -al tmp/iphone/
drwxr-xr-x  2 ole ole   68 2010-05-26 15:36 ApplicationArchives
-rw-r--r--  1 ole ole    0 2010-03-21 16:06 com.apple.itdbprep.postprocess.lock
-rw-r--r--  1 ole ole    0 2010-03-21 16:06 com.apple.itunes.lock_sync
drwxr-xr-x  4 ole ole  204 2010-03-21 16:09 DCIM
drwxr-xr-x  2 ole ole  102 2010-06-02 02:06 Downloads
drwxr-xr-x  2 ole ole  102 2010-04-05 20:45 iPhoneDrive
drwxr-xr-x  7 ole ole  238 2010-03-21 16:19 iTunes_Control
drwxr-xr-x  3 ole ole  170 2010-06-03 10:53 Photos
drwxr-xr-x  2 ole ole   68 2010-03-21 16:06 Podcasts
drwxr-xr-x  2 ole ole   68 2010-06-02 17:03 PublicStaging
drwxr-xr-x  2 ole ole   68 2010-03-21 16:06 Purchases
drwxr-xr-x  2 ole ole  238 2010-03-28 14:35 Recordings
drwxr-xr-x  2 ole ole  136 2010-06-03 10:53 Safari

Можно также получить расширенную информацию по iTunes для синхронизации (меня это слабо интересует). Получаю device_id, генерирую файл:

$ idevice_id -l
b17056e12f05292e258f015c47d2b6a543cccccc
$ ipod-read-sysinfo-extended b17056e12f05292e258f015c47d2b6a543cccccc ~/tmp/iphone
$ ls -al ~/tmp/iphone/iTunes_Control/Device/SysInfoExtended
-rw-r--r-- 1 ole ole 24682 2010-06-03 11:58 /home/ole/tmp/iphone/iTunes_Control/Device/SysInfoExtended

Размонтирование:

$ fusermount -u ~/tmp/iphone

Телефон уже “спарован”, поэтому на этой же рабочей станции для получения доступа к содержимому вводить PIN-код уже не нужно.

Но для “закрепления” уверенности я повторил те же самые шаги на другой рабочей станции с Ubuntu 10.04. Всё аналогично – без ввода PIN-кода получить доступ к данным нельзя:

$ ifuse ~/tmp/iphone
Please disable the password protection on your device and try again.
The device does not allow pairing as long as a password has been set.
You can enable it again after the connection succeeded.

Резюмирую – скорее всего ошибка в iPhone OS есть, но если после настройки PIN-кода вы перезагрузите iPhone, то маловероятно, что злоумышленники получат доступ к вашим данным. К моему телефону без знания PIN’а получить доступ мне не удалось.