[테크월드=양대규 기자] 지난 수년간 사물인터넷(Internet of Things, IoT)에 대해 수많은 이야기가 나왔지만, 인더스트리 4.0이라고 불리는 산업용 사물인터넷(IIoT)의 전망은 최근의 새로운 추이로 인해 과거 그 어느 때보다도 밝아졌다. IIoT가 전세계 기업들의 생산성과 실적 향상을 가져올 것이라는 데는 의문의 여지가 없다. 여기서 무엇보다 중요한 점은 새로운 플랫폼, 기술, 표준, 프로토콜이 등장함에 따라 소프트웨어 개발자와 설계자는 IIoT 네트워크에 보안 기능 구축의 중요성을 깨닫고 이에 지속적으로 집중해야 한다는 것이다.

다양한 산업들이 커넥티드 장치와 네트워크에 더욱 의존하게 되고 전세계 기업들의 온라인 활동이 증가함에 따라, 불법 사이버 공격을 억제하거나 애당초 일어나지 않도록 예방해야 한다. 100 퍼센트 안전한 IoT 장치를 구현하기란 거의 불가능한 일이지만, 소프트웨어 개발자와 설계자가 맡은 역할을 잘 수행한다면 데이터 유출이나 공격의 가능성을 최소화할 수 있다. 필요한 예방조치 중 다수는 지금 즉시 손쉽게 이용할 수 있고, 어떤 경우에는 보안 설계를 중심으로 하는 사고 방식이 요구된다.

본질적으로 이제는 보안을 임베디드 시스템의 설계에 있어서 “사후 추가항목”으로서 접근해서는 안 된다. 보안은 컨셉이 처음 시작되는 순간부터 고려돼야 한다. 즉, 설계시 보안 기능을 구축하는 비용은 투자 항목으로 간주돼야 한다. 보안은 매우 광범위한 주제로서 장치라는 개념에서 시작해서 계획, 프로세스, 활동 및 기술을 모두 아우른다는 것이다.

본고에서는 안전한 IIoT 인프라를 구축하는 데 있어서 유용한 주요 기술 주제 몇 가지를 살펴보고자 한다. 그 초점이 되는 것이 IIoT의 엔드포인트(Endpoint), 즉 엣지(Edge) 장치다.

[그림 1] 코드 인증을 위해서는 공개키와 개인키를 모두 사용해야 한다.

코드 인증과 부팅시 인증

코드 인증은 본질적으로 바이너리 OS 이미지의 인증이다. 개발자는 자신들의 시스템으로 들어오는 데이터가 OEM 업체로부터 오는 것인지 확인하도록 설정할 수 있다. 더 나아가, 개발자는 변경된 코드가 있는지 여부를 조사해야 한다. 코드 인증[그림 1]과 보안부팅 인증[그림 2]은 개발자가 자신들의 임베디드 IoT 장치를 보호하기 위해 취할 수 있는 가장 기본적인 단계 중 일부다.

[그림 2] 보안 부팅 인증은 1단계 부트 로더를 실행함으로써 시작되는데, 이 부트 로더는 신뢰할 수 있는 플랫폼 모듈(TPM) 하드웨어에서 제공하는 보안 플래시 메모리 내에 저장돼 있다.

코드 인증을 위해서는 공개키와 개인키를 모두 사용해야 한다[그림 1]. 공개키는 공개적으로 액세스할 수 있는 저장소나 디렉토리를 통해 네트워크 상의 누구라도 입수할 수 있다. 개인키는 각 소유자만의 기밀사항으로 남아야 한다. 이들 한쌍의 키는 수학적으로 연관돼 있기 때문에 공개키로 암호화 된 것은 그에 상응하는 개인키로만 해독할 수 있고, 그 반대의 경우도 마찬가지다. 이런 유형의 인증은 고도의 기밀성을 달성한다.

보안 부팅 인증은 1단계 부트 로더를 실행함으로써 시작되는데, 이 부트 로더는 신뢰할 수 있는 플랫폼 모듈(TPM) 하드웨어에서 제공하는 보안 플래시 메모리 내에 저장돼 있다[그림 2]. 이 부트 로더는 보호된 메모리 내에 저장돼 있기 때문에 해커에 의해 대체될 수 없다. 보호된 메모리에는 2단계 부트 로더를 위한 시그니처(Signature)와 암호 키도 저장된다. 1단계 부트 로더는 하드웨어 암호화 지원 기능과 암호 키를 사용해 2단계 부트 로더의 시그니처를 계산한다. 2단계 부트 로더에 대해 계산된 시그니처가 저장돼 있는 시그니처와 일치하면 2단계 부트 로더가 유효한 것이므로 실행이 허용된다.

