ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NUCLEO-F411RE+CZ-ME310G1모뎀, TRNG 없는 IoT장치 보안취약점
    zephyr 2025. 10. 11. 02:05

    제퍼환경에서 NUCLEO-F411RE 보드에 CZ-ME310G1 모뎀을 연결 했습니다. 

     

    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메시지를 확인했습니다.

    -- Found assembler: /home/jbmaster/zephyr-sdk-0.17.4/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc
    CMake Warning at /home/jbmaster/zephyrproject/zephyr/subsys/random/CMakeLists.txt:12 (message):
    Warning: CONFIG_TIMER_RANDOM_GENERATOR and CONFIG_TEST_CSPRNG_GENERATOR are
    not truly random generators. This capability is not secure and it is
    provided for testing purposes only. Use it carefully.
    -- Using ccache: /usr/bin/ccache
    -- Found gen_kobject_list: /home/jbmaster/zephyrproject/zephyr/scripts/build/gen_kobject_list.py
    CMake Warning at /home/jbmaster/zephyrproject/zephyr/CMakeLists.txt:1106 (message):
    No SOURCES given to Zephyr library: drivers__entropy
    Excluding target from build. 
    TRNG 하드웨어 가속기와 연동되는 부분의 코드가 없어서 소프트웨어 난수 생성기를 연결해서 빌드하려고 하고 테스트 목적으로만 사용할 것을 권고하니 주의해서 사용하라는 메시지 입니다. 
    IoT 장치에 난수생성기 없는 경우 어떤 크리티컬한 보안이슈 발생 위험이 있는지는 뒤에서 좀 더 깊게 살펴 보겠습니다.
     
    nucleo_f411re 빌드 하기 위한 overlay와 prj.conf가 적용된 프로젝트는 아래 경로에서 다운로드 받을 수 있습니다.
     

    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

     

    빌드 후 동작 영상 입니다.
     
    1. UDP 에코서버 통신 테스트

     

     
    2. hivemq mqtt 테스트
     

     

     

    마지막으로 앞에서 언급한 TRNG가 없을 경우에 발생할 수 있는 보안이슈에 대해 정리해 보겠습니다.

     

    MCU에 하드웨어 난수 생성기(TRNG)가 없으면 예측 가능한 난수로 인해 여러 심각한 보안 문제가 발생할 수 있습니다. 암호화 및 보안의 핵심은 예측 불가능성인데, 이것이 무너지기 때문입니다.
    소프트웨어에 의존하는 의사 난수 생성기(PRNG)는 특정 알고리즘과 초기값(seed)을 기반으로 난수를 생성합니다. 이 방식은 초기값이 같으면 항상 동일한 순서의 난수를 만들어내기 때문에, 공격자가 초기값을 유추하거나 알아낼 경우 앞으로 생성될 모든 난수를 예측할 수 있게 됩니다.
    주요 보안 취약점
    1. 암호화 키 유출

     

    - 키 생성의 예측 가능성: SSL/TLS 통신, 데이터 암호화 등에 사용되는 암호화 키는 난수를 기반으로 생성됩니다. 만약 난수가 예측 가능하다면, 공격자는 동일한 방법으로 암호화 키를 생성하여 통신 내용을 도청하거나 암호화된 데이터를 해독할 수 있습니다.
    - 세션 키 탈취: 기기 간의 보안 통신 채널을 만들 때 사용하는 임시 세션 키 역시 난수로 만들어집니다. 공격자가 이 난수를 예측하면 세션 하이재킹을 통해 중간에서 데이터를 가로채거나 조작할 수 있습니다.
    2. 인증 절차 무력화
    Nonce 및 Challenge 값 예측: 인증 과정에서는 일회성 값인 Nonce나 Challenge를 사용하여 재전송 공격(Replay Attack)을 방지합니다. 이 값들이 예측 가능한 난수로 생성된다면, 공격자는 다음 인증에 사용될 값을 미리 계산하여 정상적인 사용자로 위장하고 시스템에 무단으로 접근할 수 있습니다.
    예시: 자동차 스마트키 시스템에서 키와 자동차가 난수를 주고받으며 인증하는데, 이 난수가 예측 가능하다면 공격자가 다음 인증 값을 미리 계산해 차량 문을 열거나 시동을 걸 수 있습니다.
    3. 각종 보안 기능 우회 뚫린 방패
    - ASLR(주소 공간 배치 난수화) 무력화: 운영체제(OS) 수준의 보안 기술인 ASLR은 프로그램의 메모리 주소를 매번 실행 시마다 무작위로 변경하여 공격을 어렵게 만듭니다. 하지만 난수 생성이 예측 가능하다면 공격자는 메모리 주소를 정확히 예측하여 버퍼 오버플로우와 같은 메모리 해킹 공격을 성공시킬 수 있습니다.
    - 암호화 서명 위조: 디지털 서명 과정에도 난수가 사용됩니다. 공격자가 이 난수를 알면 개인키를 알아내거나 서명을 위조하여 악성 펌웨어를 정상적인 것처럼 위장해 기기에 설치할 수 있습니다.
    결론적으로, MCU에 하드웨어 난수 생성기가 없다는 것은 보안 시스템의 근본적인 신뢰성을 잃는 것과 같습니다. 소프트웨어 방식의 PRNG는 속도가 빠르고 구현이 쉽다는 장점이 있지만, 예측 가능성이라는 치명적인 약점을 안고 있습니다. 따라서 높은 수준의 보안이 요구되는 IoT 기기, 스마트홈, 산업 제어 시스템, 자동차 전장 시스템 등의 MCU에는 예측이 불가능한 물리적 현상(열 잡음, 방사성 붕괴 등)을 이용하는 하드웨어 기반의 진성 난수 생성기(TRNG) 탑재가 필수적입니다.
    이제 F4xx시리즈와 작별인사를 나누고 STM32H5같은 저렴한 가격의 고성능MCU로 갈아타야할 시기인 것 같습니다.
     
     
     
    LTE-CATM1 내장형 모뎀 대량 구매 상담, 외주 개발, 협업 문의, vodafone IoT유심 문의
    (주)코드주
    장병남 대표 010-8965-1323 rooney.jang@codezoo.co.kr
     
     
     

    iot유심 : codezoo

    [codezoo] IoT Global SIM, IoT Connectivity, IoT Device

    smartstore.naver.com

     

    'zephyr' 카테고리의 다른 글

    Renesas FPB-RA6E1 + CZ-ME310G1 그리고 SCI Uart  (0) 2025.10.13
    CZ-ME310G1 모뎀 with Zephyr RTOS 4.2  (0) 2025.10.07
Designed by Tistory.