PC 청소 대신 감염? SteamCleaner가 연 공격의 문

유명 게임 플랫폼 스팀(Steam) 정리 툴 ‘SteamCleaner’로 위장한 악성코드가 크랙·키젠 등 불법 소프트웨어 사이트를 통해 유포되고 있다. 공격자는 깃허브(GitHub)에 올린 변조된 SteamCleaner와 안티 샌드박스 기법, 작업 스케줄러 등록 등을 통해 흔적을 숨기고 장기적으로 시스템을 장악한다. 이로 인해 추가 악성코드 설치, 정보 탈취, 원격 제어 등 2차 피해가 발생할 수 있어 불법 프로그램 및 출처 불명 파일 사용을 특히 주의해야 한다. 이번 글에서는 SteamCleaner 위장 악성코드의 유포 방식과 내부 동작 구조를 자세히 알아본다.

 

 

SteamCleaner는 Steam 클라이언트 사용 후 남는 불필요한 파일을 정리해 주는 오픈소스 유틸리티로, 2018년 9월을 끝으로 더 이상 업데이트되지 않고 있다. 이 SteamCleaner를 위장한 악성코드에 감염되면 악성 Node.js 스크립트가 사용자 PC에 상주하며, C2 서버와 주기적으로 통신하고, 공격자가 내리는 명령을 실행할 수 있는 상태가 된다.

 

[그림 1] 깃허브(GitHub)에 공개된 SteamCleaner 소스

 

공격자는 원본 소스 코드에 악성코드를 추가한 뒤 다시 빌드하고, 이를 InnoSetup 인스톨러로 패킹한후 유효한 인증서로 서명해 유포했다. 사용자가 해당 파일을 실행하면 공격자가 삽입한 코드가 동작해, 원격 명령을 수행할 수 있는 악성코드를 추가로 설치한다.

 

[그림 2] 악성코드 서명 및 속성 정보

 

이 악성코드는 크랙키젠 등 불법 소프트웨어 다운로드 페이지로 위장한 웹사이트에서 리디렉션을 통해 깃허브 리포지토리에 업로드된 악성 파일을 내려 받는 방식으로 유포되고 있다. 동일한 방식으로 유포된 기존 악성코드보다 탐지 수량이 크게 늘어난 점으로 미루어 볼 때, 동일한 악성코드가 여러 채널을 통해 활발히 퍼지고 있는 것으로 추정된다.

 

[그림 3] 프록시웨어(Proyware) 악성코드 유포 페이지 예시

 

[유포 URL]

• hxxps://raw.githubusercontent[.]com/erindaude/3O/main/Setup.exe

 

위 URL 이외에도, 공격자는 특정 GitHub 계정에 다수의 리포지토리를 생성한 뒤, 동일 유형의 악성코드를 다수 업로드하고 유포 경로로 활용하고 있다.

 

악성코드는 ‘Setup.exe’ 파일명으로 다운로드되며, 실행 시 C:\Program Files\SteamCleaner\ 경로에 악성코드를 설치한 뒤 동작을 시작한다. 이때 설치된 악성코드가 SteamCleaner를 변조해 빌드한 악성 실행 파일이며, 해당 파일에는 별도의 서명이 존재하지 않는다.

 

[그림 4] 악성코드 설치 경로

 

정상 SteamCleaner 실행 파일과 비교해 보면, 원본 코드는 그대로 유지한 상태에서 악성 행위를 수행하는 클래스와 메서드를 덧붙여 다시 빌드한 구조임을 확인할 수 있다.

 

[그림 5] 프록시웨어 악성코드 구조(좌) 및 정상 파일 구조(우)

 

공격자가 추가한 악성코드는 다수의 안티 샌드박스 기능이 포함돼 있다. 시스템 정보 확인, 포트 개수 확인, WMI 쿼리, 특정 파일경로 존재 여부 확인, 프로세스 및 모듈 점검, Sleep 동작 확인 등의 기법을 활용한다. 이 때문에 샌드박스 한경으로 판단되면 악성 행위를 수행하지 않고, 겉으로는 정상 프로그램처럼 원본 SteamCleaner만 실행되도록 동작한다.

 

