Git Hash Chain Malleability
이 논문은 공격자가 ECDSA의 대수적 역산, 해싱되지 않은 OpenPGP 서브패킷 삽입, 그리고 비정형(non-canonical) DER 길이 재인코딩을 악용함으로써 동일한 내용과 유효한 서명 및 "Verified" 배지를 가진 서로 다른 커밋을 생성할 수 있게 하여, Git 커밋 해시가 가변적임을 입증하며, 이를 통해 해시 기반 의존성 고정(dependency pinning)과 재현 가능한 빌드의 보안 가정을 훼손한다는 것을 보여준다.
원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
인터넷을 모든 책, 모든 레시피, 모든 설명서가 디지털 금고에 저장된 거대하고 글로벌한 도서관이라고 상상해 보세요. 이 도서관을 체계적으로 유지하기 위해, 모든 항목에는 특별한 코드로 만들어진 고유한 ID 카드가 부여됩니다. 소프트웨어 개발의 세계에서 이 시스템을 Git이라고 부릅니다. "커밋(commit)"을 프로젝트의 특정 순간을 포착한 스냅샷이라고 생각해보세요. 마치 당신이 방금 완성한 레고 성을 사진으로 찍는 것과 같습니다. 누군가 몰래 들어와서 브릭 하나를 플라스틱 조각으로 바꾸지 못하도록, 개발자들은 편지에 찍는 밀랍 인장처럼 디지털 인장을 통해 사진에 "서명"할 수 있습니다. 이 인장은 "네, 제가 이것을 만들었으며, 아무도 이를 변경하지 않았습니다"라는 것을 증명합니다.
이 시스템의 핵심 아이디어는 고유성을 통한 신뢰입니다. 만약 당신이 사진의 고유 ID 코드를 가지고 있다면, 당신은 그 정확한 사진을 찾아낼 수 있고 그것이 변조되지 않았음을 알 수 있어야 합니다. 이는 마치 "만약 ID 카드가 '성 A'라고 말한다면, '성 A'는 그 설명을 충족하는 세상의 유일한 존재이다"라고 말하는 것과 같습니다. 이 신뢰는 매우 강력해서, 컴퓨터는 이 ID 코드를 사용하여 소프트웨어가 안전한지 자동으로 확인하고, 코드가 망가지지 않도록 특정 버전을 고정하며, 정확히 누가 무엇을 만들었는지 증명하는 데 사용합니다. 만약 ID 코드가 고유하고 변경 불가능하다면, 전체 시스템은 잘 기름칠 된 기계처럼 완벽하게 작동합니다. 하지만 만약 누군가 완벽하게 서명된 사진을 가져다가, 밀랍 인장을 아주 미세하게 수정하여 여전히 그 사진이 진짜임을 증명하면서도 새로운 ID 카드를 얻어낼 수 있다면 어떻게 될까요? 이것이 바로 이 논문이 던지는 질문입니다.
거대한 디지털 정체성 교체
이 논문에서 연구자 제이콥 자이네신(Jacob Ginesin)은 Git의 "하나의 사진, 하나의 ID" 규칙을 깨뜨리는 교묘한 기술을 발견했습니다. 그는 공격자가 비밀 서명 키를 훔치거나 디지털 인장의 수학적 원리를 파괴할 필요 없이도, 동일한 소프트웨어에 대해 두 번째의 완전히 다른 ID 카드를 생성할 수 있음을 보여주었습니다.
여기 마술 같은 트릭이 있습니다. 공격자는 서명된 커밋(밀랍 인장이 찍힌 사진)을 가져와서, 컴퓨터에게는 다르게 보이지만 인간에게는 똑같은 의미를 갖도록 인장을 살짝 수정합니다. 이는 마치 밀랍 인장을 약간 다른 모양으로 누르거나, 종이에 같은 메시지를 쓰되 다른 글꼴을 사용하는 것과 같습니다. 사진의 내용은 전혀 변하지 않았습니다. 레고 성은 동일합니다. 인장은 여전히 작성자의 신원을 증명합니다. 하지만 인감의 "모습"이 바뀌었기 때문에, 컴퓨터는 이를 위해 완전히 새로운 ID 카드를 생성합니다.
무서운 점은 무엇일까요? GitHub와 같은 체크 시스템들이 "헤이, 이 인장은 유효해! 이것은 검증된 커밋이야!"라고 말하며 반짝이는 초록색 "Verified(검증됨)" 배지를 부여한다는 것입니다. 이제 당신은 똑같은 레고 성에 대해 두 개의 서로 다른 ID 카드를 가지게 되었습니다. 하나는 "성 A"라고 말하고, 다른 하나는 "성 B"라고 말합니다. 둘 다 동일한 사람에 의해 서명되었고, 둘 다 "Verified"로 표시되어 있습니다.
시스템을 속이는 세 가지 방법
논문은 어떤 종류의 디지털 인장이 사용되느냐에 따라 이 트릭을 수행하는 세 가지 다른 방법을 설명합니다.
- 수학적 뒤집기 (ECDSA용): 숫자 선상에 숫자 5가 있다고 상상해 보세요. 이 특정한 수학 게임에서는 숫자 5와 "전체에서 5를 뺀 값"이 사실상 같은 것입니다. 공격자는 인장의 숫자를 뒤집어 버립니다. 그것은 다르게 보이지만, 수학적으로는 여전히 유효한 서명입니다.
- 숨겨진 메모 (RSA 및 EdDSA용): 봉인된 편지를 상상해 보세요. 인장은 본문을 덮고 있지만, 뒷면에는 인장이 닿지 않는 작은 주머니가 있습니다. 공격자는 그 주머니에 아주 작고 무해한 메모를 끼워 넣습니다. 본문은 손상되지 않았고 인장도 여전히 유효하지만, 편지의 무게와 모양이 미세하게 달라져 ID 카드가 바뀝니다.
- 화려한 글꼴 (S/MIME용): "32"라는 숫자를 쓴다고 상상해 보세요. 당신은 "32"라고 쓸 수도 있고, "0x20"이라고 쓸 수도 있습니다. 둘 다 같은 의미를 갖지만, 하나는 "표준" 방식이고 다른 하나는 "화려한" 방식입니다. 공격자는 숫자를 화려한 방식으로 다시 씁니다. 편지를 확인하는 컴퓨터(GitHub)는 조금 관대하여 화려한 방식을 허용하지만, 더 엄격한 컴퓨터(당신의 로컬 노트북)는 "잠깐, 이건 표준 방식이 아니야!"라며 혼란을 겪을 수 있습니다.
이것이 왜 중요한가: "고스트(Ghost)" 문제
당신은 이렇게 생각할지도 모릅니다. "그래서 뭐? 성은 똑같은데, ID 카드가 다르다고 뭐가 문제야?" 하지만 디지털 세계에서 ID 카드는 곧 성 그 자체입니다.
- 가드(Bouncer) 문제: 클럽 입구에서 차단된 ID 목록을 확인하는 가드가 있다고 상상해 보세요. 당신이 차단되었다면 들어갈 수 없습니다. 하지만 공격자가 차단 목록에 없는 동일 인물의 "고스트 ID"를 만들어낸다면, 가드는 그를 들여보내 줍니다. 공격자는 ID 카드를 바꿈으로써 악성 코드를 보안 필터를 통과시켜 몰래 들여보낼 수 있습니다.
- 거울 문제: 서로 마주 보고 있는 두 개의 거울을 상상해 보세요. 하나는 실제 성을 보여주고, 다른 하나는 이름만 다른 "고스트 성"을 보여줍니다. 만약 당신이 잘못된 거울을 보고 있다면, 당신은 원래의 것을 보고 있다고 생각하겠지만, 실제로는 공격자가 통제하는 복사본을 보고 있는 것입니다.
- 끊어진 사슬: 새로운 레고 성이 이전의 성 위에 쌓이는 구조이기 때문에, 하나의 성의 ID를 바꾸면 그 뒤에 쌓인 모든 성의 ID가 바뀝니다. 이는 역사의 "분기(fork)"를 만듭니다. 당신은 두 개의 평행한 타임라인을 갖게 됩니다. 하나는 원래의 ID를 가진 타임라인이고, 다른 하나는 고스트 ID를 가진 타임라인입니다. 둘 다 진짜처럼 보이고 둘 다 서명되어 있지만, 서로 다릅니다.
결론
이 논문은 커밋 해시의 "Verified" 배지가 콘텐츠의 유일성을 보장하는 것이 아님을 증명합니다. 이는 마치 여권에 찍힌 "Verified" 도장이 당신이 그 얼굴을 가진 유일한 사람임을 보장하는 것이 아니라, 단지 그 도장이 진짜임을 보장하는 것과 같습니다.
저자는 어떤 서명된 커밋에도 이 트릭을 자동으로 적용할 수 있는 도구를 만들었습니다. 그는 GitHub에서 테스트를 진행했고, 사이트는 기꺼이 "고스트" 커밋들을 받아들였으며, 그들에게도 자신만의 "Verified" 배지를 부여했습니다. 이는 이러한 ID 카드에 의존하여 악한 행위자를 차단하거나, 소프트웨어 버전을 고정하거나, 누가 무엇을 만들었는지 증명하는 시스템들이 취약하다는 것을 의미합니다. 해결책은 서명을 멈추는 것이 아닙니다. 컴퓨터가 인장을 확인할 때 "이것은 우리가 이전에 봤던 것과 정확히 같은 인장이 아니다"라고 말할 수 있을 만큼 엄격해지도록 하고, 단순히 ID 카드가 아닌 실제 콘텐츠를 확인하도록 만드는 것입니다.
요약하자면, 서명된 커밋은 하나의 약속이지만, 이 논문은 그 약속이 스스로의 "고스트" 버전을 만들어내어 우리를 지켜줘야 할 시스템을 속일 수 있는 방식으로 작성될 수 있음을 보여줍니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.