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

  • 2. Догадки по алгоритмам

  • 3. Атака на потоковый шифр с константным ключом

  • 4. Получение начала гаммы

  • 5. Реконструкция образа FDD

  • Содержание. __ от редакции. Биография сетевого периметра в картинках


    Скачать 5.92 Mb.
    НазваниеБиография сетевого периметра в картинках
    Анкорy6536
    Дата21.05.2022
    Размер5.92 Mb.
    Формат файлаpdf
    Имя файлаСодержание. __ от редакции.pdf
    ТипБиография
    #542154
    страница12 из 22
    1   ...   8   9   10   11   12   13   14   15   ...   22

    1. Определение структуры
    Начнем с определения структуры файлов прошивок. Есть три файла обновлений разных версий для одного модема:
    +
    v2.8_image.bin,
    +
    v3.7_image.bin,
    +
    v3.7.4_image.bin.
    При внимательном взгляде все три файла имеют внутри структуру, описываемую схемой TLV (Tag-Length-Value). Например, для v3.7.4_
    image.bin:
    00000000: 40 72 BC 0E 75 00 03 00 0A 00 00 00 02 00 04 00 00000010:
    00 00 03 07 04 FF 00 00 0E DE 4B 00 01 00 10 00 00000020:
    00 00 43 50 55 49 6D 61 67 65 00 00 00 00 00 00 00000030:
    00 00 02 00 04 00 00 00 03 07 04 FF 03 00 04 00 00000040: 00 00 C8 DD 4B 00 04 00 10 00 00 00 B7 2E 02 FA
    00000050:
    03 89 0C 26 61 93 F7 D1 0C F2 EB 87 05 00 C8 DD
    00000060: 4B 00 76 56 F1 C8 1F 90 C4 BD D5 72 43 21 71 F1
    Все значения Little-endian, Tag имеет длину 16 бит, Length — 32 бита.
    На первом уровне вложенности в файле присутствует только тег
    0x7240, и данные для него занимают весь файл. На втором уровне вложенности (внутри данных тега 0x7240) расположен тег 0x0003
    (0x0A байт), потом 0x0000 (0x4BDE0E байт), потом теги 0x0001и 0x0002
    (на скриншоте не поместились). На третьем уровне вложенности
    (внутри данных тега 0x0003) инкапсулирован тег 0x0002, хранящий
    4-байтовый номер версии файла 030704FF (если отбросить все FF, то получится 3.7.4).
    Внутри остальных тегов, расположенных на втором уровне вложен- ности (теги 0x0000, 0x0001 и 0x0002), хранятся описания отдельных файлов, «упакованных» в один образ.
    Для каждого файла указано имя (тег 0x0001), флаги (тег 0x0002), раз- мер (тег 0x0003), некоторое 16-байтовое значение (тег 0x0004) и соб- ственно данные файла (тег 0x0005).
    Если разобрать теги на всех трех уровнях вложенности, получится примерно такая структура:
    7240: ab[0x750EBC]
    0003: ab[0xA]
    0002: v3.7.4 0000: ab[0x4BDE0E]
    0001: 'CPUImage'
    0002: v3.7.4 0003: 0x004BDDC8 0004: b72e02fa03890c266193f7d10cf2eb87 0005: ab[0x4BDDC8]
    0001: ab[0x94046]
    0001: 'AutoInstall'
    0002: v0.8 0003: 0x00094000 0004: 897279f34b7629801d839a3e18da0345 0005: ab[0x94000]
    0002: ab[0x1FF046]
    0001: 'WebUI'
    0002: v3.8 0003: 0x001FF000 0004: 48d1c3194e45472d28abfbeb6bbf1cc6 0005: ab[0x1FF000]
    Таким образом, из файлов прошивок можно извлечь зашифрованные данные для всех составляющих (CPUImage, AutoInstall и WebUI). Как оказалось, содержимое AutoInstall во всех трех версиях прошивки совпадает, внутренности WebUI одинаковы для v3.7 и v3.7.4, но отли- чаются в v2.8, а CPUImage уникален для каждой версии.
    2. Догадки по алгоритмам
    Тег 0x0004 на третьем уровне вложенности содержит 16-байтовый набор данных с высокой энтропией. Вполне возможно это значение хеша, а самый популярный 128-битовый хеш — MD5.
    Если заглянуть в извлеченные файлы, можно заметить, что в них мно- гие байты по одинаковым смещениям совпадают. Вот, например, на- чала двух файлов (выделены отличия):
    Autoinstall:
    00000000:
    61 53 86 D1 CC 90 C4 BD D5 72 43 21 71 F1 55 4E
    00000010:
    C3 E4 BE 77 82 6F 3B 79 82 6B E6 19 A7 D8 FE 04 00000020:
    E1 41 A5 5E 77 8C CB 14 3A 18 CC 7E 3C 5D 5F BD
    00000030:
    47 85 76 E5 A1 5B C4 03 51 E9 8E 3C 79 5E CD A3 00000040:
    3C D7 5A D2 E9 B7 75 65 D8 4D BB EB 44 52 24 FC
    00000050:
    21 AE D7 6E D3 BB B3 B5 C2 6A 42 A5 1F 2B 2B 3E
    00000060:
    DE 8B 6C 83 B3 2B D3 4A E2 D6 C5 D7 E8 2E 15 6F
    00000070:
    25 01 6E BF 00 7B 7C FC 6D 0A 61 A2 20 B4 CD AE
    CPUImage:
    00000000:
    76 56 F1 C8 1F 90 C4 BD D5 72 43 21 71 F1 55 4E
    00000010:
    C3 E4 BE 77 85 6F 3B 79 82 6B E6 19 96 A2 EE 04 00000020:
    E1 41 A5 5E 62 13 CB 14 3A 18 CC 7E 3C 5D 5F BD
    00000030:
    47 85 76 E5 A1 5B C4 03 51 E9 8E 3C 79 5E CD A3 00000040:
    3C D7 5A D2 E9 B7 BD 64 F9 2C BA EB 44 52 24 FC
    00000050:
    E6 25 D7 6E D3 BB B3 B5 C2 6A 42 A5 1F 2B 2B 3E
    00000060:
    DE 8B 6C 83 B3 2B D3 4A E2 D6 C5 D7 E8 2E 15 6F
    00000070:
    25 15 8E BE 11 7B 7C FC 6D 0A 61 A2 DE 4B CD AE
    Однако если попытаться найти одинаковые последовательности в рамках одного файла — длинных повторов не встретится.
    positive research 2016 58 52 54 56
    58
    60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102 02 04 06 08 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50
    Подобный эффект возникает при использовании шифрования путем наложения константной гаммы очень большой длины. И самый попу- лярный алгоритм шифрования, который именно так работает, — RC4.
    3. Атака на потоковый шифр с константным ключом
    Если несколько сообщений зашифрованы c использованием одно- го и того же ключа (а значит, и гаммы), можно попытаться раскрыть фрагменты этих сообщений, поXORив их между собой. И в тех местах, где в одном из сообщений были нулевые байты, в другом проявится открытый текст.
    Взяв файлы AutoInstall и WebUI, получим интересные результаты:
    00000000: EB 3C 90 6D 6B 64 6F 73 66 73 00 00 02 04 01 00 л<ђmkdosfs ☻♦☺
    00000010: 02 00 02 F8 0F F8 03 00 20 00 40 00 00 00 00 00 ☻ ☻ш☼ш♥ @
    00000020: 00 00 00 00 00 00 29 6E 1F 3B 15 47 43 54 2D 4C
    )n▼;§GCT-L
    00000030: 54 45 20 20 20 20 46 41 54 31 32 20 20 20 0E 1F TE FAT12 ♫▼
    00000040: BE 5B 7C AC 22 C0 74 0B 56 B4 0E BB 07 00 CD 10 ѕ[|¬"Аt♂Vґ♫»• Н►
    00000050: 5E EB F0 32 E4 CD 16 CD 19 EB FE 54 68 69 73 20 ^лр2дН▬Н↓люThis
    00000060: 69 73 20 6E 6F 74 20 61 20 62 6F 6F 74 61 62 6C is not a bootabl
    00000070: 65 20 64 69 73 6B 2E 20 20 50 6C 65 61 73 65 20 e disk. Please
    00000080: 69 6E 73 65 72 74 20 61 20 62 6F 6F 74 61 62 6C insert a bootabl
    00000090: 65 20 66 6C 6F 70 70 79 20 61 6E 64 0D 0A 70 72 e floppy and♪◙pr
    000000A0: 65 73 73 20 61 6E 79 20 6B 65 79 20 74 6F 20 74 ess any key to t
    000000B0: 72 79 20 61 67 61 69 6E 20 2E 2E 2E 20 0D 0A 00 ry again ... ♪◙
    000000C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00008800: 02 43 44 30 30 31 01 00 00 20 00 20 00 20 00 20 ☻CD001☺
    00008810: 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 20
    По этим двум фрагментам можно предположить, что один из файлов является образом дискеты FAT12, а другой — образом CD-ROM.
    4. Получение начала гаммы
    Современные сотовые модемы любят при подключении создавать виртуальный CD-ROM, с которого можно установить драйверы или сопутствующее ПО. Вероятно, и тут использована та же идея.
    Правда, при подключении модема к современным операционным системам (Windows 7/8, Linux, MacOS X) этот CD-ROM или не появ- ляется вообще, или присутствует всего долю секунды, после чего исчезает. Пришлось найти ноутбук 2002 года с Windows XP, где при подключении модема CD-ROM тоже исчезал вскоре после появ- ления, но это занимало целых 5 секунд. За это время можно было успеть прочитать все сектора логического тома и получить образ размером 606 208 == 0x94000 байт, что соответствует размеру файла
    AutoInstall. И значение MD5 от прочитанного образа оказалось рав- но 897279F34B7629801D839A3E18DA0345, что соответствует значению тега 0x0004 для этого файла.
    Теперь остается поXORить прочитанный образ с содержимым
    AutoInstall и получить первые 600 килобайт гаммы. Этой гаммой мы можем расшифровать начала файлов CPUImage и WebUI (имеющих длину 4 971 976 и 2 093 056 байт соответственно).
    5. Реконструкция образа FDD
    Если расшифровать начало файла WebUI (первые 606 208 байт), а остальное заполнить нулями, и проинтерпретировать все как образ
    FAT, будет видна структура файловой системы и даже доступно со- держимое некоторых файлов:
    Name
    | Size
    |
    Date
    | Time
    bru
    | Folder | 31.05.12 | 22:17
    cgi-bin
    | Folder | 31.05.12 | 22:17
    cors
    | Folder | 31.05.12 | 22:17
    css
    | Folder | 31.05.12 | 22:17
    eng
    | Folder | 31.05.12 | 22:17
    img
    | Folder | 31.05.12 | 22:17
    js
    | Folder | 31.05.12 | 22:17
    ru
    | Folder | 31.05.12 | 22:17
    name.html
    |
    2248 | 31.05.12 | 22:17
    easyXDM.js
    | 101924 | 31.05.12 | 22:17
    easyXDM.debug.js
    | 113900 | 31.05.12 | 22:17
    easyXDM.min.js
    | 19863 | 31.05.12 | 22:17
    easyXDM.Widgets.js
    | 11134 | 31.05.12 | 22:17
    easyXDM.Widgets.debug.js
    | 11134 | 31.05.12 | 22:17
    easyXDM.Widgets.min.js
    |
    3114 | 31.05.12 | 22:17
    json2.js
    | 17382 | 31.05.12 | 22:17
    easyxdm.swf
    |
    1758 | 31.05.12 | 22:17
    MIT-license.txt
    |
    1102 | 31.05.12 | 22:17
    Если при подключенном модеме зайти браузером на веб-интер- фейс по адресу http://<имя хоста для модема>/dir, то будет видна в точности такая же файловая система, и любой файл можно будет скачать.
    Таким образом, чтобы восстановить образ диска WebUI, надо разло- жить скачанные через веб-интерфейс файлы по тем местам, где они должны быть в соответствии с данными в boot-секторе, таблице FAT и описаниях директорий. Единственная сложность — папка «ru» в кор- не. Кластер с описанием файлов в этой папке не попадает в первые
    606 208 байт, и его содержимое надо воссоздавать вручную.
    Согласно информации из веб-интерфейса, в директории «ru» должны быть следующие файлы:
    Name
    | Size
    |
    Date
    | Time
    Manualupdate.html
    |
    3981 | 31.05.12 | 22:17
    Index.html
    |
    5327 | 31.05.12 | 22:17
    Network.html
    |
    3328 | 31.05.12 | 22:17
    К счастью, в корне есть папка «eng», в которой располагаются файлы с такими же именами и датами создания. И чтобы получить правиль- ные данные для папки «ru» надо всего лишь исправить:
    +
    номер стартового кластера текущей директории,
    +
    размер каждого файла,
    +
    номера стартовых кластеров каждого файла.
    Номер кластера директории «ru» (0x213) можно узнать из корневой директории.
    Размеры файлов (3981==0xF8D, 5327==0x14CF и 3328==0xD00 соот- ветственно) узнаем из веб-интерфейса.
    Номера стартовых кластеров для файлов придется угадывать, но это не очень сложно. Согласно информации в boot-секторе, каждый кластер занимает 4 сектора или 2048 байт. Для директории «ru» до- статочно одного кластера, для файлов Manualupdate.html и Network.
    html — двух, и для Index.html понадобится три кластера. Поскольку кластеры при записи на пустой диск обычно выделяются последо- вательно, файлы будут начинаться в кластерах 0x214, 0x216 и 0x219 соответственно. Восстановленные данные для директории «ru» будут выглядеть так:
    00000000: 2E 20 20 20 20 20 20 20 20 20 20 10 00 00 2C AA . ► ,к
    00000010: BF 40 BF 40 00 00 2C AA BF 40 13 02 00 00 00 00 ┐@┐@ ,к┐@‼☻
    00000020: 2E 2E 20 20 20 20 20 20 20 20 20 10 00 00 2C AA .. ► ,к
    00000030: BF 40 BF 40 00 00 2C AA BF 40 00 00 00 00 00 00 ┐@┐@ ,к┐@
    00000040: 42 68 00 74 00 6D 00 6C 00 00 00 0F 00 56 FF FF Bh t m l ☼ V
    00000050: FF FF FF FF FF FF FF FF FF FF 00 00 FF FF FF FF
    00000060: 01 6D 00 61 00 6E 00 75 00 61 00 0F 00 56 6C 00 ☺m a n u a ☼ Vl
    00000070: 75 00 70 00 64 00 61 00 74 00 00 00 65 00 2E 00 u p d a t e .
    00000080: 4D 41 4E 55 41 4C 7E 31 48 54 4D 20 00 00 2C AA MANUAL

    1HTM ,к
    00000090: BF 40 BF 40 00 00 2C AA BF 40 14 02 8D 0F 00 00 ┐@┐@ ,к┐@¶☻Н☼
    000000A0: 41 69 00 6E 00 64 00 65 00 78 00 0F 00 33 2E 00 Ai n d e x ☼ 3.
    000000B0: 68 00 74 00 6D 00 6C 00 00 00 00 00 FF FF FF FF h t m l
    000000C0: 49 4E 44 45 58 7E 31 20 48 54 4D 20 00 00 2C AA INDEX1 HTM ,к
    000000D0: BF 40 BF 40 00 00 2C AA BF 40 16 02 CF 14 00 00 ┐@┐@ ,к┐@▬☻╧¶
    000000E0: 41 6E 00 65 00 74 00 77 00 6F 00 0F 00 98 72 00 An e t w o ☼ Шr
    000000F0: 6B 00 2E 00 68 00 74 00 6D 00 00 00 6C 00 00 00 k . h t m l
    00000100: 4E 45 54 57 4F 52 7E 31 48 54 4D 20 00 00 2C AA NETWOR1HTM ,к
    00000110: BF 40 BF 40 00 00 2C AA BF 40 19 02 00 0D 00 00 ┐@┐@ ,к┐@↓☻ ♪
    00000120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    Аккуратно собрав реконструированную папку «ru» и содержимое всех файлов, полученных из веб-интерфейса, в образ диска (с уче- том того, что первый кластер соответствует сектору 0x23), мы полу- чаем plain-text-версию файла WebUI, значение MD5 для которого совпадает с 48D1C3194E45472D28ABFBEB6BBF1CC6 из заголовка обновления.
    Теперь у нас есть расшифрованные файлы AutoInstall и WebUI, и мы знаем первые 2 093 056 байт гаммы.

    59
    // Мобильные угрозы
    53 55 57
    59
    61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 101 103 03 05 07 09 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51
    6. Заглянем в CPUImage
    После того как мы расшифровали первые 2 мегабайта CPUImage, наконец имеет смысл запустить дизассемблер. После определения системы команд процессора (ARM Little-Endian), базового адреса за- грузки (необходимо выкинуть первые 0x34C байт файла) и локализа- ции места расшифровки обновлений можно увидеть вот такой код:
    ROM:0008ADD0 loc_8ADD0
    ROM:0008ADD0
    LDR
    R1, =byte_2ADC60
    ROM:0008ADD4
    LDRB
    R2, [R1,R0]
    ROM:0008ADD8
    LDRB
    R1, [R4]
    ROM:0008ADDC
    ADD
    R0, R0, #1
    ROM:0008ADE0
    ADD
    R2, R2, R1
    ROM:0008ADE4
    ADD
    R2, R2, R6
    ROM:0008ADE8
    AND
    R6, R2, #0xFF
    ROM:0008ADEC
    LDRB
    R2, [R10,R6]
    ROM:0008ADF0
    STRB
    R2, [R4],#1
    ROM:0008ADF4
    STRB
    R1, [R10,R6]
    ROM:0008ADF8
    MOV
    R1, #0x15
    ROM:0008ADFC
    BL
    sub_27C0EC
    ROM:0008AE00
    SUBS
    R11, R11, #1
    ROM:0008AE04
    AND
    R0, R1, #0xFF
    ROM:0008AE08
    BNE
    loc_8ADD0
    Это не что иное, как загрузка ключа шифрования, расположенного по адресу 0x2ADC60 и имеющего длину 0x15 байт, в алгоритм RC4.
    Однако 0x2ADC60==2’808’928, то есть ключ, располагается за преде- лами области, для которой нам известна гамма.
    Правда, у нас целых три версии обновлений. Вдруг в v3.7 или v2.8 ключ в более удачном месте? Увы, в более ранних прошивках адрес расположения ключа будет 0x2AD70C и 0x2A852C, что тоже за преде- лами расшифрованной области :(
    7. И снова XOR
    Если поXORить между собой CPUImage от обновлений v3.7 и v3.7.4, то по адресу 0x34C + 0x2AD70C == 0x2ADA58 мы обнаружим строчку
    «SungKook "James" Shin», которая и является тем самым ключом RC4, на котором зашифрованы все файлы, входящие в обновления.
    Остается убедиться, что гамма на выходе RC4, инициализированного этим ключом, совпадает с той, что мы получили ранее из AutoInstall и
    WebUI, и что MD5 от расшифрованного CPUImage совпадает со зна- чением из заголовка обновления.
    Теперь можно приступать к анализу собственно прошивки, но это уже совсем другая история.
    pT ApplicATion FireWAll защитит «Связной» от киБератак
    Интернет-магазин Svyaznoy.ru c оборотом 22 млрд рублей посещают около 15 млн человек в месяц. Кроме того, компания развивает свою систему интернет-сервисов, включая сайты поддержки клиентов, площадки для выбора интернет-про- вайдера, оформления кредитов и страховок, покупки авиабилетов. Популярность сервисов делает их привлекательной мишенью для злоумышленников. Дополнительным фактором риска является жесткая конкурентная борьба. В ходе поиска защитного решения специалисты «Связного» остановились на системе PT Application Firewall. Основным критерием выбо- ра стало наличие уникальных механизмов корреляционного и поведенческого анализа, которые позволяют блокировать атаки нулевого дня, а также защищать систему от фрода, подбора паролей, вовлечения в ботнеты, DDoS-атак и утечек. В рамках пилотного проекта система PT Application Firewall использовалась для защиты портала Svyaznoy.ru и ряда других веб-сервисов компании. Сразу после внедрения пилотной версии удалось выявить более сотни попыток атак, включая
    Shellshock, SQL Injection и XSS, а также попытки подбора паролей, загрузки вредоносного кода и использования сканеров для поиска уязвимостей в веб-приложениях.
    positive research 2016 60 52 54 56 58
    60
    62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102 02 04 06 08 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50
    эмуляция и перехват sim-команд
    ЧЕРЕЗ SIM TOOLKIT НА ANDROID 5.1
    И НИЖЕ (CVE-2015-3843)
    Артем Чайкин
    habrahabr.ru/company/pt/blog/280095/
    перехват
    Представьте, что на SIM-карте есть небольшое приложение, кото- рое получает сообщение от оператора связи и показывает его на экране вашего Android-устройства. Если покопаться в исходниках
    Android, можно наткнуться на класс com.android.internal.telephony.
    cat.CatService, который отвечает за передачу команд между ОС и сло- ем радиоинтерфейса (Radio Interface Layer, RIL).
    public void
    handleMessage
    (Message msg) {
    CatLog.d(this,
    "handleMessage["
    + msg.what +
    "]"
    );
    switch
    (msg.what) {
    case
    MSG_ID_SESSION_END:
    case
    MSG_ID_PROACTIVE_COMMAND:
    case
    MSG_ID_EVENT_NOTIFY:
    case
    MSG_ID_REFRESH:
    CatLog.d(this,
    "ril message arrived,slotid:"
    + mSlotId);
    String data = null;
    if
    (msg.obj != null) {
    AsyncResult ar = (AsyncResult) msg.obj;
    if
    (ar != null && ar.result != null) {
    try
    {
    data = (String) ar.result;
    } catch (ClassCastException e) {
    break
    ;
    }
    }
    }
    mMsgDecoder.sendStartDecodingMessageParams(new RilMessage
    (msg.what, data));
    break
    ;
    case
    MSG_ID_CALL_SETUP:
    mMsgDecoder.sendStartDecodingMessageParams(new RilMessage
    (msg.what, null));
    break
    ;
    case
    MSG_ID_ICC_RECORDS_LOADED:
    break
    ;
    case
    MSG_ID_RIL_MSG_DECODED:
    handleRilMsg((RilMessage) msg.obj);
    break
    ;
    case
    MSG_ID_RESPONSE:
    handleCmdResponse((CatResponseMessage) msg.obj);
    break
    ;
    Из всех типов сообщений нас интересует
    MSG_ID_RIL_ MSG_
    DECODED.
    private void
    handleRilMsg
    (RilMessage rilMsg) {
    if
    (rilMsg == null) {
    return
    ;
    }
    // dispatch messages
    CommandParams cmdParams = null;
    switch
    (rilMsg.mId) {
    case
    MSG_ID_EVENT_NOTIFY:
    я обнаружил эту уязвимость, исследуя возможность перехвата од- норазовых паролей, которые отправлялись банком поставщику те- лекоммуникационных услуг, а затем поступали на специальное при- ложение SIM-карты и выводились на пользовательский интерфейс
    Android.
    if
    (rilMsg.mResCode == ResultCode.OK) {
    cmdParams = (CommandParams) rilMsg.mData;
    1   ...   8   9   10   11   12   13   14   15   ...   22


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