설계를 통한 최선의 보안 기법 구현

보안으로 향하는 길은 모두 코드 품질이라는 관문을 지나고 있습니다. 이것은 저의 동료, Shawn Prestridge도 먼저 말씀을 드린 적이 있습니다. 이보다 더 정확한 말은 없을 것입니다. 그렇지만 코더, 그리고 개발자인 우리들의 입장에서, 실무를 수행하며 제품의 보안성을 높일 수 있는 방법에는 어떤 것이 있을까요?

이번 기사에서는 영국 DCMS(Department for Digital, Culture, Media, and Sports)에서 제정한 Code of Practice for Consumer IoT Security(소비자 사물 인터넷 보안 실무 지침)에 대해 살펴 보겠습니다. 13 개의 모범 규준으로 이루어진 이 지침은 전 세계에 걸쳐 각종 지침 제정의 기준이 되었습니다. 여기서는 생애주기 전반에 걸쳐 개발 과정에서 이러한 지침을 따르고, 이를 통해 지적 재산권을 보호하고 악성 코드 침투를 방지하기 위한 일련의 핵심 보안 개념을 위한 기초를 제공 경우 기대할 수 있는 효과에 대해 알아 보겠으며, 이를 위해  

소비자 사물 인터넷 보안을 위한 실무 지침 

소비자 사물 인터넷 보안을 위한 실무 지침이 지향하고 있는 목적은 사물 인터넷 제품의 생애 주기 전반 (개발, 생산, 유지보수 등) 과정에서 보안 설계를 달성할 수 있도록 하는 지침을 제공하는 것입니다. 이러한 실무 지침에서는 사물 인터넷 보안을 위한 모범 규준으로 널리 인정되고 있는 실무 절차를 망라하고 있습니다. 

위 가이드라인과 실무 지침은 디바이스 보안 부팅, 암호화 기기 아이덴티티, Root of Trust, 운영 체제, 로그인정보 관리, 암호화에서 보안 소프트웨어, 그리고 소프트웨어 업데이트 정책에 이르기까지, 모든 요소에 포괄적으로 적용됩니다. 보안 법률은 의무 준법 요구 사항으로 적용하는 것 만을 목적으로 하지나는 않으며, 사용자가 자신의 취향에 따라 자발적으로 사용하는 것이 바람직합니다. 여러 기관과 정부에서는 다양한 가이드라인을 제정하기 위해 많은 노력을 기울이고 있으며, 이들을 준수할 경우 최종 사용자는 물론, 사물 인터넷 제품을 개발하는 기업 역시 배상 책임 부담을 상대적으로 줄일 수가 있을 것입니다. 보안 법률은 이와 같이 여러가지 측면에서 악성 코드를 억제하고, 신원 정보의 보안 유지, IP 보호, 제품의 제어, 그리고 각종 표준의 준수 등의 효과를 가져와 소비자와 사물 인터넷 제품을 개발하는 기업 간의 윈윈 시나리오가 될 수 있을 것입니다.  

image 1 

소비자 사물 인터넷 보안을 위한 실무 지침– 13 가이드라인[1] 

13대 가이드라인의 내용은? 

그러면 사물 인터넷 소스 코드 및 설계 과정에서 직접적으로 적용할 수 있는 보안 모범 규준에 대해 좀 더 자세히 알아 보겠습니다. 

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

너무 뻔한 이야기 같지만 현업에서 훨씬 더 신경을 써야 하는 부분이기도 합니다. 기본 패스워드는 기본적으로 기기로부터 제거하거나, 기기에 유입이 되지 않도록 하는 것이 바람직합니다. 한 가지 좋은 방법은 다변화 알고리즘을 사용하여 비밀번호를 생성하는 것입니다. 이러한 알고리즘은 기기 고유의 해슁을 기반으로 할 수 있습니다. 여기서는 순서대로의 번호 책정은 엔트로피를 충분히 지니지 못하게 되며 SHA-256 등의 해쉬 기반 알고리즘을 사용해야 합니다. 

2.    취약성 공개 정책 구현 

간단하게 말하면, 기업의 공개 정책과 연결되도록 하는 것을 말합니다. 이 경우 고객 지원 담당이 아닌 별도의 담당 임원이 취약성 관련 연락 업무를 수행하게 됩니다.  

3.    소프트웨어 업데이트 

기업 내 사물 인터넷 기기의 양이 증가함에 따라 이들 기기를 업데이트 시키는 것이 큰 문제가 되고 있습니다. 초기 전개 과정에서 사물 인터넷 소프트웨어 업데이트 전략을 개발해 두는 팀이 그렇지 않은 팀에 비해 훨씬 더 상황의 관리가 용이하게 됩니다. 업데이트는 적시에 이루어져야 하며, 기기의 기능에 지장을 초래해서는 안 됩니다. 업데이트 정책에서는 롤백 방지 조치를 적용하도록 해서 이전의 버전을 공격 경로로 활용하는 행위를 방지할 필요도 있습니다. 

