Представьте себе ситуацию, когда на камере наблюдения испортилась флэшка с прошивкой, и камера нуждается в ремонте. Берём копеечную флэшку и меняем, а прошивку скопируем с точно такой же камеры. Пять минут рекламы, и теперь камера работает и показывает видеопоток вновь. Но есть нюанс. Дело в том, что она теперь является полной копией камеры-донора прошивки. Это и ежу понятно, они же и были одинаковыми — возразите вы. Были одинаковыми всем, кроме таких настроек, как MAC-адрес и идентификатор в облаке, куда камера сливает свой видеопоток. А теперь они совсем близнецы.
Когда распространились камеры с облачным доступом, массово решились такие проблемы, как доступ к камере без внешнего IP-адреса или с динамическим адресом. Теперь стало ненужным использовать проброс портов на роутере, VPN, динамический DNS, требующие целой инфраструктуры для доступа к камере. Запускай себе приложение, и оно получит доступ к видеопотоку или к архиву через облако. Производители камер в то время пробовали различные варианты, которые часто заканчивались печальными результатами, как с камерами Foscam, связанные с тем, что производитель выбрал путь простоты и дешевизны, а пользователи за него проголосовали рублём. Камеры становились легкодоступными, дешёвыми и, в конце концов, собой просто заполонили весь мир, проникнув в магазины, детские сады, зоопарки, аэропорты, бары, подъезды, офисы, входы, выходы, проходы, пароходы и даже в спальни с туалетами. В крупнейшем каталоге камер insecam.org тогда были сотни тысяч камер со всего мира.
Так у производителей возникла проблема ограничения доступа к облаку. Камера должна была иметь крипто-ключ доступа. Такие производители, как Dahua и Hikvision, на многих своих камерах хранили этот ключ в отдельной микросхеме серии 24CXX. Но в массы пошёл вариант от вендора XiongMai (XM), платы которого использовались практически во всех китайских камерах, которые завалили нас в то время.
Все знают классический дизайн веб-интерфейса XiongMai, который назывался «китайские камеры» и никак иначе.
Веб-интерфейс камер и регистраторов XiongMai
На платах XiongMai преобладает вариант записи ключа прямо на микросхему с прошивкой, которая, как правило, хранится на флэшках SPI серии 25Q. С ростом популярности NAND-памяти для хранения прошивки устройства такой подход не изменился. Поскольку информация, которая отвечает за доступ к облаку и за такие индивидуальные реквизиты камеры, как MAC-адрес, зашифрована, то называют её криптоблок. В народе среди ремонтников прижилось название «крипта», которое в данном контексте не имеет к Биткойнам никакого отношения. Имейте это в виду, если увидите плачущего ремонтника, который безвозвратно потерял блок крипты.
▍ Как найти криптоблок в прошивке
Теперь покажу на практике, где «крипта» сохранена. Допустим, нам удалось слить прошивку с флэшки программатором или подключившись к консоли через USB UART-адаптер из меню U-Boot. Рабочая прошивка или нет, нас сейчас не интересует. Мы можем взять стандартную прошивку для конкретной камеры с сайта производителя, чтобы влить на новую рабочую флэшку, или перепрошить старую. Но к ней для нормальной работы нужен криптоблок, который сделает нашу камеру уникальной. Попробуем найти «крипту» в старой прошивке. Для начала заглянем внутрь и найдём регион, где записаны настройки загрузчика U-Boot.
0001D4A8 02 02 02 62 │ 6F 6F 74 61 │ 72 67 73 3D │ 6D 65 6D 3D │ 33 35 4D 20 │ 63 6F 6E 73 ...bootargs=mem=35M cons
0001D4C0 6F 6C 65 3D │ 74 74 79 41 │ 4D 41 30 2C │ 31 31 35 32 │ 30 30 20 72 │ 6F 6F 74 3D ole=ttyAMA0,115200 root=
0001D4D8 2F 64 65 76 │ 2F 6D 74 64 │ 62 6C 6F 63 │ 6B 32 20 72 │ 6F 6F 74 66 │ 73 74 79 70 /dev/mtdblock2 rootfstyp
0001D4F0 65 3D 63 72 │ 61 6D 66 73 │ 20 6D 74 64 │ 70 61 72 74 │ 73 3D 78 6D │ 5F 73 66 63 e=cramfs mtdparts=xm_sfc
0001D508 3A 32 35 36 │ 4B 28 62 6F │ 6F 74 29 2C │ 31 35 33 36 │ 4B 28 6B 65 │ 72 6E 65 6C :256K(boot),1536K(kernel
0001D520 29 2C 31 32 │ 38 30 4B 28 │ 72 6F 6D 66 │ 73 29 2C 34 │ 35 34 34 4B │ 28 75 73 65 ),1280K(romfs),4544K(use
0001D538 72 29 2C 32 │ 35 36 4B 28 │ 63 75 73 74 │ 6F 6D 29 2C │ 33 32 30 4B │ 28 6D 74 64 r),256K(custom),320K(mtd
0001D550 29 00 62 6F │ 6F 74 63 6D │ 64 3D 62 6F │ 6F 74 6D 20 │ 30 78 36 30 │ 30 34 30 30 ).bootcmd=bootm 0x600400
0001D568 30 30 00 62 │ 6F 6F 74 64 │ 65 6C 61 79 │ 3D 31 00 62 │ 61 75 64 72 │ 61 74 65 3D 00.bootdelay=1.baudrate=
0001D580 31 31 35 32 │ 30 30 00 65 │ 74 68 61 64 │ 64 72 3D 30 │ 30 3A 30 31 │ 3A 30 32 3A 115200.ethaddr=00:01:02:
0001D598 30 33 3A 30 │ 34 3A 30 30 │ 00 69 70 61 │ 64 64 72 3D │ 31 39 32 2E │ 31 36 38 2E 03:04:00.ipaddr=192.168.
0001D5B0 31 2E 31 00 │ 6E 65 74 6D │ 61 73 6B 3D │ 32 35 35 2E │ 32 35 35 2E │ 32 35 35 2E 1.1.netmask=255.255.255.
0001D5C8 30 00 63 72 │ 61 6D 66 73 │ 61 64 64 72 │ 3D 30 78 36 │ 30 30 34 30 │ 30 30 30 00 0.cramfsaddr=0x60040000.
0001D5E0 64 61 3D 74 │ 66 74 70 20 │ 30 78 38 31 │ 30 30 30 30 │ 30 30 20 75 │ 2D 62 6F 6F da=tftp 0x81000000 u-boo
0001D5F8 74 2E 62 69 │ 6E 2E 69 6D │ 67 3B 73 66 │ 20 70 72 6F │ 62 65 20 30 │ 3B 66 6C 77 t.bin.img;sf probe 0;flw
0001D610 72 69 74 65 │ 00 64 75 3D │ 74 66 74 70 │ 20 30 78 38 │ 31 30 30 30 │ 30 30 30 20 rite.du=tftp 0x81000000
0001D628 75 73 65 72 │ 2D 78 2E 63 │ 72 61 6D 66 │ 73 2E 69 6D │ 67 3B 73 66 │ 20 70 72 6F user-x.cramfs.img;sf pro
0001D640 62 65 20 30 │ 3B 66 6C 77 │ 72 69 74 65 │ 00 64 72 3D │ 74 66 74 70 │ 20 30 78 38 be 0;flwrite.dr=tftp 0x8
0001D658 31 30 30 30 │ 30 30 30 20 │ 72 6F 6D 66 │ 73 2D 78 2E │ 63 72 61 6D │ 66 73 2E 69 1000000 romfs-x.cramfs.i
0001D670 6D 67 3B 73 │ 66 20 70 72 │ 6F 62 65 20 │ 30 3B 66 6C │ 77 72 69 74 │ 65 00 64 77 mg;sf probe 0;flwrite.dw
Нас интересует строка, которая передаётся ядру и говорит о том, как разбита флэшка. MTD-разделы флэшки на встраиваемых системах — это аналог партиций жёсткого диска. Но вместо сохранения информации о разбиении в начале жёсткого диска в MBR, формат тут простой как три копейки — в переменной mtdparts ядру Linux в текстовом виде перечислены размеры каждого раздела и его метка в скобках:
mtdparts=xm_sfc:256K(boot),1536K(kernel),1280K(romfs),4544K(user),256K(custom),320K(mtd)
Отсюда мы видим, что первый же раздел boot занимает 256 килобайт. Именно в нём хранится «крипта». Но этот MTD-раздел тоже разбит на регионы с различным назначением. Последние 64кб. из них — env — регион с настройками, куда U-Boot пишет свои переменные по команде saveenv, их можно вывести командой printenv. Я говорю сейчас не о командах Linux, а именно о командах U-Boot, в командную строку которого можно попасть при некотором везении, если в консоли UART нажать Ctrl+C для прерывания загрузки Linux (об этом есть огромное количество информации). Первые 191кб — это код U-Boot, следующий за ними килобайт — искомый нами регион с зашифрованной индивидуальной информацией (сто девяносто второй килобайт). Если опустить всю вышесказанную лирику, то для этой камеры «крипта» находится по шестнадцатеричному адресу 0x2FC00 и занимает 1 килобайт (0x400 байт в HEX).
А знаете ли вы, что настройки камеры хранятся в последнем разделе с меткой 'mtd'. Если этот раздел затереть через команду U-Boot 'sf erase <offset>|<partition> <len>', то все настройки камеры, включая пользовательский пароль, будут сброшены к первоначальному виду, как у новой камеры. А если ошибиться с адресами, то можно остаться без прошивки.
Чтобы убедиться, что найденный блок — это именно криптоблок, нужно проверить первые два символа. Заголовок крипты в HEX всегда D2 D4.
Если смущает командная строка, то наверняка у вас найдётся HEX-редактор, который позволит по адресам выделить и скопировать нужные нам 1024 байта зашифрованной информации. Но мне удобнее и быстрее запустить команду, которая сохранит криптоблок в отдельный файл:
dd if=BLK530WX1-0235-V1.02-fulldump-XM25QH64A.bin of=cryptoblock.bin bs=1 skip=191k count=1024
В этой команде я указываю опции:
- if — input file;
- of — output file;
- bs — block size (считать в следующих опциях в единицах по одному байту, чтобы было понятней);
- skip — пропустить до чтения 191 * 1024 * blocksize;
- count — количество байт для записи в файл назначения 1024 * blocksize.
Вот такого содержания файл у нас получится
00000000 D2 D4 36 77 │ D6 29 5C AF │ A6 1E C1 EA │ 55 E7 27 2F │ 3C BA BB 4C │ 5D F3 08 B6 ..6w.)\.....U.'/<..L]...
00000018 12 6A 01 00 │ 01 00 00 00 │ 00 00 00 00 │ 10 00 00 00 │ 00 01 00 00 │ 00 00 00 00 .j......................
00000030 00 00 00 00 │ 68 01 00 80 │ 67 45 23 01 │ 67 45 23 01 │ 67 45 23 01 │ 67 45 23 01 ....h...gE#.gE#.gE#.gE#.
00000048 67 45 23 01 │ 67 45 23 01 │ 67 45 23 01 │ 67 45 23 01 │ 37 05 C9 22 │ 40 7A 7F CB gE#.gE#.gE#.gE#.7.."@z..
00000060 06 0A 5C F4 │ 8B 50 1D 7A │ D1 D1 3E 09 │ C3 92 AE 2E │ C3 22 84 5A │ 18 4D 22 37 ..\..P.z..>.Ò ...".Z.M"7
00000078 7D BB 0E 31 │ 6C C0 BB 72 │ 4A 97 E7 D6 │ E7 05 D0 3A │ 56 0F 43 9A │ 21 F1 C8 E4 }..1l..rJ......:V.C.!...
00000090 14 CC 3F AC │ 1A E1 E3 97 │ B7 CF A4 A5 │ A4 B0 E3 A8 │ C0 4D A5 A5 │ B5 A5 A5 A5 ..?...㗷 Ϥ ......M......
000000A8 A5 A4 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ CD A4 A5 25 │ C2 E0 86 A4 │ C2 E0 86 A4 ............ ͤ .%........
000000C0 C2 E0 86 A4 │ C2 E0 86 A4 │ C2 E0 86 A4 │ C2 E0 86 A4 │ C2 E0 86 A4 │ C2 E0 86 A5 ........................
000000D8 17 BF E7 88 │ 3F A0 96 A4 │ AB 2A F2 DB │ FC 02 BE D1 │ 6B F5 1C 78 │ E5 6E F5 50 ....?....*......k..x.n.P
000000F0 F5 7F 14 17 │ 2B 51 C2 42 │ 91 AA 4B D0 │ 4B 61 F4 F6 │ 8B E7 52 08 │ E9 90 DA D4 ....+Q.B..K.Ka....R.....
00000108 06 76 4D EC │ E4 44 3D 5A │ C3 D0 F1 EE │ 23 B4 B0 34 │ 5F FB 84 2A │ DD 7A A0 69 .vM..D=Z....#..4_..*.z.i
00000120 62 F3 F1 CC │ 84 CC A1 8B │ C2 EF F7 27 │ 34 B4 81 77 │ 85 73 E5 28 │ A7 96 5C 07 b.. ̄ ̡ ....'4..w.s.(..\.
00000138 10 00 01 00 │ 01 08 00 01 │ 08 02 00 00 │ 52 00 00 01 │ 00 00 00 01 │ 00 00 00 00 ............R...........
00000150 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ........................
00000168 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ D4 53 4F 34 │ FF FF FF FF .................SO4....
00000180 F9 CF 13 39 │ DF 73 94 BD │ D5 BF 9D BC │ B1 85 9B 50 │ 9D 98 B1 C3 │ 3D E9 D7 39 ...9.s..տ .....P....=..9
00000198 E8 B6 5F 88 │ 9D F4 95 17 │ C5 28 CF 25 │ 1C 64 E2 F1 │ A3 00 AF 55 │ 05 CA 25 A3 .._......(.%.d.....U..%.
000001B0 63 D6 E6 A1 │ 41 3E DA 2A │ B5 A5 A4 A5 │ A4 AD A5 A4 │ AD A7 A5 A5 │ F7 A5 A5 A4 c...A>.*................
000001C8 A5 A5 A5 A4 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 ........................
000001E0 A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 5A A5 ......................Z.
000001F8 AF E6 E8 67 │ E2 A2 8F D6 │ F6 44 27 48 │ F8 F7 19 5B │ 1E EC B7 BE │ E6 70 B0 EE ...g⢏ ..D'H...[.췾 .p..
00000210 27 B4 C2 38 │ 75 57 5C 25 │ 3E C4 0C A0 │ E6 9B F6 5D │ 60 9E A6 59 │ 96 BF 34 B4 '..8uW\%>......]`..Y..4.
00000228 AC 6B F2 13 │ DB 23 03 04 │ D7 45 BB 4D │ 9C 18 F2 5B │ 5D 7E 7B 44 │ 1B 73 A2 FA .k...#...E.M...[]~{D.s..
00000240 12 49 54 28 │ 88 08 5D B4 │ 74 50 C7 CF │ 74 4A D3 CB │ 90 0F 99 AC │ 28 8C 87 05 .IT(..].tP..tJ.ː ...(...
00000258 01 10 00 11 │ 40 10 02 02 │ 08 00 46 11 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ....@.....F.............
00000270 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ........................
00000288 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 0C 53 35 17 │ 00 00 00 00 .................S5.....
000002A0 A7 69 D3 B5 │ D3 4E 24 78 │ 89 65 A1 5A │ C6 5F 4F 62 │ 5E 11 C2 26 │ 25 F3 3C D2 .iӵ .N$x.e.Z._Ob^..&%.<.
000002B8 1B 96 08 DA │ 3E 78 26 E5 │ 62 79 1B 36 │ C7 BE AF 51 │ A4 51 2B 6B │ 30 7B CD 8E ....>x&.by.6Ǿ .Q.Q+k0{ ͎
000002D0 0C 10 B4 B0 │ 04 71 84 20 │ A4 B5 A5 B4 │ E5 B5 A7 A7 │ AD A5 E3 B4 │ A5 A5 A5 A5 .....q. ....嵧 ...㴥 ...
000002E8 A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 ........................
00000300 A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 A5 A5 A5 │ A5 5A A5 A5 .....................Z..
00000318 FD 31 0C 31 │ 2B A0 FE 6A │ D2 2E AF 51 │ 11 9D 6E D3 │ A1 D9 70 09 │ 21 74 E4 78 .1.1+..j...Q..nӡ .p.!t.x
00000330 0F 38 D1 C6 │ 24 B4 A5 22 │ 65 B1 54 90 │ D1 53 7A 24 │ 01 A9 76 13 │ 48 E4 66 69 .8..$.."e.T..Sz$..v.H.fi
00000348 3E D7 73 DE │ CB 58 57 5A │ 10 29 A0 34 │ 5D 46 57 C2 │ 78 AB D2 4A │ 7E CD 6F FE >.s..XWZ.).4]FW.x..J~.o.
00000360 77 65 12 3F │ C9 F8 A9 09 │ D0 9C E7 1C │ F4 BF 76 05 │ E8 18 B9 C6 │ 5E 11 89 56 we.?....М ....v.....^..V
00000378 01 01 01 15 │ 01 46 00 0D │ 01 65 00 E8 │ 01 00 11 11 │ 41 44 50 11 │ A1 03 06 0A .....F...e......ADP.....
00000390 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ........................
000003A8 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 52 28 EF 5E │ B8 C3 2F 66 ................R(.^../f
000003C0 A9 97 1B E8 │ BB 59 CE 12 │ 48 51 58 DD │ 74 78 32 71 │ 3A A3 5A A4 │ 89 6A 96 83 .....Y..HQX.tx2q:.Z..j..
000003D8 5B 38 23 66 │ AD DE 57 D7 │ F5 72 C0 B2 │ CB 0F C4 14 │ 60 9C 71 D4 │ 16 A4 A4 A4 [8#f..W..r......`.q.....
000003F0 A4 A5 A4 A5 │ A5 A5 54 66 │ 43 78 CC 70 │ 70 0B B9 87 │ ......TfCx.pp…
Если нужно в шестнадцатеричной системе исчисления, то с помощью калькулятора вы можете перевести десятичные цифры DEC в HEX и получить, что регион прошивки с «криптой» на платах XM, как правило, 0x2FC00 — 0x30000. Иногда на более старых камерах встречается диапазон 0x1FC00 — 0x20000.
В результате мы получим файл cryptoblock.bin размером 1024 байта. Это и есть сохранённая «крипта», которую нужно будет вставить в новую прошивку камеры на своё место, чтобы камера обрела свой старый заводской законный MAC-адрес и CloudID.
Из всего вышесказанного вы наверняка уже поняли, что, раздавая на форумах и каналах прошивки от своей камеры, которые содержат криптоблок, вы способствуете созданию клонов камеры. Все они будут лить видеопоток в одно облако, а вам придётся вместо своей камеры наблюдать за чужим гаражом или спальней.
▍ Будет ли работать камера без криптоблока
У врача пациент спрашивает после сложной и тяжёлой операции:
— Доктор, скажите, я жить буду?
— Ну-у-у… Возможно. Но я бы не советовал, не советовал…
Без криптоблока камера работать будет, но без облака, с нюансами. MAC-адрес такой камеры становится 00:00:23:34:45:66. Работать камера с таким адресом будет ровно до того момента, пока в сети не появится ещё одна такая же камера. К той поре уже все забудут про то, что камера перешивалась, и через много дней ковыряния в глюках сети, когда всем коллективом поймут, кто виновен в этом, уже накопится достаточно злости, чтобы бить виновного коллективно и организованно.
▍ Что делать, если криптоблок утерян
Если лень восстанавливать криптоблок, и вам не нужен доступ к облаку, а достаточно стандартных протоколов камеры, то ставьте прошивку OpenIPC. В ней не используется криптоблок, а любой MAC-адрес можно задать следующей командой:
fw_setenv ethaddr XX:XX:XX:XX:XX:XX
Рекомендуется использовать старый MAC, если он у вас сохранился, хотя бы чтобы производитель камеры корректно определялся при сканировании в nmap:
Сканер nmap показывает производителя исходя из MAC-адреса
# nmap -nsP 192.168.1.0/24
Starting Nmap 7.94 ( nmap.org ) at 2023-10-30 10:15 EET
Nmap scan report for 192.168.1.1
Host is up (0.0010s latency).
MAC Address: BC:5F:F4:BC:EA:24 (ASRock Incorporation)
Nmap scan report for 192.168.1.2
Host is up (0.0017s latency).
MAC Address: 00:1D:0F:FE:07:6C (TP-Link Technologies)
Nmap scan report for 192.168.1.20
Host is up (0.0012s latency).
MAC Address: 00:12:16:BB:93:6F (ICP Internet Communication Payment AG)
Nmap scan report for 192.168.1.21
Host is up (0.0015s latency).
MAC Address: 00:12:16:C6:3A:EC (ICP Internet Communication Payment AG)
Nmap scan report for 192.168.1.22
Host is up (0.0015s latency).
MAC Address: 00:2A:2A:A2:38:55 (Unknown)
Nmap scan report for 192.168.1.23
Host is up (0.0012s latency).
MAC Address: 00:1C:27:01:AC:56 (Sunell Electronics)
Nmap scan report for 192.168.1.24
Host is up (0.0015s latency).
MAC Address: 00:12:17:AF:F8:36 (Cisco-Linksys)
Nmap scan report for 192.168.1.25
Host is up (0.0012s latency).
MAC Address: 00:12:41:F1:CA:43 (a2i marketing center)
Nmap scan report for 192.168.1.26
Starting Nmap 7.94 ( nmap.org ) at 2023-10-30 10:15 EET
Nmap scan report for 192.168.1.1
Host is up (0.0010s latency).
MAC Address: BC:5F:F4:BC:EA:24 (ASRock Incorporation)
Nmap scan report for 192.168.1.2
Host is up (0.0017s latency).
MAC Address: 00:1D:0F:FE:07:6C (TP-Link Technologies)
Nmap scan report for 192.168.1.20
Host is up (0.0012s latency).
MAC Address: 00:12:16:BB:93:6F (ICP Internet Communication Payment AG)
Nmap scan report for 192.168.1.21
Host is up (0.0015s latency).
MAC Address: 00:12:16:C6:3A:EC (ICP Internet Communication Payment AG)
Nmap scan report for 192.168.1.22
Host is up (0.0015s latency).
MAC Address: 00:2A:2A:A2:38:55 (Unknown)
Nmap scan report for 192.168.1.23
Host is up (0.0012s latency).
MAC Address: 00:1C:27:01:AC:56 (Sunell Electronics)
Nmap scan report for 192.168.1.24
Host is up (0.0015s latency).
MAC Address: 00:12:17:AF:F8:36 (Cisco-Linksys)
Nmap scan report for 192.168.1.25
Host is up (0.0012s latency).
MAC Address: 00:12:41:F1:CA:43 (a2i marketing center)
Nmap scan report for 192.168.1.26
Но если старый MAC не сохранился, совсем не беда влепить любой другой и даже подделать производителя на какой нибудь-модный Hikvision.
А знаете ли вы, что вендор определяется по первым трём байтам MAC-адреса? Вот по этому списку можно самостоятельно определить вендора.
Второй вариант — создать клон камеры товарища с такой же камерой с пониманием всех последствий как для вас, так и для всех пользователей камеры — донора прошивки.
Но есть ещё один вариант, который можно рассмотреть, если у вас прямо совсем много времени и умений: сгенерировать новый криптоблок.
▍ Генератор крипты
Пользователь github под ником nikitos1550 создал репу с генератором «крипты» для камер XM.
Никитос — красавчик, решил пойти простым путём, не исследуя дизассемблером и не взламывая криптоалгоритмы, чем занялся бы достаточно умный, но недостаточно хитрый хакер. Он взял библиотеки, такие как libcrypto.so из прошивки, в них нашёл нужные функции для кодирования и декодирования и написал программы, которые используют библиотеки производителя для шифрования или дешифрования криптоблока.
Запустить на своём домашнем линуксе генератор не получится. Так как библиотеки были выковыряны из оборудования XM на ARM-платформе, то запустить эти программы можно тоже только на аналогичном оборудовании в системе с полным комплектом библиотек. Для этого нужно прошить подготовленную скриптом часть прошивки на камеру или регистратор, загрузиться и в ней сгенерировать «крипту». После чего вернуть родную прошивку.
Я уже рассказывал про то, как можно использовать камеры со сгоревшим сенсором в качестве одноплатного компьютера. Так, из ненужной камеры можно подготовить отдельную железку для генерирования криптоблока и открыть на базаре ларёк, чтобы вытеснить конкуренцией даже бананы. Уверен, будет очередь. Шучу, конечно. Не бананы!
▍ Онлайн-сервисы генерирования криптоблока
Чтобы не заморачиваться с установкой прошивки для генерирования криптоблока, можно воспользоваться онлайн-сервисом cgistart.com.
Для этого вам нужно иметь файл с дампом прошивки камеры. Тут всё просто:
- Вводим необходимый MAC и адрес криптоблока в прошивке в шестнадцатеричном виде без префикса «0x».
- Выбираем файл прошивки и отправляем файл на сервер.
- Скачиваем обратно переделанную прошивку и зашиваем её назад в камеру.
Ещё раз обращаю внимание, что речь в данном посте идёт только о камерах вендора XiongMai. У других вендоров, скорее всего, другие алгоритмы шифрования, и с ними такой номер не пройдёт.
Для записи-чтения прошивок рекомендую программу нашего коллеги с Хабра IMSProg, о которой был относительно недавно пост.
▍ Резюме
Теперь вы понимаете, насколько безопасны облака популярных камер. Конечно, это уже не так доступно, как в своё время «облако» Foscam, когда любая домохозяйка, помешивая борщ, могла запустить второй рукой сканер и полистать тысячи камер, установленных в спальнях, и в лучшем случае сравнить, как спят чужие дети. Подбор Cloud ID прямым перебором имеет мало смысла, так как количество комбинаций слишком огромно. Но подмена криптоблока позволяет не только увидеть Cloud ID, но и лить своё видео в это облако.
Установка сложного пароля на доступ к камере — это самый минимум, который должен сделать для безопасности пользователь камеры, даже если она находится без внешнего IP-адреса в локальной сети за роутером. Минимум — не гарантирует безопасность, а лишь повышает шанс. В идеале камера вообще не должна иметь доступ к интернету. Но такой вариант массового пользователя тоже не устроит, ведь мы хотим лёгким способом видеть своё имущество, где бы ни находились. Тут-то и начинаются танцы компромиссов с файрволами и виртуальными приватными сетями.
Скидки, итоги розыгрышей и новости о спутнике RUVDS — в нашем Telegram-канале
Поделиться ссылкой:
Интересные статьи
Интересные статьи
Картинка rawpixel
Любой энтузиаст, строящий свои проекты на базе Arduino, рано или поздно сталкивается с необходимостью тем или иным способом обеспечить взаимосвязь этой платы со своим компьютеро...
Приветствую! Это большая история маленького управленческого кейса на тему "Как же, блин, добиться соблюдения регламентов?" и "Почему они без меня ничего не могут нормально сделать?". А поможет нам в э...
Это продолжение статьи о внедрении PIM систем. В первой части мы описали почему бизнесу стоит внедрять эти системы и какие факторы необходимо учитывать при этом...
В статье про тренды логистики мы упоминали концепцию цифрового двойника. Цифровой двойник — это аналог физического предмета или процесса, который отображает все происходя...
Ты решил стать программистом чтобы разрабатывать игры? И вот ты разрабатываешь игры… настольные…
Захотелось нам летом поиграть в какую-нибудь настолочку про IT. И не получилось найти ту, к...