위협분석보고서-genians

AI Agent 'opencode'로 미끼를 만든 김수키, GitHub PAT 기반 LNK 공격 진화

작성자: Genians | Sep 6, 2026, 12:00:01 PM

◈ 주요 결과 (Key Findings)

  • 김수키 연계 공격 활동에서 ZIP 압축파일 내부의 악성 LNK 파일을 활용한 후속 유포 정황 확인
  • 미끼용 PDF 메타데이터에서 AI Agent 'opencode' 기록 확인, AI 및 LLM 기반 미끼 양산 흐름 지속
  • 모든 LNK 파일이 PowerShell을 실행 대상으로 지정하고, 긴 실행 인수 내부에 암호화된 로더를 은닉
  • GitHub PAT를 이용해 Raw Content 경로에서 미끼 문서와 후속 PowerShell 명령 수신
  • 분석 도구 및 가상화 프로세스를 탐지하고, 특정 조건 충족 시 실행을 중단하는 안티 분석 로직 포함
  • LNK, PowerShell, GitHub 악용 행위에 대한 EDR 기반 탐지 및 위협 헌팅 강화 필요

 

 

1. 요약 (Executive Summary)

지니언스 시큐리티 센터는 김수키(Kimsuky)가 수행하는 것으로 평가되는 Git 기반 C2 공격, 일명 Operation GitPower를 지속적으로 추적하고 있습니다. 또한, 지난 위협 인텔리전스 보고서를 통해 김수키가 AI와 로컬 LLM을 공격 준비 및 미끼 제작 과정에 활용하고 있는 정황을 공개한 바 있습니다.

본 보고서는 그 후속 분석으로, 2026년 8월 11일부터 19일 사이 수집, 식별된 악성 LNK 파일 13종을 대상으로 개별 상세 분석을 수행한 결과입니다. 분석 대상 LNK 파일은 자금집행, 보험료, 이자 납부, 정책자금, 인증서 갱신, 매장 기준정보, 고객서류, Visa 결제 등 금융 및 기업 실무 시나리오로 위장한 파일명을 사용합니다.

이는 기존 김수키가 주로 활용해 온 외교, 안보, 학술 분야 중심의 미끼 주제가 금융기관, 기업 실무자 등 다양한 분야로 사용됨을 보여줍니다. 악성 샘플 13종은 기존에 확인된 핵심 전술을 그대로 계승합니다. 비정상적으로 긴 LNK 실행 인수, 선행 공백을 통한 인수 은닉, 사용자 정의 디코더, GitHub Raw Content와 하드코딩된 PAT(Personal Access Token) 기반 접근, 숨김 예약 작업 등록, 정상 소프트웨어로 위장한 작업명 등이 반복적으로 확인되었습니다.

그러나 본 분석에서는 기존 보고서에서 다루지 않았던 추가적인 진화 양상도 확인되었습니다.

첫째, 일부 변종은 분석 및 가상화 도구 탐지, 샌드박스 사용자명 검사, 명령 히스토리 삭제 등을 수행하는 분석 회피 루틴을 포함합니다. 이는 자동 분석 환경과 보안 연구자의 수동 분석을 모두 방해하려는 의도로 판단됩니다.

둘째, GitHub 외에 Pastebin을 2단계 페이로드 전달 채널로 사용한 경우가 관찰됩니다. 이는 기존 C2 운용 방식을 유지하면서도, 차단과 폐기에 대비해 대체 전달 경로를 병행하는 방식으로 해석됩니다.

셋째, 미끼 문서 유형이 PDF를 넘어 XLSX, PNG로 다변화되었습니다. 일부 변종은 실제 미끼 문서를 제공하지 않고 오류 문서만 표시하는 방식도 사용했는데, 위협 행위자의 실수일 가능성도 배제할 수 없습니다.

특히, 이번 분석에서는 AI와 LLM을 이용해 미끼 문서를 대량 제작한 정황이 지속적으로 확인되었습니다. GitHub C2에서 내려받는 미끼 문서 29개를 해시 기준으로 분류한 결과 고유 문서는 11종으로 확인되며, 동일 문서가 서로 다른 무작위 파일명으로 재배포된 중복본이 다수 존재합니다. 이는 위협 행위자가 동일한 미끼 문서를 저장소별로 재사용하면서 파일명만 무작위화하는 운영 방식을 취하고 있음을 보여줍니다.

문서 메타데이터와 본문 분석 결과, 일부 PDF에서는 Creator와 Producer 값에 AI 코딩 에이전트인 opencode가 기록되어 있었고, Author 값은 anonymous로 남아 있었습니다. 또한 본문에는 (임시값)과 같은 미치환 플레이스홀더(Placeholder)가 그대로 포함되어 있어, LLM이 생성한 문서 초안을 충분히 검수하지 않은 채 공격에 활용한 정황이 확인되었습니다.

(참고) 미치환 플레이스홀더란 문서 작성 과정에서 나중에 실제 값으로 바꿔 넣기 위해 임시로 표시해 둔 문구가 최종 문서에 그대로 남아 있는 상태를 의미합니다. 정상적인 검수 과정을 거쳤다면 (임시값)과 같은 표기는 실제 수치나 문구로 교체되거나 삭제되어야 합니다. 따라서 이러한 흔적은 LLM이 생성한 초안을 충분히 검토하지 않은 채 공격용 미끼 문서로 사용했을 가능성을 보여주는 중요한 정황으로 판단됩니다.

또 다른 PDF 계열에서는 HeadlessChrome 및 Skia/PDF 메타데이터가 확인되었습니다. 이는 HTML 형태의 문서를 먼저 생성한 뒤, 화면 없는 Chrome 브라우저의 PDF 저장 기능을 자동 실행해 문서를 변환한 것으로 해석됩니다. 문서 간 본문 구조와 정형 문구가 높은 유사도를 보이는 점 역시 하나의 프롬프트 또는 HTML 템플릿에 주제만 바꿔 다량 생성한 정황을 뒷받침합니다.

이러한 결과는 김수키가 기존 GitHub PAT 기반 C2와 LNK 실행 체계를 유지하면서도, AI와 LLM을 활용해 미끼 문서 제작 속도와 다양성을 높이고 있음을 보여줍니다. 특히 AI 생성 문서와 실제 정상 문서 도용본을 혼용하는 방식은 표적과 주제에 따라 미끼의 신뢰도를 선택적으로 조정하려는 운용 양상으로 평가됩니다.