소프트웨어 업데이트 실무는 수명 종료 정책도 포함하여, 업데이트는 특정한 기간에 걸쳐 제공되어 기기에 푸쉬되도록 해야 합니다. 

4.    로그인 정보 및 보안 민감 정보 저장 시 보안 철저 

이 지침에 따르면, 모든 로그인 정보는 서비스 또는 기기 상에 보안성을 확보하여 저장되어야 합니다. 기기 소프트웨어의 경우, 패스워드나 은행 계좌 정보와 같은 정보를 하드 코딩하는 행위는 절대 해서는 안 됩니다. MCU의 기기 고유 보안 기능 및 메모리 관리는 항상 완전 활성화 하여 보안 민감 데이터를 보호할 수 있도록 해야 합니다. 

5.    통신 시 보안 확보 

사물 인터넷은 Transport Layer Security (TLS) 또는 Lightweight Cryptography (LWC) 등의 보안 통신 규약을 따라야 하며, 항상 최신의 버전을 따라야 합니다. 이것은 보안 민감 데이터를 이송 과정에 암호화하여야 하며, 그 키의 관리 보안에 철저해야 합니다. 

6.    공격 노출면의 최소화 

이 지침의 목적은 노출된 공격 표적을 최소화 하는 데에 있습니다. 이것은 모든 기기 및 서비스를 ‘최소 특권의 원칙’에 따라 운영해야 함을 의미합니다.  이것은 코드 품질과 관련하여 가장 중요한 원칙 중의 하나입니다. 왜냐하면, 소프트웨어의 결함이나 코드 취약성은 해커가 사물 인터넷 기기를 해킹할 수 있는 관문이 되기 때문입니다. 

코드 품질은 설계를 통해 구현하지 않으면 안 됩니다. 이와 관련하여 여러가지 표준이 개발되어 있지만, 특히 카네기 멜론 대학 소프트웨어 엔지니어링 연구소에서 개발된CERT C 코딩 표준[2]은 C 프로그래밍 언어에서 안전하게 코딩을 할 수 있는 규칙을 제공해 줍니다. 이러한 규칙 및 권고 내용의 목표는 안전하고 신뢰할 수 있으며 보안성을 갖춘 시스템을 개발하는 것입니다. 이를 위해 정의되지 않은 반응을 제거하여 정의되지 않은 프로그램의 행동을 방지하고, 해커가 악용할 수 있는 취약성을 제거하는 등의 방법을 사용합니다. 

해커들이 흔히 사용하는 보안 상의 허점은 이미 널리 알려져 있습니다. 하지만 개발자들은 같은 실수를 반복해서 저지르고 있습니다.  한 가지 좋은 소식은 이러한 좋지 않은 코딩 습관에 대처하기 위해 mitre.org에서 개발한 CWE(Common Weakness Enumeration)[3]과 같은 코딩 표준이 개발되어 있다는 것입니다. 이러한 표준에서는 데이터 인젝션이나 널 포인터 공격, 문자열 파싱 에러 등의 다른 문제 영역도 다루고 있습니다. MISRA C[4] 및 MISRA C++ 표준 역시 코드 내에 발생하는 보안 취약성을 예방하기 위해 안전하고 신뢰할 수 있는 코딩 실무를 권장하고 있습니다. 우수한 품질의 정적 분석툴에서는 CWE, MISRA, CERT C 등의 표준 준수 여부를 점검하고, 이를 통해 코드 품질 관리를 일상화 해 줍니다. 

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

사물 인터넷 기기의 소프트웨어 무결성 확보는 보안 부팅 메커니즘을 통하여 검증해야 합니다. 만일 미 인가 변경 사항이 탐지되는 경우, 기기는 소비자에게 경고를 보내야 합니다. 또한, 소프트웨어의 검증 및 보안성 확보가 반드시 이루어질 수 있도록 하는 것도 필요합니다. 

보안 부팅 절차는 사물 인터넷 기기의 무결성을 확보하는 데에 있어 필수적입니다. 보안 부팅(secure boot)은 흔히 다른 말로 Root of Trust라고 불리기도 합니다. Root of Trust는 다양한 기능을 수행하는 연산 엔진이어야 하며, 무조건적으로 신뢰할 수 있는 일련의 기능들을 지니고 있습니다. 이러한 Root of Trust는 이어서 Secure Boot Manager를 통하여 구현됩니다. 이와 같은 방식을 통해, 모든 파워업 사이클에서 사용자 어플리케이션의 검증이 핵심적인 부분이 될 수 있도록 해 주는 것입니다.  

8.    개인 데이터의 보호 철저 

