
트로이 목마 소스란 무엇이며 어떻게 소스 코드에 침투하는가?
11월 초, 케임브리지 대학교는 '트로이안 소스(Trojan-Source)'라는 연구를 발표했다. 이 연구는 소스 코드와 주석 내 방향성 서식 문자를 이용해 백도어를 숨기는 방법에 초점을 맞췄다. 이를 활용하면 컴파일러가 인간 코드 검토자와는 다르게 해석하는 논리를 가진 코드를 생성할 수 있다.
이 보안 취약점은 새로운 것입니다 — 비록 유니코드가 과거에 악용된 사례가 있었지만, 예를 들어 파일의 실제 확장자를 숨기거나 파일 이름의 마지막 부분 방향을 반전시키는 등의 방식으로 말이죠. 최근 연구에 따르면 많은 컴파일러는 소스 코드 내 유니코드 문자를 경고 없이 무시하는 반면, 텍스트 편집기(코드 편집기 포함)는 주석이 포함된 줄과 그에 기반한 코드를 재구성할 수 있습니다. 따라서 편집기가 코드와 주석을 컴파일러가 분석하는 방식과 다르게, 심지어 순서까지 바꿔서 표시하는 경우가 발생할 수 있습니다.
더 알아보려면 계속 읽어보세요. 또는 직접 팔을 걷어붙이고 트로이안 소스의 시뮬레이션 해킹을 체험해보고 싶다면, 저희 무료 공개 과제를 방문하여 직접 경험해 보세요.
양방향 텍스트
이러한 트로이 목마 소스 공격 중 하나는 유니코드 양방향(bidirectional) 알고리즘을 활용합니다. 이 알고리즘은 영어(좌에서 우)와 아랍어(우에서 좌)처럼 서로 다른 표시 순서를 가진 텍스트를 처리합니다. 방향 서식 문자를 사용하여 그룹을 재구성하고 문자 표시 순서를 변경할 수 있습니다.
위의 표에는 공격과 관련된 일부 양방향 오버라이드 문자가 포함되어 있습니다. 예를 들어
RLI e d o c PDI
RLI는 '오른쪽에서 왼쪽으로 분리'를 의미합니다. 이 기능은 텍스트를 그 문맥에서 분리(PDI로 구분)하고 방향성 분리( Pop-Directional Isolation) 를 수행한 후 오른쪽에서 왼쪽으로 읽습니다. 결과는 다음과 같습니다:
c o d e
컴파일러와 인터프리터는 일반적으로 소스 코드 분석 전에 양방향 서식 제어 문자(Bidi 오버라이드 포함)를 처리하지 않습니다. 방향성 서식 문자를 단순히 무시할 경우, 다음과 같이 분석합니다:
e d o c
낡은 포도주를 새 병에 담을 것인가?
물론 이는 전혀 새로운 일이 아닙니다. 과거에는 파일 이름에 방향성 서식 문자를 삽입하여 악성 특성을 숨기곤 했습니다. 'myspecialexe.doc'로 표시되는 이메일 첨부 파일은 RLO(오른쪽에서 왼쪽으로 덮어쓰기) 문자가 존재하지 않았다면 충분히 무해해 보일 수 있습니다. 이 문자는 실제 파일명이 "myspecialcod.exe"임을 나타냅니다.
트로이 목마 소스 공격은 소스 코드의 주석과 문자열에 방향성 서식 문자를 삽입합니다. 이는 구문 오류나 컴파일 오류를 발생시키지 않기 때문입니다. 이러한 제어 문자는 코드 논리의 표시 순서를 변경하여 컴파일러가 인간이 읽는 내용과 완전히 다른 내용을 해석하도록 만듭니다.
예를 들어, 다음 바이트를 이 순서로 포함하는 파일:

다음과 같이 방향성 서식 기호에 따라 재정렬됩니다

이 경우 방향 서식 문자가 명시적으로 호출되지 않으면 코드는 다음과 같이 렌더링됩니다:

