설계를 통한 최상의 보안 실무

보안을 실현하기 위한 모든 여정은 반드시 하나의 길목을 지나게 되어 있으니, 그것이 바로 코드 품질입니다. 이것은 저희 동료, Shawn Prestridge지난 번 기사에서 설명한 내용입니다. 이것은 아무리 강조해도 지나침이 없는 진리라고 하겠습니다. 그렇지만 코더, 그리고 개발자가 제품의 보안을 확보하기 위해 실무에서 사용할 수 있는 방법에는 무엇이 있을까요? 

이번 기사에서는 영국 디지털 문화 미디어 스포츠부(DCMS)에서 제정한 소비자용 IoT 보안을 위한 실무 지침(Code of Practice for Consumer IoT Security)의 내용을 하나씩 짚어 보겠습니다. 전체 13개의 항목으로 구성된 본 지침은 이후 전 세계 여러 나라에서 비슷한 지침을 제정하는 데에 기준이 되기도 하였습니다. 여기서는 지적 재산권을 보호하고, 악성 코드의 유입을 방지하기 위한 여러 핵심 보안 개념의 기초를 제공함으로써 전체 생애 주기에 걸쳐, 이러한 실무 지침을 적용함으로써 얻을 수 있는 것은 무엇인지를 살펴볼 것입니다. 

소비자용 IoT 보안을 위한 실무 지침 

소비자용 IoT 보안을 위한 실무 지침에서 지향하는 바는 IoT 제품의 전체 생애 주기에 걸친 개발, 생산, 유지보수 단계별로 설계 접근법을 통한 보안성 확보 방법에 관해 지침을 제공하는 데에 있습니다. 동 실무 지침에서는 IoT, 즉 사물 인터넷 분야에서 모범 규준으로 널리 간주되어 오고 있는 여러 기법들을 집대성하였습니다.  

본 실무 지침 및 안내에서는 보안 기기 부팅, 암호화 기기 아이덴티티, Root of Trust, 운영 체제, 로그인 정보 관리 및 암호화를 통한 소프트웨어 및 소프트웨어 업데이트 정책의 보안성 확보 등 관련 요소 일체를 종합적으로 다루고 있습니다. 보안 법규의 목적은 단순히 의무적으로 적용되어야 하는 절차적 규정으로 삼는 데에만 있는 것이 아니라, 사용자가 자신의 취향에 따라 자발적으로 적용할 수 있도록 하는 데에 있습니다. 다양한 기관과 정부에서 이러한 지침을 작성하기 위해 많은 노력을 기울이고 있으며, 이러한 규칙은 일단 따르게 되면 최종 사용자에게 도움을 줄 뿐 아니라 IoT 제품을 개발하는 기업의 부담도 줄일 수가 있습니다. 소비자와 IoT 개발 기업은 보안 규정을 항상 준수함으로써 악성 코드 억제, 보안 아이덴티티, IP 보호, 생산 관리 및 표준 준수 관리 등을 통해 서로 윈윈을 거둘 수 있습니다. 

Code of Practice Consumer IoT Security

Code of Practice for Consumer IoT Security – 13 Guidelines [1]

13대 지침의 내용은? 

그러면, IoT 제품의 설계 및 소스코드 상에서 바로 적용할 수 있는 보안 지침에 대해 좀 더 자세히 알아보겠습니다.

1.  기본 패스워드 사용 금지 

너무도 당연한 말로 들리지만, 이것을 실제로 구현하는 것은 더 어렵습니다. 기본 패스워드는 기기 자체에서 추출되거나, 기기에 주입되는 것이 가장 이상적입니다. 여기서 생각해 볼 수 있는 한 가지 방법은 일변 번호의 엔트로피가 높지 않은 기기의 경우 패스워드를 기기 고유의 해싱에 기반한 분기 알고리즘을 통해 생성하는 것입니다. 또 해쉬 기반의 알고리즘인 SHA-256과 같은 방식을 사용해 패스워드를 생성하는 것 역시 좋은 방법이 됩니다. 