본 보고서는 특정 단일 샘플이 아니라, 13종 LNK 변종과 이들이 내려받는 미끼 문서 전반에서 반복적으로 확인되는 행위, 인프라, 문서 제작 정황을 기반으로 작성되었습니다. 또한 동일 계열 공격에 대한 탐지 정책 수립, 위협 헌팅, 침해사고 대응 강화에 활용될 수 있습니다.

 

[그림 1-1] 미끼 문서에 포함된 플레이스홀더 화면 비교

 

 

2. 위협 분석 (Threat Analysis)

2-1. 초기 접근

초기 유입은 위협 행위자가 이메일 등으로 유포한 압축(ZIP) 파일을 사용자가 해제하고 내부 바로가기(LNK) 파일을 실행하는 전형적인 스피어피싱 공격 과정에서 시작됩니다.

압축 내부에는 실제 업무 문서로 오인하기 쉬운 파일명과 문서 아이콘을 가진 LNK 파일이 포함되어 있습니다. 미끼 주제는 아래와 같이 국내 금융 및 기업 실무에 밀착되어 있습니다.

 

구분 파일명 예시 위장 시나리오
자금/정책

20260811_자금집행.lnk

정책자금 안내 수정 사항_202608.lnk

자금 집행 첨부자료, 정책자금 안내
보험/이자

보험료 납부 안내_202608.lnk

이자 납부 안내_202608.lnk

보험서류.lnk

보험료, 이자 납부 및 서류
인증/보안

인증서 갱긴 안내.lnk

Security_20260811.lnk

공인인증서 갱신, 보안 안내
결제/고객

Visa5499.lnk

20260819_고객서류_No01.lnk

카드 결제 내역, 고객 서류
유통 2026년_8월_매장 기준정보 변경 지침.lnk 매장 운영 지침

[표 2-1] 바로가기 파일명과 위장 시나리오 비교

 

특히, Security_20260811.lnk, Security_20260813.lnk처럼 영문 파일명을 사용한 변종이 한글명 미끼와 동일한 날짜 및 동일한 인프라를 공유하는 점이 확인되었습니다.

이는 동일 위협 행위자가 국내외 사용자 또는 서로 다른 표적군을 동시에 겨냥해 파일명을 변형하고 병행 배포했을 가능성을 시사합니다.

 

2-2. LNK 파일 구조 및 위장 특성

분석 대상 13종 모두는 다음과 같은 위장 특성을 공유합니다. 이는 동일한 LNK 생성 도구 또는 동일한 자동화 생성 방식에서 산출되었을 가능성을 강하게 시사합니다.

1) 아이콘 위장
  • 모든 LNK는 아이콘 경로로 %ProgramFiles%\Google\Chrome\Application\chrome.exe를 지정합니다. 이를 통해 사용자가 정상 브라우저 실행 파일처럼 인식하도록 유도합니다.
2) 속성 설명 위조
  • 모든 LNK의 설명(Description) 필드에는 아래 값이 동일하게 기록되어 있습니다. 이는 Operation GitPower 보고서에 기술된 값과 정확히 일치합니다.
    • Type: Hangul Document
    • Size: 2.84 KB
    • Date modified: 10/20/2023 11:23

실제 파일 형식은 LNK이며, 파일 크기는 약 319KB에서 8.9MB 수준입니다. 따라서 설명 필드에 기록된 문서 유형, 크기, 수정일은 실제 속성과 전혀 일치하지 않습니다.

3) 인수 은닉용 선행 공백
  • 실행 인수(Command-line Arguments) 앞에는 약 300여개의 공백 문자가 삽입되어 있습니다. 이로 인해 Windows 바로가기 속성 창에서 핵심 명령이 화면에 바로 노출되지 않습니다. 이는 기존 보고서에서 언급한 선행 공백과도 일치합니다.
4)실행 인수 길이
  • 순수 명령 길이는 약 5,800자에서 9,500자 규모입니다.
5)파일 크기 팽창 기법
  • 분석 대상은 파일 크기에 따라 두 그룹으로 구분됩니다. 소형 변종은 약 319KB 규모의 4종이며, 대형 변종은 약 8.9MB 규모의 9종입니다. 그러나 실제 LNK 구조인 헤더, LinkInfo, StringData, ExtraData는 파일 선두 약 16KB 구간에만 존재합니다. 이후 영역은 아래와 같은 의사난수 영숫자 패딩으로 채워져 있습니다.
    • 문자와 숫자가 교차하는 생성 패턴을 보입니다. 예를 들어 B0qS7zD5uK2mP9aX6cL3yN8v... 형태이며, 일부 모음이 제외된 특유의 문자 집합을 사용합니다.
    • Windows는 LNK 구조가 종료된 이후의 데이터를 무시하므로, 해당 패딩은 실행 흐름에는 영향을 주지 않는 잉여 데이터입니다.

 

[그림 2-1] 패딩 데이터 화면

 

이 기법은 파일 크기를 인위적으로 증가시켜 일부 샌드박스 및 백신 프로그램(Anti-Malware) 엔진의 탐지를 회피하는 용도로 사용될 수 있습니다.

 

2-3. 사용자 정의 디코더 분석

실행 인수의 핵심 데이터는 표준 Base64 형식이 아닙니다.

공백으로 구분된 십진수 배열과 사용자 정의 산술 치환 디코더로 구성되어 있습니다. 배열 변수명은 13종 모두에서 $VIUSBvejbawf로 동일하게 확인됩니다.

 

[그림 2-2] LNK 실행 인수 화면

 

정적 탐지를 피하려고 진짜 페이로드를 숫자 배열로 난독화해 두고, 실행 시점에 복호화 및 저장, 실행하는 전형적인 로더 구조이며, 디코딩 루틴의 핵심 흐름은 다음과 같습니다.

