Zephyr v3.7.0 · Security process / Secure Coding / hardenconfig

보안 강화는 설정표에서 끝나지 않는다

위협을 정하고, 코드와 빌드에서 대응을 고른 뒤, 실제 이미지와 장치에서 결과를 확인해야 한다. Zephyr의 보안 문서는 이 과정의 지침을, hardenconfig는 그중 Kconfig 비교 결과를 제공한다. 두 종류의 근거가 말할 수 있는 범위를 분리해 읽어 보자.

본문 기준: Zephyr 3.7.0 LTS3 · 이후 유지보수 패치는 별도입니다.

범위는 Zephyr v3.7.0 문서와 같은 태그의 hardenconfig.py·hardened.csv다. 아래 도식은 개발자가 수행할 검토 흐름을 새로 그린 것이다. 특정 보드의 보호 기능이 동작한다거나 이 글의 설정만으로 제품이 안전·인증되었다는 주장은 아니다.

1. 위협, 설정, 실행, 판정은 서로 다른 근거다

예를 들어 현장 장치의 디버그 인터페이스가 공격 표면이라면, 먼저 누가 어떤 접근으로 무엇을 얻을 수 있는지 정의한다. 그다음 필요 없는 서비스를 빌드에서 빼거나 접근 조건을 정한다. 그 결과가 .config에 반영됐는지, 이미지와 장치에서도 기대한 경계가 유지되는지 확인한다. 설정표에서 FAIL이 사라지는 것은 이 사슬의 한 단계일 뿐이다.

그림 1. 하나의 위협을 네 종류의 근거로 추적

↔ 왼쪽에서 오른쪽으로 읽으며 각 단계의 질문을 구분하세요.

① 위협·자산누가 무엇을 통해 장치의 어떤 데이터·기능에 닿는가?예시: 현장에 노출된 진단 포트
② 설계·코드필요한 접근만 남기고 입력·권한·실패 경로를 검토했는가?위협 모델, 코드 리뷰, 변경 이력
③ 구성·이미지해당 보드의 최종 .config와 산출물이 설계를 반영하는가?hardenconfig는 구성 비교의 한 도구
④ 실행·유지실기에서 거부·복구·업데이트가 의도대로 작동하고 새 취약점에 대응하는가?시험 결과, 배포·수정 기록
표 1. 근거가 대답할 수 있는 질문
근거확인할 질문그 자체로 입증하지 못하는 것
위협 모델·보안 설계어떤 자산과 공격 경계를 보호하려는가?구현과 실기 동작의 정확성
리뷰·결함 관리변경의 보안 영향을 검토하고 추적했는가?모든 취약점의 부재
.config·hardenconfig빌드가 선택한 Kconfig 값은 무엇이며 권장값과 어떻게 다른가?보드별 하드웨어 보호의 실제 효력
이미지·장치 시험정해진 위협 시나리오에서 어떤 동작이 관측되는가?시험하지 않은 모든 환경의 안전성

근거: 3.7.0 Security Overview의 개발·설계·인증 근거 구분과 Hardening Tool의 구성 비교 범위.

2. 보안 프로세스 문서는 구현 약속과 동일하지 않다

3.7.0 Security Overview는 Secure Development, Secure Design, Security Certification을 보안 프로세스의 단계로 나눈다. 마지막 단계의 평가 대상·자산·보호 근거는 정의하고 뒷받침해야 할 과제로 설명된다. 따라서 문서에 ‘shall’이 쓰였다고 특정 제품의 인증이 끝났다고 읽으면 안 된다. Secure Coding도 Zephyr 프로젝트에 기여되는 코드가 따를 설계·리뷰·이슈 관리 원칙을 기술한다. 제품 팀에는 이를 자기 자산·보드·업데이트 경로로 옮기는 작업이 남는다.

