◈ 주요 요약 (Executive Summary)
- 페이스북, 이메일, 텔레그램 등 3단계 통로를 이용한 은밀한 침투 전략 구사
- 마치 탈북민 자원봉사 활동 내용처럼 현혹해 대화 유도 및 악성파일 전달
- 국방 및 대북분야 활동가를 겨냥한 국가배후 해킹조직 김수키 연계 확인
- 한국형 압축파일과 인코딩된 악성 스크립트로 보안 패턴 탐지 회피에 특화
- EDR 기반의 위협 헌팅과 트리아지(Triage)는 가시성 확보에 기여
1. 개요 (Overview)
○ 지니언스 시큐리티 센터(Genians Security Center / GSC)는 2025년 03월부터 04월까지 한국내 페이스북, 이메일, 텔레그램 이용자를 겨냥한 지능형지속위협(APT) 공격을 포착했습니다.
○ 위협 행위자(Threat Actor)는 두개의 페이스북 계정을 통해 정찰 및 공격대상을 탐색한 것으로 드러났습니다.
○ 지니언스 소속 위협분석 연구원들의 공동조사 결과에 따르면, 해당 공격의 배후로 김수키(Kimsuky) 그룹이 지목됐습니다. 이들은 북한연계 국가배후 해킹조직으로 널리 알려져 있으며, 이번 사례는 '애플시드(AppleSeed)' 캠페인으로 밝혀졌습니다.
○ 참고로 애플시드는 지난 2019년과 2021년 10월, 두차례의 VB 콘퍼런스에서 당시 메인저자 김재기 수석연구원과 2명이 공동으로 발표한 「Kimsuky group: tracking the king of the spear-phishing」 「Operation Newton: Hi Kimsuky? Did an Apple(seed) really fall on Newton’s head?」 세션을 통해 처음 소개됐습니다.
○ 공개된 발표자료에 따르면, 김수키 그룹이 개발한 악성파일의 PDB(Program database) 경로에서 해당 문자열이 발견됐습니다.
○ 그리고 2021년 11월, 안랩 ASEC은 「Operation Light Shell」 제목의 Kimsuky 공격 사례 보고서에서 애플 시드에 대한 내용을 심층적으로 기술했습니다.
2. 배경 (Background)
○ 한국에서 김수키 그룹의 위협 활성도는 매우 높음을 유지하고 있습니다. 이들 그룹이 공격에 사용하는 주요 3대 공격 도구는 다음과 같습니다. 일부 유사 변종에 따라 별칭이 쓰이기도 합니다.
- AppleSeed
- BabyShark (RandomQuery)
- FlowerPower (GoldDragon)
○ 과거 【AppleSeed】 유형을 보면, 실행파일 확장자(EXE, PIF 등)가 쓰인 경우가 다수 보고됐습니다. 특히, 스크립트 유형(JSE, WSF, JS 등)의 파일을 이용한 공격빈도가 많은 편에 속하며, Base64 문자로 인코딩된 악성 DLL 라이브러리를 호출하는 특징을 보입니다.
○ 한편, 스피어 피싱(Spear Phishing) 공격에 쓰인 첨부파일은 상대적으로 EGG ALZIP 포맷이 자주 목격됐습니다. 위협 행위자는 이메일을 통해 특정 압축 해제 프로그램 사용을 권장하기도 합니다. 이는 이메일 및 단말에 설치된 보안 제품의 시그니처 탐지 회피 동시에 스마트폰이 아닌 PC 환경에서 악성파일을 열도록 유인하는 전략이기도 합니다.
○ AppleSeed 문자열이 포함됐던 PDB 경로는 다음과 같습니다.
No | Bit | PDB Path |
1 | 32 | F:\PC_Manager\Utopia_v0.1\bin\AppleSeed.pdb |
64 | F:\PC_Manager\Utopia_v0.1\bin\AppleSeed64.pdb | |
2 | 32 | E:\works\utopia\Utopia_v0.2\bin\AppleSeed.pdb |
64 | E:\works\utopia\Utopia_v0.2\bin\AppleSeed64.pdb |
[표 1] AppleSeed 악성파일 PDB 경로 정보
○ 'Utopia_v0.1' 경로의 AppleSeed 케이스는 DLL 빌드날짜 기준으로 2019년 05월에 제작됐습니다. 'Utopia_v0.2' 경로를 가진 AppleSeed 유형의 경우 빌드날짜가 2019년 8월부터 2020년 01월까지 존재합니다.
[그림 2-1] AppleSeed PDB 경로 화면
○ 이번 위협 행위자의 과거 행적을 보면, 주로 방위산업 및 국방분야를 공격대상으로 삼았습니다. 그리고 코로나19 팬데믹 시기에는 백신 제약사 상대로 공격한 바 있습니다. 더불어 비트코인 등 가상자산 거래소와 대북분야 활동가에 대한 정보탈취 시도가 꾸준히 이어지고 있습니다.
○ 지니언스 위협 분석가는 2025년 03월 달부터 약 2개월 이상 지속된 최신 AppleSeed 공격 시도를 발견하여, 심층적 조사를 수행했습니다.
○ 본 보고서는 가장 최근 포착된 AppleSeed 공격 사례를 분석한 것이며, 아래 3가지 접근 통로가 공격에 활용됐습니다. 자세한 분석 내용을 통해 유사 보안위협 예방 및 인사이트 제공에 목적이 있습니다.
- Telegram
3. 3단 콤보 위협 분석 (Triple Combo Threat Analysis)
3-1. 페이스북(Facebook) 기반 공격 사례
○ 먼저 페이스북 기반으로 접근했던 공격 사례입니다. 위협 행위자는 'Transitional Justice Mission' 계정을 통해 대북분야 종사자 다수에게 온라인 친구 신청 및 메신저로 대화를 신청했습니다.
[그림 3-1] 페이스북 메신저 대화 시도 화면
○ 위협 행위자는 본인 신분을 특정 교회의 전도사 또는 연구원의 목사처럼 소개하면서, 공격 대상 인물의 페이스북 메신저로 교묘히 접근을 합니다.
○ 그런 후에 특정 문서를 공유하는 것처럼 관심을 유발해 상대방에게 악성파일을 전송하게 됩니다.
○ 악성파일은 EGG 압축 포맷에 비밀번호가 설정된 형태로 전달됩니다.
[그림 3-2] 페이스북 메신저로 악성파일이 전송된 화면
○ 위협 행위자는 또 다른 페이스북 계정을 도용해 공격에 활용했습니다. 소유자 정보 기반으로 보면, 공군사관학교 출신으로 자신을 소개하고 있습니다.
○ 실제 위협활동이 관찰된 시점에 해당 페이스북 프로필은 한국인 남성 추정의 사진이 존재했으며, 일정 기간 후에는 프로필 사진이 제거된 상태입니다.
[그림 3-3] 탈북민 자원봉사 활동 문의로 접근한 화면
○ 이때는 탈북민 자원봉사활동 내용으로 현혹해 공격대상자에게 접근을 시도했습니다. 그리고 페이스북 메신저로 직접 악성파일을 전달하거나, 수차례 대화를 통해 또 다른 방식으로 악성파일 전달 방식을 선택합니다.
3-2. 이메일(E-Mail) 기반 공격 사례
○ 위협 행위자는 페이스북 메신저 대화로 알아낸 공격 대상자의 이메일 주소를 통해 추가 접근을 시도하기도 합니다.
○ 1:1 대화를 통해 이메일 주소를 물어보고, 악성파일에 접근하도록 유인하는 전략을 구사합니다.
[그림 3-4] 페이스북 메신저를 통해 이메일 접근 시도 화면
○ 앞서 기술한 페이스북 계정 두곳 모두 공격 대상자에 유사한 방식으로 접근했습니다. 각기 다른 페이스북 계정이 쓰였지만, 비슷한 시기에 유사한 방식과 활동 모습들로 보아 동일 인물 가능성이 높습니다.
○ 실제 공격에 쓰인 악성파일 역시 동일한 형태로 분석됐고, '탈북민 지원 봉사 활동'이라는 공통된 키워드로 수신자를 현혹했습니다.
○ 아울러 대화 메시지에 포함된 한글 표현을 살펴보면, 일부 축약식 표현과 오탈자가 관찰됩니다. 이는 대화형 AI 서비스나 온라인 번역기를 통한 것이 아님이 분명합니다.
○ 언어학적 기반 분석을 통해 위협 행위자는 한글을 자유자재로 구사할 수 있는 국적 소유자임을 짐작해 볼 수 있습니다.
[그림 3-5] 이메일로 악성파일을 전달하는 화면
○ 공격에 쓰인 스피어 피싱 화면을 살펴보면, 대용량 첨부파일이나 본문에 별도의 URL 링크를 삽입해 파일을 받도록 구성했습니다.
○ 그리고 EGG 압축포맷을 사용하였고, PC 환경에서 특정 압축해제 프로그램을 사용하도록 안내하기도 합니다.
○ 이는 Windows 기반 악성파일이기 때문에 스마트폰과 같은 모바일 디바이스에서 열람하는 것을 제한하기 위한 유인 조치로 보여집니다.
3-3. 텔레그램(Telegram) 기반 접근 사례
○ 실제 공격에 쓰인 악성파일 역시 동일한 형태로 분석됐고, 공통적으로 '탈북민 지원 봉사 활동'이라는 일관된 주제로 수신자를 현혹했습니다.
[그림 3-6] 다단계 접근 사례 비교
○ 실제 수행된 특정인 대상 공격 흐름을 조사해 본 결과, 위협 행위는 페이스북과 이메일로 초기 접근을 시도합니다.
○ 만약, 공격 대상자의 스마트폰 번호까지 알고 있을 경우 텔레그램으로 메시지를 전달했습니다. 물론, 다른 온라인 메신저가 쓰일 수도 있습니다. 이처럼 위협 행위자는 적극적인 공격 행동을 보이고 있습니다. 이처럼 탈북민을 상대로 한 공격수법이 다양해지고 있다는 점을 명심해야 합니다.
[그림 3-7] 공격 흐름도
○ 텔레그램까지 공격 흐름을 관측해 보면, 특정 소유자의 단말을 먼저 해킹했을 가능성이 높아 보입니다. 그 다음 피해자를 감시하면서 평소 사용 중인 SNS나 E-Mail 계정 정보를 훔쳐낼 수 있습니다.
○ 이렇게 페이스북 권한을 가로채기하여, 마치 원래 소유자처럼 신분을 위장합니다. 이미 오래전에 가입됐던 페이스북이라 주변의 의심이 낮은 편에 속합니다. 온라인 친구 관계를 악용한 위협 활동은 외부에 노출되기 어렵습니다. 특히, 메신저를 통한 1:1 대화 방식은 매우 은밀하게 진행된다는 점에서 보다 각별한 주의가 필요합니다.
○ 갑자기 전달받은 URL 주소나 파일에는 위협요소 포함 가능성을 항상 염두에 두고 대비하여야 합니다. 평소에 항상 의심하고 주의하는 보안 습관이 중요합니다.
○ 본 사례처럼 위협 행위자는 페이스북, 이메일, 텔레그램 등 다양한 수법을 공격에 동원하고 있다는 점을 명심해야 합니다.
4. 악성파일 분석 (Malware Analysis)
4-1. 탈북민지원봉사활동.jse 파일 분석
○ JSE 파일은 .jse 확장자를 가지며, Microsoft의 Windows Script Host (WSH)에서 실행되는 암호화된 JScript 파일입니다.
○ '탈북민지원봉사활동.jse' 파일은 실행 시 두 개의 파일을 생성합니다. 하나는 정상적인 PDF 문서로, 사용자를 속이기 위한 미끼(Decoy) 파일이며, 다른 하나는 실제 악성 동작을 수행하는 DLL 파일입니다.
[그림 4-1] '탈북민지원봉사활동.jse' 흐름도
○ 스크립트 내부에는 xF6hKgM2MlR 변수에는 Base64로 인코딩된 PDF 파일의 데이터가 저장되어 있으며, guC1USOkKiW 변수는 복호화 후 생성될 파일 이름인 "탈북민지원봉사활동.pdf"이 저장됩니다.
○ Microsoft.XMLDOM 객체(xmlDom)를 이용해 xF6hKgM2MlR 값을 디코딩하고 'C:\ProgramData\탈북민지원봉사활동.pdf' 경로에 저장한 뒤, WScript.Shell 객체(shell)를 통해 해당 파일을 자동으로 실행합니다.
○ 이후 사용자는 실제 문서를 열람한 것처럼 인식하게 되며, 이는 악성 행위를 숨기기 위한 미끼(Decoy)로 활용됩니다.
[그림 4-2] 미끼(Decoy) 파일 실행 과정
○ 스크립트가 실행되면 아래의 그림과 같이 PDF 파일이 생성 및 실행됩니다.
[그림 4-3] PDF 파일 생성 및 실행
○ DLL 파일의 데이터는 2 차례 Base64 인코딩된 상태입니다. Microsoft.XMLDOM 객체(xmlDom)를 이용해 첫번째 디코딩 수행 후, 파워쉘을 통해 certutil을 실행하여 총 두 단계의 디코딩 과정을 수행합니다.
○ 디코딩이 모두 완료되면 악성 DLL 파일을 'C:\ProgramData\vmZMXSx.eNwm' 파일명으로 저장합니다.
○ DLL 파일은 'regsvr32.exe /s /n /i:tgvyh!@#12 vmZMXSx.eNwm' 명령어를 통해 사일런트 모드로 실행됩니다. 이 과정을 통해 악성 DLL이 시스템에 로드되며, 이후 악성 행위가 수행됩니다.
[그림 4-4] 악성 DLL 생성 및 실행
4-2. vmZMXSx.eNwm 파일 분석
○ 'vmZMXSx.eNwm' 파일은 VMP(VMProtect)로 패킹된 DLL 파일입니다. VMProtect는 코드 일부를 가상화하여 일반적인 디버깅 및 분석 도구로는 내부 로직을 파악하기 어렵게 만들며, 리버스 엔지니어링을 방지하기 위해 자주 사용됩니다. 해당 DLL 내부의 핵심 악성 기능은 가상화 영역에 숨겨져 있어 정적 분석이 제한됩니다.
○ 'regsvr32.exe /s /n /i:tgvyh!@#12 vmZMXSx.eNwm' 인자 값으로 실행되면 'vmZMXSx.eNwm' 파일의 DllInstall 함수를 호출하며, 파라미터로 'tgvyh!@#12' 문자열을 전달합니다.
○ 'regsvr32.exe' 프로세스에 'vmZMXSx.eNwm' 파일이 로드되면 전달된 파라미터는 문자열 비교를 통하여 'tgvyh!@#12' 값과 다를 경우에는 bat 파일을 생성하여 자가 삭제를 수행합니다.
[그림 4-5] 파라미터 검사
○ 파라미터 검증이 완료되면, '.data' 섹션의 오프셋 0xA0 위치에 존재하는 값을 기준으로 디코딩 절차가 수행됩니다. 해당 디코딩은 0x5E 값을 키로 하여 XOR 방식으로 진행되며, 디코딩이 완료되면 VMP 보호가 적용되지 않은 원본 DLL 바이너리 데이터가 '.data' 섹션의 동일 오프셋에 존재하게 됩니다.
[그림 4-6] DLL 파일 디코딩 과정
○ 이후 이 디코딩된 DLL 데이터는 가상 메모리 영역에 동적 할당 로드 및 재배치되며, 메모리 상에 수동으로 섹션을 구성한 뒤, 최종적으로 해당 DLL의 'DllInstall' 함수를 호출합니다.
[그림 4-7] DLL 재배치 및 DLLInstall 함수 호출
○ 'DllInstall' 함수가 실행되면, 앞 과정과 동일하게 파라미터 검증 과정을 수행한 후, 'CreateProcessW' 함수를 통해 추가적인 명령어를 실행합니다.
[그림 4-8] 지속성 수행
○ 'CreateProcessW' 함수의 인자 값으로 전달되는 명령어는 사용자 실행 레지스트리(HKCU\...\Run)에 'TripServiceUpdate' 항목을 등록하고, 시스템이 재부팅될 때마다 'regsvr32.exe'를 통해 악성 DLL을 자동 실행하도록 설정합니다.
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /t REG_SZ /v "TripServiceUpdate" /d "regsvr32.exe /s /n /i:tgvyh!@#12 C:\Users\[사용자명]\AppData\Roaming\trip\service\tripservice.dll" /f |
[표 4-1] 지속성 수행 명령어
○ 이후 'C:\Users\[사용자명]\AppData\Roaming\trip\service\' 경로에 악성 DLL(tripservice .dll)을 저장하기 위한 디렉터리가 생성됩니다. 해당 경로는 앞서 등록된 자동 실행 레지스트리(HKCU\...\Run)에서 참조되는 위치입니다.
[그림 4-9] 지속성 DLL 디렉터리 생성
○ 'C:\Users\[사용자명]\AppData\Roaming\temp\{난수}.tmp' 경로에 임시 파일을 생성한 뒤, 해당 파일에는 악성 코드의 '.data' 섹션에 존재하는 데이터를 그대로 저장합니다.
[그림 4-10] 난수 tmp 파일 생성
○ 저장된 파일은 다음과 같은 구조로 구성되어 있습니다. 처음 17바이트는 정상적인 PDF 파일로 위장하기 위한 문자열이며, 그 뒤 4바이트는 디코딩에 사용되지 않는 더미 값입니다. 이후 16바이트는 디코딩 키로 사용되는 값이며, 나머지 영역은 XOR 방식으로 인코딩된 본문 데이터가 저장되어 있습니다.
[그림 4-11] 난수 tmp 파일 구조
○ 악성코드는 생성된 '{난수}.tmp' 파일에서 키 값을 가져오고 0x47E04B65와 반복적으로 XOR 연산을 수행합니다.
[그림 4-12] 디코딩 키 생성
○ 이후 '{난수}.tmp' 파일의 인코딩된 데이터를 4KB씩 읽어, 위에서 설정한 키 값과 XOR 연산하여 복호화됩니다.
○ 복호화된 결과는 ZIP 파일의 데이터입니다.
[그림 4-13] 데이터 디코딩 수행
○ 디코딩 작업이 완료되면, 해당 데이터를 C:\Users\[사용자명]\AppData\Roaming \temp \{난수}.tmp.zip' 파일에 저장합니다.
[그림 4-14] ZIP 파일 생성
○ ZIP 파일 저장이 완료되면 인코딩된 데이터를 가지고 있는 '{난수}.tmp' 파일은 제거됩니다.
○ 이후, 저장된 '{난수}.tmp.zip' 파일을 압축 해제하여 'C:\Users\[사용자명]\Appdata\ trip\service\tripservice.dll' 파일을 생성합니다.
[그림 4-15] 지속성 DLL 파일 생성
○ 'tripservice.dll' 파일 생성이 완료되면 'CreateProcessW' 함수를 통하여 'regsvr32.exe /s /n /i:tgvyh!@#12 C:\Users\[사용자명]\AppData\Roaming\trip\service\tripservice.dll' 명령어를 수행합니다.
[그림 4-16] 'tripservice.dll' 파일 실행
○ 마지막으로 배치 파일을 생성하여 'vmZMXSx.eNwm' 파일과 배치 파일 자기 자신을 삭제합니다.
:repeat del "C:\ProgramData\vmZMXSx.eNwm" if exist "C:\ProgramData\vmZMXSx.eNwm" goto repeat del "%~f0" |
[표 4-2] 배치 파일 내용
4-3. tripservice.dll 파일 분석
○ 'regsvr32.exe' 프로세스에 의해 'tripservice.dll' 파일이 로드되면, 'vmZMXSx.eNwm' 파일과 동일하게 '.data' 섹션에 저장된 암호화된 데이터가 디코딩되어 동적으로 메모리에 할당되며, 해당 메모리 영역에 포함된 코드에 의해 'DLLInstall' 함수가 실행됩니다.
○ 'DLLInstall' 함수가 실행되면 'DropperRegsvr32' 명으로 중복방지 용도의 뮤텍스가 생성됩니다.
[그림 4-17] 뮤텍스 생성
○ 해당 코드에서는 먼저 'CreatePipe' 함수를 호출하여 파이프를 생성한 뒤, 'CreateProcessW' 함수를 통해 명령 프롬프트(cmd.exe)를 실행하여 다양한 시스템 정보 수집 명령어를 수행합니다.
○ 명령어 실행 결과는 'CreatePipe'로 연결된 파이프 핸들을 통해 메모리 버퍼로 전달되며, 이후 해당 데이터를 파일로 저장하거나, 외부 서버로 전송하는 데 활용됩니다.
[그림 4-18] 명령어 수행
○ 정보수집 명령어 이후에 'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies \System' 레지스트리 경로에 접근하여, 'ConsentPromptBehaviorAdmin', 'PromptOnSecureDesktop' 값을 조회합니다. 이는 UAC(User Account Control) 활성화를 확인하는 행위입니다.
○ 이후, OpenProcessToken과 GetTokenInformation API를 이용하여 현재 실행 중인 프로세스가 관리자 권한으로 실행되고 있는지 확인합니다.
[그림 4-19] UAC 및 관리자 권한 확인
○ 'CreateProcessW' 함수를 통해 실행된 정보 수집 명령어의 결과는 파이프를 통해 전달된 뒤, 'C:\Users\[사용자명]\AppData\Roaming\temp\{난수}.tmp' 경로에 파일 형태로 저장합니다.
[그림 4-20] 수집된 정보 저장
○ 'CryptGenRandom' 함수를 통해 117바이트 길이의 랜덤 데이터를 생성한 뒤, 'CALG_RC4' 알고리즘을 지정하여 'CryptDeriveKey' 함수를 통해 RC4 세션 키를 생성하고 'CryptImportKey' 함수를 통해 RSA 1024비트 공개키를 로드합니다. 이후, RC4 세션 키를 RSA 1024 공개키로 암호화합니다.
[그림 4-21] 암호화 키 설정
[그림 4-22] RSA를 통한 RC4 Key 암호화
○ 이전 과정에서 수집된 '{난수}.tmp' 파일은 '{난수}.tmp.zip' 파일명으로 ZIP 압축됩니다.
○ 이후 해당 ZIP 파일은 암호화되어 '{난수}.tmp.zip.enc' 파일이 생성되며, 이 파일은 압축 파일 크기, RSA로 암호화된 RC4 키, RC4로 암호화된 ZIP 파일 데이터로 구성됩니다.
[그림 4-23] '{난수}.tmp.zip.enc' 파일 구조
○ 위에서 생성된 '{난수}.tmp.zip.enc' 파일을 인코딩을 수행하기 위해 아래와 같은 작업을 수행합니다.
○ 'GetTickCount' 함수를 통해 얻은 값을 'srand' 함수를 통하여 seed로 설정하고, 이를 기반으로 'rand' 함수를 16회 호출하여 총 16바이트의 난수를 생성합니다.
○ 이 난수는 이후 .enc 파일 내 데이터에 대해 XOR 암호화를 수행하는 키로 사용되며, 생성된 키는 반복적으로 순환 참조되어 암호화에 사용됩니다.
[그림 4-24] '{난수}.tmp.zip.enc' 파일 인코딩 수행
○ 이후 PDF 헤더, 더미 값 4바이트, 16바이트 XOR 키, 인코딩된 enc 파일의 내용으로 구성된 '{난수}.pdf' 파일을 생성합니다. 전체 구조는 '[그림 4-11] 난수 tmp 파일 구조'와 같습니다.
○ 감염된 단말의 드라이브 볼륨 시리얼과 사용자 이름을 기반으로 고유 식별 문자열을 생성합니다. 사용자 이름은 한 글자씩 16진수로 변환되며, 최종적으로 '볼륨 시리얼-사용자 이름(16진수)' 형식의 문자열을 만듭니다.
○ 생성된 문자열은 C2 서버로 전송되는 HTTP 요청의 'p1' 파라미터에 포함합니다. 'm' 파라미터의 'b' 값은 데이터 전송을 의미합니다.
[그림 4-25] P1, M 파라미터 설정
○ 'woana.n-e[.]kr' 도메인으로 HTTP 요청을 전송하며, 이전에 설정한 파라미터와 함께 '{난수}.pdf' 파일의 데이터를 'multipart/form-data' 형식으로 구성하여 전송합니다.
[그림 4-26] 수집 데이터 전송
○ 전송이 완료되면 새로운 스레드를 생성하여 'woana.n-e[.]kr' 도메인으로 'p1' 파라미터는 이전과 동일하게, 'm' 파라미터는 'c'로 설정하여 요청을 전송합니다.
○ 'm' 파라미터를 'c'로 설정한다는 것은 데이터 수신을 의미합니다. 'woana.n-e[.]kr' 도메인은 응답값으로 명령어가 포함된 데이터를 전송합니다.
○악성코드는 명령어를 전달받으면 'InternetReadFile' 함수를 통해 'C:\Users\[사용자명]\AppData\Roaming\temp\{난수}.tmp' 파일로 저장합니다.
○ 명령어는 이전과 동일한 방식으로 실행되며, 실행 결과는 m=b로 설정된 요청을 통해 다시 전송됩니다.
[그림 4-27] 명령어 데이터 수신
○ 해당 악성코드는 일정 주기로 'woana.n-e[.]kr' 도메인과 통신하며 명령을 주고받는 루프 구조를 가집니다. 최초 실행되면 'p1' 파라미터에 고유 식별 문자열, 'm' 파라미터에 'b' 값을 설정하여 수집된 시스템 정보 데이터를 'woana.n-e[.]kr' 도메인으로 전송합니다.
○ 이후, 새로운 스레드를 생성하여 동일한 'm' 파라미터에 'c' 값을 설정하고 요청을 수행합니다. 해당 파라미터는 명령 수신을 의미하며, 'woana.n-e[.]kr' 도메인으로 전달받은 응답은 파일 형태로 저장됩니다.
○ 저장된 파일에는 실행 가능한 명령어나 스크립트가 포함되어 있습니다. 명령어 실행과정과 전송 방법은 '[그림 4-18] 명령어 수행' ~ '[그림 4-26] 수집 데이터 전송' 과정과 같습니다.
○ 해당 악성코드는 'regsvr32'를 통해 로드된 DLL을 통해 실행되며, RC4·RSA 암호화 및 PDF 위장 기법을 사용하여 시스템 정보를 수집하고, C2 서버로부터 명령어를 수신해 실행한 뒤 그 결과를 재전송하는 기능을 갖춘 원격 제어형 악성코드(RAT)입니다.
5. 유사 변종 사례 (Similar Variant Cases)
5-1. 스피어 피싱 유사도 비교
○ 위협 행위자의 과거 행적을 살펴보면, 페이스북(Facebook) 외에 링크드인(Linkedin)을 통한 초기 접근(Initial Access) 사례도 존재합니다.
[그림 5-1] 링크드인을 통한 공격 사례 화면
○ 2024년 실제 사례를 보면, 한국의 해군사관학교 출신에게 접근하기 위해 마치 군사분야 연구원처럼 신분을 위장했습니다.
○ 분야별 비즈니스 소통과 고용 중심의 대표적 소셜 미디어 플랫폼인 링크드인에서 공격 대상을 선별합니다.
○ 링크드인의 경우 각 분야별 소속과 경력, 보유기술 및 업적 등 개인화된 프로필이 공개적으로 노출될 수 있습니다. 그리고, 검색기능을 통해 특정 분야에 소속된 인물을 찾고, 1:1 메시지를 전송할 수 있습니다.
○ 작년과 금년에 수행된 스피어 피싱 공격 사례를 비교해 보면, 동일하게 한국의 반디집(Bandizip) 압축 프로그램을 사용하도록 유도합니다. 이는 두가지 목적이 있을 것으로 관측됩니다.
- 스마트폰이 아닌 Windows PC에서 압축해제
- 암호화 압축과 EGG 압축 포맷을 통한 보안 탐지 우회
[그림 5-2] 압축 프로그램 안내 문구 비교
○ 참고로 이메일 뿐만 아니라, 메신저 대화를 통해서도 비슷한 표현을 쓰기도 합니다.
[그림 5-3] 페이스북 메시지 대화 문구 비교
5-2. JSE 스크립트 비교
○ 2024년 5월과 12월 그리고 2025년 4월 사례를 비교해 보면, 거의 동일한 패턴으로 악성 스크립트가 사용된 것을 알 수 있습니다. 위협 행위자는 자동화된 악성 스크립트 제작 도구를 활용하고 있을 가능성이 큽니다.
[그림 5-4] 악성 스크립트 내부 구조 비교
5-3. DLL 악성파일 비교
○ 2025년 4월과 5월에 공격된 악성파일의 함수를 비교해 본 화면입니다. 위협 행위자는 변종에 따라 코드를 변경하고 있지만, 비슷한 시기의 악성파일은 유사한 형태를 가지고 있습니다.
[그림 5-5] DLL 악성파일 함수 비교
6. 결론 및 대응 (Conclusion)
○ 국가차원에서 이뤄지는 APT 공격은 매우 조용하게 진행되고 있습니다. 외부에 널리 알려지는 사례는 극히 일부에 지나지 않습니다.
○ 이메일 기반 스피어 피싱 공격은 여전히 위협 활성도가 높은 수준을 유지하고 있습니다. 대상자의 이메일 주소만 알고 있다면, 신속하고 은밀한 맞춤형 공격이 가능하기 때문입니다. 거기에 더해, 사회 관계망 서비스와 개인 메신저까지 공격방법과 수단은 다양하게 쓰이고 있습니다.
○ 본 보고서에 기술한 내용 역시 많은 공격 중 대표적 사례일 뿐입니다. 지능화된 위협 행위자들은 전통적 보안 제품의 탐지를 회피하기 위해 스크립트 패턴을 다변화하고 있습니다. 따라서, 변형된 신규 위협을 기존 시그니처만으로 정교하게 탐지하는 것은 결코 쉬운일이 아닙니다.
○ Genian EDR 제품은 외부에 알려지지 않은 위협요소까지 식별이 가능한 '이상행위 탐지규칙(XBA)' 내장뿐만 아니라, '머신 러닝(Machine Learning)' 기반 위협 학습을 통해 신속한 위협 방어가 가능합니다.
[그림 6-1] Genian EDR 제품의 머신러닝 탐지 모습
○ 실제 이번 김수키 그룹의 'AppleSeed' 변종이 동작한 초기 시점에 '머신 러닝' 탐지 기술을 통해 즉각적인 탐지가 이뤄집니다.
○ 보통 JSE 유형의 악성파일은 'WScript.exe' 프로세스에 의해 동작이 시작됩니다. 그 이후에 'PowerShell.exe' 명령 등을 통해 다양한 위협 이벤트가 발생하게 됩니다.
[그림 6-2] JSE 스크립트 동작 이벤트 화면
○ Genian EDR의 차별화된 공격 스토리 라인 정보는 위협이 유입된 단말의 부모 자식간 프로세스 상관관계를 가시성 높게 제공됩니다.
○ 아울러, 스크립트 내부에 은닉된 Base64 인코딩 데이터를 'CertUtil.exe' 프로세스를 통해 디코딩 과정이 수행된 것을 바로 식별할 수 있습니다.
○ 더불어 위협요소의 실행 흐름 뿐만 아니라, 분석이 필요한 단말에 따라 개별 '이벤트 조사'와 'LIVE 검색'을 통해 능동적 위협 헌팅(Threat Hunting)이 가능합니다.
[그림 6-3] Genian EDR을 통한 위협 가시성 확보
○ 기업 및 기관의 보안 관리자는 EDR 탐지 내용을 통해 피해 단말에 어떠한 이상행위가 발생됐는지 효율적으로 유지 관리할 수 있습니다.
○ 특히, 'AppleSeed' 동작 중 요구되는 실행 인자값도 Genian EDR 상세 정보 패널을 통해 관리자가 쉽게 확인할 수 있습니다. 그 뿐만 아니라, 'MITRE ATT&CK' 정보도 함께 조회하여, 보다 체계화된 위협 관리가 가능합니다.
○ 보안 관리부서는 EDR 도입을 통해 내부 단말에 유입되는 각종 위협 요소를 능동적으로 대응할 수 있습니다. 그리고 각 단말의 주요 이벤트 보관을 통해 특정 기간에 발생했던 과거 기록 조회가 가능합니다. 이를 통해 증거데이터 확보와 원인파악에 도움이 됩니다.
7. 침해 지표 (Indicator of Compromise)
-
MD5
2f6fe22be1ed2a6ba42689747c9e18a0
5a223c70b65c4d74fea98ba39bf5d127
7a0c0a4c550a95809e93ab7e6bdcc290
46fd22acea614407bf11d92eb6736dc7
568f7628e6b7bb7106a1a82aebfd348d
779f2f4839b9be4f0b8c96f117181334
07015af18cf8561866bc5b07e6f70d9a
7756b4230adfa16e18142d1dbe6934af
8346d90508b5d41d151b7098c7a3e868
30741e7e4cdd8ba9d3d074c42deac9b1
537806c02659a12c5b21efa51b2322c1
afadab22f770956712e9c47460911dad
b9c2111c753b09e4cc9d497f8fd314fc
b128c5db5d973be60f39862ba8bfb152
bfb02dee62c38c3385df92b308499b31
ca3926dc6c4b2a71832a03fba366cbcd
ec9dcef04c5c89d6107d23b0668cc1c1
f4d59b1246e861a2a626cb56c55651f0
f14f332d4273de04ba77e38fd3dcff90
f960ce07c519d1e64a46c7f573eac39b
fb3c652e795f08cc2529ed33ec1dc114
fe8626e7c3f47a048c9f6c13c88a9463
1ae2e46aac55e7f92c72b56b387bc945
2a388f3428a6d44a66f5cb0b210379a0
-
C2
afcafe.kro[.]kr
dirwear.000webhostapp[.]com
download.uberlingen[.]com
hyper.cadorg.p-e[.]kr
jieun.dothome.co[.]kr
nauji.n-e[.]kr
nocamoto.o-r[.]kr
nomera.n-e[.]kr
onsungtong.n-e[.]kr
peras1.n-e[.]kr
update.screawear[.]ga
vamboo.n-e[.]kr
woana.n-e[.]kr