Хакинг. Хакинг__искусство_эксплоита_2_е_469663841. Книга дает полное представление о программировании, машин ной архитектуре, сетевых соединениях и хакерских приемах
Скачать 2.5 Mb.
|
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 ?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. |