Reversing/Malware Analysis

[Smart Loader] GitHub 오픈소스를 가장한 악성코드 분석

zer0flag 2026. 3. 21. 00:27

목차


1. 개요
   1.1) 분석 배경
   1.2) 공격 개요 및 흐름
   1.3) 분석 대상 파일 정보

2. 상세 분석
   2.1) 초기 실행 구조 및 로딩 방식 (LuaJIT 기반)
   2.2) 초기화 작업 (Mutex 생성 및 경로 확보)
   2.3) 정보 수집 행위
   2.4) C2 연결 방식 (스마트 컨트랙트 기반)
   2.5) C2 응답 데이터 분석 (loader / tasks)
   2.6) 지속성 확보 (작업 스케줄러 등록)
   2.7) 2차 로더 동작 분석 (ODM3.exe)
   2.8) Smart Loader 연관 악성 샘플


3. 결론

 

부록

   1) MITRE ATT&CK

   2) IOC (Indicator of Compromise)

 

 

 

 

1. 개요

1.1) 분석 배경

최근 GitHub 오픈소스 저장소를 페이로드 유통 경로로 악용하는 Smart Loader 악성코드가 다수 유포되고 있다. 해당 저장소는 정상적인 오픈소스 프로젝트로 위장하여 트렌드에 따라 사람들의 관심사를 끌만한 주제의 프로젝트로 감염을 유도한다.

그림1) OpenClaw-skills 프로젝트로 위장하여 유포되는 공격자 프로필

 

AI 도구들의 급격한 발전과 확산으로 인해, 다양한 AI 모델을 활용한 프로그램들이 큰 주목을 받고 있으며, 공격자는 이러한 흐름을 악용하여 정상적인 OpenClaw에서 사용하는 skills 프로젝트로 위장한 악성 저장소를 배포하고 있다.

 

해당 저장소에는 실제 프로젝트처럼 보이도록 README 파일이 함께 포함되어 있으며, 이 파일에는 프로젝트 개요, 목차, 주요 기능, 설치 및 사용 방법 등이 매우 그럴듯하게 작성되어 있기 때문에 사용자가 해당 저장소를 악성코드 유포지로 인식하기에 쉽지 않다.

 

그림2) 악성 리포지토리 커밋 날짜

 

대상 Smart Loader는 natan89이라는 계정으로 2026년 2월 5일, "awesome-openclaw-skills" 리포지토리를 최초 생성하였으며, 이튿날인 2월 6일 natan89 계정을 통해 해당 저장소에 첫 번째 커밋이 등록되었다. 해당 커밋은 necatiozmen 사용자의 업스트림 커밋을 기반으로 하며, 커밋의 SHA-256 해시는 0638262c744c292b4d67f01e8822d80686edfee0이다.

 

그림3) Star 누적이 많은 프로젝트를 복제하여 재활용

 

이는 수천 개의 Star와 Fork를 보유한 "VoltAgent/awesome-openclaw-skills" 저장소를 그대로 복제하여, 악성코드 유포지로 재활용한 것으로 확인된다.

 

GitHub의 파일 변경 이력을 살펴보면, 공격자는 원본 프로젝트를 그대로 복제 한 뒤 README 파일을 수정하여 기존에 포함되어 있던 정상 다운로드 링크를 제거하고, 악성코드가 포함된 "openclaw-awesome-skills-1.6.zip" 및 "openclaw-awesome-skills-v3.8.zip" 파일을 다운로드하도록 링크를 변경한 것을 확인할 수 있다.

 

 

1.2) 공격 개요 및 흐름

그림4) Smart Loader 공격 흐름

 

Smart Loader는 LuaJIT 기반의 난독화된 스크립트를 로더로 활용하며, 블록체인 스마트 컨트랙트를 이용해 C2 서버 주소를 은닉하는 고도화된 기법을 사용한다. 이후 C2 서버에 접속한 뒤, 공격자가 생성한 GitHub 페이지를 페이로드 중계지로 활용하여 추가 동작에 필요한 난독화된 Lua 스크립트와 스틸러 쉘코드 등을 다운로드하고 실행한다.

 