1) 숫자 배열($VIUSBvejbawf)을 공백 기준으로 분할하여 바이트 리스트를 구성합니다. 이 바이트열이 암호화된 페이로드입니다.
2) 하드코딩된 짧은 키 문자열을 UTF-8 바이트로 변환합니다. 이 키 값은 변종별로 다릅니다.
3) 각 바이트에 대해 pw_num = 키바이트 + 103 값을 계산한 뒤, 다음 조건에 따라 출력 바이트를 생성합니다. 키 인덱스는 순환 적용됩니다.
  • pw_num ≥ 인코딩값이면, 출력 = pw_num - 인코딩값
  • 그렇지 않으면, 출력 = 인코딩값 그대로 유지
  • 키 인덱스는 순환 방식으로 적용됩니다.

4) 결과 바이트열을 UTF-8 문자열로 복원하여 2단계 PowerShell 스크립트를 획득합니다.
5) 복원된 스크립트를 %AppData%\<무작위>.ps1 경로에 저장한 뒤, Invoke-Expression을 통해 실행합니다.

가산 상수 +103은 13종 모두에서 공통으로 사용됩니다. 반면 디코더 키 문자열은 변종별로 다르게 설정되어 있습니다. 확인된 키 문자열은 다음과 같습니다.

 

변종 디코더 키 드롭 스크립트명
자금집행/Security (0811) N*32h^G fgkpxjbgthy.ps1
자금집행/Security (0813) KK*3bU() fgkpxjbgthy.ps1
고객서류 N&*2hn kvnourgr.ps1
매장 기준정보 k*5jhc# kvnourgr.ps1
보험료납부/정책자금 *bebhj&U7 kvnourgr.ps1
보험서류 27%&G3j fgkpxjbgthy.ps1
이자납부(202608) J83&^3 kvnourgr.ps1
이자납부 VNi^k fgkpxjbgthy.ps1
인증서 갱신 V&63bJ& fgkpxjbgthy.ps1
Visa5499 OPu&6vh fgkpxjbgthy.ps1

[표 2-2] 변종 별 디코더 키 및 스크립트명 비교

 

디코더 키만 교체한 채 알고리즘, 상수, 변수명을 그대로 재사용하는 방식은 동일한 빌더에서 파라미터만 변경해 다수의 변종을 생성했음을 뒷받침합니다.

 

2-4. 2단계 PowerShell 로더 동작

2-4-1. 20260811_자금집행.lnk

디코딩된 2단계 스크립트의 전형적인 동작은 20260811_자금집행.lnk 기준으로 다음 순서로 진행됩니다.

1)  미끼 문서 준비
  • %TEMP%\자금집행첨부자료.pdf 경로를 지정한 뒤, 동일 경로에 기존 파일이 존재하면 먼저 삭제합니다.
2)  하드코딩된 PAT 로드
  • GitHub Raw Content 접근에 사용되는 하드코딩된 PAT를 로드합니다.
3) URL 문자열 분할 조립
  • "h" + "t" + "t" + "p" + "s" + ... 형태로 URL 문자열을 분할한 뒤 런타임에 조립합니다. 이는 정적 문자열 탐지를 우회하기 위한 방식입니다. 최종적으로 https://raw.githubusercontent[.]com/sven5500/firtfirter/main/ 경로가 조립됩니다.
4) 미끼 문서 다운로드 및 실행
  • 인증 헤더(Authorization: token <PAT>, Accept: application/vnd.github.v3.raw)와 무의미한 커스텀 헤더(aohvcoehfg=oxhdvshbrsregst)를 사용해 원격 미끼 파일 xnciuegwpo.pdf를 다운로드합니다. 이후 해당 파일을 %TEMP%\자금집행첨부자료.pdf 경로에 저장하고 즉시 실행합니다. 이 과정으로 피해자는 정상 문서가 열린 것으로 인식하게 됩니다.
5) 지속성 스크립트 생성
  • %AppData%\mlxchjvose.ps1 파일을 생성합니다. 해당 스크립트는 실행 시 동일 저장소에서 후속 페이로드 SqpmvihdrgS.txt를 다운로드한 뒤, %AppData%\qpmvixibrg.ps1 경로에 저장합니다. 이후 conhost.exe --headless powershell.exe -ExecutionPolicy Bypass -File <경로> 형식으로 PowerShell을 창 없이 실행합니다.
6) 숨김 예약 작업 등록
  • BitLockor Encrypter All Drives_102974298364124_skillerty라는 이름의 숨김 예약 작업을 등록합니다. 해당 작업명은 정상 Windows 기능인 BitLocker를 연상시키지만, 실제로는 BitLocker를 BitLockor로 변형한 오타 위장입니다. 예약 작업은 등록 5분 후 최초 실행되며, 이후 10분 간격으로 반복 실행되도록 설정됩니다. 또한 -Hidden 옵션이 적용되어 사용자가 쉽게 인지하기 어렵습니다.
7) 자가 삭제
  • Remove-Item -Path $MyInvocation.MyCommand.Path -Force 명령을 통해 실행 중인 원본 스크립트를 삭제합니다.

conhost.exe --headless를 경유해 PowerShell을 숨김 창 방식으로 구동하는 행위는 사용자의 시야에서 후속 단계를 숨기기 위한 은닉 기법입니다.

또한, 예약 작업명은 BitLocker, MATLAB, .NET Framework NGEN 등 정상 시스템 작업처럼 보이도록 위장되어 있습니다. 변종별로는 철자를 미세하게 변형해 정적 시그니처 기반 탐지를 회피하려는 특징도 확인됩니다.

 

2-5. 분석 회피 루틴

2-5-1. 20260819_고객서류_No01.lnk

본 변종에서는 이전 보고서에 기술되지 않은 분석 회피 코드가 1단계 스크립트 선두에 추가된 것으로 확인되었습니다. 주요 동작은 다음과 같습니다.

1) 분석 도구 및 가상화 도구 프로세스 블록리스트 검사
  • VGAuthService, vmtoolsd(VMware Tools), ProcessHacker, x64dbg, PE-bear, CFF Explorer, Autoruns, procexp, procexp64, Procmon, Procmon64, tcpview, Dbgview, portmon 등의 프로세스를 검사합니다.
  • 스크립트는 Get-Process 결과를 %AppData%\1.txt에 기록한 뒤, 각 도구명을 문자열로 검색합니다. 이 중 하나라도 발견되면 실행을 중단합니다.
2) 샌드박스 사용자명 검사
  • $env:username 값이 Bruno인 경우 즉시 자가 삭제를 수행합니다. Bruno는 분석 환경에서 사용되는 사용자명으로 추정됩니다.
