Собственная безопасность Палм-ов

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

Рассмотрим, как же обеспечивает безопасность сам Palm:

Не могу сказать что-либо про OS5 или тем более готовящуюся OS6 (там обещают улучшить его в этом смысле), но в OS4 и более ранних с безопасностью самого палма не слишком все замечательно.

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

Кстати, если вы защищаете записи от просмотра паролем (в стандартных программах Palm-a) и думаете, что никто не сможет увидеть эту информацию без пароля - то вы сильно ошибаетесь, достаточно синхронизировать, или передать базы в ПК и просто посмотреть внутрь! Все как на ладони. Мда, вот для этого и существуют программы PIM для хранения различной секретной информации в действительно криптованном виде. Об этих программах здесь.

Итак, мы забыли пароль и нам нужно восстановить его. Возможны несколько случаев:

  1. Аппарат не синхронизировался но не заблокирован
  2. Аппарат синхронизировался с ПК, но в данный момент заблокирован
  3. Аппарат не синхронизировался и заблокирован

Естественно самый лучший вариант - 1-й, а худший - 3-й.


Случай 1-й (Аппарат не синхронизировался но не заблокирован)

Итак вы забыли пароль, но благо сам КПК не заблокирован. Вот вам дырка в системе - в протоколе синхронизации HotSync передается пароль в шифрованном виде, причем шифрование производиться самым простым способом - через логическую команду XOR с фиксированным набором данных. Более того, данный пароль храниться в Unsaved Preferences в том же виде и может быть доступен любому приложению.

Насколько я понимаю именно на этом принципе основана программа recall и NotSync.

Пароль в Палме имеет максимальную длину -31символа, а в памяти Palm-а он всегда кодируется в последовательность из 32байт.

Итак, получить пароль можно следующими способами:

1. Взять из базы UnsavedPreferences

2. Просматривать сам пароль в режиме реальной синхронизации, просматривая данные синхронизации

3. Или имитировать HotSync синхронизацию для получения пароля, именно этот метод используется @stake в программе NotSync.

В начале соединения HotSync Palm передает пакет SLP содержащий следующие данные:

truct {
UInt8 header[4];
UInt8 exec_buf[6];
Int32 userID; // 0
Int32 viewerID; // 4
Int32 lastSyncPC; // 8
UInt8 successfulSyncDate[8]; // 12, time_t
UInt8 lastSyncDate[8]; // 20, time_t
UInt8 userLen; // 28
UInt8 passwordLen; // 29
UInt8 username[128]; // 30 -> userLen
UInt8 password[128];
};

Для декодирования пароля используются два метода в зависимости от его длинны: если пароль 4 или менее символов - индекс подсчитывается исходя из длинны пароля и XOR-ированным байтом из 32-байтной, неизменяемой последовательности. Если пароль более 4символов - то последовательность дополняется 32 байтами и пропускается 4 раза через функцию XOR с 64байтным неизменяемым блоком. Непонятно зачем были использованы такие методы.

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

Итак, еще раз, случай при 4-х (или менее) символьном пароле:

Сравнивая нескольких закодированных последовательностей различных по длине коротких паролей мы можем увидеть, что 32-байтный неизменяемый код был от-XOR-ен с паролем в ASCII

56 8C D2 3E 99 4B 0F 88 09 02 13 45 07 04 13 44
0C 08 13 5A 32 15 13 5D D2 17 EA D3 B5 DF 55 63

Пароль - 'test'

09 02 13 45 07 04 13 44 0C 08 13 5A 32 15 13 5D

D2 17 EA D3 B5 DF 55 63 22 E9 A1 4A 99 4B 0F 88

32-байтный блок используется для паролей менее 4-х символов

Определим следующее:

A_j будет j-ым байтом A в пароле

B_k будет k-ым байтом B, в 32-байтной неизменной последовательности

C_m будет m-ым байтом С, в блоке с закодированном паролем

Стартовый индекс, i, в неизменном блоке где функция XOR должна начинаться с вычисления:

i = (A_0 + strlen(A)) % 32d;

Тогда закодированный последовательный блок будет выглядеть следующим образом:

C_0 = A_0 XOR B_i

C_1 = A_1 XOR B_i+1

C_2 = A_2 XOR B_i+2

C_3 = A_3 XOR B_i+3

.

.

.

C_4 = B_i+4C_31 = B_i+31

Пример:

0x56 = 0x74 ('t') XOR 0x22
0x8C = 0x65 ('e') XOR 0xE9
0xD2 = 0x73 ('s') XOR 0xA1
0x3E = 0x74 ('t') XOR 0x4A

А вот в случае пароля с более чем из 4-х символов

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

Пароль в ASCII виде дополняется до 32байт в следующим образом:

Определим A_j как j-й байт A (пароль)

len = strlen(A);
while (len < 32)
{
for (i = len; i < len * 2; ++i)
pass[i] = pass[i - len] + len; // increment each character by lenlen = len * 2;
}

Пример:

A_0 = 0x74 ('t')
A_1 = 0x65 ('e')
A_2 = 0x73 ('s')
A_3 = 0x74 ('t')
A_4 = 0x61 ('a')
A_5 = 0x79
A_6 = 0x6A
A_7 = 0x78
A_8 = 0x79
A_9 = 0x66
A_10 = 0x7E
.
.
.

Результатом будет 32байтный массив, обработанный четыре раза функцией XOR с 64битной последовательностью:

B1 56 35 1A 9C 98 80 84 37 A7 3D 61 7F 2E E8 76
2A F2 A5 84 07 C7 EC 27 6F 7D 04 CD 52 1E CD 5B
B3 29 76 66 D9 5E 4B CA 63 72 6F D2 FD 25 E6 7B
C5 66 B3 D3 45 9A AF DA 29 86 22 6E B8 03 62 BC


Определим

B_k как k-й байт B в неизменяемом 64байтном блоке
а m = 2, 16, 24, 8 для каждого из 4-х блоков

index = (A_m + A_m+1) & 0x3F; // 6 LSB
shift = (A_m+2 + A_m+3) & 0x7; // 3 LSB for (i = 0; i < 32; ++i)
{
if (m == 32) m = 0; // wrap around to beginning
if (index == 64) index = 0; // wrap around to beginning temp = B_index; // xy
temp <<= 8;
temp |= B_index; // xyxy temp >>= shift;
A_m ^= (unsigned char) temp; ++m;
++index;
}

Результатом кодирования пароля в 32-битную последовательность не будет иметь никаких следов использования константного блока, как это имеет место в 4-символьном пароле.

18 0A 43 3A 17 7D A3 CA D7 9D 75 D2 D3 C8 A5 CF
F1 71 07 03 5A 52 4B B9 70 2D B2 D1 DF A5 54 07

Пароль - 'testa'

 

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


Proof-of-Concept Code:

Итак, зная алгоритм @Stake сделал две программы для Windows и для PalmOS. Первая кодирует/декодирует пароль в соответствии с вышеупомянутыми алгоритмами. Вторая показывает пароль в самом Палме, инициируя процесс синхронизации и перехватывает данные.

http://www.atstake.com/research/advisories/2000/notsync.zip

http://www.atstake.com/research/advisories/2000/palmcrypt.zip

Для использования программы Palmcrypt Вам нужно запустить программу с ключем -e для создания 32-битной последовательности, и с ключем -e для декодирования пароля.

E:\>palmcrypt -e test

PalmOS Password Codec
kingpin@atstake.com
@stake Research Labs
http://www.atstake.com/research
August 2000

0x56 0x8C 0xD2 0x3E 0x99 0x4B 0x0F 0x88 [V..>.K..]
0x09 0x02 0x13 0x45 0x07 0x04 0x13 0x44 [...E...D]
0x0C 0x08 0x13 0x5A 0x32 0x15 0x13 0x5D [...Z2..]]
0xD2 0x17 0xEA 0xD3 0xB5 0xDF 0x55 0x63 [......Uc]

 

E:\>palmcrypt -d
568CD23E994B0F8809021345070413440C08135A3215135DD217EAD3B5DF5563

PalmOS Password Codec
kingpin@atstake.com
@stake Research Labs
http://www.atstake.com/research
August 2000

0x74 0x65 0x73 0x74 [test ]

Берем программку типа pinstall и с помощью нее устанавливаем программу recall в КПК, запускаем ее на Палме - видим пароль! Просто и удобно - хороший булыжник в огород Palm, надеюсь это прикроется когда-нибудь (кстати не работает на OS4)

Следующий вариант, который работает на OS4 - это просто затиральщик пароля, программка с именем forgetpass. Работает очень просто - запускаем - и пароля нет ;)


Случай 2-й (Аппарат синхронизировался, но в данный момент заблокирован)

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

Вариантов - несколько

  1. Полностью обнуляем Палм, затем синхронизируемся, восстанавливая данные с последней синхронизации (все сделанные изменения после этой синхронизации будут потеряны), закачиваем программки указанные выше, смотрим пароль или стираем его вообще и радуемся!
  2. Cложнее, если не хотим потерять данные если любой reset без потери данных не помогает, единственный вариант - это перейти в режим degug. Он позволяет войти в этот режим без ввода пароля (еще камешек). Войти в режим отладки нажать на кнопку Reset и на клавишу прокрутки вниз. Данные не теряются. Но тут нужно быть аккуратным и хорошо разбираться - что Вы делаете, так как это все делается на Ваш страх и риск.
  3. И еще один вариант - пароль храниться в папке, где установлен Palm Desktop. Этот файл называется user.dat, но пароль там храниться в шифрованном виде. К сожалению алгоритма взлома нет, но есть описание формата этого файла (на английском, но думаю у тех, кто имеет возможность покопаться в алгоритмах - с английским проблем не возникнет):