표 2. 프로젝트 지침을 제품 증거로 바꾸기
문서의 축3.7.0 문서가 강조하는 일제품 팀의 별도 산출물 예시
Secure Development아키텍처·코딩 원칙·품질 절차변경 리뷰, 정적 분석 결과, 재현 가능한 빌드 기록
Secure Design자산·위협·대응책, 코드 검토와 문제 보고장치별 위협 모델, 경계·입력·복구 설계
Security Certification평가 대상과 보호 주장에 맞는 증거 정의적용 표준·평가 범위에 맞춘 별도 평가 자료

Secure Coding의 최소 권한, 안전한 기본값, 완전한 매개, 공격 표면 축소는 설정 하나에 대응하는 체크박스가 아니라 설계 질문이다. 예컨대 사용하지 않는 관리 인터페이스를 끄는 것은 공격 표면 축소지만, 필요한 인터페이스를 남긴다면 호출 권한과 입력 검증도 다시 봐야 한다. 코드 리뷰와 이슈 추적은 이런 결정을 변경 이력에 묶는다.

표 3. 원칙을 적용할 때 묻는 질문
원칙장치 설계 질문남길 근거
최소 권한이 스레드·서비스가 모든 객체·명령에 접근해야 하나?호출 경계와 권한 검토
안전한 기본값명시적 허가가 없을 때 접근을 거부하는가?기본 구성과 거부 시험
공격 표면 축소현재 제품에 필요 없는 프로토콜·디버그 기능은 무엇인가?최종 빌드의 활성 기능 목록
방어 심층화한 계층이 실패해도 다른 제한이 남는가?경계별 실패 시험과 위협 모델

근거: Security Overview, Secure Coding.

3. 3.7.0 hardenconfig는 보이는 불일치 목록을 출력한다

공식 3.7.0 문서의 사용 순서는 애플리케이션을 빌드한 뒤 west build -t hardenconfig를 실행하는 것이다. 같은 태그의 hardenconfig.py는 현재 Kconfig를 불러오고 scripts/kconfig/hardened.csv의 권장값과 비교한다. 소스의 출력 루프는 FAIL이면서 그 심볼의 visibility가 0이 아닌 행만 출력한다. PASS, 존재하지 않는 심볼의 NA, 현재 선택할 수 없는 심볼은 표에 나타나지 않는다. 이 도구는 설정 파일을 고치거나 실행 경로를 시험하지 않는다.

그림 2. v3.7.0 도구가 실제로 비교하고 출력하는 범위

↔ 두 입력이 비교 결과로 모이고, 출력 조건에서 다시 좁혀집니다.

입력 A · 현재 Kconfigkconf.load_config()대상 빌드가 계산한 심볼의 현재 문자열 값과 visibility를 읽는다.
입력 B · 태그된 CSVscripts/kconfig/hardened.csv심볼 이름과 Security Working Group 권장값을 순서대로 읽는다.
비교·출력FAIL && visibility != 0값이 다르고 현재 보이는 심볼만 현재값·권장값과 함께 출력한다.
출력에 없다는 것은 PASS일 수도, NA·비가시 심볼일 수도 있다. 위협 모델·실기 시험·보안 인증이 필요 없다는 뜻도 아니다.
# 3.7.0 공식 문서의 예시 빌드 뒤에 실행
west build -b reel_board samples/hello_world
west build -t hardenconfig
이 명령은 3.7.0 문서에 실린 사용 예시다. 지금의 제품 보드·앱에 그대로 적용 가능한 빌드 명령이라는 뜻은 아니다. 실제 검토에서는 제품의 빌드 디렉터리와 최종 .config를 고정하고 같은 타깃을 실행해야 한다.
표 4. 출력이 없는 경우를 PASS로 단정하지 않기
내부 결과·조건3.7.0 출력읽는 법
현재값 ≠ 권장값, visibility ≠ 0FAIL 행 출력해당 보드에서 변경 가능성과 영향 검토
현재값 = 권장값출력 안 함CSV 항목의 값이 같다는 뜻에 한정
심볼 부재 또는 visibility = 0출력 안 함미지원·의존 조건 등 맥락을 별도 확인

