겉보기엔 정상? 깃허브 속 악성코드의 실체
안랩은 최근 깃허브(Github) 저장소를 통해 SmartLoader 악성코드가 다수 유포되는 정황을 포착했다. 해당 저장소들은 정상적인 프로젝트로 위장돼 있었으며, 게임 핵, 소프트웨어 크랙, 자동화 도구 등 사용자들의 호기심을 끌 만한 주제로 정교하게 제작됐다. 저장소에는 README 파일과 함께 압축 파일이 포함돼 있었는데, 이 압축 파일 안에 SmartLoader 악성코드가 숨겨져 있었다. 이러한 악성코드 유포 방식의 특징과 주의해야 할 점을 살펴보자.
- 아래는 공격자가 SmartLoader를 배포한 깃허브 주소 목록이다.
SmartLoader 유포 주소 목록
hxxps://github[.]com/[공격자계정]/Maple-Story-Menu/releases/download/v3.2.0/Maple.Story.Menu.v3.2.0.zip
hxxps://github[.]com/[공격자계정]/Minecraft-Vape-Client/releases/download/v1.3.1/Minecraft.Vape.Client.v1.3.1.zip
hxxps://github[.]com/[공격자계정]/ms-rewards-automation/releases/download/v1.8.1/ms-rewards-automation.v1.8.1.zip
hxxp://github[.]com/[공격자계정]/ddos-protection/releases/download/uncork/ddos-protection-uncork.zip
hxxp://github[.]com/[공격자계정]/strongvpn/releases/download/pseudobrotherly/strongvpn_pseudobrotherly.zip
hxxp://github[.]com/[공격자계정]/VSDC-Video-Editor-Pro-Crack/releases/download/2.3.3/vsdc-video-editor-pro-crack-2.3.3.zip
hxxp://github[.]com/[공격자계정]/Instagram-Followers-Booster-v2.4.5/releases/download/v1.3.6/instagram-followers-booster-v2.4.5-v1.3.6.zip
hxxps://github[.]com/[공격자계정]/Call-of-Duty-Modern-Warfare-3-MW3-Hack-Cheat-Aimbot-Esp-Unban-Hwid-Unlocks-GunLVL/releases/download/desertless/Desertless.zip
hxxps://github[.]com/[공격자계정]/MCP-Manager-GUI/releases/download/v1.6.1/MCP.Manager.GUI.v1.6.1.zip
hxxp://github[.]com/[공격자계정]/Project-Zomboid-Hack/releases/download/scholae/project-zomboid-hack-scholae.zip
hxxps://github[.]com/[공격자계정]/portfolio/raw/refs/heads/main/Software.zip
이처럼 게임 핵, 소프트웨어 크랙, 자동화 도구 등의 관련 키워드를 검색하면 SmartLoader 악성코드가 포함된 깃허브 저장소가 검색 결과 상단에 노출될 수 있어, 사용자가 쉽게 접근하게 된다.
[그림 1] 구글 검색 결과창의 상단에 노출된 SmartLoader 유포지
정상 프로젝트로 위장한 깃허브 저장소에는 README 파일과 프로젝트 관련 파일들이 포함돼 있으며, README 파일에는 프로젝트 개요, 목차, 주요 기능, 설치 및 사용 방법 등이 그럴듯하게 작성돼 있다. 이런 구성 때문에 일반 사용자는 이를 악성코드 유포지로 의심하기 어렵다. 사용자가 안내된 절차에 따라 압축 파일을 내려받으면, 그 안에는 악성코드가 숨어 있다.
[그림 2] 정상 프로젝트로 위장한 깃허브 저장소 (1)
[그림 3] 정상 프로젝트로 위장한 깃허브 저장소 (2)
[그림 4] 압축 파일 내부
다운로드된 압축 파일에는 다음과 같은 4개의 파일이 들어 있었다.
- java.exe: Lua 로더 실행 파일인 luajit.exe (정상)
- Launcher.cmd: module.class 를 인자로 java.exe 를 실행하는 배치 파일 (악성)
- lua51.dll: Luajit 런타임 인터프리터 (정상)
- module.class: 난독화된 Lua 스크립트 (악성)
사용자가 Launcher.cmd 파일을 실행하면 luajit.exe(Lua 로더)를 통해 module.class에 담긴 난독화된 악성 스크립트를 로드하고, SmartLoader 가 동작한다. 이후 SmartLoader는 지속성을 유지하기 위해 luajit.exe(ODE3.exe), module.class, lua51.dll 파일을 “%AppData%\ODE3” 경로에 복사하고, 작업 스케줄러에 “SecurityHealthService_ODE3”라는 이름으로 등록한다.
[그림 5] 스크린샷 전송 (BMP 파일)
[그림 6] 시스템 정보 전송 (인코딩된 형태)
이후 감염된 PC의 스크린샷과 시스템 정보가 C2 서버로 전송되며, 서버로부터 수신한 응답 값을 기반으로 추가 악성 행위를 수행한다. C2 서버와 주고받는 데이터는 Base64 인코딩 및 바이트 연산을 통해 암호화된 형태로 전달된다.
이때 사용되는 Key 값은 Lua 스크립트 내에 난독화된 형태로 존재하며, 동적 메모리 분석을 통해 해당 Key를 확보할 수 있었다.
- C2
hxxp://89.169.13[.]215/api/YTAsODYsODIsOWQsYTEsODgsOTAsOTUsNjUsN2Qs
[그림 7] C2 응답 값
응답 값은 JSON 형식으로 전달되며, loader 와 tasks 2가지 데이터를 포함한다. loader는 악성코드의 동작을 제어하는 설정 값이며, tasks는 추가 페이로드를 다운로드하고 실행하기 위한 작업 목록을 의미한다. 확보한 Key를 사용해 해당 데이터를 디코딩한 결과는 다음과 같다.
[표 1] 디코딩된 loader, tasks 데이터
분석 당시, 응답 받은 tasks 항목에는 총 3개의 페이로드가 포함돼 있었으며, 각 페이로드가 실행된 후에는 수행된 작업 ID와 감염된 PC의 국가 코드가 C2 서버로 전송된다. 다운로드되는 파일들은 앞서 설명한 방식과 동일하게 인코딩된 형태이며, 메모리 상에서 디코딩돼 실행된다. 각 파일에 대한 기능은 아래와 같다.
- C2
hxxp://89.169.13[.]215/tasks/YTAsODYsODIsOWQsYTEsODgsOTAsOTUsNjUsN2Qs
1. adobe.lua
[그림 8] 디코딩된 adobe.lua
해당 파일은 난독화된 악성 Lua 스크립트로, module.class 와 동일한 기능을 수행한다. 지속성을 확보하기 위해 “WindowsErrorRecovery_ODE4”라는 이름으로 작업 스케줄러에 등록되며, 감염된 PC의 스크린샷과 시스템 정보를 C2 서버로 전송한 뒤, 서버에서 받은 응답 값을 토대로 추가 악성 행위를 수행한다. 다만, 분석 시점에는 tasks 항목이 비어 있어, 추가 악성 행위는 확인되지 않았다.
- C2
hxxp://95.164.53[.]26/api/YTAsODYsODIsOWQsYTEsODgsOTAsOTUsNjUsN2Qs
[그림 9] C2 응답 값
2. _x64.bin
[그림 10] 디코딩된 _x64.bin
해당 파일은 64비트 환경에서 동작하는 ShellCode로, 정보 탈취형(Infostealer) 악성코드인 Rhadamanthys 로 확인됐다. Rhadamanthys는 윈도우 시스템의 정상 프로세스에 인젝션을 수행한 후, 최종적으로 이메일, FTP, 온라인 뱅킹 서비스 등과 관련된 민감 정보를 탈취해 공격자 서버로 전송한다.
- 인젝션 대상 프로세스
%Systemroot%\system32\openwith.exe
%Systemroot%\system32\dialer.exe
%Systemroot%\system32\dllhost.exe
%Systemroot%\system32\rundll32.exe
3. _x86.bin
[그림 11] 디코딩된 _x86.bin
해당 파일은 32비트 환경에서 동작하는 ShellCode로, _x64.bin 파일과 동일한 기능을 수행하는 Rhadamanthys 악성코드다.
SmartLoader는 주로 정보 탈취형(InfoStealer) 악성코드를 다운로드하며, Rhadamanthys 외에 Redline, Lumma Stealer 등의 악성코드를 실행하는 사례도 확인되고 있다. 특히 게임 핵, 크랙, 자동화 도구 등 불법 또는 비공식적인 키워드로 검색된 경로는 악성코드 유포 위험이 높으므로, 반드시 공식 출처에서 소프트웨어를 다운로드해야 한다. 또한, README 파일이 정교하게 작성돼 있더라도 악성 저장소일 수 있으므로, 저장소의 출처와 작성자 신뢰도, 커밋 이력과 활동 기록 등을 반드시 확인해야 한다.
출처 : AhnLab