2.  취약성 공개 정책의 시행 

취약성 공개 정책은 한 마디로 기업의 공개 정책과 맞닿아 있는 것으로, 별도의 전담 임원을 두어 고객 관리 활동 및 취약성 전달을 담당하게 하는 것입니다.

3.  소프트웨어 업데이트 철저

조직 내에서 IoT 기기의 사용량이 증가함에 따라, 기기의 업데이트 상태를 유지하는 데에는 어려움이 따를 수 있습니다. IoT 소프트웨어 전개 초기부터 업데이트 전략을 개발하는 팀은 그렇지 않은 팀에 비해 소프트웨어 관리를 좀 더 용이하게 수행할 수 있습니다. 업데이트는 적시에 이루어져야 하며, 기기의 기능에 간섭을 일으켜서는 안 됩니다. 업데이트 정책에서는 또한 롤백 방지 장치를 두어, 구 버전이 해커의 공격 수단이 되지 않도록 관리해야 합니다.  

소프트웨어 업데이트 지침에서는 생애 종결 정책을 포함하여, 업데이트가 지정된 기간 동안 제품을 대상으로 공급 및 전송되도록 하여야 합니다.

4.  로그인 정보 및 보안 민감 데이터 보관 시 보안 철저 

본 지침 조항에서는 모든 로그인 정보는 안전하게 서비스 내 및 기기 상에 저장할 것을 요구하고 있습니다. 디바이스 소프트웨어에서 패스워드나 은행 계좌 정보와 같이 하드코딩된 로그인 정보를 사용하는 행위는 용납되지 않습니다. MCU의 기기별 보안 기능 및 메모리 관리를 항상 모두 활성화시켜 보안 민감 데이터를 보호할 수 있도록 해야 합니다.

5.  통신시 보안준수

IoT 기기는 TLS(Transport Layer Security) 또는 LWC(Lightweight Cryptography) 방식에 기반한 보안 통신을 사용해야 하며, 항상 이들 기술의 최신 버전을 적용해야 합니다. 이는 보안 민감 데이터는 전송시 반드시 암호화해야 하며, 키의 보안 관리도 철저히 해야 함을 의미합니다.

6.  공격 노출 면적 최소화

본 조항의 목적은 공격이 가능한 노출 표면적을 최소화하는 것입니다. 이는 모든 기기 및 서비스를 운영할 시 '최소 특권의 원칙'에 따라야 한다는 것을 의미합니다. 이것은 가장 중요한 원칙중의 하나로, 코드의 품질에 관련됩니다. 해커들은 IoT 기기의 취약성을 활용하기 위해 소프트웨어 상의 결함이나 코드의 취약성을 이용하기 때문입니다.  
코드 품질은 설계를 통하여 담보되어야 합니다. 여기에 적용되는 표준에는 여러 가가 있는데, 그 중 하나가 바로 CERT C 코딩 표준[2]으로, 카네기 멜론 대 소프트웨어 공학 연구소에서 개발한 것입니다. 이 표준에서는 C 프로그래밍 언어를 사용할 시 준수해야 하는 보안 코딩 규칙에 제시되고 있으며, 이러한 규칙 및 권고 사항의 목적은 안전하고 신뢰할 수 있으며, 보안성을 갖추고 있는 시스템을 개발하는 것입니다. 예를 들어, 정의되지 않은 반응 양상으로 인해 프로그램 역시 정의되지 않은 반응을 보이고, 이로 인해 공격을 받을 수 있는 취약성이 생겨나게 되는데, 이러한 정의되지 않은 반응 양상을 제거하는 것입니다. 
통상적으로 발생하는 보안상 허점은 이미 대부분 알려져 있지만, 개발 과정에서는 자꾸만 같은 에러가 반복해서 발생하게 됩니다. 한 가지 좋은 소식은 이와 같은 나쁜 코딩 습관에 대처하기 위해 CWE(Common Weakness Enumeration)[3]과 같은 코딩 표준이 개발되었다는 것입니다. CWE 표준은 mitre.org에서 확인할 수 있는데, 데이터 주입, 널 포인터 공격, 그리고 문자열 파싱 에러와 같은 추가적인 문제 영역을 다룹니다. MISRA C[4] 및 MISRA C++ 역시 안전하고 신뢰할 수 있는 코딩 방식을 장려하고 있으며, 이를 통해 코드 내에 보안 취약성 발생을 방지해 줍니다. 우수한 정적 분석 툴에는 CWE, MISRA, CERT C 표준을 기준으로 하는 점검 기능이 탑재되어 있어, 일일 단위로 코드 품질을 관리하는 것이 가능합니다.

