Создатели эксплойт-паков изобретают все более интересные способы маскировки эксплойтов, шеллкодов и полезной нагрузки, чтобы аналитикам было труднее понять, что за эксплойт перед ними и какие действия он может выполнять.
Несколько дней назад исследователи обнаружили в Angler Exploit Kit, одном из наиболее распространенных в настоящее время эксплойт-паков, использование криптографического протокола Диффи-Хеллмана. Этот протокол был разработан более 40 лет назад, однако это первый известный случай его использования в эксплойт-паке.
В Angler злоумышленники применили протокол Диффи-Хеллмана для получения структуры с шеллкодом одного из последних эксплойтов к уязвимости CVE-2015-2419 для браузера Internet Explorer 11, а потом и для эксплойта к уязвимости CVE-2015-5560 для Adobe Flash. Целью злоумышленников скорее всего являлось затруднение обнаружения эксплойта различными сетевыми экранами (которые не смогут расшифровать шеллкод и эксплойт путем анализа перехваченного трафика), а также усложнение получения кода эксплойта исследователями. Однако экспертам «Лаборатории Касперского» удалось провести успешную атаку на данную реализацию протокола Диффи-Хеллмана и расшифровать шеллкод.
Angler против исследователей
Для усложнения работы исследователей помимо протокола Диффи-Хеллмана использовались многократная обфускация JavaScript-кода и ActionScript-кода во Flash, а также блокировка IP пользователя после отдачи ему зашифрованной структуры с шеллкодом. Получив структуру с шелкодом таким способом (зашифрованную одноразовым ключом с помощью протокола Диффи-Хеллмана), образец эксплойт-пака после первой отработки становится нерабочим – исследователь не сможет понять, что делает конкретный файл, воспроизвести атаку и зачастую вообще идентифицировать эксплойт и уязвимость.
Обмен ключами и получение шеллкода для эксплойта CVE-2015-2419
На рисунке мы видим запрос с обменом ключами, и в ответ браузер получает от сервера злоумышленников зашифрованный массив, содержащий шеллкод для эксплуатации уязвимости. Такой же запрос в трафике использовался для загрузки эксплойта к уязвимости Flash.
Так как секрет для генерации ключей каждый раз новый, то даже имея записанный трафик исследователь не сможет еще раз отдать его браузеру, воспроизвести атаку и идентифицировать уязвимость.
Особенности реализации протокола Диффи-Хеллмана
Используемая реализация протокола Диффи-Хеллмана заключается в следующем:
-
Сервер генерирует случайное число g (16 байт) и отдает браузеру пользователя HTML-страницу с числом g и JavaScript-реализацией алгоритма Диффи-Хеллмана.
-
JavaScript в браузере пользователя генерирует случайный модуль p (16 байт) и случайный закрытый ключ Ka (16 байт), после чего вычисляет открытый ключ A = gKa mod p и отправляет на сервер тройку чисел (g, A, p) в JSON-объекте вместе с версией интернет-браузера.
1{″g″:″40a262b1360a6a16612ca8251161a9a5″,″A″:″5eff90f1c48342f5d519cd02b5dfd8b″,″p″:″1b0b5c6e6b0b5b7e6c6d0b1b0a8c3c7e″,″v″:″17923″} -
Сервер генерирует свой случайный закрытый ключ Kb, случайный ключ шифрования Kx (16 байт) и находит общий секрет Диффи-Хеллмана Kdh = AKb mod p. После этого сервер зашифровывает шеллкод алгоритмом XTEA с ключом Kx, затем base64_encode и urlencode, получая в итоге строку b. Затем ключ Kx также шифруется XTEA с ключом Kdh, base64_encode и urlencode, в итоге получается строка k. И, наконец, сервер вычисляет свой открытый ключ B = gKb mod p и отправляет браузеру Base64-закодированный JSON-объект, содержащий B, k и b:
eyJCIjoiMDJhYTY1MjZlNmVkYzAwNDIzOTRiN2VhODFlYzViNzUiLCJrIj…1k1dnVNYWY1UlVXZjYxSSUzRCJ9
После снятия Base64-кодировки:
{″B″:″02aa6526e6edc0042394b7ea81ec5b75″,″k″:″I5nkiFBk3LALF%2BnfkR7%2FYQ%3D%3D″,″b″:″to0ShZH…3Y5vuMaf5RUWf61I%3D″}
-
Браузер пользователя вычисляет общий секрет Диффи-Хеллмана Kdh = BKa mod p, расшифровывает k urldecode, base64_decode и XTEA с ключом Kdh, получая ключ Kx, и, наконец, расшифровывает шеллкод urldecode, base64_decode и XTEA с ключом Kx.
Как можно предположить, целью использования данной сложной криптографической системы является предотвращение перехвата шеллкода путем прослушки интернет-трафика между сервером с эксплойт-паком и браузером пользователя. Но нам удалось провести успешную атаку на данную реализацию криптографического протокола и расшифровать шеллкод. Для атаки использовался модифицированный алгоритм Полига-Хеллмана (детерминированный алгоритм дискретного логарифмирования в кольце вычетов по модулю простого числа).
Согласно оригинальному алгоритму, для случая, когда известно разложение функции Эйлера модуля p на простые множители qi (взаимнопростые множители Qi)
сложность нахождения закрытого ключа Ka и общего секрета Диффи-Хеллмана Kdh по перехваченным открытым ключам A и B составляет
Мы использовали оптимизированный алгоритм дискретного логарифмирования в кольце вычетов по простому модулю, при этом учитывали малость logp по сравнению с qi, а также низкую вероятность вхождения больших простых множителей в степенях больших единицы в функцию Эйлера φ(p), т.е. αi с большой вероятностью будут равны единице для больших qi. В связи с этим, сложность модифицированного алгоритма составила
что позволяет успешно проводить атаку в случае, если все qi < 1018. Эксперимент показал, что данное условие соблюдается более чем в половине случаев использования описанной выше реализации протокола Диффи-Хеллмана (случай случайно сгенерированных g, p, Ka и Kb без дополнительных проверок на их безопасность).
Описание модифицированного алгоритма Полига-Хеллмана
-
Найдем разложение числа p на простые множители (факторизацию удобно осуществлять с помощью Cryptool):
p = 0x1b0b5c6e6b0b5b7e6c6d0b1b0a8c3c7e = 35948145881546650497425055363061529726 = 2 * 101 * 521 * 195197 * 7138079603 * 245150552958961933
-
Найдем функцию Эйлера числа p:
φ(p) = (2-1) * (101-1) * (521-1) * (195197-1) * (7138079603-1) * (245150552958961933-1) = 17761863220777184249809368812124288000
-
Найдем разложение функции Эйлера на простые множители:
φ(p) = 2^10 * 3^2 * 5^3 * 13 * 19 * 79 * 167 * 383 * 48799 * 45177719 * 5603527793
-
Для нахождения закрытого ключа браузера Ka необходимо найди дискретный логарифм:
A = gKa mod p
A = 0x5eff90f1c48342f5d519cd02b5dfd8b = 7892150445281019518426774740123123083
g = 0x40a262b1360a6a16612ca8251161a9a5 = 14017453774474660607531272629759062185 (mod p)Т.к. искать Ka сразу по модулю φ(p) довольно трудоемко, найдем Ka по очереди для каждого из взаимнопростых множителей Qi функции Эйлера φ(p)
[1024, 9, 125, 13, 19, 79, 167, 383, 48799, 45177719, 5603527793],
а с помощью полученных результатов и «Китайской теоремы об остатках» найдем Ka сразу по модулю φ(p).
-
Для нахождения Ka по модулю Qi необходимо найти дискретный логарифм
Для этого:
5.1. Возьмем число H=⌊√(Q_i )⌋+1;
5.2. Вычислим Dc = DaHmod p;
5.3. Составим отсортированную таблицу значений Dcumod p для 1 ≤ u ≤ H;
5.4. Найдем такое значение 0 ≤ v ≤ H, что элемент Db∙ Davmod p содержится в таблице
5.5. Значение Ka по модулю Qi равняется Hu-v.Реализация описанного алгоритма на языке Java приведена в Приложении A. Так как в рассматриваемом примере максимальное значение Qi составило всего несколько миллиардов, то время работы программы не превысило нескольких секунд.
Для некоторых множителей Qi функции Эйлера φ(p) получилось несколько возможных значений Ka (в i-ой строке приведены возможные значения Ka по модулю Qi):
1234567891011[834, 898, 962, 2, 842, 906, 970, 10, 850, 914, 978, 18, 858, 922, 986, 26, 866, 930, 994, 34, 874, 938, 1002, 42, 882, 946, 1010, 50, 890, 954, 1018, 58, 826][4][18, 68, 118, 43, 93][9][12][42][6][21][11929][24277014][2536644002] -
Перебирая все возможные комбинации полученных значений Ka с помощью «Китайской теоремы об остатках» находим несколько десятков возможных значений Ka по модулю φ(p):
0x8ae47b27ebdbcbe1b78c4a67de5b78a
0x5ef6ad7b83c6e7e0442ac5f5dc7f9a
0x1ed2c9a202ac327647ba12cf06ac3a
…
0x1dfce04948a67285c2ecef8dedf73da
0x3509c62b730c0bb7d9a56fefe2cf342
0xb5518dde7541768bd286d63d8e75f42
0x60776871627621379c91be922e40fd2
0x9e44a7fc4adbdd59bbce55db999dfda
0x98ec54ff8019a390e6c4f1985d21b5a -
Все полученные значения закрытого ключа Ka приводят к одному и тому же значению общего секрета Диффи-Хеллмана Kdh = BKa mod p:
0x0eb034f99e33e17df058de5b448b7241
-
Зная Kdh, можно расшифровать ключ шифрования Kx из k и шеллкод с помощью Kx. PHP-скрипт для расшифровки перехваченного шеллкода с использованием известного общего секрета Диффи-Хеллмана приведен в Приложении B, а сам расшифрованный шеллкод приведен в Приложении C.
Тестирование атаки на реализацию протокола Диффи-Хеллмана в эксплойт-паке Angler
Для проверки эффективности и работоспособности атаки было проведено несколько тестов.
-
Тест с дампом трафика с malware.dontneedcoffee.com с эксплойтом для CVE-2015-2419.
{″g″:″538c40fc6ec04c7a5e0790564b2afe33″,″A″:″25d9508418493284da024712a41a29a1″,″p″:″6e2e5c0b4c4d8d3c7a5d1e3d8a5d7c3e″,″v″:″17728″}
{″B″:″481dbc66fe90ded2eb8d027395abe4fd″, …
p = 146455792068641286704746413745292278846 = 2 * 2269 * 1057223 * 1292823547 * 23612186462182360807
φ(p) = 73195553541542938096767116236244889696 = 2^5 * 3^6 * 7^3 * 17 * 617 * 7127 * 528611 * 231492024139042753
Из-за достаточно большого множителя φ(p) (порядка 1018), нахождение общего секрета Диффи-Хеллмана заняло несколько часов:
0x568f7a306bf07e999ba881befc615c73
Расшифрованный шеллкод приведен в Приложении D.
-
Тест с дампом трафика с malware.dontneedcoffee.com с эксплойтом для CVE-2015-2419 и CVE-2015-5560.
В более новой версии Angler Exploit Kit немного поменялся протокол общения скрипта с сервером:
{″6860″:″false″,″47da″:″47dadcbd7c8351a26860da263ca8e0af″,″dcbd″:″5d1b0d5d5c4a8c5d1d5b4d6a3b5d7e3b″,″7c83»:″5757a0b79bb137a77f87d554d1559274″,″51a2″:″17937″}
{″47da″:″3db7b45576c08f61feb454ece94762d3″,″dcbd″:″4yIse5uSjsJXBZrbBMrpcA%3D%3D″,″7c83»:″6r28v2n7…UPlLTbsCIxhg%3D″}7
По сравнению с предыдущей версией, в качестве индексов «g», «A», «p», «B», «b», «k» стали использовать части числа g, поменялся порядок отсылаемых на север чисел (теперь g, p, A, а не g, A, p как раньше), кроме того, в алгоритме XTEA модифицировали две константы и битовые операции, использующиеся при расшифровке шеллкода:
Было (оригинальная реализация XTEA) Стало for(var h=g[0],k=g[1],l=84941944608;0!=l;)
k-=(h<<4^h>>>5)+h^l+d[l>>>11&3],
l-=2654435769,
h-=(k<<4^k>>>5)+k^l+d[l&3];for(var h=g[0],k=g[1],l=433284421593;0!=l;)
k-=(h<<4^h>>5)+h^l+d[l>>11&3],
l-=3411688359,
h-=(k<<4^k>>5)+k^l+d[l&3];Для данного трафика также удалось факторизовать функцию Эйлера φ(p)
p = 123758666691284322087508686576379854395 = 5 * 11 * 47 * 73 * 83 * 173 * 1055371 * 43277569507162384847671
φ(p) = 85339058418474058501009217357034700800 = 2^14 * 3^6 * 5^2 * 23 * 41 * 43 * 127 * 277 * 1949 * 102798053917762603
найти общий секрет Диффи-Хеллмана
0x04db8bd5b7abc90fa8409989af532531
и расшифровать шеллкод для CVE-2015-2419 (приведен в Приложении E).
Помимо всего прочего, в новой версии эксплойт-пака Angler злоумышленники стали использовать схему обмена ключами Диффи-Хеллмана и для Flash-эксплойтов (т.е. создатели эксплойт-пака запрограммировали одинаковые алгоритмы на PHP, JavaScript и ActionScript). Формат протокола для скачивания эксплойта и шеллкода для Flash-уязвимости такой же, как и для шеллкода уязвимости для Internet Explorer:
{″4256″:″425667992b18942d377eff0218961ce7»,″6799″:″3d0d6c3b4a5b5e2c2d5d6d6e1a5a2e1a″,″942d″:″18,0,0,209″,″377e″:″false″,″2b18″:″0339b845ae35e9d7af629fa2d0d0fed3″}
{″4256″:″014b170e00b46fd3fc35ce8766293c69″,″6799″:″YZfySNTEMcSWl8QqrgSuGA%3D%3D″,″2b18″:″ZEQNbP…zH5Uk%3D″}
Множители модуля p и функции Эйлера φ(p):
p = 81152602799751951422044316006212054554 = 2 * 3 * 36329424479 * 10983441260369 * 33896452871009
φ(p) = 27050867599169456821145398677392574464 = 2^11 * 7 * 13 * 199 * 91279961 * 11640265409 * 686465078773
общий секрет Диффи-Хеллмана:
0x16f6f645b5993dde0be2f5c1e2c367f1
Расшифрованный эксплойт и шеллкод для CVE-2015-5560 приведен в Приложении F.
Приложение A. Реализация атаки на протокол Диффи-Хеллмана на языке Java
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100import java.math.BigInteger;import java.util.HashSet;import java.util.Iterator;import java.util.Set;import java.util.TreeMap;import java.util.Vector;public class Test1 {static BigInteger p = new BigInteger(″1b0b5c6e6b0b5b7e6c6d0b1b0a8c3c7e″, 16);static BigInteger psi = new BigInteger(″17761863220777184249809368812124288000″);static BigInteger g = new BigInteger(″40a262b1360a6a16612ca8251161a9a5″, 16).mod(p);static BigInteger A = new BigInteger(″5eff90f1c48342f5d519cd02b5dfd8b″, 16);static BigInteger B = new BigInteger(″02aa6526e6edc0042394b7ea81ec5b75″, 16);static long[] q = new long[]{1024L, 9L, 125L, 13L, 19L, 79L, 167L, 383L, 48799L, 45177719L, 5603527793L};static int q_len = q.length;static HashSet[] xi = new HashSet[q_len];static BigInteger ai[] = new BigInteger[q_len];static HashSet res = new HashSet();static void rec(int ind){if (ind == q_len){BigInteger x = BigInteger.ZERO;for(int i=0;i<q_len;i++){BigInteger mn = new BigInteger(((Long)q[i]).toString());BigInteger M = psi.divide(mn);x = x.add(ai[i].multiply(M).multiply(M.modInverse(mn)));}res.add(B.modPow(x.mod(psi), p));//res.add(x.mod(psi));return;}Iterator<Long> it = xi[ind].iterator();while(it.hasNext()){ai[ind] = new BigInteger(it.next().toString());rec(ind + 1);}}public static void main(String[] args) {for(int i=0;i<q_len;i++){xi[i] = new HashSet<Long>();long qi = q[i];int H = (int)Math.sqrt((double)qi) + 1;BigInteger _a = g.modPow(psi.divide(new BigInteger(((Long)qi).toString())), p);BigInteger _b = A.modPow(psi.divide(new BigInteger(((Long)qi).toString())), p);BigInteger _c = _a.modPow(new BigInteger(((Integer)H).toString()), p);BigInteger _cp = _c;int u_size = 1000000;boolean stop = false;for(int u_part = 1;u_part<=H && !stop;u_part+=u_size){if (H > u_size){System.out.print(″[i] Processing ″);System.out.println(u_part);}TreeMap<BigInteger, Integer> table = new TreeMap();for(int u=u_part;u<=H && u<u_part + u_size;u++){table.put(_cp, u);_cp = _cp.multiply(_c).mod(p);}BigInteger z = _b;for(int v=0;v<=H;v++){if (table.get(z) != null){xi[i].add((((long)H)*table.get(z) - v) % qi);stop = true;break;}z = z.multiply(_a).mod(p);}table.clear();System.gc();}System.out.println(xi[i].toString());}rec(0);Iterator<BigInteger> it = res.iterator();while(it.hasNext()){System.out.println(it.next().toString(16));}}}Приложение B. PHP-скрипт для расшифровки перехваченного зашифрованного шеллкода с помощью известного общего секрета Диффи-Хеллмана
123456789101112131415161718192021<?phpinclude 'xtea_ak.php';$dh = ″0eb034f99e33e17df058de5b448b7241″;$resp = ″eyJCIjoiMDJhYTY1MjZ…″;$dh = hex2bin($dh);$json = json_decode(base64_decode(rawurldecode($resp)));$k = base64_decode(rawurldecode($json->k));$xtea = new XTEA($dh);$k = $xtea->Decrypt($k);$data = base64_decode(rawurldecode($json->b));$xtea = new XTEA($k);$data = $xtea->Decrypt($data);$data = rtrim($data, ″″);echo $data;?>Приложение C. Расшифрованный шеллкод
1{″ll″:″length″,″I″:″charCodeAt″,″llI″:″fromCharCode″,″Il″:″floor″,″IIl″:″random″,″l″:″stringify″,″III″:″location″,″II″:″host″,″lI″:″number″,″IlI″:″ScriptEngineBuildVersion″,″lIl″:″ScriptEngineMajorVersion″,″Ill″:″ScriptEngineMinorVersion″,″lII″:″ur0pqm8kx″,″lll″:″http://″,″lIll″:″/″,″lllI″:″u″,″IlIl″:″x″,″IIlI″:″xexec″,″lIII″:″EAX″,″Illl″:″ECX″,″IIIl″:″EDI″,″IllI″:″ESP″,″lIIl″:″POP EAX″,″llII″:″XCHG EAX,ESP″,″IIll″:″MOV [ECX+0C],EAX″,″llIl″:″JMP EAX″,″IIII″:″CALL [EAX+4C]″,″llll″:″MOV EDI,[EAX+90]″,″lIlI″:″a″,″llIll″:″kernel32.dll″,″IlII″:″virtualprotect″,″IIIlI″:11,″lllll″:0,″lIlIl″:17905,″IIIII″:500,″IlIll″:16,″lIIlI″:0,″IlllI″:1,″IIllI″:2,″lIIII″:3,″IIIIl″:4,″llIIl″:5,″lIlII″:8,″llIII″:9,″llllI″:10,″IlIII″:11,″lllIl″:12,″lIlll″:16,″IlIIl″:24,″lIllI″:2147483647,″IIlll″:4294967295,″IIIll″:255,″IIlII″:256,″llIlI″:65535,″IIlIl″:16776960,″lIIIl″:16777215,″lIIll″:4294967040,″IllII″:4294901760,″IllIII″:4278190080,″IlIlI″:65280,″lllII″:16711680,″Illlll″:19,″IIIIIl″:4096,″Illll″:4294963200,″IllIl″:4095,″IlIIll″:14598366,″IIIIlI″:48,″llIIlI″:32,″IlIIIl″:15352,″lIIIII″:85,″llIlII″:4096,″llllII″:311296000,″IlIlII″:61440,″IIlIll″:24,″lllllI″:32,″lllIll″:17239,″IllIIl″:15,″lIllll″:256,″IIIlll″:76,″IllIlI″:144,″IIIIII″:65536,″IIlllI″:100000,″llIlll″:28,″IIIlII″:60,″llIlIl″:44,″lIIIll″:28,″IllllI″:128,″IIllIl″:20,″IlIlIl″:12,″lIIIlI″:16,″IlIllI″:4,″llIIII″:2,″llllll″:110,″IlIlll″:64,″IIIIll″:-1,″lIlIII″:0,″IIIllI″:1,″lIIllI″:2,″IlIIII″:3,″IlllIl″:4,″lllIII″:5,″lIlllI″:7,″lIIIIl″:9,″lllIlI″:10,″IllIll″:11,″IIIlIl″:12,″IIlIII″:-2146823286,″llIIIl″:[148,195],″lllIIl″:[88,195],″IlIIlI″:[137,65,12,195],″lIIlIl″:[255,224],″IIllll″:[255,80,76],″lIlIlI″:[139,184,144,0,0,0],″IIlIlI″:[122908,122236,125484,2461125,208055,1572649,249826,271042,98055,62564,162095,163090,340146,172265,163058,170761,258290,166489,245298,172955,82542],″IIlIIl″:[76514,78206,169140,1564283,57653,92732,277930,57206,212281,94821,94789,140864,95448,95192,89830,133640],″lIllIl″:[150104,149432,152680,3202586,214836,3204663,361185,285227,103426,599295,365261,226292,410596,180980,226276,179716,320389,175621,307381,792144,183476],″IlllII″:[68393,159289,2065114,93035,78635,263996,90969,131279,116207,116175,67007,117999,117551,3965891,96438,107246],″llIIll″:[54887,141400,75989,63764,1761036,68463,201153,1001000],″llIllI″:[120559,120527,121839,120834,120386,119458,117442],″lIlIll″:48,″lIIllll″:57,″lIIlII″:65,″llllIl″:90,″IIIIlll″:97,″lIlllII″:122,″IIllII″:16640,″llIIIlI″:23040,″IlIlIII″:4259840,″lIIlIIl″:5898240,″IIlIIIl″:1090519040,″IlIIlII″:1509949440,″IllIIlI″:32,″lIlIIl″:8192,″IIlIIll″:2097152,″lIIlllI″:536870912,″llIlIIl″:{″17416″:4080636,″17496″:4080636,″17631″:4084748,″17640″:4084748,″17689″:4080652,″17728″:4088844,″17801″:4088844,″17840″:4088840,″17905″:4088840}}Приложение D. Расшифрованный шеллкод для уязвимости CVE-2015-2419 из дампа трафика старой версии Angler
1{″ll″:″length″,″l″:″charCodeAt″,″I″:″fromCharCode″,″Il″:″floor″,″IlI″:″random″,″lI″:″stringify″,″lII″:″location″,″II″:″host″,″llI″:″number″,″lll″:″ScriptEngineBuildVersion″,″lIl″:″ScriptEngineMajorVersion″,″IIl″:″ScriptEngineMinorVersion″,″Ill″:″setInterval″,″III″:″clearInterval″,″lIlI″:″ur0pqm8kx″,″IlII″:″http://″,″lllI″:″/″,″lIIl″:″u″,″IlIl″:″x″,″llll″:″xexec″,″Illl″:″EAX″,″lIII″:″ECX″,″IIIl″:″EDI″,″IllI″:″ESP″,″IIlI″:″XCHG EAX,ESP″,″IIll″:″MOV [ECX+0C],EAX″,″llIl″:″CALL [EAX+4C]″,″llII″:″MOV EDI,[EAX+90]″,″IIII″:″a″,″lIll″:″kernel32.dll″,″lIlll″:″virtualprotect″,″IIIlI″:11,″lIIll″:0,″lllll″:17905,″lIllI″:500,″llIIl″:16,″IlIII″:0,″IIIll″:1,″IIlII″:2,″lIlII″:3,″IllIl″:4,″lllIl″:5,″IIlll″:8,″lIlIl″:9,″lIIIl″:10,″IllII″:11,″lIIlI″:12,″IlIll″:16,″IIIIl″:24,″IlIlI″:100,″IIIII″:1,″llIlI″:2,″lllII″:2147483647,″llIll″:4294967295,″IIllI″:255,″llIII″:256,″lIIII″:65535,″IIlIl″:16776960,″IlIIl″:16777215,″llllI″:4294967040,″IlllIl″:4294901760,″Illll″:4278190080,″IlllI″:65280,″llllIl″:16711680,″lllIlI″:19,″llIIII″:4096,″IIIIIl″:4294963200,″IIlllI″:4095,″llIIlI″:14598366,″IIllIl″:48,″llIIll″:32,″IIIllI″:15352,″llIlll″:85,″lIIIII″:4096,″IllllI″:400,″lIIlII″:311296000,″IIIlIl″:61440,″llllII″:24,″IIIIll″:32,″IlIlIl″:17239,″lllllI″:15,″IllIll″:256,″llIllI″:76,″lllIll″:144,″lIlIIl″:17416,″IlIIll″:65536,″IIlIll″:100000,″lIlllI″:28,″IIlIlI″:60,″lIlIII″:44,″IIIlll″:28,″IllIII″:128,″lllIIl″:20,″lIIIll″:12,″lIlIlI″:16,″IIlIIl″:4,″IlIIIl″:2,″lIllll″:110,″IIIlII″:64,″IllIlI″:-1,″lIIIIl″:0,″IllIlII″:1,″lIIlll″:2,″IlIlll″:3,″IIlIII″:4,″lIllIl″:5,″IIllll″:7,″IIIIII″:9,″lIlIll″:10,″IlllII″:11,″lIllII″:12,″Illlll″:-2146823286,″lIIIlI″:[148,195],″lIIlIl″:[137,65,12,195],″IIllII″:[122908,122236,125484,2461125,208055,1572649,249826,271042,98055,62564,162095,163090,340146,172265,163058,170761,258290,166489,245298,172955,82542],″IlIIII″:[150104,149432,152680,3202586,214836,3204663,361185,285227,103426,599295,365261,226292,410596,180980,226276,179716,320389,175621,307381,792144,183476],″IIIIlI″:48,″IIIlIlI″:57,″lllIII″:65,″IllIIl″:90,″IlIlII″:97,″llllll″:122,″IlIllI″:16640,″llIlIl″:23040,″IlIIlI″:4259840,″lIIIIlI″:5898240,″llIIIl″:1090519040,″llIIIII″:1509949440,″IlIIIlI″:32,″IIIlllI″:8192,″lllllII″:2097152,″IIIllll″:536870912,″llIlII″:{″17416″:4080636,″17496″:4080636,″17631″:4084748,″17640″:4084748,″17689″:4080652,″17728″:4088844,″17801″:4088844,″17840″:4088840,″17905″:4088840}}Приложение E. Расшифрованный шеллкод для уязвимости CVE-2015-2419 из дампа трафика новой версии Angler
1{″ll″:″length″,″I″:″charCodeAt″,″llI″:″fromCharCode″,″Il″:″floor″,″IIl″:″random″,″l″:″stringify″,″III″:″location″,″II″:″host″,″lI″:″number″,″IlI″:″ScriptEngineBuildVersion″,″lIl″:″ScriptEngineMajorVersion″,″Ill″:″ScriptEngineMinorVersion″,″lII″:″ur0pqm8kx″,″lll″:″http://″,″lIll″:″/″,″lllI″:″u″,″IlIl″:″x″,″IIlI″:″xexec″,″lIII″:″EAX″,″Illl″:″ECX″,″IIIl″:″EDI″,″IllI″:″ESP″,″lIIl″:″POP EAX″,″llII″:″XCHG EAX,ESP″,″IIll″:″MOV [ECX+0C],EAX″,″llIl″:″JMP EAX″,″IIII″:″CALL [EAX+4C]″,″llll″:″MOV EDI,[EAX+90]″,″lIlI″:″a″,″llIll″:″kernel32.dll″,″IlII″:″virtualprotect″,″IIIlI″:11,″lllll″:0,″lIlIl″:17905,″IIIII″:500,″IlIll″:16,″lIIlI″:0,″IlllI″:1,″IIllI″:2,″lIIII″:3,″IIIIl″:4,″llIIl″:5,″lIlII″:8,″llIII″:9,″llllI″:10,″IlIII″:11,″lllIl″:12,″lIlll″:16,″IlIIl″:24,″lIllI″:2147483647,″IIlll″:4294967295,″IIIll″:255,″IIlII″:256,″llIlI″:65535,″IIlIl″:16776960,″lIIIl″:16777215,″lIIll″:4294967040,″IllII″:4294901760,″IllIII″:4278190080,″IlIlI″:65280,″lllII″:16711680,″Illlll″:19,″IIIIIl″:4096,″Illll″:4294963200,″IllIl″:4095,″IlIIll″:14598366,″IIIIlI″:48,″llIIlI″:32,″IlIIIl″:15352,″lIIIII″:85,″llIlII″:4096,″llllII″:311296000,″IlIlII″:61440,″IIlIll″:24,″lllllI″:32,″lllIll″:17239,″IllIIl″:15,″lIllll″:256,″IIIlll″:76,″IllIlI″:144,″IIIIII″:65536,″IIlllI″:100000,″llIlll″:28,″IIIlII″:60,″llIlIl″:44,″lIIIll″:28,″IllllI″:128,″IIllIl″:20,″IlIlIl″:12,″lIIIlI″:16,″IlIllI″:4,″llIIII″:2,″llllll″:110,″IlIlll″:64,″IIIIll″:-1,″lIlIII″:0,″IIIllI″:1,″lIIllI″:2,″IlIIII″:3,″IlllIl″:4,″lllIII″:5,″lIlllI″:7,″lIIIIl″:9,″lllIlI″:10,″IllIll″:11,″IIIlIl″:12,″IIlIII″:-2146823286,″llIIIl″:[148,195],″lllIIl″:[88,195],″IlIIlI″:[137,65,12,195],″lIIlIl″:[255,224],″IIllll″:[255,80,76],″lIlIlI″:[139,184,144,0,0,0],″IIlIlI″:[122908,122236,125484,2461125,208055,1572649,249826,271042,98055,62564,162095,163090,340146,172265,163058,170761,258290,166489,245298,172955,82542],″IIlIIl″:[76514,78206,169140,1564283,57653,92732,277930,57206,212281,94821,94789,140864,95448,95192,89830,133640],″lIllIl″:[150104,149432,152680,3202586,214836,3204663,361185,285227,103426,599295,365261,226292,410596,180980,226276,179716,320389,175621,307381,792144,183476],″IlllII″:[68393,159289,2065114,93035,78635,263996,90969,131279,116207,116175,67007,117999,117551,3965891,96438,107246],″llIIll″:[54887,141400,75989,63764,1761036,68463,201153,1001000],″llIllI″:[120559,120527,121839,120834,120386,119458,117442],″lIlIll″:48,″lIIllll″:57,″lIIlII″:65,″llllIl″:90,″IIIIlll″:97,″lIlllII″:122,″IIllII″:16640,″llIIIlI″:23040,″IlIlIII″:4259840,″lIIlIIl″:5898240,″IIlIIIl″:1090519040,″IlIIlII″:1509949440,″IllIIlI″:32,″lIlIIl″:8192,″IIlIIll″:2097152,″lIIlllI″:536870912,″llIlIIl″:{″17416″:4080636,″17496″:4080636,″17631″:4084748,″17640″:4084748,″17689″:4080652,″17728″:4088844,″17801″:4088844,″17840″:4088840,″17905″:4088840}}Приложение F. Расшифрованный эксплойт и шеллкод для уязвимости CVE-2015-5560 из дампа трафика новой версии Angler
12345{″IIl″:″flash.utils.ByteArray″,″lIl″:″flash.system.Capabilities″,″lII″:″flash.utils.Endian″,″IlI″:″flash.media.Sound″,″lI″:″flash.display.BitmapData″,″Il″:″51432096JhvTqLk896S″,″llI″:″win ″,″II″:″os″,″III″:″toLowerCase″,″l″:″toString″,″I″:″version″,″ll″:″playerType″,″lll″:″substr″,″Ill″:″split″,″IIll″:″length″,″lIII″:″activex″,″IllI″:″plugin″,″IIIl″:″windows 8″,″llll″:″windows 8.1″,″lllI″:″position″,″lIlI″:″writeInt″,″IlIl″:″,″,″IIlI″:″LITTLE_ENDIAN″,″llII″:″endian″,″Illl″:″writeUnsignedInt″,″lIll″:″readUnsignedInt″,″IIII″:″clear″,″IlII″:″loadCompressedDataFromByteArray″,″llIl″:″lock″,″IlIIl″:″id3″,″IIIlI″:″getPixel″,″lIIl″:″setPixel″,″IIIII″:″getPixel32″,″lIIII″:″setPixel32″,″IlllI″:″uncompress″,″IIlll″:″eNrt3N9rV3Ucx… <gz compressed and base64 encoded exploit here> …SjU2nniwfHH/rsoZljfva+jo2777rP/nXvF8\u003d″,″lllII″:40,″IllIl″:0,″IlIII″:1,″lIIlI″:2,″lIlll″:3,″lIlII″:4,″lllIl″:5,″lllll″:6,″IIlIl″:7,″llIIl″:8,″llllI″:9,″IIIll″:10,″IllII″:12,″IIllI″:16,″llIlI″:20,″lIIll″:24,″lIIIl″:32,″lIlIl″:35,″Illll″:36,″IlIlI″:40,″IIlII″:44,″IIIIl″:48,″llIIII″:56,″IlIll″:60,″IlIlII″:64,″IIlIIl″:68,″IlIllI″:88,″IIlIII″:96,″lIIIII″:700,″lIllIl″:1000,″lIIlll″:127,″llIlII″:255,″lIIlII″:65280,″lIlllI″:4278190080,″IlIIII″:4294901760,″lIIIll″:4294967040,″llIlIl″:16777215,″IIIlII″:32639,″IllIll″:2139062143,″lllllI″:4096,″lIlIll″:12582912,″IIllII″:4,″IIIIlI″:4293769918,″IIIIIl″:4290706126,″lIIlIl″:1073741824,″lllIlI″:16384,″IIllll″:16384,″IIIIll″:2989,″IIlIlI″:3133078208,″llIIll″:65535,″lllIll″:9460301,″Illlll″:50068,″lIIIIl″:3272131715,″llIIIl″:4283498891,″IlIlIl″:2128,″lIIllI″:4096,″IIIIII″:369054032,″IlIIIl″:4096,″llllII″:1778939391,″IlIIlI″:50069,″IllIlI″:50071,″lIIIlI″:212,″llIIlI″:4277009102,″IIIlll″:4276992702,″llIllI″:32,″IllllI″:28,″IllIII″:3435973836,″lllIII″:1476,″IlllIl″:4096,″IlIIll″:4293844428,″llllll″:283873424,″lIllll″:1894496,″IIlllI″:2337756701,″lllIIl″:74485048,″IIIllI″:1604691365,″llIlll″:4236859486,″IIllIl″:2425406301,″IIlIll″:552308880,″IlllII″:3401824,″IlIlll″:1348534272,″IllIIl″:232,″IIIlIl″:3900921856,″IllllIl″:2337756717,″IIlIIII″:1888292984,″lIlIlI″:2779096340,″lIlIIl″:277569119,″lIlIII″:2298759307,″IIlIIlI″:1217073226,″IIIlIIl″:340429064,″lIllII″:1477208203,″IIlIlIl″:2198889099,″llllllI″:1660880068,″llIIlII″:2425393172,″llllIl″:840,″lIlIlII″:16384,″IIIIlIl″:4096,″IllllII″:252,″IlllIIl″:3072,″lllIIIl″:104,″IIlIlII″:4276992512,″IIllIIl″:3133014222,″IlllIII″:117700202,″lIIIlIl″:130000305,″lIlIllI″:130000309,″IIIllII″:180000209,″llllIIl″:448,″lIllllI″:16384,″lllllIl″:1447244336}
Атака на реализацию протокола Диффи-Хеллмана в эксплойт-паке Angler
Игорь
Молодцы! Отличная работа !
Игорь
Работа отличная, но реализация как говорится, хромает. Ребята, не могли бы вы опубликовать проверенный и работающий код Приложение A ? В том, что лежит сейчас полно ошибок или опечаток типа таких » for(int u_part = 1;u_part u_size) «, со скобками явно напутали что-то и ещё моменты есть. Не компилится.