Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #85, ЯНВАРЬ 2006 г.

Посиневший пин

Александр Любимов aka Sashiks

Хакер, номер #085, стр. 085-068-3


# Откуда Куда Данные Длинна Вид

1 A B IN_RAND 128 bit plaintext

2 A B LK_RAND(A) 128 bit XORed with Kinit

3 B A LK_RAND(B) 128 bit XORed with Kinit

4 A B AU_RAND(A) 128 bit plaintext

5 B A SRES 32 bit plaintext

6 B A AU_RAND(B) 128 bit plaintext

7 A B SRES 32 bit plaintext

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

Для начала нужно составить продвинутый алгоритм перебора, чтобы получить хоть какой-то результат. Вот смотри, мы перехватили IN_RAND (он нешифрованный) и BD_ADDR (причем у обоих устройств адреса видны в эфире) и запускаем алгоритм E22; ему передаются вышеперечисленные данные и наш «потенциальный» PIN. Мы находим предполагаемое значение Kinit, это выглядит примерно так:

Kinit = E22[IN_RAND, BD_ADDR(B), PIN'] //PIN' - предполагаемый нами пин-код

Идем дальше, смотри на таблицу выше: сообщения 2 и 3 поксорены Kinit'ом, который мы только что сгенерировали. Значит, сейчас мы получим LK_RAND(A) и LK_RAND(B) в чистом виде. Собственно говоря, нам никто не мешает высчитать гипотетическое значение Kab. Проделываем следующую операцию:

LK_K(A) = E21[BD_ADDR(A), LK_RAND(A)] //LK_K(A|B) - это промежуточные величины

LK_K(B) = E21[BD_ADDR(B), LK_RAND(B)] // XOR'им их между собой и получаем ключ связи

Kab = LK_K(A) XOR LK_K(B)

Теперь самое время проверить наш «потенциальный» пин. Чтобы узнать, действительно ли он настоящий, мы берем свежеиспеченный Kab и перехваченный AU_RAND(A) и вычисляем значение SRES(A). После этого сравниваем полученный результат с SRES(A)', который хранится в сообщении номер 5:

SRES(A) = E1[AU_RAND(A), Kab, BD_ADDR(B)]

Если SRES(A) == SRES(A)' - мы успешно угадали пин! Если же вышел облом, то начинаем производить всю последовательность действий заново, только теперь берем другой PIN'. Вот такая вот хитрая методика получилась. Все вышеописанное, в принципе, не новость. Первым человеком, который заметил эту брешь, если ее можно так назвать, был англичанин Олли Вайтхауз (Ollie Whitehouse) еще в апреле 2004 года. Именно он догадался перехватить сообщения во время паринга и попытаться вычислить PIN методом перебора с помощью полученной идентификационной информации. Тем не менее метод, представленный Вайтхаузом, имел один достаточно весомый изъян: атаку можно было провести только в том случае, если хакер смог выловить все аутентификационные данные. То есть, если взломщик находился вне эфира во время начала паринга, то он пролетает как фанера над Парижем - первые пакеты с данными уже отправлены и отловить их не представляется возможным.

[кто быстрей]

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

Назад на стр. 085-068-2  Содержание  Вперед на стр. 085-068-4