
CVE-2020-25860 수정을 위한 통합 예제
이 저장소는 기존 프로젝트에 RAUC 업데이트를 통합하는 것을 간소화하는 예제를 포함하고 있습니다. https://github.com/rauc/rauc-1.5-integration/issues/1 을 구독하여 이 저장소의 중요한 업데이트 및 업스트림 빌드 시스템으로의 통합에 대한 알림을 받을 수 있습니다.
예제는 현재 업스트림 버전에서 파생되었으므로, 기존 프로젝트의 연식에 따라 일부 조정이 필요할 수 있습니다.
12월 21일에 게시될 권고문은 https://github.com/rauc/rauc-1.5-integration/blob/master/CVE-2020-25860.md 에서 확인할 수 있습니다. 이 저장소도 그 시점에 공개될 예정입니다.
rauc-1.5.tar.xz 아카이브를 아직 다운로드할 수 없는 경우, 이 저장소에서 아카이브를 DL_DIR (보통 build/conf/local.conf에 정의됨)로 복사합니다.
업데이트된 레시피를 oe_yocto/recipes-rauc-1.5/rauc/* 에서 적절한 프로젝트별 레이어로 복사하고, 기존 사용자 정의(예: system.conf 또는 ca.cert.pem)를 유지하도록 주의합니다.
oe_yocto/classes/verity_bundle.bbclass 를 이 레이어의 classes/ 디렉토리로 복사합니다 (해당 디렉토리를 생성해야 할 수도 있습니다). 이 클래스는 meta-rauc 레이어의 bundle.bbclass 를 대체하며, verity 형식으로 번들을 생성하는 기능이 추가되었습니다. 다른 이름을 사용하여 클래스 검색 순서 문제를 방지합니다.
verity 형식으로 번들을 빌드하려면 번들 레시피에서 inherit bundle 대신 inherit verity_bundle 을 사용하고 RAUC_BUNDLE_FORMAT = "verity" 를 설정하여 형식을 선택합니다. 예제는 oe_yocto/recipes-rauc-1.5/bundles/core-bundle-minimal-verity.bb 에서 확인할 수 있습니다.
rauc-1.5.tar.xz 아카이브를 아직 다운로드할 수 없는 경우, 이 저장소에서 아카이브를 PTXdist 소스 디렉토리로 복사합니다.
ptxdist/rules/rauc.* 디렉토리를 BSP의 rules/ 로 복사합니다. 그러면 대상 및 호스트용 업데이트된 RAUC 바이너리가 생성됩니다.
PTXdist의 기본 RAUC 번들 규칙을 사용하는 경우, ptxdist/config/images/rauc.config 를 BSP의 config/images/ 로 복사합니다. 포함된 매니페스트 템플릿은 plain 번들 형식을 구성하므로, 필요에 따라 변경합니다.
사용자 정의 번들을 사용하고 verity 형식으로 변경하려면, 해당 매니페스트를 직접 업데이트해야 합니다.
rauc-1.5.tar.xz 아카이브를 아직 다운로드할 수 없는 경우, 이 저장소에서 아카이브를 dl/rauc/ 디렉토리로 복사합니다.
buildroot/package/rauc/rauc.* 를 Buildroot 체크아웃의 package/rauc/ 로 복사합니다. 그러면 대상 및 호스트용 업데이트된 RAUC 바이너리가 생성됩니다.
Buildroot는 업데이트 번들 빌드를 자동화하지 않으므로, verity 번들 형식을 사용하려면 매니페스트를 수동으로 업데이트해야 합니다.
RAUC v1.3 (2020-04-23 출시)은 OpenSSL 1.1.1 이전 버전에 대한 지원을 제거했습니다. 해당 버전들은 OpenSSL 프로젝트에서 더 이상 지원되지 않기 때문입니다:
시스템에서 여전히 지원되지 않는 OpenSSL 버전을 사용하고 있고 RAUC 1.5와 함께 1.1.1로 업데이트하는 것이 불가능하다면, 백포트 패치(0001-backport-to-OpenSSL-1.0.2.patch)가 제공됩니다. 이 패치는 1.5 릴리스만큼 광범위하게 테스트되지 않았음을 유의하십시오.
RAUC 1.5에서는 루프 디바이스 ioctl LOOP_SET_BLOCK_SIZE 를 사용하여 논리 블록 크기를 4096으로 설정하여 성능을 최적화합니다. 설정할 수 없는 것은 심각하지 않으며 디버그 수준 메시지로만 기록됩니다.
그러나 LOOP_SET_BLOCK_SIZE 심볼은 4.14 이전 커널 버전에 존재하지 않으므로, 이러한 오래된 커널 헤더로 컴파일하면 실패합니다. 이를 해결하려면 해당 심볼을 RAUC 자체에서 선택적으로 정의해야 합니다. 이에 대한 패치(0001-src-mount.c-fix-build-with-kernel-4.14.patch)가 제공됩니다 (https://github.com/rauc/rauc/pull/673).
이 수정 사항은 RAUC 1.5.1 의 일부가 될 예정입니다.