RLO는 마지막 줄에서 닫는 괄호를 여는 괄호로 바꾸고 그 반대로도 바꿉니다. 이 코드 실행 결과는 "Sie sind ein Administrator"가 됩니다. 관리자 확인은 주석 처리되었지만 제어 문자들은 여전히 존재하는 것처럼 보이게 합니다.
(출처: https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)
그것이 당신에게 어떤 영향을 미칠 수 있을까요?
많은 언어가 이 공격에 취약합니다: C, C++, C#, JavaScript, Java, Rust, Go 및 Python이 있으며, 더 많은 언어가 존재할 것으로 추정됩니다. 평균적인 개발자는 소스 코드에서 방향성 서식 문자를 보면 불쾌해할 수 있지만, 초보자는 어깨를 으쓱하며 신경 쓰지 않을 수도 있습니다. 게다가 이러한 문자의 시각화는 IDE에 크게 의존하기 때문에 인식이 보장될 수 없습니다.
그러나 이러한 보안 취약점이 어떻게 소스 코드에 침투할 수 있었을까? 첫째, 신뢰할 수 없는 출처의 소스 코드를 사용할 때 악의적인 코드 기여가 발견되지 않은 채로 남아 있을 수 있다. 둘째, 인터넷에서 코드를 단순히 복사하여 붙여넣는 과정에서 발생할 수 있는데, 이는 우리 개발자 대부분이 한 번쯤 해본 경험이다. 대부분의 기업은 여러 공급업체의 소프트웨어 구성 요소에 의존합니다. 이는 우리가 이 코드를 완전히 신뢰하고 의지할 수 있는 정도가 어느 정도인지에 대한 의문을 제기합니다. 숨겨진 백도어를 포함할 수 있는 소스 코드를 어떻게 탐지할 수 있을까요?
그게 누구 문제야?
한편 컴파일러와 빌드 파이프라인은 문자열과 주석에 엄격히 제한되지 않는 한, 한 줄에 두 개 이상의 방향을 지닌 소스 코드 라인을 금지해야 합니다. 방향성 서식 문자가 문자열이나 주석 내에 표시되지 않을 경우, 해당 방향 변경이 줄 끝까지 연장될 수 있음을 유의하십시오. 일반적으로 코드 편집기는 동형 이형자나 방향 지정 형식화 문자 같은 의심스러운 유니코드 문자를 명시적으로 렌더링하고 강조 표시해야 합니다. 11월부터 GitHub는 양방향 유니코드 텍스트가 포함된 모든 코드 줄에 경고 표시와 메시지를 추가하지만, 해당 문자가 줄의 어디에 위치하는지는 강조 표시하지 않습니다. 이로 인해 악의적인 방향 변경이 무해한 방향 변경과 함께 여전히 스며들 수 있습니다.
개발자와 코드 검토자는 반드시 이에 대한 인식을 제고해야 합니다. 이러한 이유로 우리는 취약점을 시각화하는 통합 솔루션을 구축했습니다. 현재 이 통합 솔루션은 Java, C#, Python, GO 및 PHP에서 사용할 수 있습니다.
더 알고 싶다면, 트로이 소스의 시뮬레이션(공개 미션)을 시도해 보고 트로이 소스 연구를 읽어보십시오.

Secure Code Warrior 소프트웨어 개발 주기 전반에 걸쳐 코드를 보호하고 사이버 보안을 최우선으로 하는 문화를 조성하도록 귀사를 Secure Code Warrior . 앱 보안 관리자, 개발자, 최고정보보안책임자(CISO) 또는 보안 관련 업무를 담당하는 분이라면 누구든, 저희는 귀사가 안전하지 않은 코드로 인한 위험을 줄일 수 있도록 돕습니다.
데모 예약하기Laura Verheyde는 Secure Code Warrior 의 소프트웨어 개발자로서 취약점을 연구하고 Missions 및 코딩 연구소의 콘텐츠를 제작하는 데 주력하고 있습니다.


