RHSB-2021-007 트로이 목마 소스 공격 (CVE-2021-42574,CVE-2021-42694)

Public Date: October 27, 2021, 09:19
갱신됨 February 15, 2022, 14:18 - Chinese, Simplified 영어 (English) French Japanese
Resolved 상태
Moderate Impact

Red Hat은 개발 환경에서 최종 사용자에게 표시되는 텍스트가 실행 예상되는 내용과 일치하지 않는 새로운 유형의 보안 공격에 대해 인지하고 있습니다. 이러한 문제는 CVE-2021-42574CVE-2021-42694로 분류되어 있습니다. 이러한 두 가지 취약점의 심각도 영향 등급은 보통(Moderate)입니다.

이러한 문제는 Red Hat 제품 결함이 아니며 '트로이 목마 소스 (Trojan Source)' 공격으로 분류됩니다. 이러한 취약점은 텍스트 렌더링을 위한 특수한 요구 사항이 있는 개발 환경 내에서 유니코드 표준을 구현하는 방식으로 인해 발생합니다. 

Red Hat에서 발행한 패키지 업데이트를 사용하는 것이 이 문제를 완화하기 위한 가능한 해결 방법입니다. Red Hat은 자체 개발 환경에서 이러한 문제를 감지하기 위한 예제 스크립트를 제공하고 있습니다. 또한 Red Hat은 업스트림 연구원 및 커뮤니티와 협력하여 다양한 개발자 툴에서 이러한 문제를 해결하고 있습니다.

텍스트 인코딩 체계는 왼쪽에서 오른쪽 및 오른쪽에서 왼쪽으로 가로 쓰기 언어를 모두 지원해야 합니다. 언어 스크립트가 다른 디스플레이 순서와 혼합될 때 유니코드의 양방향(BiDi) 알고리즘은 이를 성공적으로 수행하는 방법을 제공합니다. 그러나 소스 코드에서 사용할 경우 혼동을 일으킬 수 있습니다. 검토자에게 렌더링 및 표시되는 내용이 모호할 수 있고 모양은 비슷하더라도 다르게 실행되는 유사한 비-BiDi 코드로 쉽게 오인될 수 있습니다.

예를 들어 공격자는 이를 악용하여 잘 배치된 BiDi 문자가 포함된 악성 패치를 만들어 검토자를 속일 수 있습니다. 그런 다음 이러한 문자의 특수 처리 및 렌더링을 사용하여 예기치 않은 잠재적으로 위험한 동작을 검토자가 알아차리지 못하도록 숨길 수 있습니다. 

이러한 유형의 공격으로 인해 코드 리포지토리나 빌드 파이프라인이 공격받을 수 있습니다. 일반적으로 사용되는 개발 툴(컴파일러, 편집기, 소스 코드 관리)에서 관련된 결함이 발견되지 않았습니다. Red Hat은 업스트림 커뮤니티와 협력하여 일반적으로 사용되는 개발 툴에 적절한 진단 기능을 추가하여 문제가 있는 BiDi 시퀀스를 식별하고 있습니다. 

이는 호모글리프(homoglyphs)와 관련된 문제로 이는 동일하게 또는 유사하게 보이는 글리프(glyphs) (합의된 기호 세트에 있어서의 요소적인 기호, 쓰기 목적으로 읽을 수 있는 문자로 표현하기 위한 기호)로 인한 것입니다. 호모글리프를 사용하여 소스 코드를 보이지 않도록 변경하여 대상 공격을 수행할 수도 있습니다.

CVE-2021-42574

이러한 취약점은 텍스트 렌더링에 대한 특수한 요구 사항이 있는 개발 환경 내에서 유니코드 표준이 구현되는 방식에서 발견되었습니다. 공격자는 이를 악용하여 잘 배치된 BiDi 문자가 포함된 악성 패치를 만들어 검토자를 속일 수 있습니다. 그런 다음 이러한 문자의 특수 처리 및 렌더링을 사용하여 예기치 않은 잠재적으로 위험한 동작을 검토자가 알아차리지 못하도록 숨길 수 있습니다.

유니코드의 지시문 형식 지정 문자('BiDi')는 하나 이상의 문자의 디스플레이 순서를 전환하는 눈에 보이지 않는 문자입니다. BIDI 덮어쓰기를 사용하면 문자가 작성된 순서와 다른 순서로 표시됩니다.

대부분의 프로그래밍 언어는 언어 구문을 위반하여 구문 오류를 유발하기 때문에 소스 코드에서 임의의 제어 문자를 허용하지 않습니다. 일부 언어에서는 변수 이름으로 일부 특수 문자도 사용하지 않습니다. 그러나 BiDi 문자는 대부분의 언어에서 주석과 일부 문자열에 삽입할 수 있습니다. 

BIDI 문자는 대부분의 최신 시스템에서 복사 및 붙여넣기 작업을 통해 유지됩니다. 신뢰할 수 없는 소스의 코드를 복사-붙여넣기하여 취약점이 발생할 수 있습니다. 로직의 변화가 감지되지 않을 정도로 미묘하다면 수동 검토로는 충분하지 않을 수 있습니다. 

CVE-2021-42694

