보안

이 페이지는 저희가 지키는 것과 지킬 수 없는 것을 함께 적습니다. 뒷부분이 빠진 보안 설명은 읽는 사람이 목록을 보증으로 착각하게 만듭니다.

출발점

패키지를 게시한다는 것은 그것을 설치하는 모든 엔지니어의 PC에서 코드를 실행한다는 뜻입니다. 이 제품의 보안 결정은 모두 먼저 하나의 질문에 비추어 판단했습니다 — 이 변경이 권한 없는 게시를 더 쉽게 만드는가.

  • 패키지 서명(ECDSA P-256)

    서명 파일은 패키지 안에 들어 있습니다. 서명 대상은 각 파일의 해시, 패키지 식별자, 버전이 담긴 매니페스트이며 아카이브의 해시만이 아닙니다.

    해시에만 서명한다면 오래된, 올바르게 서명된 아카이브를 새 버전 번호 아래로 밀어 넣을 수 있습니다. 서명은 검증을 통과하고, 사용자는 알려진 취약점이 있는 도구를 “업데이트”로 설치하게 됩니다.

  • 개인 키는 서버에 없습니다

    서버는 검증만 합니다. 서명은 게시자의 PC에서 별도의 도구로 이루어집니다.

    키가 서버에 있다면 그것을 손에 넣은 상대가 패키지를 바꿔 다시 서명할 수 있습니다. 그러면 서명은 아무 의미가 없어집니다.

  • 클라이언트도 검증합니다

    엔지니어 PC의 애드인이 자체적으로 서명을 검증하며, 그때 쓰는 신뢰 키 목록은 서버에서 받아 오지 않습니다.

    서명이 존재하는 이유는 서버를 말 그대로 믿을 수 없기 때문입니다. 신뢰 목록을 같은 서버에서 가져오면 그 전제가 조용히 무너집니다.

  • 삭제되지 않는 감사 로그

    모든 게시, 모든 권한 변경, 모든 채널 결정이 영구적으로 기록됩니다. 변경이나 삭제 경로는 의도적으로 두지 않았고, 보관 기간 이후의 정리 대상도 아닙니다.

    “이 도구가 여기 어떻게 들어왔는가”는 보통 몇 달 뒤에 나오는 질문입니다. 그날, 삭제할 수 있었던 기록은 처음부터 없었던 기록과 같습니다.

  • 이중 승인 원칙(선택)

    더 넓은 채널로 배포할 때 다른 관리자의 승인을 요구할 수 있으며 요청한 본인은 자신의 요청을 승인할 수 없습니다. 되돌리기에는 승인이 필요하지 않습니다.

    기본값은 꺼짐입니다. 세 사람짜리 팀에서 이 장벽은 몇 주 만에 읽지 않고 승인하는 알림으로 바뀝니다. 지켜 준다고 믿지만 실제로는 지켜 주지 않는 검사는, 검사가 아예 없는 것보다 나쁩니다.

  • 아카이브를 푸는 일 자체가 공격면입니다

    보내진 아카이브는 폴더 밖으로 나가는 경로(zip-slip)와 압축 폭탄을 검사하며, 푼 뒤의 전체 용량에도 상한을 둡니다.

    아카이브를 푸는 일은 무해해 보입니다. 특별히 만들어진 아카이브는 대상 폴더 밖에 파일을 쓰거나 서버 디스크를 가득 채울 수 있습니다.

  • 비밀번호 없는 로그인

    사용자는 자기 주소로 오는 일회용 코드로 로그인합니다. 세션은 수명이 짧은 토큰으로 이어지고, 갱신 토큰은 브라우저 코드에 절대 노출되지 않습니다.

    관리해야 할 비밀번호 보관소가 없으면 유출될 수 있는 비밀번호 데이터베이스도 없습니다. 그리고 이미 폐기된 갱신 토큰이 다시 쓰이면 도난의 신호로 보고 세션을 닫습니다.

  • 무엇을 설치하는지 보입니다

    설치 폴더에는 기계가 읽을 수 있는 구성 목록(SBOM CycloneDX)과 두 데이터베이스용 마이그레이션 스크립트가 들어 있습니다.

    무엇이 서버에 들어가는지 들어가기 전에 귀사 IT 팀이 확인할 수 있어야 합니다. 어떤 의존성에 취약점이 공개되면 “우리에게 그게 있나”가 파일 검색이 됩니다.

저희가 지킬 수 없는 것

이것은 결함이 아니라 경계입니다. 구조에서 나오는 것이며, 반대로 말하는 것은 거짓이 됩니다.

  • 함께 움직이는 두 관리자. 이중 승인 원칙이 막는 것은 한 명이지 두 명이 아닙니다.
  • 서버의 시스템 관리자. 데이터베이스와 파일 시스템에 닿을 수 있는 상대에게는 애플리케이션 수준의 어떤 검사도 장벽이 되지 않습니다.
  • 서명 키가 있는 작업용 PC. 키는 서버에 없지만 어딘가에는 있습니다. 그 PC가 무너지면 서명도 함께 무너집니다.
  • 의도적으로 숨겨진 악의적 동작. 저희 패키지 검사는 휴리스틱이며, 숨으려는 코드를 잡아낸다고 주장하지 않습니다.
  • 데이터 유출. 설치된 도구는 엔지니어 본인의 권한으로 동작하고 그 권한이 닿는 모든 것을 읽을 수 있습니다. 그것을 제한하는 것은 운영체제와 네트워크의 통제이지 이 제품이 아닙니다.
  • 백업의 안전성. 데이터베이스 사본은 귀사 손에 있고, 그 안에 든 모든 것은 살아 있는 시스템과 정확히 같은 가치를 지닙니다.

취약점 신고

발견하셨다면 연락해 주십시오. 신고를 진지하게 받아들이고, 신고자를 과정에서 배제하지 않으며, 수정이 언제 공개되는지 알려 드립니다.

security@ypcad.com