11월 초, 케임브리지 대학교는 '트로이안 소스(Trojan-Source)'라는 연구를 발표했다. 이 연구는 소스 코드와 주석 내 방향성 서식 문자를 이용해 백도어를 숨기는 방법에 초점을 맞췄다. 이를 활용하면 컴파일러가 인간 코드 검토자와는 다르게 해석하는 논리를 가진 코드를 생성할 수 있다.
이 보안 취약점은 새로운 것입니다 — 비록 유니코드가 과거에 악용된 사례가 있었지만, 예를 들어 파일의 실제 확장자를 숨기거나 파일 이름의 마지막 부분 방향을 반전시키는 등의 방식으로 말이죠. 최근 연구에 따르면 많은 컴파일러는 소스 코드 내 유니코드 문자를 경고 없이 무시하는 반면, 텍스트 편집기(코드 편집기 포함)는 주석이 포함된 줄과 그에 기반한 코드를 재구성할 수 있습니다. 따라서 편집기가 코드와 주석을 컴파일러가 분석하는 방식과 다르게, 심지어 순서까지 바꿔서 표시하는 경우가 발생할 수 있습니다.
더 알아보려면 계속 읽어보세요. 또는 직접 팔을 걷어붙이고 트로이안 소스의 시뮬레이션 해킹을 체험해보고 싶다면, 저희 무료 공개 과제를 방문하여 직접 경험해 보세요.
양방향 텍스트
이러한 트로이 목마 소스 공격 중 하나는 유니코드 양방향(bidirectional) 알고리즘을 활용합니다. 이 알고리즘은 영어(좌에서 우)와 아랍어(우에서 좌)처럼 서로 다른 표시 순서를 가진 텍스트를 처리합니다. 방향 서식 문자를 사용하여 그룹을 재구성하고 문자 표시 순서를 변경할 수 있습니다.
위의 표에는 공격과 관련된 일부 양방향 오버라이드 문자가 포함되어 있습니다. 예를 들어
RLI e d o c PDI
RLI는 '오른쪽에서 왼쪽으로 분리'를 의미합니다. 이 기능은 텍스트를 그 문맥에서 분리(PDI로 구분)하고 방향성 분리( Pop-Directional Isolation) 를 수행한 후 오른쪽에서 왼쪽으로 읽습니다. 결과는 다음과 같습니다:
c o d e
컴파일러와 인터프리터는 일반적으로 소스 코드 분석 전에 양방향 서식 제어 문자(Bidi 오버라이드 포함)를 처리하지 않습니다. 방향성 서식 문자를 단순히 무시할 경우, 다음과 같이 분석합니다:
e d o c
낡은 포도주를 새 병에 담을 것인가?
물론 이는 전혀 새로운 일이 아닙니다. 과거에는 파일 이름에 방향성 서식 문자를 삽입하여 악성 특성을 숨기곤 했습니다. 'myspecialexe.doc'로 표시되는 이메일 첨부 파일은 RLO(오른쪽에서 왼쪽으로 덮어쓰기) 문자가 존재하지 않았다면 충분히 무해해 보일 수 있습니다. 이 문자는 실제 파일명이 "myspecialcod.exe"임을 나타냅니다.
트로이 목마 소스 공격은 소스 코드의 주석과 문자열에 방향성 서식 문자를 삽입합니다. 이는 구문 오류나 컴파일 오류를 발생시키지 않기 때문입니다. 이러한 제어 문자는 코드 논리의 표시 순서를 변경하여 컴파일러가 인간이 읽는 내용과 완전히 다른 내용을 해석하도록 만듭니다.
예를 들어, 다음 바이트를 이 순서로 포함하는 파일:

다음과 같이 방향성 서식 기호에 따라 재정렬됩니다

이 경우 방향 서식 문자가 명시적으로 호출되지 않으면 코드는 다음과 같이 렌더링됩니다:

