
트로이 목마 소스란 무엇이며 어떻게 소스 코드에 침투하는가
11월 초, 케임브리지 대학교는 '트로이안-소스(Trojan-Source)'라는 연구를 발표했다. 이 연구는 방향성 서식 문자를 이용해 소스 코드와 주석에 백도어를 숨기는 방법에 초점을 맞췄다. 이를 통해 컴파일러와 인간 코드 검토자가 서로 다르게 해석하는 논리를 가진 코드를 생성할 수 있다.
이 취약점은 새로운 것이지만, 유니코드는 과거에도 악용된 바 있습니다. 예를 들어, 파일 이름의 마지막 부분을 반전시켜 파일 이름의 실제 확장자를 숨기는 방식이 있습니다. 최근 연구에 따르면 많은 컴파일러가 사전 경고 없이 소스 코드의 유니코드 문자를 무시하는 반면, 텍스트 편집기(코드 편집기 포함)는 주석과 이를 기반으로 한 코드가 포함된 줄을 재배열할 수 있습니다. 따라서 편집기가 코드와 주석을 컴파일러가 분석할 때와 다른 형태 및 순서로 표시할 수 있으며, 심지어 코드와 주석을 서로 바꿔치기할 수도 있습니다.
더 많은 정보를 얻으려면 계속 읽어보세요. 또는 직접 해보시려면 트로이 목마 소스(Trojan Source)의 모의 해킹을 체험해 보실 수 있는 무료 공개 미션 페이지로 접속하세요.
양방향 텍스트
트로이목마-소스(Trojan-Source) 공격 중 하나는 유니코드 양방향(Bidi) 알고리즘을 활용합니다. 이 알고리즘은 영어(좌에서 우)와 아랍어(우에서 좌)처럼 서로 다른 표시 방향을 가진 텍스트를 어떻게 결합할지 담당합니다. 방향 지정 형식 문자는 문자 그룹화를 재구성하고 문자 표시 순서를 변경하는 데 사용될 수 있습니다.
위의 표에는 공격과 관련된 비디의 무효화된 캐릭터 일부가 포함되어 있습니다. 예를 들어,
RLI e d a c PDI
RLI는 오른쪽에서 왼쪽으로 분리함을 의미합니다. 텍스트를 그 문맥(PDI, 방향성 분리 팝으로 구분됨)에서 분리하고 오른쪽에서 왼쪽으로 읽습니다. 결과는 다음과 같습니다:
c a d e
그러나 컴파일러와 인터프리터는 일반적으로 소스 코드를 분석하기 전에 양방향 제어 문자(Bidi 제어 문자 포함)를 처리하지 않습니다. 방향 제어 문자를 단순히 무시하면 다음과 같이 해석됩니다:
e d a c
오래된 포도주를 새 부대에 담았는가?
물론, 이는 전혀 새로운 일이 아닙니다. 과거에는 파일 이름에 방향성 형식 문자를 삽입하여 악성 본질을 위장하기도 했습니다. 'myspecialexe.doc'로 보이는 이메일 첨부 파일은 RLO(오른쪽에서 왼쪽으로 취소) 문자가 포함되어 실제 이름이 'myspecialcod.exe'임을 드러내지 않는다면 상당히 무해해 보일 수 있습니다.
트로이 목마 공격은 소스 코드 내 주석 및 문자열에 방향 제어 문자를 삽입합니다. 이는 구문 오류나 컴파일 오류를 발생시키지 않기 때문입니다. 이러한 제어 문자는 코드 논리의 표시 순서를 변경하여 컴파일러가 인간이 읽는 내용과 완전히 다른 내용을 해석하도록 만듭니다.
예를 들어, 다음과 같은 바이트를 이 순서로 포함하는 파일:

다음과 같이 방향 지정 형식 문자에 따라 재정렬됩니다

방향 지정 형식 문자가 명시적으로 호출되지 않을 경우 코드가 다음과 같이 표현되도록 합니다:

