# 웹 폰트의 메모리 안전성 강화

> Clean Markdown view of GeekNews topic #19872. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=19872](https://news.hada.io/topic?id=19872)
- GeekNews Markdown: [https://news.hada.io/topic/19872.md](https://news.hada.io/topic/19872.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-03-21T10:01:57+09:00
- Updated: 2025-03-21T10:01:57+09:00
- Original source: [developer.chrome.com](https://developer.chrome.com/blog/memory-safety-fonts)
- Points: 3
- Comments: 2

## Topic Body

- **Skrifa**는 Rust로 작성된 새로운 글꼴 처리 라이브러리로, 기존의 **FreeType**을 대체해 Chrome에서 글꼴 처리를 보다 안전하게 수행하기 위해 개발됨  
- Rust의 메모리 안전성 덕분에 보안 문제가 줄어들고, 글꼴 기술 개선 속도 향상  
- FreeType에서 Skrifa로 전환하면서 코드 품질이 향상되고 보안 수정 시간 단축  
  
### FreeType을 대체하는 이유  
- 웹 환경에서는 신뢰할 수 없는 리소스를 다양한 출처에서 가져와 안전하게 사용할 수 있어야 함  
- Chrome에서는 웹 글꼴을 안전하게 사용하기 위해 여러 보안 조치를 적용하고 있었음  
  - **샌드박싱(Sandboxing):** 코드가 안전하지 않고 글꼴이 신뢰할 수 없기 때문에 별도의 보호 환경에서 실행  
  - **OpenType Sanitizer:** 글꼴 처리 전에 글꼴을 정리하고 검사  
  - **퍼징(Fuzzing):** 글꼴 처리 관련 라이브러리를 광범위하게 테스트  
  
- FreeType은 Android, ChromeOS, Linux에서 기본 글꼴 처리 라이브러리로 사용됨  
  - 보안 취약점이 발생하면 많은 사용자에게 영향을 미칠 위험 존재  
  
### FreeType에서 발생한 주요 보안 문제  
- 1\. **안전하지 않은 언어 사용**  
  - FreeType은 C로 작성되었기 때문에 메모리 오류 및 버퍼 오버플로 등의 보안 취약점 발생 가능  
- 2\. **프로젝트별 문제**  
  - **매크로 사용으로 인한 명시적 크기 타입 부족**  
    - 매크로(`FT_READ_*`, `FT_PEEK_*`)가 명시적 크기 타입(int16_t 등)을 숨김  
  - **새로운 코드에서 반복적으로 버그 발생**  
    - COLRv1 및 OT-SVG 지원 추가 시 문제 발생  
  - **테스트 부족**  
    - 복잡한 테스트 글꼴 생성이 어려워 테스트 부족 문제 발생  
- 3\. **의존성 문제**  
  - FreeType이 사용하는 **bzip2**, **libpng**, **zlib** 등의 라이브러리에서 반복적인 문제 발생  
- 4\. **퍼징의 한계**  
  - 글꼴 파일은 복잡한 데이터 구조로 인해 퍼징에서 발견되지 않는 문제 발생  
    - 글꼴은 복합적인 규칙과 상태 기계(state machine)를 포함  
    - 유효한 구조 생성이 어려워 효과적인 퍼징 진행이 어려움  
  
### Skrifa의 도입 및 Chrome 적용 과정  
- Chrome에서 사용하는 그래픽 라이브러리 **Skia**는 글꼴 메타데이터 및 렌더링에 FreeType을 사용  
- Chrome은 FreeType을 Skrifa로 교체하기 위해 Skia의 글꼴 백엔드를 새로 구축  
  
### Skrifa 도입 단계  
- **Chrome 128 (2024년 8월):**  
  - 컬러 글꼴 및 CFF2와 같은 덜 사용되는 글꼴 형식에 대해 Skrifa 시범 적용  
- **Chrome 133 (2025년 2월):**  
  - Linux, Android, ChromeOS에서 웹 글꼴 처리에 Skrifa 전면 도입  
  - Windows 및 Mac에서는 시스템이 글꼴 형식을 지원하지 않을 때 대체 처리기로 사용  
  
### 보안 및 성능 강화  
- 1\. **메모리 안전성 강화**  
  - Rust는 기본적으로 메모리 안전성을 보장함  
  - 다만, 성능을 위해 **bytemuck** 라이브러리 사용  
    - 강력한 타입 구조로 바이트 재해석 필요 시 사용  
    - Rust의 향후 업데이트에서 안전한 변환이 가능해지면 해당 기능으로 전환 예정  
- 2\. **정확성 개선**  
  - Skrifa는 데이터 구조의 불변성(immutable) 보장을 통해 코드 가독성, 유지보수성 및 멀티스레딩 성능 강화  
  - 약 **700개의 유닛 테스트**로 코드 품질 검증  
  - **fauntlet** 도구를 사용해 FreeType과 Skrifa의 출력 비교 → 화질 품질 일치 여부 확인  
- 3\. **광범위한 테스트 및 보안 강화**  
  - Skrifa 및 통합 코드에 대해 **2024년 6월부터 퍼징 테스트** 진행  
    - 현재까지 39개의 버그 발견 → 보안 취약점은 아님 (시각적 오류 혹은 제어된 충돌)  
    - 보안 문제로 이어지지 않는 코드 품질 개선 확인  
  
### 결론 및 향후 계획  
- Rust 기반 Skrifa 도입으로 보안 강화 및 코드 품질 개선 효과  
- 개발 생산성 향상 및 사용자에게 더 안전한 글꼴 환경 제공  
- 향후 Linux 및 ChromeOS의 시스템 글꼴 처리에 Skrifa 적용 계획

## Comments



### Comment 36215

- Author: iolothebard
- Created: 2025-03-22T10:04:36+09:00
- Points: 1

저번에는 zlib, 이번에는 freetype…  
고인물들이 하나둘씩 밀려나는건… 사람 사는 세상이랑 비슷하네요

### Comment 36180

- Author: neo
- Created: 2025-03-21T10:01:57+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43413125) 
- Google에서 fuzzing으로 발견된 문제를 해결하는 데 최소 0.25명의 소프트웨어 엔지니어가 필요함
  - 이러한 추가 작업을 측정하는 방식이 마음에 듦
  - FreeType을 사용하지 않더라도 TTF 힌팅 명령을 완전히 사용할 수 있는 방법이 있기를 바람
  - Windows와 macOS는 더 이상 적절한 힌팅을 활성화할 방법이 없는 것 같음
  - FreeType도 2.7 버전 이후로 부적절한 힌팅을 기본값으로 설정함
  - 적절히 힌팅된 텍스트가 어떻게 보이는지 궁금하다면 스크린샷을 참조할 수 있음
  - Windows는 XP 이후로 폰트 힌팅을 포기한 것으로 의심됨
  - UI 스케일링과 다양한 해상도의 화면에서 래스터 이미지를 보는 것이 흐릿함을 유발함

- Rust의 진정한 힘은 안전성을 향한 점진적인 전환과 기존 프로젝트에 통합될 수 있는 능력임
  - 대규모 재작성 없이 구성 요소를 하나씩 마이그레이션할 수 있음

- 폰트가 모니터 패널의 서브픽셀 레이아웃에 따라 렌더링되는 방식에 대해 배우고 있음
  - Windows는 모든 패널이 RGB 레이아웃을 사용한다고 가정하고 ClearType 소프트웨어가 그 가정에 따라 폰트를 렌더링함
  - 새로운 디스플레이 유형에서는 텍스트 프린징이 발생함
  - MacType이나 Better ClearType Tuner 같은 타사 도구가 존재하지만 Chrome이나 Electron에서는 작동하지 않음
  - 새로운 패널 기술이 보편화되면서 서브픽셀 레이아웃을 그래픽 레이어에 전달하는 표준을 정의하는 노력이 필요함
  - Blur Busters에서 일부 노력이 보이지만 공급업체의 인식은 아직 부족함

- Skia는 고급 텍스트 레이아웃을 수행하고 글리프를 캐시하는 고급 라이브러리임
  - Skia는 C++로 작성되었으며 Google에서 만듦
  - FreeType은 글리프를 측정하고 렌더링하며 다양한 안티앨리어싱 모드와 힌팅을 지원함
  - FreeType은 C로 작성되었으며 Google에서 만든 것이 아님
  - 왜 FreeType이 먼저 Rust로 재작성되었는지 궁금함

- 글꼴은 OpenType Sanitizer를 통해 처리되기 전에 통과됨
  - 글꼴 형식이 그렇게 나쁜지 파일을 소독해야 하는지 궁금함
  - 정수 오버플로가 취약성의 원인 중 하나로 식별됨
  - 많은 언어가 오버플로를 감지하지 않으며, RISC-V 같은 현대 아키텍처도 오버플로 트랩을 포함하지 않음
  - Rust 같은 새로운 언어가 오버플로 트랩을 포함하지 않는 이유를 이해할 수 없음