RLO는 마지막 줄에서 닫는 괄호를 여는 괄호로 바꾸고 그 반대로도 바꿉니다. 이 코드 실행 결과는 "Sie sind ein Administrator"가 됩니다. 관리자 확인은 주석 처리되었지만 제어 문자들은 여전히 존재하는 것처럼 보이게 합니다.
(출처: https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)
그것이 당신에게 어떤 영향을 미칠 수 있을까요?
많은 언어가 이 공격에 취약합니다: C, C++, C#, JavaScript, Java, Rust, Go 및 Python이 있으며, 더 많은 언어가 존재할 것으로 추정됩니다. 평균적인 개발자는 소스 코드에서 방향성 서식 문자를 보면 불쾌해할 수 있지만, 초보자는 어깨를 으쓱하며 신경 쓰지 않을 수도 있습니다. 게다가 이러한 문자의 시각화는 IDE에 크게 의존하기 때문에 인식이 보장될 수 없습니다.
그러나 이러한 보안 취약점이 어떻게 소스 코드에 침투할 수 있었을까? 첫째, 신뢰할 수 없는 출처의 소스 코드를 사용할 때 악의적인 코드 기여가 발견되지 않은 채로 남아 있을 수 있다. 둘째, 인터넷에서 코드를 단순히 복사하여 붙여넣는 과정에서 발생할 수 있는데, 이는 우리 개발자 대부분이 한 번쯤 해본 경험이다. 대부분의 기업은 여러 공급업체의 소프트웨어 구성 요소에 의존합니다. 이는 우리가 이 코드를 완전히 신뢰하고 의지할 수 있는 정도가 어느 정도인지에 대한 의문을 제기합니다. 숨겨진 백도어를 포함할 수 있는 소스 코드를 어떻게 탐지할 수 있을까요?
그게 누구 문제야?
한편 컴파일러와 빌드 파이프라인은 문자열과 주석에 엄격히 제한되지 않는 한, 한 줄에 두 개 이상의 방향을 지닌 소스 코드 라인을 금지해야 합니다. 방향성 서식 문자가 문자열이나 주석 내에 표시되지 않을 경우, 해당 방향 변경이 줄 끝까지 연장될 수 있음을 유의하십시오. 일반적으로 코드 편집기는 동형 이형자나 방향 지정 형식화 문자 같은 의심스러운 유니코드 문자를 명시적으로 렌더링하고 강조 표시해야 합니다. 11월부터 GitHub는 양방향 유니코드 텍스트가 포함된 모든 코드 줄에 경고 표시와 메시지를 추가하지만, 해당 문자가 줄의 어디에 위치하는지는 강조 표시하지 않습니다. 이로 인해 악의적인 방향 변경이 무해한 방향 변경과 함께 여전히 스며들 수 있습니다.
개발자와 코드 검토자는 반드시 이에 대한 인식을 제고해야 합니다. 이러한 이유로 우리는 취약점을 시각화하는 통합 솔루션을 구축했습니다. 현재 이 통합 솔루션은 Java, C#, Python, GO 및 PHP에서 사용할 수 있습니다.
더 알고 싶다면, 트로이 소스의 시뮬레이션(공개 미션)을 시도해 보고 트로이 소스 연구를 읽어보십시오.

11월 초, 케임브리지 대학교는 '트로이안 소스(Trojan-Source)'라는 연구를 발표했다. 이 연구는 소스 코드와 주석 내 방향성 서식 문자를 이용해 백도어를 숨기는 방법에 초점을 맞췄다. 이를 활용하면 컴파일러가 인간 코드 검토자와는 다르게 해석하는 논리를 가진 코드를 생성할 수 있다.
이 보안 취약점은 새로운 것입니다 — 비록 유니코드가 과거에 악용된 사례가 있었지만, 예를 들어 파일의 실제 확장자를 숨기거나 파일 이름의 마지막 부분 방향을 반전시키는 등의 방식으로 말이죠. 최근 연구에 따르면 많은 컴파일러는 소스 코드 내 유니코드 문자를 경고 없이 무시하는 반면, 텍스트 편집기(코드 편집기 포함)는 주석이 포함된 줄과 그에 기반한 코드를 재구성할 수 있습니다. 따라서 편집기가 코드와 주석을 컴파일러가 분석하는 방식과 다르게, 심지어 순서까지 바꿔서 표시하는 경우가 발생할 수 있습니다.
더 알아보려면 계속 읽어보세요. 또는 직접 팔을 걷어붙이고 트로이안 소스의 시뮬레이션 해킹을 체험해보고 싶다면, 저희 무료 공개 과제를 방문하여 직접 경험해 보세요.
양방향 텍스트
이러한 트로이 목마 소스 공격 중 하나는 유니코드 양방향(bidirectional) 알고리즘을 활용합니다. 이 알고리즘은 영어(좌에서 우)와 아랍어(우에서 좌)처럼 서로 다른 표시 순서를 가진 텍스트를 처리합니다. 방향 서식 문자를 사용하여 그룹을 재구성하고 문자 표시 순서를 변경할 수 있습니다.
위의 표에는 공격과 관련된 일부 양방향 오버라이드 문자가 포함되어 있습니다. 예를 들어
RLI e d o c PDI
RLI는 '오른쪽에서 왼쪽으로 분리'를 의미합니다. 이 기능은 텍스트를 그 문맥에서 분리(PDI로 구분)하고 방향성 분리( Pop-Directional Isolation) 를 수행한 후 오른쪽에서 왼쪽으로 읽습니다. 결과는 다음과 같습니다:
c o d e
컴파일러와 인터프리터는 일반적으로 소스 코드 분석 전에 양방향 서식 제어 문자(Bidi 오버라이드 포함)를 처리하지 않습니다. 방향성 서식 문자를 단순히 무시할 경우, 다음과 같이 분석합니다:
e d o c
낡은 포도주를 새 병에 담을 것인가?
물론 이는 전혀 새로운 일이 아닙니다. 과거에는 파일 이름에 방향성 서식 문자를 삽입하여 악성 특성을 숨기곤 했습니다. 'myspecialexe.doc'로 표시되는 이메일 첨부 파일은 RLO(오른쪽에서 왼쪽으로 덮어쓰기) 문자가 존재하지 않았다면 충분히 무해해 보일 수 있습니다. 이 문자는 실제 파일명이 "myspecialcod.exe"임을 나타냅니다.
트로이 목마 소스 공격은 소스 코드의 주석과 문자열에 방향성 서식 문자를 삽입합니다. 이는 구문 오류나 컴파일 오류를 발생시키지 않기 때문입니다. 이러한 제어 문자는 코드 논리의 표시 순서를 변경하여 컴파일러가 인간이 읽는 내용과 완전히 다른 내용을 해석하도록 만듭니다.
예를 들어, 다음 바이트를 이 순서로 포함하는 파일:

다음과 같이 방향성 서식 기호에 따라 재정렬됩니다

이 경우 방향 서식 문자가 명시적으로 호출되지 않으면 코드는 다음과 같이 렌더링됩니다:

RLO는 마지막 줄에서 닫는 괄호를 여는 괄호로 바꾸고 그 반대로도 바꿉니다. 이 코드 실행 결과는 "Sie sind ein Administrator"가 됩니다. 관리자 확인은 주석 처리되었지만 제어 문자들은 여전히 존재하는 것처럼 보이게 합니다.
(출처: https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)
그것이 당신에게 어떤 영향을 미칠 수 있을까요?
많은 언어가 이 공격에 취약합니다: C, C++, C#, JavaScript, Java, Rust, Go 및 Python이 있으며, 더 많은 언어가 존재할 것으로 추정됩니다. 평균적인 개발자는 소스 코드에서 방향성 서식 문자를 보면 불쾌해할 수 있지만, 초보자는 어깨를 으쓱하며 신경 쓰지 않을 수도 있습니다. 게다가 이러한 문자의 시각화는 IDE에 크게 의존하기 때문에 인식이 보장될 수 없습니다.
그러나 이러한 보안 취약점이 어떻게 소스 코드에 침투할 수 있었을까? 첫째, 신뢰할 수 없는 출처의 소스 코드를 사용할 때 악의적인 코드 기여가 발견되지 않은 채로 남아 있을 수 있다. 둘째, 인터넷에서 코드를 단순히 복사하여 붙여넣는 과정에서 발생할 수 있는데, 이는 우리 개발자 대부분이 한 번쯤 해본 경험이다. 대부분의 기업은 여러 공급업체의 소프트웨어 구성 요소에 의존합니다. 이는 우리가 이 코드를 완전히 신뢰하고 의지할 수 있는 정도가 어느 정도인지에 대한 의문을 제기합니다. 숨겨진 백도어를 포함할 수 있는 소스 코드를 어떻게 탐지할 수 있을까요?
그게 누구 문제야?
한편 컴파일러와 빌드 파이프라인은 문자열과 주석에 엄격히 제한되지 않는 한, 한 줄에 두 개 이상의 방향을 지닌 소스 코드 라인을 금지해야 합니다. 방향성 서식 문자가 문자열이나 주석 내에 표시되지 않을 경우, 해당 방향 변경이 줄 끝까지 연장될 수 있음을 유의하십시오. 일반적으로 코드 편집기는 동형 이형자나 방향 지정 형식화 문자 같은 의심스러운 유니코드 문자를 명시적으로 렌더링하고 강조 표시해야 합니다. 11월부터 GitHub는 양방향 유니코드 텍스트가 포함된 모든 코드 줄에 경고 표시와 메시지를 추가하지만, 해당 문자가 줄의 어디에 위치하는지는 강조 표시하지 않습니다. 이로 인해 악의적인 방향 변경이 무해한 방향 변경과 함께 여전히 스며들 수 있습니다.
개발자와 코드 검토자는 반드시 이에 대한 인식을 제고해야 합니다. 이러한 이유로 우리는 취약점을 시각화하는 통합 솔루션을 구축했습니다. 현재 이 통합 솔루션은 Java, C#, Python, GO 및 PHP에서 사용할 수 있습니다.
더 알고 싶다면, 트로이 소스의 시뮬레이션(공개 미션)을 시도해 보고 트로이 소스 연구를 읽어보십시오.

