[기고] 임베디드 시스템의 사이버 보안 Part #1 (1/2)
상태바
[기고] 임베디드 시스템의 사이버 보안 Part #1 (1/2)
  • 석주원 기자
  • 승인 2021.06.28 16:33
  • 댓글 0
이 기사를 공유합니다

보안을 위한 13가지 규약

[글=오재준 매니저 | IAR Systems]
jaejoon.oh@iar.com

 

IoT 보안을 위해 지켜야 할 규약(code of practice)

IoT 보안을 위한 규약의 목표는 제품 전체 라이프 사이클의 개발, 생산 그리고 유지 보수 프로세스 동안 보안을 달성하기 위한 지침을 제공하는 것이다. 이 규약은 IoT 보안에서 가장 잘 정의되어 있다고 널리 평가받는 규약을 포함한다.

이 지침과 규약은 보안 장치 부팅(secure device boot), 암호 장치 인식(cryptographic device identity), 신뢰점(Root of Trust, RoT), 운영체제(operating system, OS), 자격 관리 및 암호화(credential management and encryption)부터 보안 소프트웨어와 소프트웨어 업데이트 정책에 이르기까지 모든 것을 포함한다. 이러한 보안 규정들은 의무 준수 확인란에 체크하기 위한 용도로만 사용할 것이 아니라, 사용자가 자신을 위해 자발적으로 사용할 수 있어야 한다.

많은 단체들과 정부 당국에서는 그대로 따라주기만 한다면 최종 사용자에게 이익이 되고 IoT 제품을 개발하는 기업의 책임도 덜어줄 수 있는 지침을 마련하기 위해 시간과 노력을 쏟고 있다. 이러한 보안 규정은 멀웨어(malware) 방지, 보안 아이덴티티(secure identity), IP 보호, 생산 제어 및 표준 준수를 통해 가치 있는 이득을 제공하므로, IoT 제품을 개발하는 기업과 소비자 모두에게 윈윈(win-win)으로 작용한다.

 

13가지 가이드라인

IoT 제품의 설계와 소스 코드에서 직접적으로 다룰 수 있는 보안 관행은 다음과 같다.

 

1. 기본(default) 암호를 사용하지 말 것

당연하게 들리겠지만, 기본 암호를 제대로 갖추려면 훨씬 더 많은 것이 필요하다. 기본 암호는 장치 자체에서 파생되거나 장치에 주입되는 것이 이상적이다. 장치에 고유한 해싱을 기반으로 하는 다양화 알고리즘(diversification algorithm)을 사용하여 암호를 생성하는 것이 바람직한데, 여기서 일련번호는 충분한 엔트로피(entropy)를 갖지 못하고 SHA-256과 같은 해시 기반 알고리즘을 사용한다.

 

2. 취약점 공개 정책(vulnerability disclosure policy) 구현

요컨대, 이는 고객 연락 활동 및 취약점 커뮤니케이션 이외의 책임 있는 임원이 관여하는 기업 공개 정책과 관련이 있다.

 

3. 소프트웨어 업데이트 유지

기업에서 사용하는 IoT 기기의 수가 증가함에 따라 기기를 최신 상태로 유지하는 것이 중요해졌다. 구축 초기에 IoT 소프트웨어 업데이트 전략을 구축하는 팀은 그렇지 않은 팀보다 상황에 대한 관리 능력 면에서 유리할 수 있다. 업데이트는 시의적절하게 이루어져야 하며, 기기 기능에 영향을 미치지 않아야 한다. 업데이트 정책은 이전 버전으로 되돌아 갈 수 없는 롤백 방지 메커니즘이어야 하며, 이전 버전은 공격의 요소가 되지 않아야 한다. 또한 소프트웨어 업데이트는 특정 기간 동안만 제공되어야 한다.

 

4. 자격 증명 및 보안에 민감한 데이터의 안전한 저장

모든 자격 증명은 서비스 내부 및 장치에 안전하게 저장되어야 한다. 기기 소프트웨어에서는 암호 및 은행 계정 정보와 같은 하드코딩된 자격 증명을 사용할 수 없다. 마이크로컨트롤러(MCU)의 장치별 보안 기능 및 메모리 관리는 항상 보안에 민감한 데이터 보호를 위해 완전히 활성화되어야 한다.

 

5. 통신 보안

IoT 기기는 TLS(Trasport Layer Security) 또는 LWC(Lightweight Cryptography)를 사용하는 보안 통신을 따라야 하며 항상 최신 버전을 사용해야 한다. 즉, 전송 중에 보안에 민감한 데이터를 암호화하고 키를 안전하게 관리해야 한다.

 

6. 공격 요소 최소화