7.  소프트웨어 무결성 확보

IoT 기기에서 소프트웨어의 무결성을 확보하는 것은 보안 부트 메커니즘을 통해 소프트웨어를 검증해야 한다는 것을 의미합니다. 만일 무단 변경 행위가 감지되는 경우, 기기는 소비자에게 이를 알려야 하며, 소프트웨어가 항상 보안을 유지하는, 검증된 상태가 되도록 해야 합니다. 
보안 부트 절차는 IoT 기기의 무결성을 지키는 데에 있어 필수적입니다. 보안 부트는 흔히 Root of Trust라고도 하는데, Root of Trust란 다양한 작업을 수행하는 컴퓨터 엔진으로서 무조건적으로 신뢰할 수 있는 기능을 지니고 있는 것을 말합니다. 이러한 Root of Trust는 보안 부트 관리자(Secure Boot Manager)를 통하여 구현되며, 이와 같은 방식을 통해 모든 파워업 사이클의 일부를 구성하는 사용자 어플리케이션에 대한 검증이 항상 이루어질 수 있도록 해 줍니다. 

8.  개인 데이터 보호 철저

이번 기사에서는 개인 데이터를 관리하고 보호하는 방법에 대해서는 따로 다루지 않습니다. 이는 지역 표준, 그리고 데이터 보호 법령에 따라 조금씩 차이가 있을 수 있기 때문입니다. 그럼에도 불구하고 본 지침은 매우 중요하며, 기업은 투명한 자세로, 고객들이 언제든 자신의 정보 제공을 철회할 수 있도록 조치해야 합니다. 

9. 시스템 장애에 대한 저항성 확보

IoT 기기는 자체적으로 각종 장애 발생에 대한 저항력을 지녀야 합니다. 이를 통해 기기에 취약성이 발생하고, 해킹 피해를 입을 시에도 기기 자체의 작동을 중지시키지 않아도 되도록 할 필요가 있습니다. 심박조절기와 같은 장치에서 이러한 상황이 발생한다고 생각해 보십시오. 아주 끔찍한 일이 될 것입니다! 그러므로 제한적인 서비스를 계속해서 제공할 수 있도록 저항력을 갖추도록 하거나, 적어도 사용자에게 뭔가 문제가 발생했음을 알리고완전히 접속을 다시 구성할 필요가 없이 최소한 기기가 합리적인 상태, 합당한 방식으로 네트워크 연결을 복구할 수 있도록 해야 합니다. 

10. 시스템 텔레메트리 데이터 감시

텔레메트리는 원력으로 측정된 일련의 측정 데이터 또는 다른 데이터의 모음, 그리고 이러한 데이터를 감시하는 수신 장치로 자동 전송하는 것을 말합니다. 이러한 데이터를 수집하는 경우IoT 기기 및 서비스로부터 수집되는 이용 데이터 및 모든 측정 데이터의 보안 이상 상태 여부를 감시하는 것이 가장 바람직한 정책이라고 할 수 있습니다.

11. 사용자의 개인 정보 삭제 용이

IoT 기기는 소유자가 바뀔 수도 있고, 장기적으로는 재사용되거나 폐기될 수도 있습니다. 이것은 개발자들이 제품 상에 반드시 구현하여야 하는 것이며, 설정을 통해 개인 정보의 제거가 용이하도록 하여야 합니다. 사용자가 소유권을 양도할 수도 있습니다. 예를 들어 친구에게 기기를 주는 상황을 생각해 볼 수 있지만, 그 전에 먼저 자신의 개인 정보를 지우고 싶을 수도 있을 것입니다. 

