코드 서명 모범 사례는 무엇입니까?
코드 서명은 소프트웨어 개발자 또는 게시자의 ID를 확인하고 코드가 서명된 시점부터 다운로드된 시점까지 코드의 무결성이 유지되는지 확인합니다. 이는 코드를 신뢰할 수 있음을 증명합니다. 불행히도 악의적인 행위자는 코드 서명 관행에 침투하여 신뢰할 수 있는 코드에 맬웨어를 심으려고 끊임없이 시도합니다.
이러한 공격에 따른 위험을 줄이는 데 도움이 되는 몇 가지 모범 사례는 다음과 같습니다.
- 보안 키 저장소: 조직에서 서명 개인 키가 손상되거나 도용된 경우, 맬웨어가 심어진 소프트웨어를 승인하는 데 사용될 수 있으며, 이에 따라 해당 소프트웨어가 해당 조직에서 비롯된 합법적인 소프트웨어로 등록되는 상황이 발생할 수 있습니다. 개인 키는 저장 중에 암호화하거나 HSM(하드웨어 보안 모듈)에 안전하게 보호해야 합니다. CA/B(CA/Browser) Forum의 요건에 따라 공개 신뢰 사용을 위한 키는 HSM에 저장되어야 합니다.
- 키 및 서명 액세스 제어 적용: 정책을 설정하고 키 액세스 제어를 적용하여 필요한 경우 권한이 부여된 개발자와 사용자만 특정 키로 서명할 수 있도록 합니다. 클라우드에서 키를 생성하여 공유, 분실 또는 도난을 방지할 수 있습니다. 의무 분리를 시행합니다. 즉, 키를 생성하는 사람과 서명하는 사람의 책임을 분리합니다. MFA(다중 요소 인증)를 구현하여 서명에 액세스하는 사용자가 실제 본인인지 확인할 수 있습니다. 회사를 떠났거나 더 이상 서명 또는 키 생성에 액세스할 필요가 없는 직원의 액세스 권한을 해지합니다.
- 키 서명 워크플로 모니터링 및 감사: 누가, 언제, 무엇에 서명했는지 추적하여 무단 서명이 이루어진 상황에 신속하게 대응하고 적절한 수정 조치를 취할 수 있도록 합니다. 생성, 인증서 작업, 키 할당, 서명 액세스를 포함하여 키 쌍과 관련된 모든 활동을 정기적으로 감사합니다.
- 암호화 표준에 대한 전사적 정책 적용 및 최신 상태 유지: 업계 요구 사항의 변화가 조직이 위협 환경에 선제적으로 대처하는 데 도움이 될 수 있습니다. 최신 CA/Browser Forum 요건은 2021년 6월 1일부터 3072비트 RSA를 공개적으로 신뢰할 수 있는 코드 서명 및 타임스탬프 인증서의 최소 키 요구 사항으로 규정하고 있습니다. 조직 내의 개발자 및 사용자는 키 또는 서명 코드를 생성할 때 변경 사항을 인식할 수도, 알지 못할 수도 있습니다. 조직은 사용자가 취약하거나 규정을 준수하지 않는 알고리즘, 키 크기 또는 곡선으로 키를 생성하거나 인증서를 요청하지 못하도록 업계 요구 사항을 적용해야 합니다.
- SDLC 프로세스에서 자동 코드 서명 활성화: CI/CD 파이프라인과 같은 SDLC 프로세스에서 서명을 통합 및 자동화하면 서명되지 않은 코드나 규정을 준수하지 않는 서명의 위험을 줄일 수 있습니다. 자동화와 함께 보안 제어 기능을 설정하여 지속적이고 빠른 소프트웨어 개발 속도로 안전하고 규정을 준수하는 소프트웨어를 개발할 수 있습니다.
- 다른 빌드 서버의 서명 비교: 최근 소프트웨어 공급망 공격으로 인해 전 세계의 영향력이 큰 조직에서 주요 운영 및 재정상 혼란이 발생한 사례들이 있었습니다. 악성 행위자들은 표적으로 삼은 조직의 개발 작업에 침투하여 SDLC 중에 맬웨어를 코드에 심었으며, 이 변조된 코드가 후에 릴리스되어 고객 시스템에 배포되었습니다. 릴리스하기 전에 서로 다른 빌드 서버의 소프트웨어 해시에 서명하고 비교하면 서버 빌드 간에 불일치가 있는지 확인할 수 있습니다. 두 개 이상의 동일한 빌드로 구성된 쿼럼을 사용하면 빌드의 안전성을 보장하고 빌드에 알 수 없는 코드가 포함되는 상황을 방지할 수 있습니다.
- 손상된 인증서 해지: 손상된 키나 서명된 맬웨어가 발견되면 CA(인증 기관)에 해당 상황을 보고합니다. 코드 서명 인증서를 해지해야 소프트웨어가 비활성화되고 맬웨어가 더 이상 전파되지 않습니다.
- 서명된 코드의 타임스탬프: 코드 서명 인증서가 만료될 때 소프트웨어가 예기치 않게 만료되는 위험을 방지해야 합니다. 코드 서명 인증서는 1~3년간 유효합니다. 코드 서명 인증서가 만료되면 서명된 소프트웨어의 유효성도 만료됩니다(서명 당시 소프트웨어에 타임스탬프가 지정되지 않은 경우). 시스템은 타임스탬프를 기록하고, 소프트웨어는 운영 중인 동안 계속 유효합니다. 코드 타임스탬프를 지정하는 또 다른 이유는 인증서 해지의 영향을 최소화하기 위해서입니다. 맬웨어가 발견되어 관련 인증서를 해지해야 하는 경우, 타임스탬프를 적용하면 손상 날짜 이후에 릴리스된 소프트웨어만 해지되도록 하여 영향을 최소화할 수 있습니다.