근거: 공식 사용법, 태그된 도구 구현, 태그된 권장값 CSV.

4. CSV의 권장값은 위협과 사용 목적에 맞춰 결정한다

3.7.0 CSV에는 노출 축소와 실행 보호에 관한 항목이 함께 있다. 다음 표는 그중 실제 파일에 있는 값을 골라 검토 질문으로 옮긴 것이다. 단순히 모든 권장값을 복사하면 제품의 진단·복구 기능이나 보드 지원 조건을 놓칠 수 있다. 필요 기능을 유지해야 한다면 잔여 위험과 보완책을 기록한다.

표 5. 권장값을 제품 결정으로 번역하기
CSV의 항목·값검토할 위험현장에서 확인할 조건
CONFIG_SHELL=n대화형 명령 표면생산 이미지에 Shell이 필요한가? 남긴다면 접근 경로·명령 권한은?
CONFIG_PRINTK=n불필요한 진단 출력오류 복구와 민감 정보 노출 사이의 제품 정책은?
CONFIG_BOOT_BANNER=n부팅할 때 구현 정보 노출진단에 필요한 식별 정보는 다른 안전한 경로로 얻는가?
CONFIG_HW_STACK_PROTECTION=y스택 오버런 대응이 보드·아키텍처에서 선택 가능하고 실제 보호가 작동하는가?
CONFIG_STACK_SENTINEL=y스택 손상 감지감지 지점·예외 처리·타이밍을 실기에서 확인했는가?
CONFIG_EXECUTE_XOR_WRITE=y실행·쓰기 권한의 동시 부여플랫폼 메모리 보호 기능과 실제 영역 속성을 확인했는가?

도구에 표시된 FAIL을 바꾸기로 했다면 설정 조각을 수정한 뒤 제품 빌드를 다시 만들고 .config와 산출물을 재확인한다. 반대로 의도적으로 권장값과 다른 구성이 필요하면 해당 위협, 기능상의 이유, 대체 통제, 확인 시험을 남겨야 한다. hardenconfig 결과의 공백이나 개수만으로 이 결정을 자동화할 수 없다.

근거: v3.7.0 hardened.csv. 표의 ‘검토할 위험’과 ‘현장 조건’은 CSV 값을 바탕으로 한 편집상 해석이며 보드별 지원·효력을 검증한 결과가 아니다.

5. 설정 뒤에는 관측 가능한 제품 증거를 붙인다

같은 Kconfig 값이어도 보드 기능과 주변 부팅·통신 설계가 다르면 결과가 달라진다. 그래서 위협 모델에서 출발한 선택을 최종 이미지와 장치 시험에 연결해야 한다. 예컨대 Shell을 끈 빌드라면 .config의 값뿐 아니라 배포 이미지에서 어떤 관리 경로가 남는지 확인한다. 스택 보호를 고른 빌드라면 지원 아키텍처와 실기 실패 동작도 살핀다.

그림 3. ‘설정했다’에서 ‘이 위협을 시험했다’까지

↔ 앞 단계의 증거를 다음 단계의 입력으로 넘기는 흐름입니다.

① 구성 고정Zephyr 태그, 보드, 앱, 오버레이, 최종 .config재현할 수 있는 빌드 조건
② 이미지 확인실제 배포 바이너리와 남은 인터페이스·권한을 확인소스 선언과 산출물의 차이 탐지
③ 실패·거부 시험허용하지 않은 접근과 오류·복구 경로를 실기에서 관측위협에 대응하는 음성 시험
④ 유지·수정취약점 보고, 영향 분석, 업데이트·재검증 기록출시 시점 이후의 증거
표 6. 주장을 검증 가능한 문장으로 낮추기
주장하려는 내용필요한 확인 예시주의할 한계
생산 이미지에 진단 Shell이 없다최종 .config, 빌드 산출물, 실제 입력 경로 점검다른 원격 관리·디버그 경로는 별도
스택 오류가 격리·탐지된다보드 지원 확인, 해당 보호의 활성값, 통제된 오류 시험모든 메모리 오류를 탐지한다는 뜻 아님
권한 없는 요청은 거부된다경계별 음성 시험과 오류·로그 관측입력 검증·인증·키 관리도 별도
출시 후 취약점에 대응한다영향 추적, 수정·업데이트·재시험 기록출시 당시의 한 번의 결과로 대체 불가
이 그림은 제품 보안 검토를 위한 자체 체크 흐름이다. Zephyr 프로젝트 문서의 절차와 도구를 연결해 설명하지만 특정 시험의 합격 기준, 인증 범위, 하드웨어 안전성은 제품마다 따로 정해야 한다.