특히 스마트 컨트랙트를 통해 C2 정보를 동적으로 확보하고, 해당 C2에서 추가 감염 경로로 사용되는 GitHub 링크를 지속적으로 교체할 수 있는 구조를 가지므로 공격자는 기존 링크가 차단되거나 삭제되더라도 새로운 링크로 손쉽게 대체하여 공격을 지속할 수 있다.

또한 Smart Loader 샘플은 변종별로 동작 방식에 일부 차이를 보이며, Rhadamanthys, Lumma, RedLine 스틸러가 함께 사용된 사례도 확인되었다. 본 분석 대상 샘플에서는 StealC 계열 페이로드를 다운로드하여 사용자 정보를 탈취하는 행위가 확인되었다.

 

 

1.3) 분석 대상 파일 정보

그림5) 분석 파일 정보

 

openclaw-awesome-skills-1.6.zip에 포함된 Application.cmd는 compiler.exe를 실행하며, dynasm.txt 파일을 인수로 전달한다. compiler.exe는 LuaJIT 기반 실행 파일로 동작하며, dynasm.txt는 난독화된 Lua 스크립트로 구성되어 있다.

 이름 설명 sha256
Application.cmd Lua를 구동시키는데 사용되는 bat 7E8BD9BA64FCBD1CB753BAA2F7BC8D5D7F3E91552BCDC9EC1EC04EDD4916FF33
compiler.exe LuaJLT 8B42CA9D05BADF0E7327D816A56E5516431AE34627DA68E12AE9347F365B2668
dynasm.txt Lua Script F9436CCB986760CA379D6CD2F00726E032A1D9C250A9BD261D40D98B914E7EF9

 

 

2. 상세 분석

2.1) 초기 실행 구조 및 로딩 방식 (LuaJIT 기반)

그림6) PEB 주소 획득
그림7) LdrLoadDll() 동적 라이브러리 로드

 

난독화된 스크립트는 실행 과정에서 필요한 WinAPI 및 라이브러리를 동적으로 로드하는 방식을 사용한다. 먼저 VirtualAlloc을 통해 메모리를 할당한 뒤, mov rax, qword ptr gs:[60] / ret 명령을 수행하여 PEB(Process Environment Block) 주소를 획득한다.


이후 PEB → Ldr → InMemoryOrderModuleList 구조를 순회하는 전형적인 PE 파싱 기법이 사용되며, 로드된 모듈 정보를 기반으로 ntdll.dll의 LdrLoadDll 함수를 획득하고, 이를 이용해 이후 행위에 필요한 DLL을 동적으로 로드한다. 로드되는 주요 라이브러리는 아래 표와 같다.

wininet.dll shell32.dll advapi32.dll
winbrand.dll shlwapi.dll  

 

 

2.2) 초기화 작업 (Mutex 생성 및 경로 확보)

그림8) compiler.exe - Mutex 생성

 

스크립트가 실행된 후 CreateMutexW() 함수를 통해 Mutex를 생성하며, 생성되는 Mutex 이름은 다음과 같다.

Mutex
yx2w2hl52qd6ojup01q7fcls1w4hjspv599myp3whzqo7oittq7pmu17uv3kspve0wakpxj9q2jjzogwnm1tnd70hxehszhtpztds9dyldejd43xu4squsq

 

그림9) 디렉토리 경로 확보

 

추가적인 행위 수행 및 파일 드롭 경로를 확보하기 위해, GetTempPathW()를 호출하여 TEMP 경로를 획득한다. 또한 SHGetFolderPathW를 호출하여 사용자의 "%AppData%" 디렉토리와 Desktop 디렉토리 경로를 가져온다.

 

 

2.3) 정보 수집 행위

그림10) 지리적 위치 정보 수집, 네트워크 연결 상태 확인

 

"hxxp://ip-api.com/json/"으로 요청을 전송하여 피해자의 공용 IP 및 지리적 위치 정보를 수집한다. 이후 네트워크 연결 상태를 확인하기 위해 "hxxps://www[.]microsoft.com"에 접속하여, 정상적으로 응답이 확인될 경우 정보 수집 작업을 진행한다.

그림11) 식별용 MachineGuid 수집
그림12) 호스트 정보 수집

 

레지스트리 "HKLM\Software\Microsoft\Cryptography"를 조회하여 MachineGuid 값을 수집한다. 이후 GetComputerNameW(), GetUserNameW(), BrandingFormatString("%WINDOWS_LONG%") API를 호출하여 호스트 이름, 사용자 이름, 운영 체제 버전 정보를 포함한 시스템 정보를 수집한다.