3) 안티포렌식 동작
  • 분석 환경이 감지되면 PowerShell 명령 히스토리인 %AppData%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt를 삭제합니다. 이후 임시 파일을 제거하고 실행을 종료합니다.
4) XLSX 미끼 문서 사용
  • 분석 회피 검사를 통과한 경우, 미끼 파일로 XLSX 문서인 영수증.xlsx를 사용합니다. 원격 파일명은 NWfie.xlsx입니다.

이러한 동작은 위협 행위자가 자동 분석 환경과 리버싱 도구에 대응하기 위한 기능을 강화하고 있음을 보여줍니다.

또한, 미끼 문서의 완성도나 실행 결과만으로 위협 여부를 판단하는 접근에는 한계가 있음을 재확인시켜 줍니다.

 

2-6. Pastebin 기반 대체 C2

2-6-1. Visa5499.lnk

본 변종은 GitHub Raw에서 PNG 이미지 형식의 미끼 파일인 Visa_5499.png를 다운로드해 실행합니다.

1) 지속성 스크립트 동작
  • %AppData%\p5234fop.ps1 경로에 생성되는 지속성 스크립트는 다음 명령을 통해 Pastebin에서 원격 코드를 받아옵니다.
    • https://pastebin[.]com/raw/gybpx38s
    • 수신한 코드 내용이 비어 있지 않은 경우, iex(Invoke-Expression)를 통해 즉시 메모리상에서 실행합니다.
2) 예약 작업 등록
  • 예약 작업명은 MATLAB R2022bsdugbvr Startup Acceleratorsdpvishdgreg로 설정되어 있으며, 정상 MATLAB 관련 작업처럼 보이도록 위장되어 있습니다. 해당 작업은 등록 5분 후 최초 실행되며, 이후 35분 간격으로 반복 실행됩니다.

이 변종은 GitHub 단일 채널에만 의존하지 않고, 정상 텍스트 공유 서비스인 Pastebin을 2단계 페이로드 전달 채널로 함께 사용합니다.

이는 특정 도메인 차단만으로 전체 C2 통신을 무력화하기 어렵게 만드는 채널 다변화 전략으로 평가됩니다.

 

2-7. 변종 분류 및 인프라 상관관계

LNK 악성파일 13종의 특성을 기준으로 정리하면 다음과 같고, 속성에 포함된 설명문이 모두 동일하게 적용된 것을 알 수 있습니다.

 

No File Name Decoy

GitHub 계정/저장소

예약 작업명 LNK 속성 설명 (모두 동일) 특이사항
0 20260811_자금집행.lnk  자금집행첨부자료.pdf  sven5500/firtfirter  BitLockor Encrypter All Drives_102974298364124_skillerty 

Type: Hangul Document

Size: 2.84 KB

Date modified: 10/20/2023 11:23

4번과 PAT, 저장소, 작업명 공유 
1 20260813_자금집행.lnk  자금집행첨부자료.pdf  montry111/secsecon  BitLockor Encrypter All Drives_102974298364124_skillerty  5번과 PAT, 저장소 공유 / 0, 4번과 작업명 동일(계정 상이) 
2 20260819_고객서류_No01.lnk  영수증.xlsx  jamjack2026/zoysotor  BitLooktr Enerypteer AlLER DrLiivers_9734568237652345_updateers  분석 회피 루틴 탑재, 작업명 오타 포함 
3 2026년 8월 매장 기준정보 변경 지침.lnk  2026년 8월 매장 기준정보 변경 지침.pdf  urusa4400/yutyutb  BitLockor Encrypter AllER Drives_89643165878_skillerty  7, 9, 12번과 작업명 동일(계정 상이) 
4 Security_20260811.lnk  보험료 자동이체 입금 안내.pdf  sven5500/firtfirter  BitLockor Encrypter All Drives_102974298364124_skillerty  0번과 PAT, 저장소, 작업명 공유 
5 Security_20260813.lnk  보험료 자동이체 입금 안내.pdf  montry111/secsecon  BitLockor Encrypter All Drives_102974298364124_skillerty  1번과 PAT, 저장소, 작업명 공유 
6 Visa5499.lnk  Visa_5499.png  jamestony88/confgiwr  MATLAB R2022bsdugbvr Startup Acceleratorsdpvishdgreg  Pastebin 대체 C2 추가, PNG 미끼 
7 보험료 납부 안내_202608.lnk   보험료 납부 안내_202608.pdf   baras6600P/oupouper  BitLockor Encrypter AllER Drives_89643165878_skillerty   12번과 PAT, 저장소 공유 
8 보험서류.lnk  보험서류.pdf
(오류 문서)
jamjack2026/twotwo  .NET Framework NGEN v4.0.3031923879465346234523  2번과 동일 계정, 다른 저장소 
9 이자 납부 안내_202608.lnk  이자 납부 안내_202608.pdf  choemiyang/openoper  BitLockor Encrypter AllER Drives_89643165878_skillerty  3, 7, 12번과 작업명 동일(계정 상이) 
10 이자납부 안내.lnk  보험서류.pdf
(오류 문서)
jeni534/qmcoiuuer  .NETRUdKBIEGE FremeweRGe9287347235233 MHHEN t4.2-w3094729136848273523  -
11 인증서 갱긴 안내.lnk  인증서 갱긴 안내.pdf
(오류 문서)
urusa4400/vcgheeg  .NETRUNOUE FremeweRk12273268762345 NGEN t7.9sldjgo2193874124  3번과 동일 계정, 다른 저장소 
12 정책자금 안내 수정 사항_202608.lnk  정책자금 안내 수정 사항_202608.pdf  baras6600P/oupouper  BitLockor Encrypter AllER Drives_89643165878_skillerty  7번과 PAT, 저장소 공유 
 

[표 2-3] 변종 인프라 및 상관관계 분석

 

상관관계 분석 결과, 다음과 같은 운영 특성이 확인됩니다.

1) PAT와 저장소 공유(날짜 세트)
  • 자금집행과 Security, 보험료납부와 정책자금은 동일한 PAT와 저장소를 공유합니다. 이는 서로 다른 미끼 테마를 동일 인프라에서 동시에 배포한 사례로, 하나의 캠페인 단위를 형성하였습니다.
2) 계정 재사용(저장소 분리)
  • jamjack2026, urusa4400는 동일 계정을 사용하되 저장소만 분리해 운영한 것으로 확인됩니다.
