NUCLEO-F411RE+CZ-ME310G1모뎀, TRNG 없는 IoT장치 보안취약점
제퍼환경에서 NUCLEO-F411RE 보드에 CZ-ME310G1 모뎀을 연결 했습니다.

NUCLEO-F411RE보드와 CZ-ME310G1모뎀 연결 시 주의해야 할 부분이 있습니다.
초기 NUCLEO보드는 D0, D1핀을 ST-LINK와 공유해서 사용했습니다. NUCLEO-F411RE보드 회로도를 살펴보면
아래와 같은 구성을 확인할 수 있습니다. D0, D1핀은 각각 PA3, PA2와 연결되어 있어서 바로 사용할 수 있을 것 같았습니다.

하지만 회로도를 살펴보니, PA2, PA3는 D1, D0에 연결되어 있지 않고 USART_TX, USART_RX로 연결되어 있는 것을 확인할 수 있었습니다.

USART_TX는 ST-LINK_RX에 USART_RX는 ST-LINK_TX에 연결되어 있는것도 확인할 수 있습니다.

D0, D1을 사용할 수 없어서 살펴보니 또다른 USART 채널을 사용할 수 있는 PA9, PA10이 아두이노 D8, D2핀에 각각 연결되어 있는 것을 위 회로도에서 확인할 수 있었습니다.


NUCLEO-F411RE보드와 CZ-ME310G1은 아래와 같이 연결했습니다.
MODEM TX -- D2(PA10)
MODEM RX -- D8(PA9)
MODEM LDO_EN -- D7(PA8)
MODEM PWRKEY -- D3(PB3)
MODEM BATT -- 5V
MODEM GND -- GND
MODEM IOREF -- IOREF

위 내용을 반영해서 boards 디렉토리에 nucleo_f411re.overlay 만들었습니다.
/ {
aliases {
modem-uart = &usart1;
modem = &modem;
ldoen = &mdm_ldo;
};
chosen {
zephyr,ppp-uart = &usart1;
};
mdm_ldo: mdm_ldo {
compatible = "gpio-leds";
label = "Modem LDO Enable";
led_0: led_0 {
gpios = <&gpioa 8 GPIO_ACTIVE_HIGH>;
};
};
};
&usart1 {
pinctrl-0 = <&usart1_tx_pa9 &usart1_rx_pa10>;
pinctrl-names = "default";
current-speed = <115200>;
status = "okay";
modem: modem {
status = "okay";
compatible = "telit,me310g1";
mdm-power-gpios = <&gpiob 3 GPIO_ACTIVE_HIGH>;
};
};
&gpioa {
status = "okay";
};
&gpiob {
status = "okay";
};
빌드를 하면 난수호출 API 부분에서 에러가 나옵니다. STM32F411RE 데이터시트를 확인해보니 TRNG(하드웨어 난수생성기) IP가 내장되어 있지 않았습니다. 네트워크 설정을 적용해서 동작시키기 위해 CONFIG_TEST_RANDOM_GENERATOR=y 옵션을
prj.conf에 추가했습니다. 빌드 중간에 아래와 같은 Configuration Issue메시지를 확인했습니다.
GitHub - codezoo-ltd/zephyr-app: zephyr rtos applications
zephyr rtos applications. Contribute to codezoo-ltd/zephyr-app development by creating an account on GitHub.
github.com
마지막으로 앞에서 언급한 TRNG가 없을 경우에 발생할 수 있는 보안이슈에 대해 정리해 보겠습니다.
(주)코드주
장병남 대표 010-8965-1323 rooney.jang@codezoo.co.kr
iot유심 : codezoo
[codezoo] IoT Global SIM, IoT Connectivity, IoT Device
smartstore.naver.com