그림13) 스크린샷 동작 수행
그림14) 스크린샷 데이터

 

GetDC, CreateCompatibleDC, CreateDIBSection, BitBlt 등 스크린샷 관련 API를 호출하여, 피해자의 현재 화면을 캡처한다.

 

2.4) C2 연결 방식 (스마트 컨트랙트 기반)

그림15) 스마트 컨트랙트를 조회하여 C2 주소 확보

 

polygon[.]drpc.org에 접속하여 Polygon RPC를 통해 스마트 컨트랙트를 조회하고, 그 내부에 저장된 C2 서버 주소를 획득한다. 이는 블록체인의 특성을 악용한 것으로 스마트 컨트랙트에 C2 정보를 직접 하드코딩하는 대신 온체인 데이터 형태로 저장해 두고 필요시 조회하는 구조이다. 악성코드는 RPC 요청을 통해 특정 컨트랙트의 데이터를 읽어오며, 이 과정에서 실제 C2 주소를 동적으로 가져오게 된다.

 

이러한 방식은 전통적인 C2 인프라와 달리, 단일 서버 차단만으로는 대응이 어렵다는 특징이 있다. 블록체인에 기록된 데이터는 변경이 어렵고 지속적으로 접근 가능하기 때문에, 공격자는 별도의 인프라 노출 없이 C2 정보를 은닉할 수 있다.

응답 데이터
"{\"id\":1,\"jsonrpc\":\"2.0\",\"result\":\"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000015687474703a2f2f3231372e3131392e3132392e37360000000000000000000000\"}"

 

그림16) 응답 데이터에서 C2 주소 확보


polygon[.]drpc.org POST 요청 응답 데이터인 687474703a2f2f3231372e3131392e3132392e3736를 ASCII 문자열로 변환한 결과, C2 주소인 hxxp://217[.]119.129.76 가 확인되었다.

그림17) C2 연결

 

수집된 정보와 스크린샷 데이터는 암호화된 후, 아래와 같은 주소로 전송된다.

"hxxp://89.169.12.235/api/NTE3YjdjNWU1NjYzNjU2YTA1N2Y="
"hxxp://217.119.129.76/api/NTE3YjdjNWU1NjYzNjU2YTA1N2Y="

 

89[.]169.12.235로의 요청은 연결에 실패하여 정상적인 응답이 확인되지 않았으며, 두 번째 요청 대상인 217[.]119.129.76에서는 정상적인 응답이 확인되었다.

 

이러한 정황을 통해 89[.]169.12.235는 현재 서버가 비활성화된 상태이거나, 실제 C2가 아닌 미끼(Decoy) 주소로 활용되었을 가능성을 고려할 수 있다. 반면, 실제 통신에 사용되는 C2는 스마트 컨트랙트를 통해 동적으로 반환된 217[.]119.129.76일 가능성이 높으며, 악성코드는 해당 경로를 통해 실질적인 데이터 송수신을 수행하는 것으로 판단된다.

 

그림18) (좌) 수집 정보, 스크린 샷을 확보한 C2로 전송, (우) C2 응답 데이터

 

응답 데이터는 JSON 형식으로 전달되며, 내부에는 loader와 tasks 두 가지 주요 항목이 포함되어 있다. loader는 악성코드의 전반적인 동작을 제어하는 설정 값이며, tasks는 추가 페이로드를 다운로드하고 실행하기 위한 작업 목록으로 구성되어 있다.

 

2.5) C2 응답 데이터 분석 (loader / tasks)