12. 기기 설치 및 유지 관리 용이

IoT 기기의 사용자 인터페이스 및 지원 서비스는 직관적이어야 하며, 사용자 친화적이라야 합니다. 또한, 이와 같은 정책과 그 집행에 영향을 미치는 사용자의 행동에 대해 적절한 피드백을 제공해야 합니다. 
제조사는 단순히 기본 설정을 가지고 시험할 것이 아니라 가능한 설정의 범위 내에서 제품의 보안을 시험하는 것이 바람직합니다. 또한 기기의 인터페이스 상에서 사용자가 기기의 보안을 저해할 수 있는 방향으로 설정을 바꾸지 못하도록 방지하거나, 적어도 이러한 설정을 가급적 하지 않도록 조치할 필요가 있습니다.

13. 입력 데이터의 검증

마지막 보안 지침은 입력 데이터를 검증하는 것입니다. 여기서는 원칙적으로 수신되는 데이터를 그냥 신뢰하지 말고, 상호 연결 성립 여부를 항상 검증하도록 요구하고 있습니다. 네트워크에 연결된 기기를 발견식별, 인증하는 과정을 거쳐야 신뢰를 확보할 수 있으며, 신뢰할 수 있는 솔루션 및 서비스에 대한 무결성을 보존할 수 있습니다. 이는 데이터 형, 길이, 형식, 범위, 승인 여부, 원천, 그리고 빈도에 대한 확인을 포함합니다. 왜냐하면, 공격자들은 데이터의 유효성 검증을 하지 않아 발생하는 아웃오브바운드, 산술적 에러, 메모리 불일치 에러 등의 잠재적 불일치 사항을 자동화된 도구를 사용하여 파고듭니다. 이와 같은 취약성은 해커의 표적이 되며, 이들은 자신들이 원하는 코드를 이를 통해 실행시켜, IoT 기기의 통제권을 탈취합니다.
코드를 계측 평가하는 런타임 분석 도구는 개발 단계에서 입력 데이터를 시험 및 검증하는 데에 있어 큰 도움이 될 수 있으며, 이를 통해 현장에서 악성 조작 행위를 방지할 수 가 있습니다. 개발 단계 및 현장에서의 자동화 런타임 도구는 숨겨진 문제점을 발동시켜 이를 탐지해 낼 수가 있으므로, 이를 통해 소스 코드를 적절히 변경하고, IoT 어플리케이션을 오용 행위로부터 보호하는 것이 가능합니다. 

나를 위한 보안 법규

여러 국가에서 각기 나름의 보안 법규를 정립하기 위해 노력하고 있습니다. 유럽 연합의 경우 ENISA(European Union Agency for Cybersecurity)에서 최초 가이드라인으로부터의 기본 권고 사항을 취합하고 있으며, 미국의 경우에는 NIST(National Institute of Standards and Technology)에서 캘리포니아의 IoT 보안 법률에 발맞추어 사이버 보안 관련 법률을 개선해 나아가고 있습니다. 마지막으로 아시아에는 일본 정부가 CCDS(Connected Consumer Device Security Council)을 통해 모범 규준을 작성하고 있으며, 싱가폴, 중국, 한국의 경우는 현재 실무단을 구성하여 표준 및 인증 관련 작업을 진행하고 있습니다.  

대부분의 원칙은 기본적으로 IoT 보안 재단(IoT Security Foundation)에서 편찬한 IoT 보안 모범 규준(IoT Security Best Practice Guidelines)을 기준으로 하고 있습니다.  

이와 같은 지침의 전문은 모두 무상으로 공개되어 있어, IoT 제품 및 서비스 개발 업체들은 안전하고, 보안성과 신뢰성을 갖춘, 안정적인 제품을 공급하기 위해 반드시 해결하지 않으면 안 되는, 다양한 보안 문제를 해결하는 과정에서 이를 이용할 수가 있습니다. 

