트로이 목마 소스

Trojan Source
트로이 목마 소스
CVE 식별자
  • CVE-2021-42574
  • CVE-2021-42694
발견된 날짜2021년 9월 9일, 12개월 전(2021-09-09)
디스커버니콜라스 바우처, 로스 앤더슨
해당 소프트웨어Unicode, 소스 코드
웹 사이트trojansource.display

트로이 목마 소스는 Unicode의 양방향 문자를 악용하여 소스 [1]코드를 실제로 실행하는 것과 다르게 표시하는 소프트웨어 취약성의 이름입니다.부정 이용에서는, 다른 판독 방향의 기입 스크립트가 컴퓨터에 표시되고 부호화되는 방법을 이용합니다.그것은 2021년 [2]말 캠브리지 대학의 니콜라스 바우처와 로스 앤더슨이 발견했다.

배경

유니코드는 텍스트, 기호 및 글리프를 나타내기 위한 인코딩 표준입니다.유니코드는 컴퓨터에서 가장 지배적인 인코딩으로 2022년 [3]3월 현재 97% 이상의 웹사이트에서 사용되고 있습니다.여러 언어를 지원하므로 다양한 텍스트 쓰기 방법을 지원해야 합니다.이를 위해서는 영어, 러시아어 등의 왼쪽에서 오른쪽 언어와 히브리어, 아랍어 등의 오른쪽에서 왼쪽 언어에 대한 지원이 필요합니다.Unicode는 여러 개의 쓰기 시스템을 사용하여 해결하는 것을 목표로 하기 때문에 서로 다른 표시 순서를 가진 스크립트를 혼합하여 서로 모순되는 순서를 해결할 수 있어야 합니다.이를 수정하기 위해 Unicode에는 텍스트 표시 및 표시 방법을 설명하는 양방향 문자(Bidi)라는 문자가 포함되어 있습니다.문자가 보이지 않는 [4]경우가 많기 때문에 이러한 문자는 텍스트를 시각적으로 변경하지 않고 해석하는 방법을 변경하는 데 악용될 수 있습니다.

관련 Unicode 양방향 형식 문자
줄임말 이름. 묘사
LRE U+202A 왼쪽에서 오른쪽으로 삽입 다음 텍스트를 왼쪽에서 오른쪽으로 처리해 보십시오.
RLE U+202B 오른쪽에서 왼쪽으로 매설 다음 텍스트를 오른쪽에서 왼쪽으로 처리해 보십시오.
LRO U+202D 왼쪽에서 오른쪽으로 오버라이드 다음 텍스트를 왼쪽에서 오른쪽으로 강제로 처리합니다.
RLO U+202E 오른쪽에서 왼쪽으로 오버라이드 다음 텍스트를 오른쪽에서 왼쪽으로 강제 처리합니다.
LRI U+2066 왼쪽에서 오른쪽으로 격리 장치 인접 텍스트에 영향을 주지 않고 다음 텍스트를 왼쪽에서 오른쪽으로 강제 처리합니다.
RLI U+2067 오른쪽에서 왼쪽으로 분리 장치 인접 텍스트에 영향을 주지 않고 다음 텍스트를 오른쪽에서 왼쪽으로 강제 처리합니다.
FSI U+2068 최초의 강력한 절연체 다음 텍스트는 다음 문자가 나타내는 방향으로 강제로 처리합니다.
PDF U+202C POP 방향 포맷 가장 가까운 LRE, RLE, LRO 또는 RLO를 종료합니다.
PDI U+2069 팝 방향 절연체 가장 가까운 LRI 또는 RLI를 종료합니다.

방법론

부정 이용에서는, 나중에 다른 순서로 실행되도록, 쌍방향 문자는 소스 코드의 텍스트를 시각적으로 정렬하기 위해서 악용됩니다.문자열 리터럴을 사용할 수 있는 소스 코드 영역에 양방향 문자를 삽입할 수 있습니다.이것은 문서, 변수 또는 코멘트에 적용되는 경우가 많습니다.

취약한 Python 코드
힌트가 있는 소스 코드 소스 코드가 시각적으로 표시됨 소스 코드 해석 완료
방어하다 (숫자 1, 숫자 2):     "num1과 num2의 두 숫자를 가져가면 [RLI]가 반환됩니다."     돌아가다 숫자 1 + 숫자 2 
방어하다 (숫자 1, 숫자 2):     "num1과 num2의 두 숫자를 가져와서 돌려주세요."     돌아가다 숫자 1 + 숫자 2 
방어하다 (숫자 1, 숫자 2):     "num1과 num2의 두 숫자를 선택하고 "" ;     돌아가다     돌아가다 숫자 1 + 숫자 2 