구성 응답 데이터
json {"loader":"M2U2MTA3NGYyNjI2M2YyMTE1MTEwODU0MTQzNzEwMDk0NTFiNzU0OTdmNzkxNzQzMjkxYTAwNTgyODFkMGM0YzdmNjM1NTFhNzY2NTNlMzcyNjE0MTg1YzEyMzE1NjU2MTc0MjZkMWQyNjM4NTI0MzcyNGY1OTA2NzY0ODQwMWQzMTIyMTE0MzI1NjU3NjcyMmMxNDAxNDExNDI0NTg0YzE1NGQyZTBiMjMzMDQzNDM3MjRmMGYxNTJlMGQxYTFhNjc3OTQ1MTQxNzI5NmMzNzM4MDcwMjQwNTEzNjE3MGY0MjRiM2QwYzJiNzcxYjQxNmExYzAwNTYyZTFkMTE0YzdmNjMwMzU3M2EzNDI5MmY2NjU1NGY1YTE4M2QxMTRlMGQxOTdmNDU2Zjc3NDcwNDNhMWMxZDQ0MmUwZDBjMGQyMDYxNWYxNjY3M2E=",

"tasks":"MWUzODQ3NWYzMjY1NzY3MjcyNDY1ZjFlNTE3YjE4MDU1OTUyNmQ1MzZmNzc1ZjE1M2MxZjA3MGQ3NTQ3MDUwNzMxMmIxMDU0NzgyNDIzM2Y2NTFjMWU1YTA0MmExNTA0NDIwYjdiNWY2MDMzNTgwZDJjNDAwNjU2MmQ0NzEwMGIyMzMwNGE1ZTMzMjYyODIxNjUxODBjNWIxZjc2NDE1YTE4MDk3YTQ3M2IyZDQzNDM2NDRmNTY1MTMzMDQwNzMxMzUyMjExNWU3NDdkNmM3MDFlMTAwMDQyNTM3NTU0NGU1MTUwMjMwYzEwM2I1NjBjMmQ0ZDRlMTc3ODA5NGMwMjMwMjI0NzFhNzY2NTNmMjYyYjA3MTkxMDRiNzk0NTQwMTcxYjJlMWMzYjNhNDUxNDI2NGQ0ZTE3NmE0NDQyNGMzNzI2MDk1NzIzMjkyZjNhNjg0ZjRkMDI1ZDc5NTYwNDVlNWQyYTRiNzU3NTA3NGQ2ODRkMDQ0MjM3MTg0MDU0NjUzODQ3NDUzZjNkMjk3MDcwNTU0MDAzNWQ3OTU2MWY0MzU4M2IxYzNjNzcwZDQxMmUwZTE4NDQzZjE1NGU0ZTY3MjcwOTVhMDkyYjIzMzMyZTEwMWYxMDRiNzkwZjRlNTE0YzIxMGE2ZDZmMTcwZjNkMDMxODFiN2E0YTE2MTczNTI2NDcwYzc2NjUwMDNkMmIxMTIxNWIxMzJiMTUxZTRlMWIzMjE0MTI="}
xor key ECe6VGLRJum2qYtl79OiOU7aHot7Zhbn

 

해당 데이터는 Base64 인코딩과 함께 32바이트 XOR 연산이 적용되어 있었으며, 동적 분석 과정 중 메모리에서 32Byte 길이의 XOR Key를 추출할 수 있었다.

 

구성
loader {"bypass_defender": 0, "autorun": 0, "relaunch": {"time": -1, "status": false}, "tablet": {"text": "An error occurred", "status": false}, "hide": 0, "persistence": 1}
tasks [{"id": 832, "link": "hxxps://github[.]com/aydem45/todo/raw/refs/heads/main/folder/6.txt", "file_path": "Temp", "file_name": "a.lua", "start": 1, "autorun": 0, "relaunch": 0, "hide": 0, "pump": {"size": -1, "status": false}, "dll_loader": {"func": null, "type": "LoadLibrary"}}]

 

구성 정보를 살펴보면, loader 항목은 악성코드의 실행 동작을 제어하는 설정 값으로 구성되어 있다. 해당 설정에서는 Defender 우회(bypass_defender)와 자동 실행(autorun)은 비활성화되어 있으나, persistence 값이 1로 설정되어 있어 시스템 내 지속성을 유지하도록 구성되어 있다. 또한 relaunch, hide 등의 일부 기능은 비활성화된 상태로 확인된다.

tasks 항목은 추가 페이로드를 다운로드 및 실행하기 위한 작업을 정의하고 있다. 지정된 GitHub 경로에서 파일을 다운로드하여 Temp 경로에 "a.lua"라는 이름으로 저장한 뒤 실행하도록 설정되어 있으며, LoadLibrary 방식을 통해 로드되는 구조를 가진다.

 

그림19) C2 응답 데이터 복호화 결과

 

