Обход U-boot Password Protection отключением SPI NAND Flash

Добрый день.
Есть камера Smtsec sip-k678k5 на платформе HiSilicon Hi3519DV500. Нужно попасть в U-boot CLI, но он запаролен.

Нашел в сети хак: если U-boot не сможет загрузить linux image - он предоставит U-boot CLI минуя пароль (не всегда, но очень часто. Не сработает только если разрабы не поленились и настроили защиту от этого вектора атаки).
Источник: Securing U-Boot: A Guide to Mitigating Common Attack Vectors - Timesys
(поиск по фразе “if a Linux/OS boot fails, U-boot may still open up the CLI”)

Согласно bootlog, образ ОС находится в SPI NAND MX35LF1GE4AB.

Первые 46 строк бутлога (строки 14,17,20,23):
flash^M
boot table board switch:0x00000007
DDR size: 0x00000400MB

System startup

Uncompress Ok! 

U-Boot 2022.07 (Sep 04 2024 - 03:12:54 +0000)hi3519dv500

DRAM:  Relocation Offset is: 17723000
Relocating to 5ff23000, new gd at 5fb02de0, sp at 5fb02dd0
Core:  1 devices, 1 uclasses
SPI Nor:  Boot Media isn't SPI Nor 
NAND:  fmc_ip_ver_check(32): Check Flash Memory Controller v100 ...fmc_ip_ver_check(38):  Found
SPI Nand ID Table Version 2.7 
SPI Nand(cs 0) ID: 0xc2 0x12 Name:"MX35LF1GE4AB"
Block:128KB Page:2KB OOB:64B ECC:4bit/512 
Chipsize:128 MiB 
Loading Environment from SPIFlash... Boot Media isn't SPI Nor 
*** Warning - spi_flash_probe() failed, using default environment

Loading Environment from NAND... OK
In:    serial
Out:   serial
Err:   serial
^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_
Net:   gmac0
Error: gmac0 address not set.

bootshell = 1 
Hit any key to stop autoboot:  0   

NAND read: device 0 offset 0x100000, size 0x20000
 131072 bytes read: OK
core0 start 
NAANDT reaFd:  .d.evic.e 0 
offset 0x120000, size 0xf00000
NOTICE:  BL31: v2.7(release):
NOTICE:  BL31: Built : 10:39:48, Nov  9 2023
NOTICE:  IPC: waiting for kernel 15728640 bytes read: OK
Run the smc command to switch to the GSL.

sram to npu!
Booting Linux on physical CPU 0x0000000000 [0x412fd050]
MX35LF1GE4AB: фото + даташит



Принцип работы SPI. Когда вывод CS (SS) находится в состоянии логической единицы, SPI slave (в данном случае MX35LF1GE4AB) не может передавать и принимать данные. Когда SPI master (MCU) желает произвести чтение/запись - он переводит CS слэйва в состояние логического нуля.
Wiki: Прием и передача данных в SPI

Глупость, которую я собираюсь сделать.
Насколько безопасно будет сделать подтяжку CS# на VCC через резистор 10кОм?
По логике, можно подать питание на камеру с подтянутым CS# и через пару секунд отсоединить подтяжку. U-boot должен будет к этому моменту уже не найти nand с образом linux и отдать cli.

Чего я не учел? Не хочется покалечить девайс

Судя по тому, что даже про CS вы узнали из Википедии, не учесть вы могли очень многого…

1 лайк

Всё, что вы написали - правда. Именно поэтому я и создал эту тему

U-boot сам скорее всего на этой флешке лежит, так что отключать надо не сразу …

CS активным нулём перетянет Вашу подтяжку и скорее всего он уже на плате имеет эту подтяжку…

Подтверждаю ваше предположение. Подтяжка 10кОм CS# на VCC никак (визуально) не повлияла на работу устройства - всё прочиталось/запустилось/заработало штатно, как и до этого без подтяжки

upd.
То же самое и с подтяжкой 10кОм вывода MISO на GND