인증 체인의 확립

초기 부팅 단계가 확인되고 나면 인증 체인 생성 프로세스가 계속될 수 있다. 동일한 공개·개인키 접근방식을 이용해 후속 실행 모듈을 다운로드, 검증, 로드, 실행할 수 있다[그림 3]. 이런 접근방식은 복잡한 장치의 경우에는 특히 흥미로워진다. 그 이유는 장치가 임의의 주어진 시간에 요구되는 기능적 요건에 따라 상이한 운영 환경과 애플리케이션을 로드할 수 있기 때문이다.

인증 체인은 그 뿌리인 하드웨어로부터 시작된다[그림 3]. 이 프로세스는 하드웨어가 부팅 ROM을 인증하도록 하는 인증 단계에서 시작되며, 부팅 ROM이 운영체제를 인증한다. 물론 그 다음에는 이 운영체제가 애플리케이션 계층을 인증하게 된다. 이 전략의 목표는 서명과 인증되지 않은 애플리케이션이 실행되는 일이 없도록 막는 것이다. 시스템이 가동되고 나면 다운로드 되는 모든 파일을 살펴봄으로써 서명과 인증이 되었는지 확인해 악성 코드의 공격과 업로드를 막을 수 있다. 

[그림 3] 인증 체인은 그 뿌리인 하드웨어로부터 시작된다.

프로세스 분리

오늘날 시판되는 SoC 중 다수는 강력한 애플리케이션을 실행하는 향상된 시스템 성능을 제공한다. 그러나 크기, 전력 소비, 비용을 줄여야 할 필요성 때문에 소프트웨어 개발자들은 제한된 메모리 자원으로 복잡한 애플리케이션을 실행해야 하는 문제에 직면하게 된다. 바로 이 부분에 프로세스 분리를 사용할 수 있다. 시스템 메모리 관리 장치(MMU)나 메모리 보호 장치(MPU)를 이용한 프로세스 분리가 보안성을 보장해 주지는 않지만, 잘못된 동작을 하는 애플리케이션이 다른 프로세스 애플리케이션이나 커널 자체에 영향을 미치지 못하도록 견제하는 데는 도움이 된다.

멘토 그래픽스의 Nucleus RTOS와 같이 모든 기능을 갖춘 RTOS에서는 프로세스 모델 기능이 공간 분할을 위한 접근 방법을 제공한다. 이는 보호된 메모리 영역을 생성하며, 이를 통해 커널과 미들웨어 자원들을 완전히 격리시킨다. 이런 방식 덕분에 애플리케이션 코드에 발생하는 스크리블러, 스택 오버플로우, 로그 포인터 등이 시스템 소프트웨어의 작동에 악영향을 미치거나 방해할 수 없다. Nucleus 프로세스 모델은 메모리를 가상화 하지 않고도 MMU나 MPU를 이용한 메모리 분할을 통해 보호된 메모리 영역을 생성한다. 이는 성능 면에서는 물론, 제한된 공간으로 인해 풋프린트 최소화가 필수적일 경우에도 극히 중요하다. 공간 분할은 클라우드 서비스를 이용해 새로운 애플리케이션을 로드하기 위한 프레임워크를 제공하거나 혹은 대형 알고리즘을 보다 작은 구성요소들로 분할할 수 있는 기능을 제공한다. 이런 구성요소들은 실행 시간보다 약간 앞서서 로드 된다.

안전 인증 운영체제의 이용

프로세스 모델을 사용하는 경우와 마찬가지로 안전 인증 운영체제의 실행 자체로는 보안성이 보장되지 않는다. 그러나 코드를 안전 인증된 기반 위에 구축해나감으로써 개발자는 코드가 의도한 대로 동작할 것이며, 따라서 시스템 신뢰성이 향상될 것으로 좀더 확신할 수 있게 된다. 안전 인증 환경은 또한 소프트웨어 결함으로 인해 발생할 수 있는 상황들을 피하는 데도 도움을 준다. 이런 소프트웨어 결함은 시스템 전체에 걸쳐 단계적으로 파급돼 관련 없는 코드 부분에도 보안 상의 취약점을 초래할 수 있다.

Nucleus SafetyCert RTOS는 개발자가 완전 인증 솔루션을 이용해 규격인증 달성 경로를 단축할 수 있게 해준다. 이런 완전 인증 솔루션에는 사용자가 임무 수행에 필수적인 애플리케이션을 개발하는 데 필요한 모든 문서와 산출물(Artifact)이 포함돼 있다. 안전이 인증된 RTOS는 IEC(International Electrotechnical Commission) 규격 61508 SIL 3 인증을 요구하는 IoT 장치의 인증 요건을 충족시키도록 문서화돼 있다.