구성
loader {"bypass_defender": 0, "autorun": 0, "relaunch": {"time": -1, "status": false}, "tablet": {"text": "An error occurred", "status": false}, "hide": 0, "persistence": 1}
tasks [{"id": 830, "link": "hxxps://github[.]com/aydem45/todo/raw/refs/heads/main/folder/9.log", "file_path": "Temp", "file_name": "browser\\extensions\\reader.exe", "start": 1, "autorun": 0, "relaunch": 0, "hide": 0, "pump": {"size": 1024, "status": true}, "dll_loader": {"func": null, "type": "LoadLibrary"}}, {"id": 832, "link": "hxxps://github[.]com/aydem45/todo/raw/refs/heads/main/folder/6.txt", "file_path": "Temp", "file_name": "a.lua", "start": 1, "autorun": 0, "relaunch": 0, "hide": 0, "pump": {"size": -1, "status": false}, "dll_loader": {"func": null, "type": "LoadLibrary"}}]

 

초기 분석 당시에는 a.lua 파일을 다운로드하는 행위만 확인되었으나, 이후 재분석 과정에서 추가적인 페이로드를 다운로드하는 정황이 확인되었다. 이는 공격자가 C2를 통해 악성코드의 동작을 유연하게 제어하며, 필요에 따라 언제든지 새로운 페이로드를 추가로 배포할 수 있음을 의미한다.

추가로 확인된 tasks에서는 GitHub 경로에서 파일을 다운로드한 뒤 "browser\extensions\reader.exe" 경로에 저장하고 실행하는 동작이 포함되어 있다. 분석 결과, 해당 페이로드는 StealC 계열 PE 파일로 확인되었으며, 크리덴셜 탈취를 수행하는 것으로 나타났다.

 

그림20) StealC (인포스틸러) 동작

 

추가적으로 실행되는 StealC는 웹 브라우저 데이터, 메신저(디스코드, 텔레그램) 관련 정보, 암호화폐 지갑 주소, 계정 크리덴셜 등을 수집하는 행위를 수행하는 것으로 확인되었다.

 

 

2.6) 지속성 확보 (작업 스케줄러 등록)

그림21) 작업 결과 보고

 

정보 수집 및 페이로드 실행이 정상적으로 완료되면, "/task/NTE3YjdjNWU1NjYzNjU2YTA1N2Y=" 경로로 작업 수행 결과를 보고하는 요청을 전송한다. 이후 응답 데이터로 "taskId=832&country=KR" 값이 반환되는 것을 확인할 수 있다.

요청 응답 데이터
tasks taskId=832&country=KR

 

그림22) AppData 경로에 복사된 Smart Loader
그림23) 작업 스케줄러에 등록하여 지속성 확보

 

지속성을 확보하기 위해 ODM5.exe(LuaJIT)와 dynasm.txt(Lua Script) 파일을 "%AppData%\ODM5" 경로에 복사한 후, "AudioManager_ODM5"라는 이름으로 작업 스케줄러에 등록한다.

 

schtasks
create /sc daily /st 14:38 /f /tn AudioManager_ODM5 /tr \"\"C:\Users\hostname\AppData\Local\ODM5\ODM5.exe\" \
"C:\Users\hostname\AppData\Local\ODM5\dynasm.txt\"\"

 

 

2.7) 2차 로더 동작 분석 (ODM3.exe)

그림24) 확보한 GitHub 주소로 접근
그림25) 공격자 GitHub에 업로드 된 페이로드
그림26) 중계용으로 생성된 공격자 GitHub 프로필

 

앞서 C2로부터 tasks 데이터 형태로 전달받은 GitHub 링크를 기반으로, 추가 페이로드 다운로드를 시도한다.

해당 GitHub 링크들을 분석한 결과, 공격자가 다수의 GitHub 계정을 생성한 뒤 페이로드가 포함된 파일을 업로드하고 이를 중계 서버처럼 활용하고 있는 것으로 확인되었다. 또한 GitHub 저장소 삭제 또는 계정 정지에 대비하여, 지속적으로 새로운 계정과 링크로 교체하는 방식이 사용되고 있는 점도 확인할 수 있었다.

 

