Главная страница
Навигация по странице:

  • 0x770 Шифрование в протоколе беспроводной связи 802.11b

  • 0x771 Протокол WEP

  • 0x772 Поточный шифр RC4

  • 0x780 Атаки на WEP

  • 0x781 Атака путем полного перебора в автономном режиме

  • 0x782 Повторное использование ключевого потока

  • 0x783 Дешифрование по таблицам IV

  • Хакинг. Хакинг__искусство_эксплоита_2_е_469663841. Книга дает полное представление о программировании, машин ной архитектуре, сетевых соединениях и хакерских приемах


    Скачать 2.5 Mb.
    НазваниеКнига дает полное представление о программировании, машин ной архитектуре, сетевых соединениях и хакерских приемах
    АнкорХакинг
    Дата16.06.2022
    Размер2.5 Mb.
    Формат файлаpdf
    Имя файлаХакинг__искусство_эксплоита_2_е_469663841.pdf
    ТипКнига
    #595131
    страница48 из 51
    1   ...   43   44   45   46   47   48   49   50   51

    479
    fseek(fd,(DCM*6)+enum_hashtriplet(pass[6], pass[7], pass[8])*WIDTH,
    SEEK_SET);
    fread(temp_vector, WIDTH, 1, fd); // Прочитать вектор,
    // связывающий байты 6-8 хеша.
    merge(bin_vector2, temp_vector); // Объединить его
    // с первыми двумя векторами.
    len = count_vector_bits(bin_vector2);
    printf(“first 3 vectors merged:\t%d plaintext pairs, with %0.2f%% saturation\n”, len, len*100.0/9025.0);
    fseek(fd,(DCM*7)+enum_hashtriplet(pass[8], pass[9],pass[10])*WIDTH,
    SEEK_SET);
    fread(temp_vector, WIDTH, 1, fd); // Прочитать вектор,
    // связывающий байты 8-10 хеша.
    merge(bin_vector2, temp_vector); // Объединить его с остальными векторами.
    len = count_vector_bits(bin_vector2);
    printf(“all 4 vectors merged:\t%d plaintext pairs, with %0.2f%% saturation\n”, len, len*100.0/9025.0);
    printf(“Possible plaintext pairs for the last two bytes:\n”);
    print_vector(bin_vector2);
    printf(“Building probability vectors...\n”);
    for(i=0; i < 9025; i++) { // Найти возможные первые два байта
    // открытого текста.
    if(get_vector_bit(bin_vector1, i)==1) {;
    prob_vector1[0][pv1_len] = i / 95;
    prob_vector1[1][pv1_len] = i - (prob_vector1[0][pv1_len] * 95);
    pv1_len++;
    }
    }
    for(i=0; i < 9025; i++) { // Найти возможные последние два байта
    // открытого текста.
    if(get_vector_bit(bin_vector2, i)) {
    prob_vector2[0][pv2_len] = i / 95;
    prob_vector2[1][pv2_len] = i - (prob_vector2[0][pv2_len] * 95);
    pv2_len++;
    }
    }
    printf(“Cracking remaining %d possibilites..\n”, pv1_len*pv2_len);
    for(i=0; i < pv1_len; i++) {
    for(j=0; j < pv2_len; j++) {
    plain[0] = prob_vector1[0][i] + 32;
    plain[1] = prob_vector1[1][i] + 32;
    plain[2] = prob_vector2[0][j] + 32;
    plain[3] = prob_vector2[1][j] + 32;
    plain[4] = 0;
    if(strcmp(crypt(plain, “je”), pass) == 0) {

    480
    0x700 Криптология printf(“Password : %s\n”, plain);
    i = 31337;
    j = 31337;
    }
    }
    }
    if(i < 31337)
    printf(“Password wasn’t salted with ‘je’ or is not 4 chars long.\n”);
    fclose(fd);
    }
    Второй фрагмент кода (ppm_crack.c) может взломать наш надоевший пароль “h4R%” за считаные секунды:
    reader@hacking:

    /booksrc $ ./crypt_test h4R% je password “h4R%” with salt “je” hashes to ==> jeMqqfIfPNNTE
    reader@hacking:/booksrc $ gcc -O3 -o ppm_crack ppm_crack.c -lcrypt reader@hacking:/booksrc $ ./ppm_crack jeMqqfIfPNNTE
    Filtering possible plaintext bytes for the first two characters:
    only 1 vector of 4: 3801 plaintext pairs, with 42.12% saturation vectors 1 AND 2 merged: 1666 plaintext pairs, with 18.46% saturation first 3 vectors merged: 695 plaintext pairs, with 7.70% saturation all 4 vectors merged: 287 plaintext pairs, with 3.18% saturation
    Possible plaintext pairs for the first two bytes:
    4 9 N !& !M !Q “/ “5 “W #K #d #g #p $K $O $s %) %Z %\ %r &( &T ‘- ‘0 ‘7 ‘D
    ‘F ( (v (| )+ ). )E )W *c *p *q *t *x +C -5 -A -[ -a .% .D .S .f /t 02 07 0?
    0e 0{ 0| 1A 1U 1V 1Z 1d 2V 2e 2q 3P 3a 3k 3m 4E 4M 4P 4X 4f 6 6, 6C 7: 7@ 7S
    7z 8F 8H 9R 9U 9_ 9 :- :q :s ;G ;J ;Z ;k V >X ?1 @#
    @W @v @| AO B/ B0 BO Bz C( D8 D> E8 EZ F@ G& G? Gj Gy H4 I@ J JN JT JU Jh Jq
    Ks Ku M) M{ N, N: NC NF NQ Ny O/ O[ P9 Pc Q! QA Qi Qv RA Sg Sv T0 Te U& U> UO
    VT V[ V] Vc Vg Vi W: WG X” X6 XZ X` Xp YT YV Y^ Yl Yy Y{ Za [$ [* [9 [m [z \” \
    + \C \O \w ]( ]: ]@ ]w _K _j `q a. aN a^ ae au b: bG bP cE cP dU d] e! fI fv g!
    gG h+ h4 hc iI iT iV iZ in k. kp l5 l` lm lq m, m= mE n0 nD nQ n o# o: o^ p0
    p1 pC pc q* q0 qQ q{ rA rY s” sD sz tK tw u- v$ v. v3 v; v_ vi vo wP wt x” x&
    x+ x1 xQ xX xi yN yo zO zP zU z[ z^ zf zi zr zt {- {B {a |s }) }+ }? }y L m
    Filtering possible plaintext bytes for the last two characters:
    only 1 vector of 4: 3821 plaintext pairs, with 42.34% saturation vectors 1 AND 2 merged: 1677 plaintext pairs, with 18.58% saturation first 3 vectors merged: 713 plaintext pairs, with 7.90% saturation all 4 vectors merged: 297 plaintext pairs, with 3.29% saturation
    Possible plaintext pairs for the last two bytes:
    ! & != !H !I !K !P !X !o ! “r “{ “} #% #0 $5 $] %K %M %T &” &% &( &0 &4 &I
    &q &} ‘B ‘Q ‘d )j )w *I *] *e *j *k *o *w *| +B +W ,’ ,J ,V -z . .$ .T /’ /_
    0Y 0i 0s 1! 1= 1l 1v 2- 2/ 2g 2k 3n 4K 4Y 4\ 4y 5- 5M 5O 5} 6+ 62 6E 6j 7* 74 8E 9Q 9\ 9a 9b :8 :; :A :H :S :w ;” ;& ;L v >x ?& ?` ?j
    ?w @0 A* B B@ BT C8 CF CJ CN C} D+ D? DK Dc EM EQ FZ GO GR H) Hj I: I> J( J+
    J3 J6 Jm K# K) K@ L, L1 LT N* NW N` O= O[ Ot P: P\ Ps Q- Qa R% RJ RS S3 Sa T!
    T$ T@ TR T_ Th U” U1 V* V{ W3 Wy Wz X% X* Y* Y? Yw Z7 Za Zh Zi Zm [F \( \3 \5 \
    _ \a \b \| ]$ ]. ]2 ]? ]d ^[ ^ `1 `F `f `y a8 a= aI aK az b, b- bS bz c( cg dB
    e, eF eJ eK eu fT fW fo g( g> gW g\ h$ h9 h: h@ hk i? jN ji jn k= kj l7 lo m<
    m= mT me m| m} n% n? n o oF oG oM p” p9 p\ q} r6 r= rB sA sN s{ s tX tp u

    0x770 Шифрование в протоколе беспроводной связи 802.11b
    481
    u2 uQ uU uk v# vG vV vW vl w* w> wD wv x2 xA y: y= y? yM yU yX zK zv {# {) {=
    {O {m |I |Z }. }; }d + C a
    Building probability vectors...
    Cracking remaining 85239 possibilites..
    Password : h4R%
    reader@hacking:/booksrc $
    Эти программы – хаки для проверки концепции и основываются на рассеивании, которое осуществляют функции хеширования. Суще- ствуют и другие атаки на основе компромисса между временем и памя- тью, некоторые из них довольно популярны, например RainbowCrack, где есть поддержка нескольких алгоритмов. Более подробно вы може- те узнать о них из Интернета.
    0x770 Шифрование в протоколе
    беспроводной связи 802.11b
    Защищенность протокола беспроводной связи 802.11b стала серьезной проблемой в основном по причине отсутствия таковой. Слабость при- меняемого в нем метода шифрования Wired Equivalent Privacy (WEP) в значительной мере ответственна за общую незащищенность. Есть и некоторые другие детали, часто игнорируемые при развертывании беспроводных сетей и способные создавать существенную уязвимость.
    Одной из этих деталей является то, что беспроводные сети существу- ют на уровне 2. Если беспроводная сеть не защищена с помощью VLAN или сетевого экрана, то соединившийся с точкой доступа злоумышлен- ник может перенаправить весь трафик проводной сети в беспроводную с помощью ARP-переадресации. Это обстоятельство, а также обычай привязывать точки беспроводного доступа к внутренним закрытым се- тям могут быть причиной серьезных уязвимостей.
    Конечно, если включен WEP, то связываться с точкой доступа будет разрешено только клиентам с допустимым ключом WEP. Если этот ме- тод надежен, то нечего беспокоиться о том, что злоумышленники под- ключатся к сети и опустошат ее, отсюда вопрос: «А насколько наде жен
    WEP?»
    0x771 Протокол WEP
    WEP должен был стать методом шифрования, обеспечивающим такую же меру защиты, как и при проводном доступе. Сначала WEP должен был работать с 40-разрядными ключами, затем появился WEP2, в ко- тором размер ключа был увеличен до 104 бит. Шифрование выполня- ется отдельно для каждого пакета, поэтому каждый пакет фактически представляет собой отдельно отправляемое текстовое сообщение. Обо- значим пакет буквой M.

    482
    0x700 Криптология
    Сначала вычисляется контрольная сумма сообщения M, чтобы потом можно было проверить его целостность. Это делается с помощью функ- ции 32-разрядного циклического избыточного сложения, удачно на- званной CRC32 (от cyclic redundancy checksum). Эту контрольную сум- му (checksum) обозначим CS, поэтому CS = CRC32(M). Данная величи- на дописывается в конец сообщения, и вместе они составляют тексто- вое сообщение (plaintext message), которое мы назовем P (рис. 7.2).
    Сообщение M
    CRC(M) CS
    Открытый текст P
    Рис. 7.2. Открытое текстовое сообщение
    Теперь надо зашифровать открытый текст. Шифрование осуществля- ется с применением поточного шифра RC4. Этот шифр инициализи- руется с помощью начального значения, после чего он может генери- ровать ключевой поток (keystream) – поток псевдослучайных байтов произвольной длины. В WEP в качестве начального значения исполь- зуется вектор инициализации (initialization vector, IV). Вектор IV со- стоит из 24 байт меняющихся битов, генерируемых для каждого паке- та. В старых реализациях WEP иногда применялись просто последова- тельные значения IV, но в более новых в том или ином виде реализова- на псевдослучайность.
    Независимо от того, как выбираются 24 бита IV, они приписывают- ся спереди к WEP-ключу. (Добавление 24 битов IV к размеру WEP- ключа – это хитрая маркетинговая уловка. Когда поставщик обеща- ет 64-разрядные или 128-разрядные WEP-ключи, фактический размер ключей будет лишь 49 или 104 бита соответственно, а 24 бита придутся на IV.) В совокупности IV и WEP-ключ образуют начальное значение
    (seed value), которое мы обозначим S (рис. 7.3).
    40 или 104разрядные ключи WEP
    24 бита IV
    Начальное значение S
    Рис. 7.3. Начальное значение
    Затем начальное значение S подается на вход RC4, который генерирует ключевой поток. Этот ключевой поток поразрядно складывается с от- крытым текстом P, в результате чего появляется шифрованный текст C
    (рис. 7.4). Вектор IV дописывается спереди к шифрованному тексту, все это получает еще один заголовок и отправляется в радиоканал.

    0x770 Шифрование в протоколе беспроводной связи 802.11b
    483
    Шифрованный текст C
    24 бита IV
    Ключевой поток из RC4(S)
    Открытый текст P (M с 32 битной CS)
    XOR
    равно
    Рис. 7.4. Шифрованный текст
    У получателя пакета, зашифрованного WEP, происходит обратный процесс. Получатель извлекает из сообщения IV и присоединяет к нему свой WEP-ключ, создавая начальное значение S. Если у отправителя и получателя одинаковые WEP-ключи, то начальные значения ока- жутся одинаковыми. Это начальное значение подается на вход RC4, который генерирует тот же ключевой поток, складываемый с осталь- ной частью зашифрованного сообщения. В итоге получается исходное текстовое сообщение, состоящее из сообщения пакета M и контроль- ной суммы CS. С помощью той же функции CRC32 получатель вычис- ляет контрольную сумму для M и сравнивает ее с принятым значени- ем CS. Если контрольные суммы совпадают, пакет передается дальше.
    В противном случае пакет отбрасывается, поскольку либо были ошиб- ки при передаче данных, либо не совпадают WEP-ключи отправителя и получателя.
    Вот вкратце, как действует WEP.
    0x772 Поточный шифр RC4
    RC4 – на удивление простой алгоритм. Он основан на двух алгоритмах: развертывания ключей (Key Scheduling Algorithm, KSA) и псевдо- случайной генерации (Pseudo-Random Generation Algorithm, PRGA).
    В обоих алгоритмах используется S-блок 8×8, представляющий собой массив из 256 чисел, от 0 до 255. Проще говоря, массив содержит все числа от 0 до 255, перемешанные неким образом. KSA осуществляет начальное перемешивание S-блока исходя из поданного на вход на- чального значения длиной до 256 бит.
    Сначала S-блок заполняется последовательными числами от 0 до 255.
    Массив этих чисел назовем S. Затем другой массив из 256 чисел запол- няется начальным значением, которое повторяется в нем столько раз, сколько требуется, чтобы заполнить весь массив. Этот массив назо- вем K. После этого массив S перемешивается в соответствии со следую- щим описанием на псевдокоде:
    j = 0;
    for i = 0 to 255
    {
    j = (j + S[i] + K[i]) mod 256;

    484
    0x700 Криптология swap S[i] and S[j];
    }
    В результате S-блок оказывается перемешанным на основе начально- го заполнения. В этом и состоит алгоритм развертывания ключей. До- вольно просто.
    Теперь требуется ключевой поток, для чего применяется алгоритм псевдослучайной генерации (PRGA). В этом алгоритме действуют два счетчика i и j с нулевыми начальными значениями. Каждый байт клю- чевого потока получается на основе следующего псевдокода:
    i = (i + 1) mod 256;
    j = (j + S[i]) mod 256;
    swap S[i] and S[j];
    t = (S[i] + S[j]) mod 256;
    Output the value of S[t];
    Выведенный байт S[t] – первый байт ключевого потока. Для получе- ния следующих байтов алгоритм выполняется повторно.
    RC4 настолько прост, что его можно легко запомнить и быстро реали- зовать, и при правильном применении он достаточно надежен. Однако из-за способа использования RC4 в WEP возникает ряд проблем.
    0x780 Атаки на WEP
    С безопасностью WEP связано несколько проблем. По правде говоря, он был задуман не как надежный криптографический протокол, а как способ соединения, эквивалентного проводному, о чем говорит и его название. Помимо уязвимостей при установлении связи и идентифи- кации абонента, есть ряд проблем, обусловленных собственно крип- тографическим протоколом. Одни проблемы связаны с применением
    CRC32 в качестве функции контрольной суммы для проверки целост- ности сообщений, а другие – с использованием IV.
    0x781 Атака путем полного перебора
    в автономном режиме
    Атака с применением полного перебора ключей (грубой силы) возможна для любой вычислительно-стойкой криптосистемы. Вопрос лишь в том, насколько практичной она оказывается. В случае WEP схема подхода довольно проста. Надо перехватить несколько пакетов и начать расшиф- ровывать их, перебирая все ключи. Для каждого дешифрованного паке- та нужно вычислить контрольную сумму и сравнить с имеющейся в па- кете. При их совпадении можно предположить, что найден правильный ключ. Обычно надо проделать это хотя бы с двумя пакетами, посколь- ку не исключено, что отдельный пакет может быть дешифрован с невер- ным ключом, но контрольные суммы при этом совпадут.

    0x780 Атаки на WEP
    485
    Однако исходя из 10 000 проверок в секунду полный перебор 40-раз- рядных ключей займет больше трех лет. Вполне возможно, что на со- временных процессорах можно достичь и большей скорости, но даже если осуществлять 200 000 проверок в секунду, то и тогда на взлом уй- дет несколько месяцев. Разумность такой атаки зависит от ресурсов и настойчивости атакующего.
    Тим Ньюшем (Tim Newsham) предложил эффективный метод взло- ма, основанный на слабости алгоритма генерации ключей по паро- лям, применяемого в большинстве 40-разрядных (рекламируемых как
    64-разрядные) карт и точек доступа. Фактически в его методе 40-бит- ное ключевое пространство сокращается до 21-битного, а его перебор возможен уже за считанные минуты при скорости 10 000 проверок в се- кунду (и за несколько секунд на современном процессоре). Подробнее о его методах можно узнать на www.lava.net/newsham/wlan/.
    Для 104-разрядных сетей WEP (рекламируемых как 128-разрядные) полный перебор практически неосуществим.
    0x782 Повторное использование ключевого потока
    Еще одна потенциальная проблема WEP – повторное использование ключевого потока. Если сложить два открытых текста (P) с одним и тем же ключевым потоком и получить пару различных шифрованных текстов (C), то в результате XOR-сложения (⊕) этих шифрованных тек- стов между собой ключевой поток будет исключен, а останется сумма двух открытых текстов.
    C
    1
    = P
    1
    ⊕ RC4(S)
    C
    2
    = P
    2
    ⊕ RC4(S)
    C
    1
    ⊕ C
    2
    = (P
    1
    ⊕ RC4(S)) ⊕ (P
    2
    ⊕ RC4(S)) = P
    1
    ⊕ P
    2
    В этом случае, если известен один открытый текст, легко можно восста- новить второй. Кроме того, поскольку в данном случае открытые тек- сты представляют собой интернет-пакеты с известной и весьма пред- сказуемой структурой, можно предложить различные приемы для вос- становления обоих исходных открытых текстов.
    Помешать такого рода атакам должен был IV: без него все пакеты шиф- ровались бы одним и тем же ключевым потоком. Если в каждом пакете свой IV, то и ключевой поток для каждого из пакетов будет разный. Од- нако, если IV одинаковы, то оба пакета зашифровываются одним и тем же ключевым потоком. Такую ситуацию легко обнаружить, поскольку
    IV включаются в зашифрованные пакеты в открытом виде. Кроме того,
    IV, используемые в WEP, имеют длину всего 24 бита, а это практиче- ски гарантирует их повторное использование. Если предположить, что
    IV выбираются случайным образом, то статистически повторения клю- чевого потока можно ожидать уже через 5000 пакетов.

    486
    0x700 Криптология
    Это число кажется неожиданно малым, что соответствует противо- речащему интуиции феномену теории вероятностей, известному как
    парадокс дней рождения. В нем утверждается, что если в одном по- мещении собрать 23 случайных человека, то по крайней мере у дво- их из них дни рождения совпадают. Двадцать три человека образуют
    (23 × 22) / 2 = 253 возможные пары. Вероятность успеха для каждой пары составляет 1/365, или около 0,27%, а вероятность неуспеха со- ставит соответственно 1 – (1/365), или около 99,726%. При возведе- нии этой вероятности в степень 253 общая вероятность неуспеха ока- зывается близкой к 49,95%, а значит вероятность успеха становится немного больше 50%.
    То же самое происходит с коллизиями IV. Для 5000 пакетов существу- ет (5000 × 4999) / 2 = 12 497 500 возможных пар. Для каждой пары вероятность неуспеха составит 1 – (1/2 24
    ). При возведении в степень, равную числу возможных пар, общая вероятность неуспеха оказывает- ся близкой к 47,5%, из чего следует, что вероятность коллизии IV для
    5000 пакетов равна 52,5%:
    1 52 5 24 5000 4999 2
    =
    ×
    Ψ
    2
    После обнаружения коллизии IV можно, основываясь на знании струк- туры открытых текстов, восстановить их по сумме двух шифрованных текстов. Если же известен один из открытых текстов, другой получает- ся в результате простого XOR-сложения. Один из способов получения известных открытых текстов использует электронную почту. Атакую- щий посылает спам-сообщение, а жертва получает почту через шифру- емое беспроводное соединение.
    0x783 Дешифрование по таблицам IV
    В результате восстановления открытых текстов перехваченного сооб- щения становится известным ключевой поток для соответствующе- го IV. С его помощью можно расшифровать любые пакеты с теми же
    IV, если они не длиннее, чем взломанный ключевой поток. Постепенно можно составить таблицу участков ключевого потока, индексирован- ных по IV. Всего есть 22 4
    различных IV, и если для каждого IV хранить
    1500 байт ключевого потока, то полная таблица займет около 24 Гбайт памяти. После создания такой таблицы все перехватываемые зашиф- рованные пакеты можно легко дешифровать.
    На практике такой метод атаки очень долог и скучен. Идея интерес- ная, но есть гораздо более простые способы справиться с WEP.

    0x780 Атаки на WEP
    1   ...   43   44   45   46   47   48   49   50   51


    написать администратору сайта