Users.Dat

Field Name Type Size Comments
User Count Short 2*Byte The count of users
Class Flag Short 2*Byte 0xFFFF value to indicate a class entry follows
Class entry Class-Entry   CUser class name
User entry User-Entry   occurs user count number of times

User-Entry

Field Name Type Size Comments
Hotsync ID Long 4*Byte Unique hotsync id for this user. Values less than 256 are reserved and indicate a user profile record
NLength Char 1*Byte Length of user Long Name
Long Name Char String User Long Name of NLength
Dlength Char 1*Byte Length of user directory name
Dir Name Char String User directory name of DLength
Active Short 2*Byte value 0x0001 indicates an active user that has hotsynced with this PC before.
PWLength Short 2*Byte Length of user password, if any.
Unknown Short 2*Byte Unknown purpose. If you discover its purpose, please let me know.
Password Char String A 32 character encoded string that represents the user password.
Important: This field is present only if the PWLength is non-zero.
Unknown Short 2*Byte Unknown purpose. If you discover its purpose, please let me know.
Variable Data Flag Short 2*Byte 0xFFFF value to indicate a class entry follows. If one does, it will be immediately followed by Conduit Entries for the Permanent Sync settings.
0x8001 value to indicate no more data for this user.
0x8003 value to indicate Conduit Entries follow for this users Temporary Sync settings.
Note: Any other value is an unknown value, you should continue to read shorts from the record until you encounter one of the above values or EOF to indicate the end of record for this user.
Variable-Data Variable-Data   See Variable Data Flag field for an explanation.

Class-Entry

Field Name Type Size Comments
Constant Short 2*Byte Constant 1
Length Short 2*Byte Length of Class Name
Class Name Char Byte Class name of length specified.

Variable-Data

Field Name Type Size Comments
Class entry Class-Entry   CUserSyncPreference class name Present only if Variable Flag is 0xFFFF. Note that when this field is present, it will always be immediately followed by Conduit-Entries representing the Permanent Sync Settings for this machine.
Conduit entry Conduit-Entry   Conduit Settings, occurs a variable number of times.

Conduit-Entry

Field Name Type Size Comments
Creator ID Char 4*Byte The reversed 4 byte creator ID associated with the conduit.
Note: I have observed entries here with non-character values like 0x00000001 and 0x00000002. These may represent custom settings associated with certain conduits, but I am not sure.
Settings Char ByteArray Conduit Settings, occurs a variable number of times (perhaps related to the number of users). The byte array terminates with a 0x80 byte. The byte prior to the terminating byte indicates whether or not more entries follow (0x01 = no more entries, 0x03 = more entries).
The ByteArray may represent the individual user settings for this conduit, where user 0 in the users.dat file is index 0 in the ByteArray and the value is the setting for the conduit, e.g.,
0x00 = Synchronize
0x01 = Overwrite PC to Handheld
0x02 = Overwrite Handheld to PC
0x03 = Do Nothing
0x04 = Custom

Случай 3-й (Аппарат не синхронизировался и заблокирован)

Здесь сложнее, если любой reset без потери данных не помогает, то остается единственный вариант - это перейти в режим degug. Он позволяет войти в этот режим без ввода пароля. Войти в режим отладки нажать на кнопку Reset и на клавишу прокрутки вниз. Данные не теряются. По поводу этого есть статейки ниже:

 

Формате PDF, запакованные ZIP-ом (на английском):

Privacy and Security Issues with PalmOS-based PDAs
Palm OS Password Lockout Bypass (@stake)

И вот последний камень в огороды Палмоводства:

Palm Desktop позволяет установить свой пароль. Без этого пароля Вы не можете увидеть данные пользователя. Но есть очень простой способ обойти это (испытано в версии 4.0):

Когда программа спрашивает пароль - нажмите Alt-F или Alt-H для того, чтобы попасть в меню. Как только вы попадаете в меню - выберите Tools | Optionse | Security tab. Здесь снимаете галку на пункте Require password to access the Palm desktop. Нажимает ок, затем Cancel и выход, при следующем заходе - Вам уже не будут надоедать всякой ерундой ;)

 

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


Вся размещаемая информация несет информационно-образовательный характер. Запрещается использовать любые материалы с сайта в противозаконных целях, нарушающих законы РФ.


© 2003 Palmomania

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

-на главную страницу-

Сайт управляется системой uCoz