실제 저장소 내용을 확인한 결과, 추가 행위에 활용될 난독화된 Lua 스크립트 "a.lua" 파일과 StealC 계열 PE 파일이 포함되어 있다.

GitHub Link
hxxps://github[.]com/aydem45
hxxps://github[.]com/hilax-glb
hxxps://github[.]com/ishusahu246
hxxps://github[.]com/Argaakhsan/proc
hxxps://github[.]com/tsntizka
hxxps://github[.]com/Musthaqeem
hxxps://github[.]com/Nikolchev
hxxps://github[.]com/rejaul0212
hxxps://github[.]com/talangojames51
hxxps://github[.]com/PIELCABRERA

 

 

그림27) GitHub를 통해 다운로드 받은 a.lua Temp 경로에 저장
그림28) AppData 경로에 ODM3로 복사

 

기존에 포함되어 있던 compiler.exe(LuaJIT)와 다운로드한 난독화 Lua 스크립트 a.lua를 "%AppData%\ODM3" 경로에 복사한 후, WinExec() 함수를 통해 실행한다. WinExec 호출 인자는 아래와 같다.

WinExec
"C:\Users\hostname\Desktop\openclaw-awesome-skills-1.6\compiler.exe" < 기존 악성코드 경로
"C:\Users\hostname\AppData\Local\\Temp\a.lua"

 

그림29) ODM3.exe - Mutex 생성

 

ODM3.exe(2차 실행)는 실행 시 CreateMutexW() 함수를 호출하여 Mutex를 생성하며, 생성되는 Mutex 이름은 다음과 같다. 이는 앞서 실행된 compiler.exe(ODM5.exe)에서 생성한 Mutex와는 서로 다른 값으로 확인된다.

Mutex
75zkst0wewo1gtd519maraylccuzjok86s2ysldgnhk

 

그림30) C2 연결

 

ODM3.exe의 동작은 앞서 compiler.exe(ODM5.exe)와 유사한 흐름을 보이지만, "/api/NTE3YjdjNWU1NjYzNjU2YTA1N2Y="로 요청을 전송하는 대상 IP 주소에는 차이가 있다.

해당 단계에서는 C2 주소로 217[.]119.129.122를 확보한 뒤, 이를 기반으로 요청이 수행되는 것이 확인되었다.

 

그림31) 감염 표식 파일 생성

 

이후 Temp 경로에 "246d094337"이라는 표식용 파일을 생성하고, 해당 파일의 존재 여부를 확인한 뒤 동일 행위의 반복 실행(무한 요청 및 다운로드)을 방지한다.

 

그림32) ODM3 지속성 확보

 

"AudioManager_ODM3"라는 이름으로 작업 스케줄러에 등록하여 지속성을 확보한다. 최종적으로 유사한 동작을 수행하는 작업이 2개가 등록된 것이 확인되는데, 이는 하나의 작업이 정상적으로 동작하지 않거나 탐지되어 제거될 경우를 대비한 이중화(백업) 메커니즘으로 해석할 수 있다. 즉, 공격자는 일부 구성 요소가 차단되더라도 지속적으로 추가 페이로드를 실행할 수 있도록 설계한 것으로 보인다.

 

 

2.8) Smart Loader 연관 악성 샘플

그림33) Virustotal로 확인된 Smart Loader 연관 샘플

 

C2로 활용되는 3개의 IP를 VirusTotal 상에서 조회 시, 다양한 도구를 사칭한 유사 악성 ZIP 샘플들과 연관된 것을 확인할 수 있었다. 이는 단순히 OpenClaw 프로젝트만을 위장한 것이 아니라, 여러 정상 소프트웨어를 사칭하는 다양한 방식으로 유포되고 있음을 의미한다.

 

 

 

3. 결론

Smart Loader는 정상적인 오픈소스 프로젝트를 위장하여 유포되며, 초기에는 단순 로더 형태로 동작하지만 이후 C2 기반으로 동적으로 기능이 확장되는 다단계 악성코드 구조를 가진 것이 확인되었다. 특히 LuaJIT 기반 난독화 스크립트를 활용하고, 스마트 컨트랙트를 통해 C2 주소를 은닉하는 등 탐지 회피 및 인프라 은닉을 위한 고도화된 기법이 적용되어 있다.

 