3) 미끼 다운로드 호출 누락 (불완전 빌드)
  • 8, 10, 11번은 미끼 문서 다운로드 호출 구문이 누락되어, 원격 미끼의 URL과 인증 헤더를 조립해 두고도 이를 사용하지 않습니다. 참고로 인증서 "갱신"이라는 표현이 "갱긴"으로 오타가 포함되어 있습니다.
  • 대신 error 문자열만 기록한 16바이트 정도의 파일에 .pdf 확장자를 붙여 실행하므로 사용자에게는 오류 문서가 보입니다.
  • 단 예약 작업 등록과 2단계 페이로드 수신은 정상 작동하므로 감염 실패로 판단해서는 안 됩니다.

 

2-8. AI 생성 정황 및 제작 인프라

본 절에서는 앞서 분석한 LNK 악성파일이 GitHub C2로부터 내려받는 미끼 문서를 분석 대상으로 합니다.

수집된 다수의 미끼 파일을 해시 기준으로 분류한 결과, 고유 문서는 약 11종으로 확인되며, 나머지는 동일 문서를 서로 다른 무작위 파일명으로 재배포한 중복본입니다.

메타데이터 분석 결과, 문서 제작 과정에서 AI 도구가 사용된 정황이 다수 확인되었습니다.

2-8-1. 수집 현황 및 중복 배포 구조

미끼로 사용된 고유 문서 11종은 모두 최소 2개 이상의 서로 다른 파일명으로 존재합니다. 이 중 가장 많이 재사용된 주제는 보험료 관련입니다. 이는 위협 행위자가 동일한 미끼 문서를 저장소별로 무작위 파일명으로 재업로드하는 운영 방식을 사용하고 있음을 보여줍니다.

 

구분 수량
수집 파일 29개
고유 문서(MD5 Hash 기준) 11종
중복 비율 62% (18개가 중복본)
형식 PDF 9종 / XLSX 2종
 

[표 2-4] 수집 현황 자료

 

2-8-2. 제작 도구별 계열 분류

11종의 문서 메타데이터를 분석한 결과, 제작 도구를 기준으로 4개 계열로 뚜렷하게 구분됩니다.

 

문서 제목 형식 Creator / Producer Author 생성 시각(UTC)
영수증 XLSX Microsoft Excel (AppVer 12.0000) AzureUser 2026-08-18 18:32:08
입금계좌정리 대장 XLSX Microsoft Excel (AppVer 12.0000) AzureUser 2026-08-18 18:34:14
보험금청구서 및 상세동의서_2026.08 PDF Adobe Illustrator 26.0 (Windows) / Adobe PDF library 16.03 - 2026-04-03 01:15:04
이자 납부 안내 PDF HeadlessChrome/151.0.0.0 / Skia/PDF m151 - 2026-08-10 19:30:41
보험료 납부 안내 (2026년 8월) PDF opencode / opencode anonymous 2026-08-16 03:00:00
자금집행첨부자료 PDF HeadlessChrome/151.0.0.0 / Skia/PDF m151 - 2026-08-10 19:46:01
자동이체 입금 안내 PDF HeadlessChrome/151.0.0.0 / Skia/PDF m151 - 2026-08-10 19:42:04
2026년 8월 정책자금 지원 안내 PDF opencode / opencode anonymous 2026-08-16 03:00:00
이자 납부 안내 (2026년 8월) PDF opencode / opencode anonymous 2026-08-16 03:00:00
보험료 자동이체 입금 안내 PDF HeadlessChrome/151.0.0.0 / Skia/PDF m151 - 2026-08-10 19:27:58
매장 마스터 데이터 변경 관리 가이드라인 (2026년 8월) PDF opencode / opencode anonymous 2026-08-16 03:00:00
 

[표 2-5] 제작 도구별 계열 분류

 

계열별로 요약하면 하기와 같고, AI 코딩 에이전트인 opencode 계열이 다수 관찰되었습니다.

 

계열 제작 도구 제작 시각 특성
A. opencode 계열 AI 코딩 에이전트 opencode 4종 전량 2026-08-16 03:00:00 초 단위까지 동일
B. HeadlessChrome 계열 헤드리스 크롬 인쇄 출력 2026-08-10 19:27~19:46 약 18분 내 집중
C. Adobe 계열 Adobe Illustrator 26.0 2026-04-03, 타 계열과 4개월 이상 이격
D. Excel 계열 Microsoft Excel / AzureUser 2026-08-18 18:32~18:34 약 2분 내
 

[표 2-6] 제작 도구별 주요 요약

 

2-8-3. AI 코딩 에이전트 opencode가 Producer로 기록

일부 PDF 문서에서는 메타데이터의 Creator와 Producer가 모두 opencode로 기록되어 있습니다. opencode는 터미널 기반의 오픈소스 AI 코딩 에이전트로, 자연어 지시에 따라 코드 작성과 파일 생성을 자동으로 수행하는 도구입니다.

 

[그림 2-3] opencode 화면

 

이는 일반적인 문서 작성 프로그램에서 생성되는 값이 아니며, 해당 문서가 수작업 문서 작성 도구가 아닌 AI 에이전트를 통해 프로그래밍 방식으로 생성되었을 가능성을 강하게 시사합니다. 또한 Author 필드가 모두 anonymous로 동일하게 기록되어 있어, 도구의 기본값이 그대로 남은 것으로 판단됩니다.

opencode 계열 문서 본문에는 LLM이 생성한 것으로 보이는 플레이스홀더 표기가 치환되지 않은 채 그대로 남아 있습니다.

  • 납부 주기: 매월 납입일 (임시값)
  • 납입 유예 기간: 납입일로부터 14일 (임시값)
  • 운전자금: 업체당 최대 1억 원, 연 2.0% 고정금리 (임시값)


이는 LLM에 문서 생성을 지시하는 과정에서 모델이 확정할 수 없는 수치를 임시값으로 표기했고, 위협 행위자가 이를 실제 값으로 교체하지 않은 채 그대로 배포했음을 보여줍니다. 문서 제작 과정에서 사람의 후속 검수가 사실상 이루어지지 않았음을 시사하는 동시에, AI 기반 자동 생성 정황을 직접적으로 드러내는 핵심 아티팩트로 보입니다.