이러한 취약점은 텍스트 렌더링에 대한 특수한 요구 사항이 있는 개발 환경 내에서 유니코드 표준이 구현되는 방식에서 발견되었습니다. 호모글리프는 서로 다른 유니코드 문자이지만 육안으로 보면 동일하게 보입니다.  공격자는 호모글리프 문자를 사용하여 인쇄와 같은 표준 라이브러리 기능과 유사하지만 한 문자를 호모글리프 문자로 바꾸는 기능이 포함된 악성 패치를 만들어 검토자를 속일 수 있습니다. 그런 다음 이 함수는 업스트림 종속성에서 정의되어 소스 코드 관련 공격을 시작할 수 있습니다.

이는 Red Hat 제품에서 발견된 취약점이 아닙니다.

CVE-2021-42694는 이전에 알려진 문제로 CVE-2021-42574보다 심각도가 낮습니다. 지난 몇 년간 다양한 업스트림 프로젝트가 호모글리프 문제를 해결하기 위해 노력해 왔으며 현재도 이러한 작업은 진행 중에 있습니다.

현재 Red Hat은 제품 및 서비스의 내부 검사를 수행하고 있으며 지금까지 이 종류의 취약점에 대한 코드에서 악의적인 유니코드 문자를 감지하지 못했습니다. 또한 Red Hat은 코드에서 부자연스러운 유니코드 시퀀스를 스캔하기 위해 제품 공급망에서 감지 검사를 실시하고 있습니다. Red Hat은 업스트림 커뮤니티와 협력하여 일반적으로 사용되는 개발 툴에 적절한 진단 기능을 추가하여 문제가 있는 BiDi 시퀀스를 식별하고 있습니다. 

참고: 이러한 취약점은 텍스트 렌더링에 대한 특수한 요구 사항이 있는 개발 환경 내에서 유니코드 표준이 구현되는 방식에 존재합니다. 이는 Red Hat 제품의 결함이 아닙니다. Red Hat에서 발행한 패키지 업데이트를 사용하는 것이 이 문제를 완화하기 위한 가능한 해결 방법입니다.

코드에 BiDi 문자가 있는지 확인하기 위해 진단 스크립트가 개발되었습니다. 정규 스크립트임을 확인하려면 GPG 서명을 다운로드합니다. GPG 서명을 확인하는 방법은 고객 포털에서 확인할 수 있습니다.

참고: Red Hat은 고객과 커뮤니티에게 이 스크립트를 제공합니다. 사용법 및 출력 평가에 대한 지원은 제공되지 않습니다. 스크립트를 사용하는 방법은 README 파일을 참조하십시오. 고객의 재량에 따라 BiDi 문자의 사용을 분석하고 악의적인 사용에 대해 결정을 내릴 수 있습니다. BiDi 문자에 대한 자세한 내용은 연구원들이 발표한 기술 백서에서 참조하십시오.

소스 코드에서 BiDi 문자를 감지할 수 있는 다른 방법:

일부 텍스트 편집기는구문 강조 표시, 텍스트 스크롤 방향 반전, 제어 문자 인쇄, 특히 단일 단어에서 방향을 바꾸는 문자 인쇄의 조합을 통해 소스 코드에 BiDi 문자의 존재에 대한 힌트를 제공합니다. cat 명령에는 인쇄할 수 없는 문자를 시각화하기 위해 -A 및 -v 플래그를 제공하므로 BiDi 제어 시퀀스의 존재를 확인할 수 있습니다.

Red Hat은 이 문제를 지속적으로 보고해 주신 캠브리지 대학의 Nicholas Boucher와 Metro Anderson에게 감사드립니다.

Q: 이 취약점은 Red Hat 제품에 영향을 줍니까?

A: 아니요. 이는 Red Hat 제품의 결함이 아닙니다. 이러한 취약점은 텍스트 렌더링에 대한 특수한 요구 사항이 있는 개발 환경 내에서 유니코드 표준이 구현되는 방식에 존재합니다.

Q: 이 취약점이 Red Hat 공급망에 영향을 줍니까?

A: Red Hat은 코드에서 부자연스러운 유니코드 시퀀스를 스캔하기 위해 제품 공급망에서 지속적인 감지 검사를 실시하고 있습니다.

Q: Red Hat은 이 문제를 어떻게 해결할 계획입니까?

A: 이는 Red Hat 제품의 결함이 아니라 업스트림 코드에 악성 코드가 유입되어 악용될 수 있는 설계 문제입니다. Red Hat은 현재 다양한 업스트림 프로젝트와 협력하여 문제를 가장 효과적으로 완화하기 위해 다양한 구성 요소에서 진단 및 감사 기능을 설계 및 구현하고 있습니다.

Q: 이전 Red Hat Enterprise Linux(6 이하) 버전에서 이 문제를 위해 코드를 스캔하려면 어떻게 해야 합니까?

A: 다음 bash 명령줄을 사용합니다. 이 페이지에 포함된 스크립트만큼 강력하지는 않지만 기본적인 스캔을 수행합니다.

 $grep -r $'[\u061C\u200E\u200F\u202A\u202C\u202C\u202D\u2066\u2067\u2068\u2069]' /path/to/source

출력이 표시되면 코드를 확인해야 합니다.

https://trojansource.codes/ 

https://www.lightbluetouchpaper.org/2021/11/01/trojan-source-invisible-vulnerabilities/ 

https://www.unicode.org/reports/tr36/#Canonical_Represenation 

https://www.unicode.org/reports/tr36/#Bidirectional_Text_Spoofing 

https://www.unicode.org/reports/tr39/

Comments