또한 GitHub를 페이로드 중계지로 활용하고, 다수의 계정을 생성하여 지속적으로 링크를 교체하는 방식으로 차단을 우회하고 있으며, 최종적으로는 Rhadamanthys, Lumma, RedLine, StealC와 같은 정보 탈취형 악성코드를 추가로 다운로드하여 브라우저, 메신저, 암호화폐 지갑, 계정 정보 등 민감한 데이터를 수집하는 행위가 수행된다.

 

이와 같은 공격 방식은 단순한 파일 기반 탐지를 우회하고, 외부 정상 서비스(GitHub, 블록체인 등)를 악용한다는 점에서 대응이 더욱 어려운 특징을 가진다. 따라서 출처가 불분명한 오픈소스 프로젝트나 다운로드 링크 실행에 각별한 주의가 필요하다.

 

 

 

부록

1) MITRE ATT&CK

Tactics Techniques
Execution (T1204.002) User Execution: Malicious File
(T1059.011) Command and Scripting Interpreter: Lua
Persistence (T1053.005) Scheduled Task/Job: Scheduled Task
Defense Evasion (T1140) Deobfuscate/Decode Files or Information
(T1055.002) Process Injection: Portable Executable Injection
(T1070.004) Indicator Removal: File Deletion
(T1027.010) Obfuscated Files or Information: Command Obfuscation
(T1027.009) Obfuscated Files or Information: Embedded Payloads
Credential Access (T1555.003) Credentials from Password Stores: Credentials from Web Browsers
(T1552.001) Unsecured Credentials: Credentials in Files
Discovery (T1217) Browser Information Discovery
(T1518) Software Discovery
Collection (T1005) Data from Local System
(T1113) Screen Capture
Command and Control (T1102.002) Web Service: Bidirectional Communication

 

2) IOC (Indicator of Compromise)

Filename SHA256
compiler.exe, ODM5.exe, ODM3.exe 8B42CA9D05BADF0E7327D816A56E5516431AE34627DA68E12AE9347F365B2668
dynasm.txt F9436CCB986760CA379D6CD2F00726E032A1D9C250A9BD261D40D98B914E7EF9
a.lua 231EC53D539907D2B58143B69392FB977F0EFEF30AED2E5BE74F941F3DA256D0
StealC_pe_1.exe 5B6AA918C14D6360DA437BFE0B0BD75703D0DBAA0526CF04887F197D8CB50027
StealC_pe_2.exe C461DAEACD5D159E4E93B27FE80D5388BAC455B46D04E87FF006110E7DEDDAAF
StealC_pe_3.exe 44C4E00AA4DD490C57BDC783B3D9E0AF39844CF153CF108F01E6CF01D59162B5
StealC_pe_4.exe 79746252EEB6316189E276788729AB73F655051B42483C6455D4C528F3A20A32

 

C2
89[.]169.12.235
217[.]119.129.122
217[.]119.129.76

 

URL
hxxps://raw[.]githubusercontent.com/hilax-glb/tsd/refs/heads/main/gt/6.txt
hxxps://github[.]com/ishusahu246/fold/raw/refs/heads/main/56/05.txt
hxxps://github[.]com/aydem45/todo/raw/refs/heads/main/folder/6.txt
hxxps://github[.]com/Argaakhsan/proc/raw/refs/heads/main/365/lib.txt
hxxps://github[.]com/tsntizka/23/raw/refs/heads/main/in/23.txt
hxxps://github[.]com/Musthaqeem/1/raw/refs/heads/main/1/0.txt
hxxps://github[.]com/Nikolchev/etc/raw/refs/heads/main/xc/2.txt
hxxps://github[.]com/rejaul0212/aqua/raw/refs/heads/main/db/6.txt
hxxps://github[.]com/talangojames51/io5/raw/refs/heads/main/5/83.txt
hxxps://github[.]com/PIELCABRERA/wes/raw/refs/heads/main/12/20.txt
 
 

 

 

 

참고 문헌

[1] https://mp.weixin.qq.com/s/q-86GR8g_p3N9tJePQ825w
(OpenClaw热潮之下,Lua窃密软件精心伪装乘虚而入)

[2] https://asec.ahnlab.com/ko/89498/

(Ahnlab : 정상 프로젝트를 위장한 Github 저장소를 통해 SmartLoader 악성코드 유포)