타임스탬프 정보 역시 문서들이 개별적으로 작성되기보다 일괄 생성되었을 가능성을 뒷받침합니다. 확인된 opencode 계열 문서의 생성 시각(CreationDate)은 모두 2026-08-16 03:00:00 UTC로 초 단위까지 동일하며, 별도의 수정 시각(ModDate)은 확인되지 않습니다. 해당 시각을 한국표준시(KST, UTC+09:00)로 변환하면 2026-08-16 12:00:00에 해당합니다.

여러 문서의 생성 시각이 초 단위까지 완전히 일치한다는 점은 사용자가 각 문서를 순차적으로 생성하거나 편집한 일반적인 작업 패턴과는 차이가 있으며, 하나의 자동화된 처리 과정이나 스크립트를 통해 복수의 문서가 일괄 생성되었을 가능성을 시사합니다.

 

[그림 2-4] PDF 속성 정보에 포함된 opencode 기록

 

HeadlessChrome 계열 문서 간 본문 텍스트 유사도를 측정한 결과, 일부 문서가 80% 이상 일치하는 것으로 확인되었습니다. 실제 문장을 비교하면 주제어만 치환되고 문장 구조는 동일하게 유지됩니다.

  • 이자 납부와 관련하여 처리 완료된 납부 내역을 안내드리오니, 각 담당자께서는 해당 내용을 확인하여 주시기 바랍니다.
  • 보험료 자동이체와 관련하여 처리 완료된 입금 내역을 안내드리오니, 각 담당자께서는 해당 내용을 확인하여 주시기 바랍니다.

 

[그림 2-5] HeadlessChrome 계열 미끼 문서 비교

 

또한, 내부 확인 및 업무 관리 목적으로 작성되었으며, 확인 요청의 건, 각 담당자께서는 해당 내용과 같은 공통 정형 문구가 여러 문서에서 동일하게 출현합니다. 이는 하나의 프롬프트 또는 문서 템플릿에 주제만 변경해 대량 생성한 전형적인 양상으로 추정됩니다.

HeadlessChrome 기반 PDF 생성 방식은 AI, LLM 기반 문서 자동화 파이프라인에서 자주 활용될 수 있는 구조입니다. LLM은 자연어 지시에 따라 문서 본문과 HTML/CSS 서식을 생성하고, Headless Chrome은 해당 HTML을 화면 없이 렌더링한 뒤 PDF로 저장합니다.

 

[그림 2-6] 이자 납부 안내 PDF 문서의 메타데이터

 

따라서 PDF 메타데이터에 Creator: HeadlessChrome 및 Producer: Skia/PDF 값이 기록된 경우, 사람이 일반 문서 편집기에서 직접 작성했다기보다 LLM 또는 스크립트가 생성한 HTML 문서를 브라우저 자동화 방식으로 PDF 변환했을 가능성을 시사합니다.

생성 시각과 수정 시각이 동일하여 사후 편집 흔적이 없고, 여러 문서가 약 18분 내에 연속 생성된 점 역시 자동화 정황을 뒷받침합니다.

해당 계열은 표 기반의 공문 서식을 갖추고 있어 opencode 계열보다 완성도가 높으며, (임시값)과 같은 노출 아티팩트도 확인되지 않습니다. 이는 AI로 HTML 서식을 생성한 뒤 브라우저로 렌더링하는 2단계 파이프라인을 통해 문서 품질을 높인 것으로 보입니다.

XLSX 문서 2종은 docProps/core.xml의 작성자와 최종 수정자가 모두 AzureUser로 기록되어 있습니다. AzureUser는 Microsoft Azure 가상머신에서 흔히 사용되는 기본 관리자 계정명으로, 위협 행위자가 클라우드 VM 환경에서 문서를 제작했을 가능성을 추정해 볼 수 있습니다. 이는 국가 배후 위협 그룹이 추적 회피를 위해 클라우드 인스턴스를 활용하는 일반적인 운용 양상과도 부합합니다.

지난달 보고서에서 확인된 "AI를 활용한 미끼 문서 제작" 흐름이 본 캠페인에서 한층 구체적으로 드러납니다. 특히 다음 세 가지가 새롭게 확인되었습니다.

  • 도구의 특정
    • 종전에는 AI 활용이 문체, 구성상 추정 수준이었으나, 본 분석에서는 PDF Producer 필드에 AI 코딩 에이전트 opencode가 직접 기록되어 도구가 명시적으로 특정되었습니다.
  • 제작 파이프라인의 이원화
    • 단순 AI 생성(opencode 직접 출력)과 AI+렌더링 2단계(HTML 생성 → 헤드리스 크롬 변환) 두 갈래가 병행되며, 후자가 완성도가 높습니다. 위협 행위자가 품질 향상을 위해 파이프라인을 개선 중임을 보여줍니다.
  • 검수 부재
    • (임시값) 플레이스홀더가 최대 9회까지 잔존한 채 실제 유포되었습니다. AI로 제작 속도와 물량은 확보했으나 품질 검수는 이루어지지 않는 운영 실태를 드러냅니다.

 

 

3. 위협 귀속 (Threat Attribution)

3-1. Operation GitPower 계열과 동일 위협 행위자

본 캠페인은 다음 근거를 바탕으로 김수키 Operation GitPower 계열과 동일 위협 행위자의 소행으로 평가됩니다.

1) LNK 위장 지문 일치
  • Chrome 아이콘, 위조된 "Hangul Document / 2.84 KB / 10/20/2023 11:23" 속성 설명, 약 300여 개의 선행 공백은 Operation GitPower 보고서에 기술된 지문과 정확히 일치합니다.
2) 실행 인수 은닉 및 URL 분할
  • 비정상적으로 긴 실행 인수와 "ht"+"t"+"ps" 형태의 URL 조각 결합 방식은 동일한 회피 전술로 확인됩니다.
3) 사용자 정의 디코더 계보
  • 표준 FromBase64String 함수 대신 산술 치환 기반의 커스텀 디코더를 사용하는 방식은 동일 계열에서 반복적으로 관찰되는 특징입니다.
4) GitHub Raw 및 하드코딩 PAT 사용
  • Accept: application/vnd.github.v3.raw 헤더, token <PAT> 기반 인증, 무의미한 커스텀 헤더 삽입은 GitPower의 C2 운용 방식과 동일합니다.