[그림 4] ARM TrustZone은 단일 코어 구성에 적합하다. 이 경우, ‘멘토임베디드 멀티코어 프레임웍스’가 핵심적인 역할을 한다.

ARM의 TrustZone을 통한 보안성 확립

ARM TrustZone 아키텍처[그림 4, 5]는 SoC의 하드웨어 구성요소를 분할하거나 격리시키는 솔루션을 제공한다. 그 방법은 프로세서, 주변 장치, 메모리 주소, 그리고 심지어는 L2 캐시 영역까지 “보안” 또는 “비 보안” 하드웨어로서 실행되도록 정의하는 것이다. ARM TrustZone 기술을 이용하는 SoC는 불과 몇 클럭 사이클의 지연을 감수하는 것만으로 시스템을 “보안 영역(Secure world)” 프로세싱으로 동적 전환할 수 있다. 이 경우 하드웨어의 구성요소는 분할되며, 데이터와 프로세싱을 시스템의 나머지 부분에서는 전혀 볼 수 없게 된다.

[그림 5] ARM TrustZone은 멀티코어 아키텍처에도 적합하다. 이 경우에도 멘토임베디드 멀티코어 프레임웍스’가 핵심적인 역할을 한다.

ARM TrustZone에 의해 생성되고 시행되는 일반 영역(또는 비 보안 영역)은 SoC의 하드웨어 구성요소를 정의하는 데 사용할 수 있다. ARM TrustZone은 비-보안 프로세싱에서는 오직 비-보안 자원만을 액세스하고 비-보안 인터럽트만을 수신할 수 있도록 한다. 예를 들어, 일반 영역의 하드웨어 구성요소에는 UART와 USB 인터페이스가 포함되고 이더넷 액세스는 제외될 수 있다. 이더넷은 그 대신 보안 영역에서만 사용될 수 있다. 이 보안 영역에서는 별도의 RTOS나 애플리케이션이 일반 영역의 소프트웨어 스택과는 관계없이 모든 이더넷 통신을 관리하기 위한 목적만으로 실행된다.

ARM TrustZone 아키텍처는 일반 영역의 소프트웨어가 보안 영역의 자원을 액세스하지 못하도록 막음으로써 전반적인 시스템 보안에 기여한다. 그러나 알아둬야 할 사항은, ARM TrustZone 이 보안 영역에서 실행되는 소프트웨어의 안전성이나 보안성을 향상시키기는 어려우며, 다만 일반 영역의 소프트웨어가 원치 않는 보안 영역 액세스를 못하도록 막아줄 뿐이라는 점이다. 물론 보안 영역을 완전히 신뢰할 수 있으려면 시스템이 처음부터 신뢰할 수 있는 상태로 부팅되어야 한다 (신뢰할 수 있는 부팅에 대해서는 앞서 살펴본 내용 참조). 그리고 어떤 소프트웨어를 “신뢰가능"으로 결정하는 것은 개발자의 몫이다. 이는 대개 엄격한 개발 과정, 테스트, 인증, 그리고 보안 영역에서의 “인증 체인” 전략 지원을 통해 이뤄진다.

결론

IIoT 시스템의 보안은 복잡한 주제다. IIoT 엔드포인트나 엣지 장치에 보안 기능을 구축하는 것은 다른 전자 시스템 설계에서 지난 수년간 사용돼 온 것과 같이 여러 보안 기능을 제공하며 보안 부팅, 코드 인증과 인증 체인 등이 그러한 것들이다.  이런 기본적이고 핵심적인 보안 기능들은 모든 커넥티드 장치 개발의 일부가 돼야 한다. 본고에서는 개발자들이 IIoT와 IoT 네트워크에 보안 기능을 구축하도록 지원하는 데 멘토가 얼마나 전념하고 있는지 소개한 바 있다. 멘토는 임베디드 시스템 개발을 위한 도구, 운영체제, 플랫폼, 서비스를 제공함으로써 자신들의 최신 커넥티드 IoT 인프라에 보안 기능을 도입하고자 하는 개발자들에게 새로운 길을 열어주고 있다.

글: 워렌 쿠리수(Warren Kurisu) 멘토 임베디드 시스템 사업부(ESD) 제품관리 디렉터

자료제공: 멘토, 지멘스 비즈니스

이 기사를 공유합니다
저작권자 © 테크월드뉴스 무단전재 및 재배포 금지
이 기사와 관련된 기사