
의료 기기는 standalone 시스템에서 지속적인 갱신과 원격 진단이 가능한 연결형 플랫폼으로 전환되고 있습니다. 이에 따라 하드웨어 사양이 제한적이고 생명주기가 길며 규제가 엄격한 환경 전반에 걸쳐 안전 및 사이버 보안 기준이 더욱 높아지고 있습니다. 본 기사에서는 산업 간 모범 사례와 Vector의 안전 핵심 embedded software 관련 경험을 바탕으로, 엔지니어들이 지금 당장 적용할 수 있는 방안에 초점을 맞춥니다.
주요 문제점
- 빈번한 갱신이 수반되는 긴 생명주기: 규정 준수 증빙 자료를 보존하면서 10년 이상 동안 안전하고 보안이 보장된 갱신을 유지합니다.
- 이종 플랫폼 및 SOUP: 혼합된 툴체인 및 외부 업체 코드로 인해 일관된 안전/보안 통제가 복잡해집니다.
- 연결성 및 상호운용성: 새로운 공격 표면과 인증의 복잡성(예: 병원 IT 및 IEC 62443).
- 기술 역량 및 도구: 암호학, 보안 갱신 파이프라인, 이중화 아키텍처의 높은 복잡성; 도구는 ‘기본적으로 올바른(correct-by-default)’ 구현을 더 쉽게 만들어야 합니다.
의료기술 표준
- IEC 62304: 소프트웨어 생명주기, 분류, 검증, 유지보수 및 문제 해결.
- ISO 14971: 명확한 위험 요소 식별, 위험 관리 및 잔류 위험을 포함한 위험 관리.
- 지원 체계: IEC 60601-1(기본 안전/필수 성능), IEC 62443(IACS 보안)을 참조하는 IEC/TR 60601-4-5, SBOM 및 조정된 공개에 대한 지침.
안전하고 보안이 확보된 환경을 구축하기 위한 실용적인 방법
락스텝핑
락-스텝핑에서는 두 개의 동일한 CPU 코어가 동일한 명령어를 동기화하여 실행합니다. 하드웨어 비교기는 두 코어의 레지스터 및 결과를 지속적으로 확인합니다. 불일치가 감지되는 즉시 오류가 보고되며, 시스템은 안전한 상태로 전환될 수 있습니다. 이는 다음과 같은 방식으로 안전성에 기여합니다:
- 오류 감지: 불일치를 감지하기 위한 2oo2(two-out-of-two) 아키텍처.
- 더 짧은 오류 대응 시간: 지속적인 비교를 통해 신속한 무증상 오류 처리(fail-silent) 또는 대체 행동(fallback)이 가능합니다.
- 안전성 입증 지원: ECC 보호 메모리, 워치독, 클럭/전원 모니터링 및 종단 간 보호 기능과 결합되어 컴퓨터 코어, 메모리 및 통신 전반에 걸쳐 폐쇄형 오류 감지 체인을 구축합니다.
신뢰할 수 있는 실행 환경
시스템을 “보안/신뢰 영역(Secure/Trusted World)”과 “일반 영역(Normal World)”으로 하드웨어적으로 분할하는 방식입니다. 보안 영역은 메모리, 주변 장치 및 암호화 자료에 대한 접근이 격리되어 있으며, 일반 영역은 보안 영역과 엄격하게 분리되어 있습니다.
- 보안 관련 요소의 보호: 보안 요구사항, 캘리브레이션 값, 구성 정보, 안전 상태 기계 및 오류 카운터는 보안 영역에 상주할 수 있으며, 의도하지 않은 변경이나 조작으로부터 보호됩니다.
- 간섭 방지: 하드웨어 격리(보안 영역 대 일반 영역)는 분할(MPU/MMU)을 보완하여, 결함이 있거나 보안이 보장되지 않는 소프트웨어가 안전 관련 영역에 영향을 미칠 위험을 줄여줍니다.
- 키 및 통신 보호: 구성, 로그, 안전에 중요한 메세지에 대한 안전한 키 관리 및 서명/CMAC을 통해 데이터 손상 및 무단 변경을 더 효과적으로 탐지할 수 있습니다.
안전한 갱신
보안 갱신이란 전체 생명주기 동안 변조로부터 보호되며, 승인된 출처에서만 제공되고, 보안이나 기능을 저해하지 않고 적용할 수 있는 소프트웨어 갱신을 말합니다. 주요 구성 요소는 다음과 같습니다.
- 진위성: 갱신에는 디지털 서명(코드 서명)이 적용되며, 신뢰할 수 있는 출처에서 제공된 패키지만 허용됩니다.
- 무결성: 해시 검사를 통해 내용이 변경되지 않았음을 보장합니다.
- 권한 및 접근: 역할/권한 관리를 통해 승인된 서비스/사용자만이 갱신을 시작할 수 있도록 보장합니다.
- 기밀성 및 안전한 전송: secure channel(예: TLS/mTLS)을 통한 내려받기, 중간자 공격에 대한 보호.
보안 통신
외부 또는 내부로부터의 악의적이거나 우발적인 공격으로부터 보호: 기밀성, 무결성, 인증, 재전송 방지.
- 하드웨어 지원을 통한 강력한 암호화 서비스.
- 전송되는 메세지에는 인증 정보(예: MAC) 및 유효성 값이 추가됩니다.
- TLS와 같은 암호화 프로토콜을 사용합니다.
안전한 통신
제어 장치 내부 및 제어 장치 간에 안전한 통신을 보장합니다. 외부 통신의 경우 다음을 통해 이를 실현합니다:
- 데이터에 대한 CRC, 데이터 ID 및 시퀀스 카운터. 이를 통해 시그널의 손상 및 위조를 감지할 수 있습니다.
- 시퀀스 카운터를 통해 메세지 순서 오류 및 메세지 중복/삽입을 감지합니다.
- 수신부 측면의 타이머를 통해 메시지 손실 및 지연에 대응합니다.
시프트-레프트 평가
'시프트-레프트 테스트'란 테스트 및 품질 보증 활동을 소프트웨어 생명주기의 가능한 한 초기 단계, 즉 마지막 단계뿐만 아니라 요구사항, 아키텍처, 구현 단계에 더 가깝게 배치하는 것을 의미합니다. 그 목적은 다음과 같은 관행을 통해 신속한 피드백을 제공하고 오류를 조기에 탐지하는 데 있습니다:
- 요구사항 및 아키텍처에 대한 조기 검토.
- 개발자 워크플로우에 직접 통합된 정적 분석 및 코드 구현 지침.
- 자동화된 빌드, 평가 및 품질 게이트를 갖춘 지속적 통합(CI).
- 조기 API 및 통합 평가.
다양한 산업 분야에서 얻은 교훈
Vector는 수년 동안 안전이 핵심인 embedded software를 개발해 왔으며, 전 세계 고객에게 안전 인증을 받은 솔루션을 제공해 왔습니다. 여기에는 제품 자체뿐만 아니라, 당사가 내부적으로 일관되게 적용해 온 견고하고 체계적으로 문서화된 개발 및 인증 프로세스도 포함됩니다. 요컨대, 저희는 안전 애플리케이션 개발이 얼마나 복잡하고 힘든 작업이면서도 동시에 없어서는 안 될 필수적인 일인지 정확히 잘 알고 있습니다.
안전 업무가 종종 힘든 이유, 그리고 그것이 옵션이 아닌 이유:
- 위험 및 리스크 분석
- 기능 안전 개념
- 기술적 안전 개념
- 하드웨어-소프트웨어 인터페이스의 정의
- 정성적 및 정량적 안전 분석
- 검증 및 확인
- 대상 시장에 맞춘 개발 프로세스 및 워크플로우
이러한 모든 활동은 필수적이지만, 종종 지루하고 세세하며 힘든 작업입니다. 아무도 “재미로” 이런 일을 하지는 않습니다. 하지만 이를 과소평가하면 나중에 아키텍처, 구현, 인증 과정에서 막대한 비용이 드는 반복 작업을 겪을 위험이 있습니다. 바로 이 부분에서 당사의 도구와 제품이 도움말을 제공합니다. 이 도구와 제품은 복잡성을 줄이고, 단계를 표준화하며, 어려운 부분도 관리하기 쉽게 만들어 줍니다.
실제 사례: 오늘날 multi-core 임베디드 시스템의 안전성은 표준으로 자리 잡았으며, 특히 다음과 같은 점에서 큰 과제를 안고 있습니다.
- 코어들은 일관되게 — 즉, 결정론적이고 재현 가능하며, 부작용 없이 — 작동해야 합니다.
- 메모리 액세스는 잘못된 리소스를 대상으로 해서는 안 됩니다. 무효한 포인터도, 파티션 간 간섭도 허용되지 않습니다.
- 코어 간 통신은 효율적이면서도 통제되고 안전 기준을 준수해야 합니다. 적절한 basic software가 없다면, 이는 아키텍처, 구성, 테스트 및 검증 과정에서 엄청난 수준의 체계성을 요구합니다.
basic software가 안전 관련 소프트웨어 개발을 어떻게 눈에 띄게 수월하게 만드는지:
- 혼합 시스템에서 간섭을 방지하여, 동일한 제어 장치에서 기능 안전과 관련된 및 비안전 관련 소프트웨어 컴포넌트가 간섭 없이 실행될 수 있도록 지원합니다
- 이를 통해 위험을 줄이며, 간섭 없음에 대한 입증을 간소화하며, 아키텍처 설계 및 평가 시간을 절약할 수 있습니다.
- 안전 및 보안 통신과 같은 추가적인 안전 요구사항을 다른 basic software module에 mapping할 수 있습니다
- 이를 통해 일관성을 확보하고 오류 위험을 최소화합니다.
- multi-core 마이크로컨트롤러 지원
- 이를 통해 여러 코어에 걸쳐 작업, 리소스 및 메모리 영역을 명확하게 분리할 수 있습니다.
- 서로 다른 메모리 파티션과 마이크로컨트롤러 코어 간의 상호 작용을 위한 효율적인 솔루션
- 이를 통해 처음부터 무효한 액세스를 방지하고 안전성을 저해하지 않으면서 성능을 보장할 수 있습니다.
- 인정된 표준 및 프로세스에 따라 개발 및 인증됨
- 이를 통해 인증 및 감사 작업에 소요되는 시간을 단축하고 증거 체인을 강화할 수 있습니다.
그 효과는 다음과 같습니다. 모든 구성 요소를 직접 구축하고, 문서화하고, 유지 관리하는 대신, 간섭 방지, 분할, 안전한 통신, multi-core 조정 기능을 구조적으로 이미 포함하고 있는 기반을 통합하게 됩니다. 따라서 안전 엔지니어링에 소요되는 시간을 일반적인 인프라 관리에서 벗어나, 프로젝트 고유의 위험 요소에 집중할 수 있게 됩니다.
multi-core 예시에서 이것이 구체적으로 무엇을 의미하나요?
- 일관된 실행: basic software는 안전 관련 부분과 비안전 관련 부분이 서로 영향을 미치지 않도록 코어별로 작업과 리소스를 조정합니다.
- 메모리 및 리소스 보호: 명확한 분할, 정의된 HSI(하드웨어-소프트웨어 인터페이스), 검증된 액세스 경로를 통해 잘못된 메모리 액세스를 방지합니다.
- 증거 문서: 확립된 모듈과 프로세스를 통해 검증, 확인 및 안전 사례 논증에 드는 노력을 줄일 수 있습니다. 많은 요구사항이 이미 기반 구조에 포함되어 있어 재사용 가능한 방식으로 입증할 수 있기 때문입니다.
- 현재의 안전 활동(위험 분석부터 안전 타당성 검토까지)을 분석하여 중복된 부분과 수작업 단계가 있는지 확인하십시오.
- 초기 단계부터 간섭 방지 및 구획화를 보장하는 아키텍처 및 프로세스 지침을 정의하십시오.
- 특히 구성 요소 분리 및 안전한 통신을 위해 제어 장치에서 당사의 basic software를 활용한 설치 초기 설정을 시범 운영하십시오.
- 개발 시간, 평가 노력, 증거의 신뢰도에 미치는 영향을 측정하고, 이 접근 방식을 다른 프로젝트로 확대 적용하십시오.
초기 단계에서 체계적으로 구조를 설계하면 나중에 두 배의 이점을 얻을 수 있습니다: 재작업 감소, 더 명확한 근거, 더 빠른 출시. 지금 바로 집중적인 시범 운영을 시작하여 안전 개발의 효율성을 한 단계 높여보세요.

