220420_유명조달기업
[기고] 보안 설계의 완성도를 결정하는 코드 품질
상태바
[기고] 보안 설계의 완성도를 결정하는 코드 품질
  • CCTV뉴스 편집부 기자
  • 승인 2022.08.05 17:24
  • 댓글 0
이 기사를 공유합니다

최상의 보안을 위한 실무

[글=클리브 와츠(Clive Watts) | IAR 시스템즈 임베디드 보안 솔루션 부문 제품 관리 담당 이사]

보안의 모든 것은 코드의 품질과 연결되어 있다. 이것은 아무리 강조해도 지나침이 없고 진리와 같다고 할 수 있다. 그렇다면 소프트웨어 코더, 그리고 개발자가 제품의 보안을 확보하기 위해 실무에서 사용할 수 있는 방법에는 무엇이 있을까?

이와 관련해 영국 디지털 문화 미디어 스포츠부(DCMS)에서 제정한 소비자용 IoT 보안을 위한 실무 지침(Code of Practice for Consumer IoT Security)의 내용을 하나씩 짚어 보겠다. 전체 13개의 항목으로 구성된 본 지침은 이후 전 세계 여러 나라에서 비슷한 지침을 제정하는 데 기준이 되기도 했다.

여기서는 지적 재산권을 보호하고, 악성코드의 유입을 방지하기 위한 여러 핵심 보안 개념의 기초를 제공함으로써, 전체 라이프사이클에서 이러한 실무 지침을 통해 얻을 수 있는 것은 무엇인지를 살펴보겠다.

 

IoT 디바이스의 보안을 위한 실무 지침

IoT 디바이스의 보안을 위한 실무 지침에서 지향하는 바는 IoT(사물인터넷) 제품의 개발, 생산, 유지보수 단계로 구분되는 전체 라이프사이클에 걸친 보안성 확보 방법에 관한 지침을 제공하는 것이다. 실무 지침에서는 IoT 분야에서 모범 사례로 널리 알려진 여러 기법들을 나열했다.

본 실무 지침 및 안내에서는 보안 기기 부팅, 암호화 기기의 아이덴티티, Root of Trust, 운영체제, 로그인 정보 관리 및 암호화를 위한 소프트웨어, 소프트웨어 업데이트 정책의 보안성 확보 등 관련 요소 일체를 종합적으로 다루고 있다.

보안 법규의 목적은 단순히 무적으로 적용되어야 하는 절차적 규정을 정의하는 것뿐 아니라, 사용자가 자발적으로 적용할 수 있도록 하는 데 있다. 다양한 기관과 정부에서 이러한 지침을 작성하기 위해 많은 노력을 기울이고 있다.

이러한 규칙을 따르게 되면 최종 사용자에게 도움을 줄 뿐 아니라 IoT 제품을 개발하는 기업의 부담도 줄일 수가 있다. 소비자와 IoT 개발 기업은 보안 규정을 항상 준수함으로써 악성코드 억제, 보안 아이덴티티, IP 보호, 생산 관리 및 표준 준수 관리 등의 이득이 본다.

 

13대 지침의 주요 내용

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

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

 

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

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

 

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

조직 내에서 IoT 기기의 사용량이 증가함에 따라, 기기의 업데이트 상태를 유지하는 데에는 어려움이 따를 수 있다. IoT 소프트웨어 개발 초기부터 업데이트 전략을 수립하는 것이 용이하며, 출시 후 업데이트는 적시에 이루어져야 한다. 당연히 기기의 기능에 간섭을 일으켜서는 안 된다.

업데이트 정책에서는 롤백 방지 장치를 두어, 구 버전이 해커의 공격 수단이 되지 않도록 관리해야 한다. 소프트웨어 업데이트 지침에서는 제품의 업데이트 종결 정책을 포함하여, 업데이트가 지정된 기간 동안 제품을 대상으로 공급 및 전송되도록 해야 한다.

 

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

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

 

5. 통신 시 보안 준수

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

 

6. 공격 노출 면적 최소화