이번 기사에서는 개인 데이터를 어떻게 관리하고 보호하는지에 대해서는 다루지 않습니다. 이것은 지역마다 약간씩의 차이가 있을 수 있는 부분입니다. 지역 표준 및 데이터 보호 법령이 저마다 다르기 때문이지요. 그렇지만 이 지침은 매우 중요하며, 기업들은 소비자가 자신의 정보 제공을 언제든 철회할 수 있도록 투명하게 허용해야 합니다. 

9.  시스템 장애에 대한 회복성 확보 

회복성은 사물 인터넷 기기에 내재되어, 기기 상의 취약성으로 인해 해킹을 당하더라도 기기 사용을 꼭 중단하지 않아도 되도록 하는 것입니다. 이는 심박 조절기와 같은 기기에 있어 더욱 중요합니다. 심박 조절기를 꺼야 한다면 정말 큰일이겠지요. 그래서 기기가 회복성을 지니도록 한다는 것은 무슨 일이 있더라도 최소한의 기능은 유지하고, 사용자에게 적어도 뭔가 잘못되었다는 것을 알릴 수는 있도록 하는 것을 의미합니다. 또한 기기는 대규모의 통신 연결 재구성이 아니라, 합리적인 상태에서 적절한 방식으로 네트워크 연결을 복구할 수 있어야 합니다.  

10.  시스템 텔레메트리 데이터 모니터링 

텔레메트리는 원격으로 측정되는 각종 측정치나 기타 수집 데이터를 취합하고, 이를 수신 장비에 자동으로 전송하여 감시할 수 있도록 하는 것을 말합니다. 최선의 보안 정책은 사물 인터넷 기기 및 서비스로부터 일단 이러한 데이터를 수집한 뒤에는 사용량이나 측정치 데이터 같은 모든 텔레메트리 데이터 내에 보안 이상은 없는지 감시하는 것입니다. 

11.  소비자에 의한 개인정보 삭제 용이 

사물 인터넷 기기는 주인이 중간에 바뀔 수도 있고, 장기적으로 재사용하거나 폐기처분 해야 하는 상황이 발생합니다.  이는 제품 설계 시에 반드시 어플리케이션 내에 반영해야 하는 과정이며 개인 데이터를 손쉽게 제거할 수 있도록 설정되어야 합니다. 그렇게 해야 마음 편히 쓰던 기기를 남에게 넘길 수가 있겠지요. 친구에게 기기를 넘기고 싶을 수도 있지만, 그 전에 먼저 개인정보는 지우고 넘겨줘야 하지 않겠습니까. 

12.  기기 설치 및 유지보수의 간소화 

사물 인터넷 기기의 유저 인터페이스 및 지원 서비스는 직관적이고 사용자 친화적이라야 하며, 보안 정책, 그리고 그 실행에 영향을 미치는 사용자의 행동에 대해 적절한 피드백을 제공해야 합니다. 

제조사는 기본 설정 뿐 아니라 다양한 다른 설정 하에서 각각의 기기에 대한 보안 시험을 실시하는 것이 바람직합니다. 기기 인터페이스는 사용자가 기기의 보안을 저해할 수 있는 방향으로 기기를 설정할 수 없도록 하거나, 적어도 가급적이면 이러한 설정을 하지 않도록 해야 합니다. 

13.  입력 데이터의 유효성 검증 

마지막 보안 지침은 입력 데이터의 유효성을 검증하는 것입니다. 따라서 접수되는 입력 데이터를 맹목적으로 신뢰하지 말고, 모든 상호 연결 동작에 대해 반드시 검증을 거치도록 해야 합니다. 네트워크에 연결된 기기를 발견 및 식별한 다음, 이를 신뢰하기에 앞서 반드시 인증 절차를 거쳐야 합니다. 그리고 신뢰할 수 있는 솔루션과 서비스를 사용하여 이들의 무결성을 유지해야 합니다. 이는 데이터 타입의 점검, 길이, 포맷, 범위, 진위 여부, 출처, 빈도 등에 대한 확인을 포함합니다. 왜냐하면 데이터의 유효성을 검증하지 않을 시 해커들이 자동화 된 툴을 사용하여 아웃오브바운드, 산술적 에러, 메모리 불일치 에러 등 잠재적인 허점을 파고들기 때문입니다. 해커들은 이러한 취약성을 활용해 자신들이 원하는 대로 코드를 실행하여 사물 인터넷 기기의 제어권을 가져갈 수가 있습니다. 

코드에 대한 계측을 실시하는 런타임 분석툴은 개발 과정에서 입력 데이터를 시험 및 검증하여 현장의 악의적인 조작 시도로부터 기기를 보호하는 데에 있어 매우 유용합니다.  개발 과정 및 현장 시험 중 자동화 런타임 툴은 숨겨진 문제를 발현시키고, 이를 사용자에게 알려 줍니다. 이를 통해 소스코드를 수정하고, 사물 인터넷 어플리케이션을 오용으로부터 보호할 수 있게 되는 것입니다.  