설계를 통한 보안을 가능하게 해 주는 보안 맥락 

모든 관계 지침 및 모범 규준을 준수하는 것은 결코 쉬운 일이 아닙니다. 보안 디바이스 부팅, 암호화 기기 아이덴티티, Root of Trust, 로그인 정보 암호화 및 관리를 통해 보안의 기초를 확립하고, TLS(Transport Layer Security)를 통해 소프트웨어 및 통신의 보안을 확보하여, 코딩의 품질 기준을 충족하는 것은 올바른 도구가 없이는 매우 어려운 일이 될 수 있습니다. 

한 가지 권장되는 해결책은 보안 맥락을 프로젝트 시작 시점, 즉 구상 단계부터 정의하는 것입니다. 이것은 IoT 어플리케이션의 보안을 확립하고, 관련 표준 및 지침을 준수하는 데에 요구되는 보안 환경을 기술하는 것입니다. 보안 맥락을 미리 정의해 놓음으로써, 개발자는 필요한 보안을 빠르게 구현하고, 복수의 프로젝트에 걸쳐 반복성을 확립하며, 개발을 좀 더 수월하게 진행할 수가 있습니다. 보안 맥락은 다양한 범위의 IoT 어플리케이션에 맞도록 커스터마이징이 가능합니다.  

보안 맥락에서 정의되어야 하는 내용은 다음과 같습니다:

  • 강력한 Root of Trust를 통해 기기 인증 승인, 인증, 검증을 확보하고, 아이덴티티의 핵심 증거를 확인. 
  • 암호화 디바이스 아이덴티티 및 소유권 구조 
  • 기기 하드웨어 지원에 따른 보안 위생의 구현 
  • 보안 부트 관리자 확장을 통하여 핵심 부팅 기능을 지원 
  • 소프트웨어 업데이트 및 기타 생애주기 관리 기준

이와 같은 보안 맥락에서는 핵심 보안 기능의 기초를 제공하며, 지침에서 요구하고 있는, 설계를 통한 보안을 가능케합니다. 보안 맥락이 일단 개발 도구 내에 통합되면, 자동적으로 시행되며, 지침을 효과적으로 적용하여 프로세스가 간편하고, 자연적으로 새로운 IoT 제품 개발 과정에 통합됩니다. 

모든 것의 시작과 끝은 코드 품질입니다. 

구상 단계에서부터 제품 개발자들은 코드 품질을 확보하기 위해 적절한 도구를 활용할 수 있어야 합니다. 이것은 보안 프로필 파일(보안 맥락)에서 추출한 보안 및 암호화 설정을 적용해 코드 취약점을 방지하고, 보안성을 확보한, 암호화된 코드를 제공하기 위해서도 필요합니다. 보안 부트 관리자는 기기의 보안 기능을 활용할 것이며, Root of Trust를 비밀(키) 및 서비스와 함께 설정하여 모든 정책을 빠짐없이 집행할 것입니다. 전체적인 목적은 설계를 통한 제품의 보안성을 확립하고, 디지털 세상에서 사람들이 손쉽게 보안을 확보할 수 있도록 하는 데에 있습니다. 이전 글에서 이미 설명 드린 바와 같이, 결국 모든 것의 시작과 끝은 코드 품질로 귀결되는 것이며, 코드 품질이야 말로 설계에 의한 보안을 가능케 하는 기초라고 할 수 있을 것입니다.  

작성: Clive Watts, 제품 관리 담당 이사, 임베디드 보안 솔루션 부문, IAR 시스템스 

참고문헌

  1. https://www.gov.uk/government/publications/code-of-practice-for-consumer-iot-security
  2. https://wiki.sei.cmu.edu/confluence/display/c
  3. https://cwe.mitre.org/
  4. https://www.misra.org.uk/
  5. https://www.iotsecurityfoundation.org/best-practice-guidelines-downloads/

죄송하지만, 당사 사이트에서는 Internet Explorer를 지원하지 않습니다.보다 편안한 사이트를 위해 Chrome, Edge, Firefox 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.