5) 숨김 예약 작업, 정상 SW 위장 작업명, 자가 삭제
  • BitLocker, MATLAB, .NET 등 정상 소프트웨어로 위장한 예약 작업 등록과 원본 자가 삭제는 동일한 지속성 확보 및 흔적 정리 루틴으로 확인됩니다.
6) 미끼 주제의 계승 및 확장
  • 금융, 법률, 업무 문서로 위장하는 기존 흐름을 유지하면서, 국내 금융, 유통 실무 주제로 세분화된 양상이 확인됩니다.

 

전술 기법 설명
Initial Access T1566.001 스피어피싱 첨부 ZIP 내 악성 LNK 유포
Execution T1059.001 PowerShell / T1204.002 사용자 실행 LNK 실행 후 PowerShell 로더
Execution/Defense Evasion T1202 간접 명령 실행 conhost.exe --headless로 창 없이 PowerShell 실행
Defense Evasion T1027 난독화 / T1140 디코딩 커스텀 디코더, URL 분할, 파일 크기 팽창
Defense Evasion T1036.005 위장 Chrome 아이콘, 위조 속성, 정상 SW 작업명
Defense Evasion T1497 가상화/샌드박스 회피 분석도구, 사용자명 검사
Defense Evasion T1070.003 히스토리 삭제 PSReadLine 히스토리 제거
Persistence T1053.005 예약 작업 숨김 작업 등록, 주기 반복
Command and Control T1102 웹 서비스 GitHub Raw / Pastebin(신규) C2
Exfiltration T1041 C2 채널 유출 시스템 정보 GitHub 업로드
 

[표 3-1] MITRE ATT&CK 매핑

 

 

4. 결론 및 대응

4-1. 위협 캠페인 결론

본 캠페인의 침투 구조는 김수키의 기존 Operation GitPower와 동일합니다. 그러나 본 분석은 해당 계열이 정체되어 있지 않고, 회피 및 다변화 방향으로 지속적으로 진화하고 있음을 보여줍니다.

분석 회피 루틴의 도입, Pastebin 기반 대체 C2 활용, 미끼 유형의 다변화는 모두 탐지 및 분석 비용을 높이려는 명확한 의도를 보여줍니다. 특히 이전 보고서에서 강조된 "AI 활용에 따른 미끼 완성도 향상" 흐름과 결합할 경우, 미끼 콘텐츠 자체만을 판별 기준으로 삼는 방어 방식은 더 이상 충분하지 않습니다.

따라서 방어의 중심은 행위 기반 상관 탐지로 전환되어야 합니다. 특히 아래와 같은 연속적인 이상 행위를 하나의 공격 맥락으로 연결하여 분석할 것을 권고합니다.

  • 압축파일 해제 직후 생성되는 LNK 실행
  • LNK에서 시작되는 PowerShell 실행과 비정상적으로 긴 실행 인수(수천 자) 및 대량 선행 공백
  • $VIUSBvejbawf 유사 변수명, 공백 구분 숫자 배열을 포함한 사용자 정의 디코딩
  • conhost.exe --headless powershell.exe 창 없이 실행
  • %AppData%·%TEMP% 경로의 무작위명 .ps1 생성 및 즉시 실행
  • 정상 SW(BitLocker/MATLAB/.NET)로 위장한 숨김 예약 작업 등록과 5~35분 주기 반복
  • raw.githubusercontent[.]com 접근 시 Authorization: token ghp_… 및 Accept: application/vnd.github.v3.raw 헤더 사용
  • pastebin[.]com/raw/… 에 대한 Invoke-RestMethod/iex 연계 호출
  • 분석도구 프로세스 열거, ConsoleHost_history.txt 삭제 등 회피 행위
  • 원본 스크립트/LNK 자가 삭제



4-2. 위협 헌팅 관점 핵심 지표

AI는 미끼 문서의 완성도와 공격 준비 속도를 높이고, 회피 기법은 점차 정교해지고 있습니다. 그러나 엔드포인트에서 발생하는 실행, 지속성 확보, C2 통신, 페이로드 로드 행위 자체는 완전히 은폐하기 어렵습니다.

따라서 최신 침해지표를 지속적으로 반영하는 동시에, 공격 단계 간 상관관계를 분석하고 이상 행위를 신속히 차단할 수 있는 EDR 중심의 통합 대응 체계 구축이 필요합니다.

  • LNK 속성 설명이 일치하는 파일
    • Type: Hangul Document
    • Size: 2.84 KB
    • Date modified: 10/20/2023 11:23
  • LNK 아이콘은 chrome.exe로 위장되어 있으나, 실제 타깃이 powershell.exe 또는 cmd.exe인 조합
  • 300자 이상의 선행 공백을 포함하는 LNK 실행 인수
  • 비업무용 GitHub PAT를 사용하여 raw.githubusercontent[.]com에 접근하는 PowerShell 프로세스
  • 예약 작업명 패턴 헌팅
    •  정상 작업명과 유사한 철자 변형 또는 작업명 말미에 10자리 이상의 무의미한 숫자열이 추가된 작업 

 

4-3. 'Genian Insights E' 기반 통합 대응 전략

본 캠페인은 AI Agent 'opencode'와 HeadlessChrome 등으로 제작된 것으로 판단되는 미끼 문서와 악성 LNK 파일을 이용해 초기 침투한 뒤, 사용자 정의 디코더 기반의 난독화된 PowerShell 실행, 정상 소프트웨어로 위장한 숨김 예약 작업을 통한 지속성 확보, GitHub PAT 및 Pastebin 기반 C2 통신으로 이어지는 다단계 공격입니다.

특히, 일부 변종은 분석 도구 탐지와 명령 히스토리 삭제 등 분석 회피 기능까지 갖추고 있어, 다음과 같은 연속적 이상행위를 하나의 공격 맥락으로 연결해 분석해야 합니다.

'Genian Insights E'는 통합 엔드포인트 보안 플랫폼으로, 프로세스 트리와 명령행, 파일 생성, 예약 작업, 네트워크 연결 등 엔드포인트에서 발생하는 다양한 이벤트를 연계 분석합니다. 이를 통해 개별 이벤트만으로는 정상 행위처럼 보일 수 있는 LNK 실행, PowerShell 구동, GitHub 및 Pastebin 접속과 후속 페이로드 실행을 하나의 공격 흐름으로 가시화할 수 있습니다.