공격 요소를 최소화하기 위해 모든 장치와 서비스는 최소의 권한으로 운영되어야 한다. 이는 소프트웨어 결함이나 코드 취약점들이 해커들의 공격 요소의 시발점이기 때문에 코드 품질과 관련된 가장 중요한 원칙 중 하나이다. 코드 품질 확보는 설계단에서 시행되어야 한다. 표준들은 많지만, 특히 카네기 멜론 대학의 소프트웨어 공학 연구소가 개발하고 소유한 CERT_C 코딩 표준은 C프로그래밍 언어로 안전한 코딩 규칙을 제공한다. 이러한 규칙 및 권장 사항의 목표는 정의되지 않은 프로그램 동작과 취약성으로 이어질 수 있는 요소를 제거하고, 안전하고 신뢰할 수 있는 시스템을 개발하는 것이다.

 

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

IoT 장치의 소프트웨어는 안전한 부팅 메커니즘을 사용하여 검증되어야 한다. 무단 변경 사항이 감지되면 장치가 사용자에게 경고하고 소프트웨어가 안전한지 확인해야 한다. IoT 장치의 무결성을 보장하기 위해서는 안전한 부팅 절차가 매우 중요하다. 보통 보안 부팅은 신뢰점(Root of Trust)이라고 언급된다. 신뢰점은 많은 작업을 수행하고 무조건 신뢰할 수 있는 기능을 포함하는 컴퓨팅 엔진(computing engine)이어야 한다. 이것은 시큐어 부트 매니저(Secure Boot Manger)를 통해 구현된다. 이렇게 하면 모든 부팅 절차에서 사용자 응용 프로그램에 대한 확인을 보장할 수 있다.

 

8. 개인 데이터 보호

개인 데이터를 관리하고 보호하는 방법은 지역 표준 및 데이터 보호법에 따라 다를 수 있기 때문에 여기에서는 이에 대해 다루지 않는다. 하지만 이 가이드라인은 매우 중요하며 기업은 소비자가 언제든지 정보를 삭제할 수 있도록 투명하게 관련 내용을 제공할 필요가 있다.

 

9. 시스템 운영 중단에 따른 탄력성 확보

IoT 기기는 만약 누군가 기기의 취약한 부분을 해킹하여 동작을 멈추려고 할 때 사용자가 이를 막을 수 있도록 하는 탄력성이 설계에 포함되어야 한다. 심박조율기 같은 장치가 이에 해당한다. 따라서 제한적인 서비스를 제공하거나 사용자에게 어떠한 일이 일어났을 때, 기기는 대규모의 재접속보다는 질서정연한 방식으로 합리적인 상태로 되돌아 갈 수 있는 탄력성을 갖추어야 한다.

 

10. 시스템 원격 데이터 모니터링

원격 모니터링은 원격지에서의 측정 또는 데이터 수집의 모니터링을 위한 자동 전송 시스템이다. 원격지에서 데이터가 수집될 경우 IoT 장치 및 서비스의 사용량과 측정 데이터 모든 기록에 대해 모든 원격 측정을 통한 보안 이상 징후가 있는지 알아내야 한다.

 

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

IoT 기기는 소유권을 변경할 수 있으며 장기적으로 재사용되거나 폐기될 수 있다. 이것은 제품 설계자가 응용 프로그램에서 구현해야 하며, 개인 데이터가 쉽게 제거될 수 있도록 구성되어야 한다. 따라서 소유권 양도가 용이해야 한다.

 

12. 기기 설치 및 유지 보수가 용이하도록 지원

IoT 기기의 지원 서비스를 위한 사용자 인터페이스는 직관적이고 사용자 친화적이어야 하며 그러한 정책과 그 시행에 영향을 미치는 사용자의 적절한 피드백을 제공해야 한다. 제조사는 단순한 기본 구성이 아닌 가능한 구성 범위에서 각 장치의 보안을 테스트할 것을 권장한다. 기기 인터페이스는 사용자가 기기를 안전하지 않는 구성으로 설정할 수 있는 방법을 차단해야 한다.

 

13. 입력 데이터 확인

마지막으로 최상의 보안 방법은 입력 데이터의 유효성을 확인하는 것이다. 이 원칙은 수신된 데이터를 신뢰하지 않으며 상호 연결을 항상 확인한다. 신뢰가 구축되기 전에 네트워크에 연결된 장치를 검색, 식별 및 인증하고 신뢰할 수 있는 솔루션 및 서비스를 위해 무결성을 유지한다. 여기에는 데이터 유형, 길이, 형식, 범위, 인증 정보, 출처 및 빈도 확인 등이 포함된다. 공격자는 자동화된 도구를 사용하여 데이터의 유효성을 검사하지 않아 발생할 수 있는 한계, 산술 오류 및 메모리 불일치 오류와 같은 잠재적인 차이를 이용하기 때문이다. 이러한 취약성은 해커가 원하는 코드를 실행하고 IoT 기기의 제어권을 취하는데 이용될 수 있다. 런타임 분석 도구, 즉 개발 중에 입력 데이터를 테스트하고 검증하는데 매우 유용하고, 응용 프로그램이 현장에서 잘못된 조작으로부터 보호될 수 있다.



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