- 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개의 버그 발견 → 보안 취약점은 아님 (시각적 오류 혹은 제어된 충돌)
- 보안 문제로 이어지지 않는 코드 품질 개선 확인
- Skrifa 및 통합 코드에 대해 2024년 6월부터 퍼징 테스트 진행
결론 및 향후 계획
- Rust 기반 Skrifa 도입으로 보안 강화 및 코드 품질 개선 효과
- 개발 생산성 향상 및 사용자에게 더 안전한 글꼴 환경 제공
- 향후 Linux 및 ChromeOS의 시스템 글꼴 처리에 Skrifa 적용 계획