위의 예에서는 RLI 마크(오른쪽에서 왼쪽으로 분리)에 의해 다음 텍스트가 역순으로 해석됩니다.세단 따옴표는 첫 번째(문자열 끝), 세미콜론은 다음(새 행 시작), 마지막에는 조기 반환(함수가 종료되고 그 아래의 코드가 무시됨)입니다.새로운 행은 RLI 마크를 종료하여 아래 코드로 유입되지 않도록 합니다.Bidi 문자 때문에 일부 소스 코드 에디터 및 IDE는 코드가 재배치된 것을 시각적으로 표시하지 않고 표시하기 위해 코드를 재배치하므로 일반적으로 휴먼 코드 리뷰어는 코드를 감지하지 못합니다.그러나 컴파일러에 코드를 삽입하면 컴파일러는 Bidi 문자를 무시하고 시각적으로 표시되는 순서와는 다른 순서로 문자를 처리할 수 있습니다.컴파일러가 완료되면 실행할 [5]수 없는 것처럼 보이는 코드를 실행할 수 있습니다.포맷 마크를 여러 번 조합하여 복잡한 공격을 [6]할 수 있습니다.

영향과 경감

유니코드 문자열을 지원하고 유니코드의 Bidi 알고리즘을 따르는 프로그래밍 언어는 부정 이용에 취약합니다.여기에는 Java, Go, C, C++, C#, Python, JavaScript [7]의 언어가 포함됩니다.

공격이 엄밀하게 오류는 아니지만 많은 컴파일러, 인터프리터 및 웹 사이트에서 공격 경고 또는 완화 조치를 추가했습니다.GNU GCC와 LLVM 모두 부정 [8]이용에 대한 요구를 수신했습니다.Marrek Polacek는 공격 게시 직후 GCC에 잠재적으로 안전하지 않은 방향성 문자에 대한 경고를 구현한 패치를 제출했습니다.이 기능은 GCC 12에 대해 통합되었습니다.-Wbidi-chars플래그.[9][10] LLVM은 유사한 패치도 병합했습니다.1.56.1의 부정 이용은 Rust에 의해 수정되어 기본적으로 문자가 포함된 코드가 거부되었습니다.Rust 개발자는 수정 [11]전에 취약한 패키지를 발견하지 못했습니다.

Red Hat은 웹사이트에서 이 공격을 "중간"[12]이라고 칭하며 권고문을 발표했다.GitHub은 블로그에 경고를 공개하고 저장소 [13]코드에서 Bidi 문자가 검출되면 웹 사이트를 업데이트하여 대화 상자를 표시합니다.

레퍼런스

  1. ^ "'Trojan Source' Bug Threatens the Security of All Code – Krebs on Security". Archived from the original on 2022-01-14. Retrieved 2022-01-17.
  2. ^ "VU#999008 - Compilers permit Unicode control and homoglyph characters". www.kb.cert.org. Archived from the original on 2022-01-21. Retrieved 2022-01-17.
  3. ^ "Usage Survey of Character Encodings broken down by Ranking". w3techs.com. Archived from the original on 2022-01-21. Retrieved 2022-01-17.
  4. ^ "UAX #9: Unicode Bidirectional Algorithm". www.unicode.org. Archived from the original on 2019-05-02. Retrieved 2022-01-17.
  5. ^ Edge, Jake (2021-11-03). "Trojan Source: tricks (no treats) with Unicode [LWN.net]". lwn.net. Retrieved 2022-03-12.
  6. ^ Stockley, Mark (2021-11-03). "Trojan Source: Hiding malicious code in plain sight". Malwarebytes Labs. Retrieved 2022-03-12.
  7. ^ Tung, Liam. "Programming languages: This sneaky trick could allow attackers to hide 'invisible' vulnerabilities in code". ZDNet. Archived from the original on 2021-12-21. Retrieved 2022-01-21.
  8. ^ "GCC & LLVM Patches Pending To Fend Off Trojan Source Attacks". www.phoronix.com. Archived from the original on 2021-12-01. Retrieved 2022-01-17.
  9. ^ Malcolm, David (2022-01-12). "Prevent Trojan Source attacks with GCC 12". Red Hat Developer. Archived from the original on 2022-01-17. Retrieved 2022-01-17.
  10. ^ "Warning Options (Using the GNU Compiler Collection (GCC))". gcc.gnu.org. Archived from the original on 2018-12-05. Retrieved 2022-01-17.
  11. ^ "Security advisory for rustc (CVE-2021-42574) Rust Blog". blog.rust-lang.org. Archived from the original on 2021-11-30. Retrieved 2022-01-21.
  12. ^ "RHSB-2021-007 Trojan source attacks (CVE-2021-42574,CVE-2021-42694)". Red Hat Customer Portal. Archived from the original on 2022-01-17. Retrieved 2022-01-21.
  13. ^ "Warning about bidirectional Unicode text GitHub Changelog". The GitHub Blog. Archived from the original on 2022-01-15. Retrieved 2022-01-21.

외부 링크