x509-certificates

1 개의 포스트

figma3분 읽기큐레이션 요약

코드 변경 시 기기

Figma는 GitHub 릴리스 브랜치에 병합되는 코드가 회사가 관리하는 신뢰할 수 있는 기기에서 변경되었음을 보장하기 위해, 커밋 서명과 Okta Device Trust 인증서를 결합했다. GitHub의 기본 커밋 서명 검증만으로는 개인 GPG 키, OAuth·PAT·SSH 키, 웹 UI/API를 통한 위조 커밋을 충분히 차단할 수 없다고 판단했다. 이에 회사 기기의 보안 상태를 반영하는 X.509 인증서로 커밋을 서명하는 자체 검증 체계를 구축했다. ## 프로덕션 코드와 릴리스 브랜치의 위험 - GitHub 릴리스 브랜치는 프로덕션에 배포되는 코드의 기준점이므로 공격자의 주요 표적이다. - 개발자 수와 배포 빈도가 증가하면서 악성 코드가 프로덕션에 유입될 수 있는 공격 표면도 커졌다. - Figma는 Pull Request에 작성자와 다른 엔지니어의 승인을 모두 요구하는 “이중 통제(dual-control)”를 적용하고 있었다. - 그러나 공격자가 세션 자격 증명, 개인 액세스 토큰(PAT), OAuth 토큰, SSH 키를 탈취하면 정상적인 계정 보안 절차를 우회해 코드를 변경할 가능성이 남아 있었다. ## GitHub 커밋 서명 검증의 한계 - GPG 커밋 서명은 커밋 작성자의 정당성을 증명하고 GitHub에 녹색 “Verified” 표시를 제공한다. - 하지만 개발자가 등록한 개인 GPG 키를 회사가 통제하거나 특정 기기에 연결하기 어렵다. - GitHub 웹 UI와 API에서 생성된 커밋은 GitHub의 웹 플로우 GPG 키로 서명되어 자동으로 검증된다. - 따라서 OAuth 앱, 세션, PAT, SSH 키가 탈취되면 공격자가 GitHub에서 “Verified” 상태의 악성 커밋을 만들 수 있다. - 장기 액세스 토큰은 Okta SSO나 커밋 서명 검증이 적용되는 신뢰 경계 밖에서 사용될 수 있어, 토큰 사용량을 별도로 감시해야 하는 부담이 생긴다. - Figma는 이러한 활동을 수동 모니터링하는 대신, 기기 신뢰 정보를 커밋 서명에 직접 포함하는 방식을 선택했다. ## Okta Device Trust 인증서 - Figma의 Endpoint Security Baseline은 최신 브라우저와 macOS, 활성화된 악성코드 방어 소프트웨어 등 여러 보안 조건을 요구한다. - Figma는 2022년 말부터 Amazon Private CA를 사용해 회사 MacBook에 X.509 Okta Device Trust 인증서를 발급했다. - 인증서는 JAMF를 통해 배포되며 15일마다 갱신된다. - 인증서 발급 시점에 노트북이 Endpoint Security Baseline을 충족했다는 사실을 증명한다. - Okta Identity Engine을 이용해 AWS, Stripe, Snowflake 같은 민감한 서비스에 기기 신뢰 정책을 적용할 수 있다. - 이 인증서는 Okta 로그인에만 한정되지 않고, X.509 인증서로 데이터를 서명할 수 있는 모든 작업에서 기기 신뢰를 증명하는 데 활용할 수 있다. ## X.509 인증서로 Git 커밋 서명 - Figma는 기존의 Device Trust 인증서를 Git 커밋 서명에도 사용할 수 있는지 검토했다. - Git은 S/MIME 방식으로 X.509 인증서를 사용해 커밋을 서명할 수 있다. - GitHub가 제공하는 `smimesign` 유틸리티는 macOS 키체인이나 Windows 인증서 저장소에 있는 인증서와 키를 사용해 Git 커밋을 서명한다. - 기본 설정 예시는 다음과 같다. ```sh git config commit.gpgsign true git config gpg.format x509 git config gpg.x509.program smimesign git config user.signingkey <your_x509_key_id> ``` - 이 설정을 적용하면 Git은 지정된 X.509 키를 이용해 모든 커밋에 서명한다. - 다만 Figma의 인증서는 15일마다 갱신되므로 서명 키가 계속 바뀐다. - 따라서 개발자가 매번 새로운 인증서 ID를 수동으로 설정하지 않도록, Git이 최신 인증서를 동적으로 찾는 별도 처리가 필요했다. ## 실용적인 결론 GitHub의 “Verified” 표시는 커밋의 무결성만으로는 충분하지 않다. 민감한 코드 변경을 보호하려면 커밋 서명 키를 회사가 관리하는 기기와 연결하고, 기기의 보안 상태를 인증서 발급 조건에 포함하는 방식이 효과적이다. Figma의 접근법은 SSO·2FA·PR 승인 절차를 대체하기보다, 기기 기반 신뢰 검증을 추가해 코드 변경의 출처를 더욱 강하게 제한한 사례다.

원문 읽기(새 탭에서 열림)