나에게 유리한 보안 법률 

많은 국가들은 보안 법률과 관련하여 서로 협력을 진행하고 있습니다. 유럽 연합에서는 ENISA(European Union Agency for Cybersecurity)를 통해 최초 지침으로부터 기저 권고 사항을 제정한 바가 있습니다. 미국의 경우는 캘리포니아 주 사물 인터넷 보안 법률과 더불어 NIST(National Institute of Standards and Technology)에서 사이버 보안 법률 관련 업무를 관장하고 있습니다. 끝으로 아시아에서는 일본 정부가 CCDS(Connected Consumer Device Security Council)과 함께 모범 규준에 대한 업무를 진행하고 있으며, 그 외 싱가포르, 중국, 한국은 실무 그룹을 통해 표준 및 인증 프로그램 관련 업무를 진행하고 있습니다.  

이들 기관 대부분은 기본적으로 IoT Security Foundation에서 발표한 IoT Security Best Practice Guides[5]를 기준으로 삼고 있습니다. 

이 지침은 무상으로 공개되어 있으며, 사물 인터넷 제품 및 서비스 개발자로 하여금 안전성, 보안성, 신뢰성을 갖춘 성숙한 제품을 출시하는 과정에서 극복해야 하는, 다양한 보안 문제에 대처하는 데에 도움을 제공하고 있습니다. 

설계를 통한 보안 구현을 가능케 하는 보안 환경 

보안 지침과 모범 규준을 빠짐없이 준수하는 것은 결코 쉬운 일이 아닙니다. 보안 기기 부팅, 암호화 기기 아이덴티티, Root of Trust, 로그인 정보 관리, 암호화 등을 통합 및 조합해 기초 보안을 정립하고 TLS(Transport Layer Security) 및 코드 품질 확보를 통하여 소프트웨어 및 통신의 보안을 하기 위해서는 올바른 툴을 사용하는 것이 필수입니다. 

이를 구현하기 위한 해결책 중의 하나가 바로 개발 초기, 즉 구상 단계에서부터 보안 환경(security context)을 정의하는 것입니다 이것은 사물 인터넷 어플리케이션의 보안을 확보하고 각종 표준 및 지침을 준수하기 위해 필요로 하는 환경, 즉 보안 환경의 내용을 다룹니다. 보안 환경을 개발 초기부터 정의해 두면 개발자는 필요로 하는 보안의 안정성을 빠르게 확보할 수가 있으며 여러 프로젝트를 수행하는 데에 따른 개발 노력을 절약할 수가 있습니다. 보안 환경은 다양한 사물 인터넷 어플리케이션에 맞도록 맞춤화 할 필요성이 있습니다. 

보안 환경에서 정의해야 하는 내용은 다음과 같습니다:

  • 강력한 Root of Trust을 통해 기기 인증, 승인 및 입증을 실시하고 신원의 핵심 증거를 확보 
  • 암호화 기기 식별 정보 및 소유자 구조 
  • 기기 하드웨어 지원에 따른 보안 위생의 구현  
  • Secure Boot Manager의 확장을 통해 핵심 부팅 기능을 지원 
  • 소프트웨어 업데이트 및 기타 생애 주기 관리 기준 

이와 같은 보안 환경은 핵심 보안 요소의 기초를 제공하며, 지침에서 요구하고 있는, 설계를 통한 보안 구현을 가능하게 합니다. 일단 개발 툴과 보안 환경의 통합이 이루어지면, 보안 환경은 자동적으로 시행되며, 효과적으로 지침에 적용됩니다. 따라서 프로세스가 간편해지고, 자연스럽게 새로운 사물 인터넷 제품 개발 과정에 통합되는 것입니다. 

시작도 끝도 코드 품질 

구상 단계에서부터 제품 개발자는 적절한 툴을 사용하여 코드의 품질을 확보하고, 코드 취약성을 제거하며, 보안성을 확보한, 보안 설정 프로필(보안 환경)에서 추출한 보안 및 암호화 설정을 사용해 암호화된 코드를 제공할 수 있어야 합니다. Secure Boot Manager는 기기 보안 기능을 활용하고, Root of Trust와 함께 비밀 정보(keys) 및 서비스를 설정해 모든 정책을 집행하게 될 것입니다. 전체적인 목표는 설계를 통한 제품의 보안성을 확보하고, 좀 더 손쉽게 안전한 디지털 환경을 구현하는 것입니다. 앞서 다른 기사에서 말씀드린 바가 있지만, 모든 것의 시작은 코드의 품질이며 코드 품질이야 말로 설계를 통한 보안 구현의 기초를 구성하는 것이라고 하겠습니다. 

참고문헌

  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 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.