RLO는 마지막 줄에서 닫는 코르셋을 여는 코르셋으로, 또는 그 반대로 변환합니다. 이 코드를 실행하면 결과는 "당신은 관리자입니다"가 됩니다. 관리자 확인은 주석 처리되었지만, 제어 문자들은 여전히 존재하는 것처럼 보입니다.
(출처: 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에서 이용 가능합니다.
더 알고 싶다면, 트로이 소스( Trojan Source) 의 시뮬레이션(공개 미션)을 시도해보고, 트로이 소스 연구를 읽어보세요.

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


11월 초, 케임브리지 대학교는 '트로이안-소스(Trojan-Source)'라는 연구를 발표했다. 이 연구는 방향성 서식 문자를 이용해 소스 코드와 주석에 백도어를 숨기는 방법에 초점을 맞췄다. 이를 통해 컴파일러와 인간 코드 검토자가 서로 다르게 해석하는 논리를 가진 코드를 생성할 수 있다.
이 취약점은 새로운 것이지만, 유니코드는 과거에도 악용된 바 있습니다. 예를 들어, 파일 이름의 마지막 부분을 반전시켜 파일 이름의 실제 확장자를 숨기는 방식이 있습니다. 최근 연구에 따르면 많은 컴파일러가 사전 경고 없이 소스 코드의 유니코드 문자를 무시하는 반면, 텍스트 편집기(코드 편집기 포함)는 주석과 이를 기반으로 한 코드가 포함된 줄을 재배열할 수 있습니다. 따라서 편집기가 코드와 주석을 컴파일러가 분석할 때와 다른 형태 및 순서로 표시할 수 있으며, 심지어 코드와 주석을 서로 바꿔치기할 수도 있습니다.
더 많은 정보를 얻으려면 계속 읽어보세요. 또는 직접 해보시려면 트로이 목마 소스(Trojan Source)의 모의 해킹을 체험해 보실 수 있는 무료 공개 미션 페이지로 접속하세요.
양방향 텍스트
트로이목마-소스(Trojan-Source) 공격 중 하나는 유니코드 양방향(Bidi) 알고리즘을 활용합니다. 이 알고리즘은 영어(좌에서 우)와 아랍어(우에서 좌)처럼 서로 다른 표시 방향을 가진 텍스트를 어떻게 결합할지 담당합니다. 방향 지정 형식 문자는 문자 그룹화를 재구성하고 문자 표시 순서를 변경하는 데 사용될 수 있습니다.
위의 표에는 공격과 관련된 비디의 무효화된 캐릭터 일부가 포함되어 있습니다. 예를 들어,
RLI e d a c PDI
RLI는 오른쪽에서 왼쪽으로 분리함을 의미합니다. 텍스트를 그 문맥(PDI, 방향성 분리 팝으로 구분됨)에서 분리하고 오른쪽에서 왼쪽으로 읽습니다. 결과는 다음과 같습니다:
c a d e
그러나 컴파일러와 인터프리터는 일반적으로 소스 코드를 분석하기 전에 양방향 제어 문자(Bidi 제어 문자 포함)를 처리하지 않습니다. 방향 제어 문자를 단순히 무시하면 다음과 같이 해석됩니다:
e d a c
오래된 포도주를 새 부대에 담았는가?
물론, 이는 전혀 새로운 일이 아닙니다. 과거에는 파일 이름에 방향성 형식 문자를 삽입하여 악성 본질을 위장하기도 했습니다. 'myspecialexe.doc'로 보이는 이메일 첨부 파일은 RLO(오른쪽에서 왼쪽으로 취소) 문자가 포함되어 실제 이름이 'myspecialcod.exe'임을 드러내지 않는다면 상당히 무해해 보일 수 있습니다.
트로이 목마 공격은 소스 코드 내 주석 및 문자열에 방향 제어 문자를 삽입합니다. 이는 구문 오류나 컴파일 오류를 발생시키지 않기 때문입니다. 이러한 제어 문자는 코드 논리의 표시 순서를 변경하여 컴파일러가 인간이 읽는 내용과 완전히 다른 내용을 해석하도록 만듭니다.
예를 들어, 다음과 같은 바이트를 이 순서로 포함하는 파일:

다음과 같이 방향 지정 형식 문자에 따라 재정렬됩니다

방향 지정 형식 문자가 명시적으로 호출되지 않을 경우 코드가 다음과 같이 표현되도록 합니다:

RLO는 마지막 줄에서 닫는 코르셋을 여는 코르셋으로, 또는 그 반대로 변환합니다. 이 코드를 실행하면 결과는 "당신은 관리자입니다"가 됩니다. 관리자 확인은 주석 처리되었지만, 제어 문자들은 여전히 존재하는 것처럼 보입니다.
(출처: 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에서 이용 가능합니다.
더 알고 싶다면, 트로이 소스( Trojan Source) 의 시뮬레이션(공개 미션)을 시도해보고, 트로이 소스 연구를 읽어보세요.

11월 초, 케임브리지 대학교는 '트로이안-소스(Trojan-Source)'라는 연구를 발표했다. 이 연구는 방향성 서식 문자를 이용해 소스 코드와 주석에 백도어를 숨기는 방법에 초점을 맞췄다. 이를 통해 컴파일러와 인간 코드 검토자가 서로 다르게 해석하는 논리를 가진 코드를 생성할 수 있다.
이 취약점은 새로운 것이지만, 유니코드는 과거에도 악용된 바 있습니다. 예를 들어, 파일 이름의 마지막 부분을 반전시켜 파일 이름의 실제 확장자를 숨기는 방식이 있습니다. 최근 연구에 따르면 많은 컴파일러가 사전 경고 없이 소스 코드의 유니코드 문자를 무시하는 반면, 텍스트 편집기(코드 편집기 포함)는 주석과 이를 기반으로 한 코드가 포함된 줄을 재배열할 수 있습니다. 따라서 편집기가 코드와 주석을 컴파일러가 분석할 때와 다른 형태 및 순서로 표시할 수 있으며, 심지어 코드와 주석을 서로 바꿔치기할 수도 있습니다.
더 많은 정보를 얻으려면 계속 읽어보세요. 또는 직접 해보시려면 트로이 목마 소스(Trojan Source)의 모의 해킹을 체험해 보실 수 있는 무료 공개 미션 페이지로 접속하세요.
양방향 텍스트
트로이목마-소스(Trojan-Source) 공격 중 하나는 유니코드 양방향(Bidi) 알고리즘을 활용합니다. 이 알고리즘은 영어(좌에서 우)와 아랍어(우에서 좌)처럼 서로 다른 표시 방향을 가진 텍스트를 어떻게 결합할지 담당합니다. 방향 지정 형식 문자는 문자 그룹화를 재구성하고 문자 표시 순서를 변경하는 데 사용될 수 있습니다.
위의 표에는 공격과 관련된 비디의 무효화된 캐릭터 일부가 포함되어 있습니다. 예를 들어,
RLI e d a c PDI
RLI는 오른쪽에서 왼쪽으로 분리함을 의미합니다. 텍스트를 그 문맥(PDI, 방향성 분리 팝으로 구분됨)에서 분리하고 오른쪽에서 왼쪽으로 읽습니다. 결과는 다음과 같습니다:
c a d e
그러나 컴파일러와 인터프리터는 일반적으로 소스 코드를 분석하기 전에 양방향 제어 문자(Bidi 제어 문자 포함)를 처리하지 않습니다. 방향 제어 문자를 단순히 무시하면 다음과 같이 해석됩니다:
e d a c
오래된 포도주를 새 부대에 담았는가?
물론, 이는 전혀 새로운 일이 아닙니다. 과거에는 파일 이름에 방향성 형식 문자를 삽입하여 악성 본질을 위장하기도 했습니다. 'myspecialexe.doc'로 보이는 이메일 첨부 파일은 RLO(오른쪽에서 왼쪽으로 취소) 문자가 포함되어 실제 이름이 'myspecialcod.exe'임을 드러내지 않는다면 상당히 무해해 보일 수 있습니다.
트로이 목마 공격은 소스 코드 내 주석 및 문자열에 방향 제어 문자를 삽입합니다. 이는 구문 오류나 컴파일 오류를 발생시키지 않기 때문입니다. 이러한 제어 문자는 코드 논리의 표시 순서를 변경하여 컴파일러가 인간이 읽는 내용과 완전히 다른 내용을 해석하도록 만듭니다.
예를 들어, 다음과 같은 바이트를 이 순서로 포함하는 파일:

다음과 같이 방향 지정 형식 문자에 따라 재정렬됩니다

방향 지정 형식 문자가 명시적으로 호출되지 않을 경우 코드가 다음과 같이 표현되도록 합니다:

RLO는 마지막 줄에서 닫는 코르셋을 여는 코르셋으로, 또는 그 반대로 변환합니다. 이 코드를 실행하면 결과는 "당신은 관리자입니다"가 됩니다. 관리자 확인은 주석 처리되었지만, 제어 문자들은 여전히 존재하는 것처럼 보입니다.
(출처: 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에서 이용 가능합니다.
더 알고 싶다면, 트로이 소스( Trojan Source) 의 시뮬레이션(공개 미션)을 시도해보고, 트로이 소스 연구를 읽어보세요.

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

다음과 같이 방향 지정 형식 문자에 따라 재정렬됩니다

방향 지정 형식 문자가 명시적으로 호출되지 않을 경우 코드가 다음과 같이 표현되도록 합니다:

RLO는 마지막 줄에서 닫는 코르셋을 여는 코르셋으로, 또는 그 반대로 변환합니다. 이 코드를 실행하면 결과는 "당신은 관리자입니다"가 됩니다. 관리자 확인은 주석 처리되었지만, 제어 문자들은 여전히 존재하는 것처럼 보입니다.
(출처: 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에서 이용 가능합니다.
더 알고 싶다면, 트로이 소스( Trojan Source) 의 시뮬레이션(공개 미션)을 시도해보고, 트로이 소스 연구를 읽어보세요.




%20(1).avif)
.avif)