본 조항의 목적은 공격이 가능한 노출 표면적을 최소화하는 것이다. 이는 모든 기기 및 서비스를 운영할 시 '최소 특권의 원칙'에 따라야 한다는 것을 의미한다. 이것은 가장 중요한 원칙 중의 하나로, 코드의 품질에 관련된다. 해커들이 IoT 기기의 취약성을 활용하기 위해 소프트웨어 상의 결함이나 코드의 취약성을 이용하기 때문이다.

좋은 코드 품질은 좋은 소프트웨어 설계가 바탕이 된다. 여기에 적용되는 표준에는 여러 가지가 있는데, 그 중 하나가 바로 CERT C 코딩 표준으로 카네기 멜론 대 소프트웨어 공학 연구소에서 개발한 것이다. 이 표준에서는 C 프로그래밍 언어를 사용할 시 준수해야 하는 보안 코딩 규칙이 제시되고 있다.

이러한 규칙 및 권고 사항의 목적은 안전하고 신뢰할 수 있으며, 보안성을 갖추고 있는 시스템을 개발하는 것이다. 예를 들어, 정의되지 않은 프로그램 동작과 공격받을 수 있는 취약성을 제거할 수 있다.

통상적으로 발생하는 보안상 허점은 이미 대부분 알려져 있지만, 개발 과정에서는 자꾸만 같은 오류가 반복해서 발생하게 된다. 한 가지 좋은 소식은 이와 같은 나쁜 코딩 습관에 대처하기 위해 CWE(Common Weakness Enumeration)와 같은 코딩 표준이 개발되었다는 것이다.

CWE 표준은 mitre.org에서 확인할 수 있는데, 데이터 주입, NULL 포인터 공격, 그리고 문자열 파싱 오류와 같은 추가적인 문제 영역을 다룬다. MISRA C 및 MISRA C++ 역시 안전하고 신뢰할 수 있는 코딩 방식을 장려하고 있으며, 이를 통해 코드 내에 보안 취약성 발생을 방지해 준다. 우수한 정적 분석 툴에는 CWE, MISRA, CERT C 표준을 기준으로 하는 점검 기능이 탑재되어 있어, 일일 단위로 코드 품질을 관리하는 것이 가능하다.

 

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

 

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 애플리케이션을 오용 행위로부터 보호하는 것이 가능하다.

 

 

보안 법규

여러 국가에서 각기 나름의 보안 법규를 정립하기 위해 노력하고 있다. 유럽연합(EU)의 경우 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 애플리케이션의 보안을 확립하고, 관련 표준 및 지침을 준수하는 데에 요구되는 보안 환경을 기술해 보안에 필요한 ‘Security Contexts’을 미리 정의해 놓는 것이다.

이를 통해 개발자는 필요한 보안을 빠르게 구현하고, 복수의 프로젝트에 걸쳐 반복성을 확립하며, 개발을 좀 더 수월하게 진행할 수 있다. 보안 맥락은 다양한 범위의 IoT 애플리케이션에 맞도록 커스터마이징이 가능하다.

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

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

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

 

 

모든 것의 시작과 끝은 코드 품질

구상 단계에서부터 제품 개발자들은 코드 품질을 확보하기 위해 적절한 도구를 활용할 수 있어야 한다. 이것은 보안 프로필 파일(Security Contexts)에서 추출한 보안 및 암호화 설정을 적용해 코드 취약점을 방지하고, 보안성을 확보한 암호화된 코드를 제공하기 위해서도 필요하다. 보안 부트 관리자는 기기의 보안 기능을 활용할 것이며, Root of Trust를 보안 키(Key) 및 서비스와 함께 설정하여 모든 정책을 빠짐없이 집행할 것이다.

전체적인 목적은 설계를 통한 제품의 보안성을 확립하고, 디지털 세상에서 사람들이 손쉽게 보안을 확보할 수 있도록 하는 데 있다. 앞에서 이미 설명한 바와 같이 결국 모든 것의 시작과 끝은 코드 품질로 귀결되는 것이며, 코드 품질이야말로 설계에 의한 보안을 가능케 하는 기초라고 할 수 있다.


댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글 0
0 / 400
댓글쓰기
계정을 선택하시면 로그인·계정인증을 통해
댓글을 남기실 수 있습니다.