아래 링크를 클릭하여 이 자료의 PDF를 다운로드하십시오.
Secure Code Warrior 소프트웨어 개발 주기 전반에 걸쳐 코드를 보호하고 사이버 보안을 최우선으로 하는 문화를 조성하도록 귀사를 Secure Code Warrior . 앱 보안 관리자, 개발자, 최고정보보안책임자(CISO) 또는 보안 관련 업무를 담당하는 분이라면 누구든, 저희는 귀사가 안전하지 않은 코드로 인한 위험을 줄일 수 있도록 돕습니다.
보고서 보기데모 예약하기Laura Verheyde는 Secure Code Warrior 의 소프트웨어 개발자로서 취약점을 연구하고 Missions 및 코딩 연구소의 콘텐츠를 제작하는 데 주력하고 있습니다.
11월 초, 케임브리지 대학교는 '트로이안 소스(Trojan-Source)'라는 연구를 발표했다. 이 연구는 소스 코드와 주석 내 방향성 서식 문자를 이용해 백도어를 숨기는 방법에 초점을 맞췄다. 이를 활용하면 컴파일러가 인간 코드 검토자와는 다르게 해석하는 논리를 가진 코드를 생성할 수 있다.
이 보안 취약점은 새로운 것입니다 — 비록 유니코드가 과거에 악용된 사례가 있었지만, 예를 들어 파일의 실제 확장자를 숨기거나 파일 이름의 마지막 부분 방향을 반전시키는 등의 방식으로 말이죠. 최근 연구에 따르면 많은 컴파일러는 소스 코드 내 유니코드 문자를 경고 없이 무시하는 반면, 텍스트 편집기(코드 편집기 포함)는 주석이 포함된 줄과 그에 기반한 코드를 재구성할 수 있습니다. 따라서 편집기가 코드와 주석을 컴파일러가 분석하는 방식과 다르게, 심지어 순서까지 바꿔서 표시하는 경우가 발생할 수 있습니다.
더 알아보려면 계속 읽어보세요. 또는 직접 팔을 걷어붙이고 트로이안 소스의 시뮬레이션 해킹을 체험해보고 싶다면, 저희 무료 공개 과제를 방문하여 직접 경험해 보세요.
양방향 텍스트
이러한 트로이 목마 소스 공격 중 하나는 유니코드 양방향(bidirectional) 알고리즘을 활용합니다. 이 알고리즘은 영어(좌에서 우)와 아랍어(우에서 좌)처럼 서로 다른 표시 순서를 가진 텍스트를 처리합니다. 방향 서식 문자를 사용하여 그룹을 재구성하고 문자 표시 순서를 변경할 수 있습니다.
위의 표에는 공격과 관련된 일부 양방향 오버라이드 문자가 포함되어 있습니다. 예를 들어
RLI e d o c PDI
RLI는 '오른쪽에서 왼쪽으로 분리'를 의미합니다. 이 기능은 텍스트를 그 문맥에서 분리(PDI로 구분)하고 방향성 분리( Pop-Directional Isolation) 를 수행한 후 오른쪽에서 왼쪽으로 읽습니다. 결과는 다음과 같습니다:
c o d e
컴파일러와 인터프리터는 일반적으로 소스 코드 분석 전에 양방향 서식 제어 문자(Bidi 오버라이드 포함)를 처리하지 않습니다. 방향성 서식 문자를 단순히 무시할 경우, 다음과 같이 분석합니다:
e d o c
낡은 포도주를 새 병에 담을 것인가?
물론 이는 전혀 새로운 일이 아닙니다. 과거에는 파일 이름에 방향성 서식 문자를 삽입하여 악성 특성을 숨기곤 했습니다. 'myspecialexe.doc'로 표시되는 이메일 첨부 파일은 RLO(오른쪽에서 왼쪽으로 덮어쓰기) 문자가 존재하지 않았다면 충분히 무해해 보일 수 있습니다. 이 문자는 실제 파일명이 "myspecialcod.exe"임을 나타냅니다.
트로이 목마 소스 공격은 소스 코드의 주석과 문자열에 방향성 서식 문자를 삽입합니다. 이는 구문 오류나 컴파일 오류를 발생시키지 않기 때문입니다. 이러한 제어 문자는 코드 논리의 표시 순서를 변경하여 컴파일러가 인간이 읽는 내용과 완전히 다른 내용을 해석하도록 만듭니다.
예를 들어, 다음 바이트를 이 순서로 포함하는 파일:

다음과 같이 방향성 서식 기호에 따라 재정렬됩니다

이 경우 방향 서식 문자가 명시적으로 호출되지 않으면 코드는 다음과 같이 렌더링됩니다:

RLO는 마지막 줄에서 닫는 괄호를 여는 괄호로 바꾸고 그 반대로도 바꿉니다. 이 코드 실행 결과는 "Sie sind ein Administrator"가 됩니다. 관리자 확인은 주석 처리되었지만 제어 문자들은 여전히 존재하는 것처럼 보이게 합니다.
(출처: https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)
그것이 당신에게 어떤 영향을 미칠 수 있을까요?
많은 언어가 이 공격에 취약합니다: C, C++, C#, JavaScript, Java, Rust, Go 및 Python이 있으며, 더 많은 언어가 존재할 것으로 추정됩니다. 평균적인 개발자는 소스 코드에서 방향성 서식 문자를 보면 불쾌해할 수 있지만, 초보자는 어깨를 으쓱하며 신경 쓰지 않을 수도 있습니다. 게다가 이러한 문자의 시각화는 IDE에 크게 의존하기 때문에 인식이 보장될 수 없습니다.
그러나 이러한 보안 취약점이 어떻게 소스 코드에 침투할 수 있었을까? 첫째, 신뢰할 수 없는 출처의 소스 코드를 사용할 때 악의적인 코드 기여가 발견되지 않은 채로 남아 있을 수 있다. 둘째, 인터넷에서 코드를 단순히 복사하여 붙여넣는 과정에서 발생할 수 있는데, 이는 우리 개발자 대부분이 한 번쯤 해본 경험이다. 대부분의 기업은 여러 공급업체의 소프트웨어 구성 요소에 의존합니다. 이는 우리가 이 코드를 완전히 신뢰하고 의지할 수 있는 정도가 어느 정도인지에 대한 의문을 제기합니다. 숨겨진 백도어를 포함할 수 있는 소스 코드를 어떻게 탐지할 수 있을까요?
그게 누구 문제야?
한편 컴파일러와 빌드 파이프라인은 문자열과 주석에 엄격히 제한되지 않는 한, 한 줄에 두 개 이상의 방향을 지닌 소스 코드 라인을 금지해야 합니다. 방향성 서식 문자가 문자열이나 주석 내에 표시되지 않을 경우, 해당 방향 변경이 줄 끝까지 연장될 수 있음을 유의하십시오. 일반적으로 코드 편집기는 동형 이형자나 방향 지정 형식화 문자 같은 의심스러운 유니코드 문자를 명시적으로 렌더링하고 강조 표시해야 합니다. 11월부터 GitHub는 양방향 유니코드 텍스트가 포함된 모든 코드 줄에 경고 표시와 메시지를 추가하지만, 해당 문자가 줄의 어디에 위치하는지는 강조 표시하지 않습니다. 이로 인해 악의적인 방향 변경이 무해한 방향 변경과 함께 여전히 스며들 수 있습니다.
개발자와 코드 검토자는 반드시 이에 대한 인식을 제고해야 합니다. 이러한 이유로 우리는 취약점을 시각화하는 통합 솔루션을 구축했습니다. 현재 이 통합 솔루션은 Java, C#, Python, GO 및 PHP에서 사용할 수 있습니다.
더 알고 싶다면, 트로이 소스의 시뮬레이션(공개 미션)을 시도해 보고 트로이 소스 연구를 읽어보십시오.




%20(1).avif)
.avif)