6. 결과가 예상과 다르면 비교 지점을 먼저 좁힌다

FAIL 행이 보인다고 곧바로 취약점이 확정되는 것은 아니다. 반대로 출력이 비었다고 보안 검토가 끝난 것도 아니다. 다음 질문을 순서대로 확인하면 ‘권장값 차이’, ‘구성 의존 조건’, ‘실제 실행 경계’를 혼동하지 않는다.

표 7. 관측에서 다음 확인으로
관측먼저 확인다음 조치
예상한 심볼의 FAIL이 없다같은 빌드 디렉터리인가, 심볼이 존재하고 보이는가?최종 .config와 의존 조건을 직접 확인
FAIL이 있으나 값 변경이 불가보드·아키텍처 의존 조건과 기능 필요성대체 통제 또는 남는 위험 기록
FAIL이 0개다CSV가 다루지 않는 노출·권한·업데이트 경로위협 모델과 실기 시험 계속 수행
설정은 맞는데 실기에서 실패정확한 이미지·보드·부팅 단계·관측 지점지원 기능과 런타임 오류 경로 재검토

도구 출력 조건은 v3.7.0 구현에서 확인했다. 진단 절차는 그 범위를 바탕으로 만든 제품 검토 예시다.

7. User Mode와 TF-M은 다른 경계를 구현한다

보안 강화 작업은 권한 격리나 보안 실행 환경과 연결되지만, hardenconfig가 그 둘을 설정·검증하는 단일 스위치는 아니다. User Mode는 Zephyr 내부의 사용자 스레드, 시스템 호출, 커널 객체·메모리 접근을 다룬다. TF-M은 지원 플랫폼에서 보안·비보안 이미지와 PSA 서비스를 나누는 통합이다. 이 글은 어느 쪽의 세부 API를 재설명하기보다 두 기능을 포함한 제품의 보안 주장에 어떤 추가 증거가 필요한지 묻는다.

표 8. 서로 다른 보안 질문
주제핵심 질문별도로 확인할 것
이 글의 보안 강화위협과 개발·구성·시험 근거가 이어지는가?제품별 범위·시험·유지 절차
Zephyr User Mode사용자 스레드가 어떤 메모리·커널 객체에 접근하나?지원 아키텍처, 객체 권한, 메모리 도메인, 거부 경로
TF-M 통합보안·비보안 실행 환경과 PSA 서비스 경계는 어디인가?보드 포트, 이미지·키·프로비저닝, 실제 서비스 동작

한 기능을 켠 뒤 보드에서 해당 경계를 검증했다고 해서 제품 전체의 보안 주장이 세워지는 것은 아니다. 따라서 User Mode나 TF-M을 사용하더라도 디버그 노출, 업데이트, 키 운영, 외부 입력의 위협은 남아 있다.

8. 고정 버전 근거와 확인하지 않은 것

본문의 명령과 출력 조건은 Zephyr v3.7.0 문서·태그 소스에 맞췄다. 특히 이 버전의 권장값 원본은 hardened.csv이며, 다른 릴리스의 데이터 형식·프로파일 설명을 섞지 않았다. 세 그림과 판단표는 원문 이미지를 복제하지 않은 자체 도식이다. 제품 보드 빌드, 하드웨어 보호 시험, 침투 시험, 인증 평가는 이 글의 검증 범위에 포함되지 않는다.