또한 LnkTarget 정보를 기반으로 LNK 파일이 참조하거나 실행하는 대상과 명령을 초기 단계부터 확인할 수 있어, 비정상적으로 긴 실행 인수와 선행 공백 같은 본 캠페인의 위장 특성을 조기에 식별하고, 이후 생성된 스크립트와 하위 프로세스, 지속성 확보 및 외부 통신 행위까지 연계 추적할 수 있습니다.

이러한 가시성은 GitHub, Pastebin 등 정상 클라우드 서비스와 개발 플랫폼을 C2로 악용하거나, 분석 환경을 탐지해 실행을 중단하는 방식으로 탐지를 우회하는 공격에도 효과적으로 대응할 수 있는 기반을 제공합니다.

궁극적으로 AI가 미끼 문서의 완성도와 제작 물량, 공격 준비 속도를 높이더라도, 엔드포인트에서 발생하는 실행, 지속성, 통신, 페이로드 행위까지 숨길 수는 없습니다. 따라서 본 캠페인에 대한 효과적인 대응을 위해서는 최신 침해지표(IoC)를 지속적으로 반영하는 동시에, 공격 단계 간 상관관계를 분석하고 이상행위를 신속하게 차단할 수 있는 EDR 중심의 통합 대응 체계를 구축해야 합니다.

 

[그림 4-1] EDR을 통해 악성 LNK 탐지 모습

 

Genian Insights E의 Attack Storyline 기능을 활용하면 스피어 피싱을 통해 유입된 ZIP 파일의 압축 해제 과정에서 생성되는 악성 LNK 파일을 신속하게 탐지하고 관련 행위 흐름을 확인할 수 있습니다.

이를 통해 초기 위협 유입 단계에서 악성 행위를 조기에 식별하고, 신속한 대응을 통해 추가 피해와 위협의 확산을 효과적으로 방지할 수 있습니다.

 

[그림 4-2] PowerShell 난독화 커맨드 라인 분석

 

악성 LNK 파일이 실행되면 PowerShell 프로세스가 연계되어 동작하며, 난독화된 커맨드라인을 통한 추가 명령 실행 등 일련의 악성 행위가 단계적으로 수행됩니다.

Genian Insights E는 이러한 프로세스 실행 흐름과 행위 기반 이벤트를 실시간으로 분석하고, PowerShell을 통해 실행되는 난독화된 커맨드라인도 직관적으로 식별할 수 있어 공격 활동을 신속하게 파악하고 대응할 수 있습니다.

 

[그림 4-3] PowerShell을 통한 Github C2 접속 화면

 

PowerShell 명령이 실행된 이후 공격자는 예약 작업(Task Scheduler) 등의 지속성 유지 기법을 활용하여 악성 행위가 일정 주기마다 반복적으로 실행되도록 구성합니다. 이후 감염 시스템은 GitHub 기반 C2 서버와 주기적으로 통신하며 추가 명령이나 페이로드를 수신하고, 위협 행위자가 의도한 후속 악성 행위를 지속적으로 수행합니다.

Genian Insights E는 이러한 과정에서 발생하는 예약 작업 생성 및 실행 이력, PowerShell을 비롯한 프로세스 행위 정보, 반복적인 외부 네트워크 통신 패턴을 연계하여 분석할 수 있습니다.

이를 통해 정상적인 GitHub 서비스 이용과 구분되는 비정상적인 통신 및 실행 흐름을 식별하고, 보안 관리자가 C2 통신과 지속성 유지 행위를 신속하게 인지하여 위협 차단, 추가 확산 방지 등 필요한 대응 조치를 수행할 수 있도록 지원합니다.

 

[그림 4-4] Genian Insights E 분석 전용 화면

 

Genian Insights E는 별도의 Analysis 전용 화면을 통해 탐지된 위협과 이상행위(XBA)에 대한 핵심 정보를 직관적으로 제공하며, 개별 이벤트를 단순 나열하는 방식이 아니라 공격 흐름과 연계된 주요 프로세스, 행위, 네트워크 활동을 한눈에 파악할 수 있도록 지원합니다.

특히 XBA 기반 이상행위 탐지 결과를 시각적으로 확인할 수 있어 정상 행위와 구분되는 비정상적인 실행 패턴이나 의심 행위를 빠르게 식별할 수 있으며, 관련 이벤트 간의 연관성을 기반으로 위협의 발생 원인과 전개 과정을 효율적으로 분석할 수 있습니다.

이를 통해 보안 관리자는 탐지된 위협의 중요도와 공격 맥락을 신속하게 파악하고, 상세 분석부터 영향 범위 확인, 차단 및 후속 대응까지 필요한 조치를 보다 빠르고 효율적으로 수행할 수 있습니다.

 

 

5. IoC (Indicator of Compromise)

 

5-1. MD5 Hash

10780939962b54addc9d31f57d80edfc

1523a2fcc901965ab4568d9fe829e4af

500e0bc0d7579fb338912770964076fe

685bfc6b2c29fbc16cfad908894add55

7a53089053b1381742856a5cf2b95f8b

8db2f20b719dcb7029d6296505622093

900e832c10d851bbdef3fb191a15db0e

a2015665a3e18bf0ef86e3931245c7e6

bb88940e915b11f6330b7446f6037f5b

ce5932b88f879f26006df81f2fa7667e

d0894d4626aae0f96d6b84ca3bb71a36

e50f2ae7fb03675a1ef58b1cf9cda6d1

f648bdd3c2cd902e239149de86d43e8f

 

5-2. GitHub 계정

github[.]com/sven5500

github[.]com/montry111

github[.]com/jamjack2026

github[.]com/urusa4400

github[.]com/jamestony88

github[.]com/baras6600P

github[.]com/choemiyang

github[.]com/jeni534

 

5-3. Pastebin

pastebin[.]com/raw/gybpx38s

 

5-4. E-Mail

baras6600@proton[.]me

choemiyang@hotmail[.]com

dustinharrise91@outlook[.]com

jackal3300@proton[.]me

jametony8@outlook[.]com

jamjack2026@proton[.]me

montry111@proton[.]me

sven5500@proton[.]me

taini7700@outlook[.]com

urusa4400@proton[.]m