[그림 6] 악성코드 실행 화면

 

[표 1] 안티 샌드박스 기법 요약

 

이후 악성코드 내부에 암호화돼 저장된 파워셸(PowerShell) 명령을 복호화한 후 실행한다. 해당 명령은 시스템에 Node.js를 설치하고, 두 개의 C2 서버로부터 서로 다른 악성 Node.js 스크립트를 다운로드해 설치한 뒤 각각 작업 스케줄러에 등록한다. 등록된 작업은 시스템 부팅 시와 1시간 주기로 자동 실행된다.

 

두 스크립트 모두 기본적으로 C2를 통해 명령 실행이 가능한 악성코드로, 명령을 수신하기 위해 C2에접속할 때 감염된 시스템 정보를 전송한다. 공격자는 해당 정보를 참조해 이후 공격 행위를 수행할 수 있다. C2에 접속할 때는 아래와 같은 구조의 JSON 데이터를 /d 경로로 전송하고, 실행 결과를 /e 경로로 전송한다. 헤더의 User-Agent 항목과 데이터의 agent_version 항목만 차이가 있으며, 해당 차이점은 [표 1]과 [표 2]를 참고하면 된다.

 

 

 

첫 번째 Node.js 스크립트는 C2 서버의 응답에 따라 지정된 URL에서 파일을 다운로드한 후, 해당 파일을 실행하기 위한 CMD, 파워셸 등의 명령을 수행할 수 있다. 한편, [표 2]의 “agent_version” 항목은 C2로 전송되는 JSON 데이터에 포함되며, 악성코드의 버전을 관리하기 위한 식별자로 사용되는 것으로 추정된다.

 

[표 2] 악성 스크립트 정보 요약(1)

 

두 번째 Node.js 스크립트는 C2로부터 전달받은 명령을 실행하고, 그 결과를 다시 C2로 전송하는 역할을 한다. 첫 번째 스크립트가 URL을 인자로 받아 해당 URL에서 내려 받은 내용을 CMD, 파워셸 등 외부 프로세스를 통해 실행하는 방식이라면, 두 번째 스크립트는 C2로부터 직접 명령어를 전달받아 Node.js 자체의 쉘 실행(exec) 함수를 통해 곧바로 실행한다. 또한, 두 번째 스크립트에는 더 강도 높은 난독화 기법이 적용돼 있어, 코드 분석을 한층 더 어렵게 만든다.

 

 

[표 3] 악성 스크립트 정보 요약(2)

 

분석 당시 두 스크립트 모두 C2에서 빈 명령만을 응답해 최종 행위를 확인할 수는 없었지만, 비슷한 유형의 악성코드가 과거 프록시웨어를 설치하는 명령을 응답한 이력이 있다. 하지만 임의 명령 실행이 가능한 악성코드인 만큼, 공격자의 의도에 따라 다른 악성코드를 설치하는 행위도 가능하므로 주의가 필요하다.

 

이전에 확인된 프록시웨어 유포 사례에 대한 내용은 아래 ASEC 블로그를 참고하면 된다.

 

• 유튜브 동영상 다운로드 사이트에서 유포 중인 Proxyware 악성코드

• 유튜브 동영상 다운로드 사이트에서 유포 중인 Proxyware 악성코드 – 2

 

이처럼 악성 행위를 숨기기 위해 정상 프로그램이나 유틸리티로 정교하게 위장한 악성코드가 지속적으로 유포되고 있다. 특히 신뢰할 수 없는 웹페이지나 커뮤니티에서 다운로드한 파일은 실행하지 않아야 하며, 불법 프로그램 사용은 반드시 지양해야 한다. 불법 파일은 악성코드의 유포 경로로 자주 활용되며, 시스템을 감염시켜 정보 탈취, 원격 제어, 추가 악성코드 설치 등 다양한 피해를 유발할 수 있다.

 

 

 

출처 : AhnLab

02-553-2331
견적 요청
카카오톡 문의