핵심 사항
- SHELBY 멀웨어 패밀리는 명령 및 제어, 데이터 도용 및 명령 검색을 위해 GitHub를 악용합니다.
- 공격자의 C2 설계에는 치명적인 결함이 있습니다. PAT 토큰을 가진 사람은 누구나 감염된 시스템을 제어할 수 있어 심각한 보안 취약점이 노출됩니다.
- 사용되지 않은 코드와 동적 페이로드 로딩은 멀웨어가 활발하게 개발 중임을 시사하며, 향후 업데이트가 최신 버전의 문제를 해결할 수 있음을 나타냅니다.
요약
새로운 위협에 대한 지속적인 연구의 일환으로 이라크 통신 회사의 이메일 주소에서 발송되어 같은 회사의 다른 직원들에게 전송된 잠재적 피싱 이메일을 분석했습니다.
이 피싱 이메일은 피해자가 첨부된 Details.zip
파일을 열고 포함된 바이너리( JPerf-3.0.0.exe
)를 실행하도록 유도합니다. 이 바이너리는 악성 애플리케이션이 포함된 스크립트 기반 설치 시스템인 Inno setup을 활용합니다:
%AppData%\Local\Microsoft\HTTPApi
:HTTPApi.dll
(SHELBYC2)HTTPService.dll
(쉘바이로더)Microsoft.Http.Api.exe
Microsoft.Http.Api.exe.config
설치된 Microsoft.Http.Api.exe
은 정상 .NET 실행 파일입니다. 주요 목적은 악성 HTTPService.dll
을 사이드 로드하는 것입니다. 일단 로드되면 HTTPService.dll
이 로더 역할을 하여 명령 및 제어(C2)를 위해 GitHub와의 통신을 시작합니다.
로더는 백도어 페이로드를 해독하는 데 사용되는 C2에서 특정 값을 검색합니다( HTTPApi.dll
). 복호화 후 백도어는 리플렉션을 사용하여 관리되는 어셈블리로 메모리에 로드되므로 디스크에 쓰지 않고 기존 탐지 메커니즘을 회피하면서 실행할 수 있습니다.
이 글을 쓰는 시점을 기준으로 백도어와 로더 모두 VirusTotal에서 탐지율이 낮습니다.
셸바이로더 코드 분석
난독화
로더와 백도어는 모두 문자열 암호화를 기능 중 하나로 사용하는 오픈 소스 도구 Obfuscar를 사용하여 난독화됩니다. 이 난독화를 우회하기 위해 사용자 지정 매개변수와 함께 de4dot을 활용할 수 있습니다. Obfuscar는 문자열을 문자열 해독기 함수 호출로 대체하지만, 이 함수의 토큰을 de4dot에 제공하면 코드를 효과적으로 난독 해제할 수 있습니다. --strtyp
(문자열 해독기의 유형, 이 경우 delegate
) 및 --strtok
(문자열 해독 메서드의 토큰)이라는 매개 변수를 사용하면 이러한 함수 호출을 해당 일반 텍스트 값으로 대체하여 코드의 원래 문자열을 표시할 수 있습니다.
샌드박스 탐지
쉘바이로더는 샌드박스 탐지 기술을 활용하여 가상화 또는 모니터링되는 환경을 식별합니다. 실행이 완료되면 결과를 C2로 다시 보냅니다. 이러한 결과는 로그 파일로 패키징되어 각 탐지 방법이 샌드박스 환경을 성공적으로 식별했는지 여부를 자세히 설명합니다:
기술 1: 시스템 정보에 대한 WMI 쿼리
이 악성 코드는 WMI 쿼리(Select * from Win32_ComputerSystem
)를 실행하여 시스템 세부 정보를 검색합니다. 그런 다음 제조업체 및 모델 필드에서 가상 머신의 표시기(예: "VMware" 또는 "VirtualBox)를 확인합니다."
기술 2: 프로세스 열거
이 멀웨어는 실행 중인 프로세스에서 다음과 같은 알려진 가상화 관련 서비스를 검색합니다:
vmsrvc
vmtools
xenservice
vboxservice
vboxtray
이러한 프로세스의 존재는 멀웨어가 가상화된 환경에서 실행되고 있을 수 있음을 알려줍니다.
기술 3: 파일 시스템 검사
이 멀웨어는 다음과 같이 가상화 소프트웨어와 일반적으로 관련된 특정 드라이버 파일의 존재를 검색합니다:
C:\Windows\System32\drivers\VBoxMouse.sys
C:\Windows\System32\drivers\VBoxGuest.sys
C:\Windows\System32\drivers\vmhgfs.sys
C:\Windows\System32\drivers\vmci.sys
기술 4: 디스크 크기 분석
멀웨어는 C:
볼륨의 크기를 확인합니다. 크기가 50 GB 미만인 경우, 많은 가상 머신이 테스트 목적으로 더 작은 디스크 크기로 구성되므로 샌드박스의 일부인 환경으로 유추할 수 있습니다.
기술 5: 상위 프로세스 검증
멀웨어는 상위 프로세스를 검사합니다. 상위 프로세스가 explorer.exe
이 아닌 경우 일반적인 사용자 중심 시나리오가 아닌 자동화된 분석 환경 내에서 실행됨을 나타낼 수 있습니다.
기술 6: 수면 시간 편차 감지
이 멀웨어는 샌드박스에서 분석 속도를 높이기 위해 사용하는 일반적인 기술인 타이밍 검사를 사용하여 절전 또는 지연 기능이 가속화되는지 감지합니다. 예상 수면 시간의 편차가 크면 샌드박스가 적용된 환경임을 알 수 있습니다.
기술 7: 비디오 컨트롤러에 대한 WMI 쿼리
이 멀웨어는 시스템의 비디오 컨트롤러에 대한 정보를 검색하기 위해 WMI 쿼리(SELECT * FROM Win32_VideoController)를 실행합니다. 그런 다음 비디오 컨트롤러의 이름을 가상 머신과 관련된 알려진 값과 비교합니다( virtual
또는 vmware
또는 vbox
.
핵심 기능
멀웨어의 로더 코드는 메인 클래스 생성자 내에서 여러 변수를 초기화하는 것으로 시작됩니다. 이러한 변수에는 다음이 포함됩니다:
- GitHub 계정 이름
- 비공개 리포지토리 이름
- 리포지토리 인증 및 액세스를 위한 개인 액세스 토큰(PAT)
또한 이 멀웨어는 미리 정의된 간격으로 특정 동작을 트리거하는 데 사용되는 두 개의 타이머를 설정합니다.
타이머 중 하나가 특정 메서드 125 실행 후 몇 초 후에 트리거되도록 구성되었습니다. 이 메서드가 호출되면 Windows 레지스트리 키 SOFTWARE\Microsoft\Windows\CurrentVersion\Run
에 새 항목을 추가하여 감염된 시스템에서 지속성을 설정합니다. 메서드가 트리거되고 지속성 메커니즘이 성공적으로 실행되면 타이머는 더 이상 트리거되지 않습니다.
이 메서드는 정수 변수를 사용하여 연산 결과를 나타냅니다. 다음 표에서는 가능한 각 값과 그 의미에 대해 설명합니다:
ID | 설명 |
---|---|
1 | 지속성 설정 성공 |
2 | 이미 설정된 지속성 |
8 | 키에 항목을 추가할 수 없습니다. |
9 | 디스크에서 바이너리를 찾을 수 없음 |
이 정수 값은 C2에 처음 등록될 때 C2에 다시 보고되어 공격자가 감염된 시스템에서 지속성 메커니즘의 성공 또는 실패를 모니터링할 수 있습니다.
두 번째 타이머는 백도어 로딩을 담당하는 메서드를 트리거하도록 구성되며, 악성코드가 시작된 후 65 초 후에 실행됩니다. 먼저, 멀웨어는 시스템별 정보의 조합을 기반으로 MD5 해시를 생성합니다. 해시 생성에 사용되는 데이터의 형식은 다음과 같으며, 각 구성 요소는 슬래시( /
):
- 시스템에서 사용 가능한 프로세서 수입니다.
- 머신의 이름(호스트 이름)입니다.
- 사용자 계정과 연결된 도메인 이름입니다.
- 현재 로그인한 사용자의 사용자 아이디입니다.
- 시스템에 있는 논리 드라이브의 총 개수입니다.
그런 다음 이 해시의 하위 집합을 추출하여 감염된 컴퓨터의 고유 식별자로 사용합니다. 이 식별자는 공격자가 인프라 내에서 손상된 시스템을 추적하고 관리하기 위한 수단으로 사용됩니다.
고유 식별자를 생성한 후 멀웨어는 HTTPS 요청을 사용하여 myToken 리포지토리에 새 커밋을 푸시합니다. 커밋에는 고유 식별자의 이름을 딴 디렉터리가 포함되며, 이 디렉터리에는 Info.txt
라는 파일이 포함되어 있습니다. 이 파일에는 감염된 시스템에 대한 다음 정보가 저장됩니다:
- 사용자 계정과 연결된 도메인 이름입니다.
- 현재 로그인한 사용자의 사용자 아이디입니다.
- 샌드박스 탐지 결과 로그에는 성공 또는 실패한 기술이 자세히 나와 있습니다.
- 지속성 플래그(위 표에 설명된 대로)는 지속성 메커니즘의 결과를 나타냅니다.
- 비콘 이벤트의 현재 날짜 및 시간
멀웨어는 먼저 프록시를 사용하지 않고 리포지토리에 커밋을 푸시하려고 시도합니다. 이 초기 시도가 실패하면 통신을 위해 시스템에 구성된 프록시를 사용하는 것으로 돌아갑니다.
첫 번째 비콘을 보내고 피해자를 성공적으로 등록한 후, 멀웨어는 이전에 생성한 것과 동일한 GitHub 리포지토리 디렉토리에 액세스하여 License.txt
이라는 파일을 다운로드하려고 시도합니다(확인 간격에서 지터가 관찰되지 않았지만 서버가 이를 처리할 수 있음). 있는 경우 이 파일에는 48바이트 값이 포함되어 있으며, 이 값은 AES 복호화 키를 생성하는 데 사용됩니다. 이 파일은 공격자의 백엔드에서 멀웨어가 샌드박스 환경에서 실행되고 있지 않다는 것을 확인한 후에만 업로드됩니다. 이렇게 하면 검증된 감염만 키를 받고 실행 체인을 백도어로 에스컬레이션할 수 있습니다.
이 멀웨어는 License.txt
의 내용에서 AES 키와 초기화 벡터(IV)를 생성합니다. 먼저 SHA256을 사용하여 48바이트 값을 해시한 다음 결과 해시를 키로, 첫 번째 16 바이트를 IV로 사용합니다.
백도어 페이로드가 포함된 HTTPApi.dll
파일 복호화를 진행합니다. 복호화 후 악성 코드는 Assembly.Load
메서드를 사용하여 백도어를 메모리에 반사적으로 로드합니다. 이 기술을 사용하면 멀웨어가 복호화된 백도어를 디스크에 쓰지 않고 직접 실행할 수 있습니다.
DNS 기반 키 메커니즘
셸바이로더의 또 다른 변형은 AES 키와 IV를 생성하는 데 사용되는 바이트 시퀀스를 등록하고 검색하는 데 다른 접근 방식을 사용합니다.
먼저, 멀웨어는 동일한 샌드박스 방지 방법을 실행하여 각 기법에 대한 샌드박스 탐지 여부에 따라 1
또는 0
문자열을 생성합니다.
첫 번째 하위 도메인은 정적 문자열(s
), 두 번째 하위 도메인은 Base32로 인코딩된 고유 식별자, 세 번째 하위 도메인은 Base32로 인코딩된 DomainName\HostName >> Anti-Sandboxing Results >> Persistence Flag
형식의 연결된 문자열로 구성된 arthurshelby.click
하위 도메인을 구축합니다.
예를 들어 전체 도메인은 다음과 같이 보일 수 있습니다. s.grldiyrsmvsggojzmi4wmyi.inevyrcfknfvit2qfvcvinjriffe6ib6hyqdambqgaydambahy7cama.arthurshelby.click
그 후 멀웨어는 arthurshelby.click
의 하위 도메인에 대해 여러 DNS 쿼리를 실행합니다. 이러한 쿼리에서 반환된 IP 주소는 바이트 시퀀스로 연결된 다음 앞서 설명한 것과 동일한 프로세스에 따라 백도어 해독을 위한 AES 키를 생성하는 데 사용됩니다.
하위 도메인은 이 형식을 따릅니다:
- 첫 번째 하위 도메인은
l<index>
이며, 인덱스는 DNS 호출 순서(예:l1
,l2
등)에 해당하여 바이트 시퀀스가 올바르게 조합되도록 합니다. - 두 번째 하위 도메인은 Base32로 인코딩된 고유 식별자입니다.
SHELBYC2 코드 분석
백도어는 로더가 생성한 것과 동일한 고유 식별자를 재생성하는 것으로 시작됩니다. 앞서 사용한 정확한 시스템별 문자열의 MD5 해시를 계산하여 이를 수행합니다. 그런 다음 백도어는 감염된 컴퓨터에서 멀웨어의 인스턴스 하나만 실행되도록 Mutex를 생성합니다. 뮤텍스의 이름은 고유 식별자 앞에 Global\GHS
문자열을 추가하여 지정합니다.
65 초 후에 백도어는 다음 시스템 정보를 수집하는 메서드를 실행합니다:
- 현재 사용자 신원
- 운영 체제 버전
- 멀웨어의 프로세스 ID
- 머신 이름
- 현재 작업 디렉터리
흥미롭게도 이렇게 수집된 정보는 로컬에서 사용되거나 C2 서버로 유출되지 않습니다. 이는 해당 코드가 개발 중에 남겨진 데드 코드이거나 멀웨어가 아직 개발 중이며 향후 버전에서 이 데이터를 활용할 계획이 있음을 시사합니다.
그런 다음 멀웨어는 현재 타임스탬프를 고유 디렉토리 내 myGit 리포지토리(시스템 고유 식별자를 사용하여 이름 지정)에 있는 Vivante.txt라는 파일에 업로드합니다. 이 타임스탬프는 공격자가 멀웨어의 활동을 모니터링하고 감염된 시스템이 여전히 활성 상태인지 확인할 수 있는 마지막 비콘 시간 역할을 합니다. "Vivante" 라는 단어는 프랑스어로 "alive" 로 번역되며, 이는 손상된 컴퓨터의 하트비트 표시기 역할을 하는 파일의 역할을 반영합니다.
다음으로, 악성 코드는 감염된 시스템에서 실행하기 위해 운영자가 발행한 명령 목록이 포함된 Command.txt
파일을 다운로드하려고 시도합니다.
Command.txt
에 명령이 없는 경우 악성 코드는 Broadcast.txt
이라는 다른 파일에서 명령을 확인합니다. Command.txt
과 달리 이 파일은 멀웨어의 디렉터리 외부에 위치하며 감염된 모든 시스템에 동시에 명령을 브로드캐스트하는 데 사용됩니다. 이 접근 방식을 사용하면 공격자는 감염된 여러 머신에서 동시에 작업을 실행하여 대규모 제어를 간소화할 수 있습니다.
명령 처리 테이블:
Command.txt
파일의 명령은 처리된 명령이거나 Powershell로 실행되는 시스템 명령일 수 있습니다. 다음은 처리되는 모든 명령에 대한 설명입니다.
/다운로드
이 명령은 GitHub 리포지토리에서 감염된 컴퓨터로 파일을 다운로드합니다. 두 개의 매개 변수가 필요합니다:
- GitHub 리포지토리에 저장된 파일의 이름입니다.
- 감염된 컴퓨터에서 파일이 저장될 경로입니다.
/업로드
이 명령은 감염된 컴퓨터에서 GitHub 리포지토리로 파일을 업로드합니다. 업로드할 파일의 경로라는 하나의 매개변수가 필요합니다.
/dlextract
이 명령은 GitHub 리포지토리( /download
)에서 zip 파일을 다운로드하고 그 내용을 추출하여 컴퓨터의 지정된 디렉터리에 저장합니다.
/evoke
이 명령은 .NET 바이너리를 반사적으로 로드하는 데 사용됩니다. 첫 번째 매개 변수는 감염된 시스템에 이전에 다운로드한 AES 암호화된 .NET 바이너리의 경로이고, 두 번째 매개 변수는 로더가 백도어를 로드하는 방식과 유사하게 AES와 IV를 유도하는 데 사용되는 값입니다.
이 명령은 셸바이로더가 백도어를 로드하는 방식과 유사하게 .NET 바이너리를 반사적으로 로드합니다. 두 개의 매개 변수가 필요합니다:
- 이전에 감염된 컴퓨터에 다운로드한 AES 암호화 .NET 바이너리의 경로입니다.
- AES 키와 IV를 도출하는 데 사용되는 값입니다.
시스템 명령
위의 명령 중 하나로 시작하지 않는 모든 명령은 PowerShell 명령으로 취급되어 그에 따라 실행됩니다.
커뮤니케이션
이 멀웨어는 백엔드의 Git 도구를 사용하여 커밋을 보내지 않습니다. 대신 GitHub와 상호 작용하기 위해 HTTP 요청을 생성합니다. 다음 구조의 JSON 객체를 사용하여 리포지토리에 커밋을 보냅니다:
{
"message": "Commit message",
"content": "<base64 encoded content>",
"sha": "<hash>"
}
멀웨어는 요청에 대해 다음과 같은 특정 HTTP 헤더를 설정합니다:
- 수락합니다:
application/vnd.github.v3+json
- 콘텐츠 유형:
application/json
- 권한 부여:
token <PAT_token>
- 사용자 에이전트:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36
요청은 다음과 같이 구성된 GitHub API 엔드포인트로 전송됩니다:
https://api.github.com/repos/<owner>/<repo>/contents/<unique identifier>/<file>
비공개 리포지토리에 액세스하는 데 필요한 개인 액세스 토큰(PAT)은 바이너리 내에 포함되어 있습니다. 이를 통해 멀웨어는 표준 Git 도구 체인을 사용하지 않고도 리포지토리를 인증하고 작업을 수행할 수 있습니다.
멀웨어가 설정된 방식은 이론적으로 개인 액세스 토큰(PAT) 을 가진 사람이라면 누구나 공격자가 보낸 명령을 가져와 모든 피해 컴퓨터의 명령 출력에 액세스할 수 있음을 의미합니다. 이는 PAT 토큰이 바이너리에 내장되어 있어 이를 획득한 사람이라면 누구나 사용할 수 있기 때문입니다.
셸비 가족 결론
C2 인프라는 외래적으로 설계되었지만, 공격자는 이러한 접근 방식의 중대한 위험과 영향을 간과하고 있습니다.
공인된 레드팀이나 악의적인 행위자가 이 멀웨어를 사용하는 것은 불법 행위에 해당한다고 생각합니다. 이를 통해 모든 피해자는 내장된 PAT를 무기화하여 모든 활성 감염을 제어할 수 있습니다. 또한 피해자가 VirusTotal 또는 MalwareBazaar와 같은 플랫폼에 샘플을 업로드하면 제3자가 감염 관련 데이터에 액세스하거나 감염을 완전히 장악할 수 있습니다.
REF8685 캠페인 분석
Elastic 보안 연구소는 타사 데이터 소스에 대한 일상적인 수집과 분석을 통해 REF8685를 발견했습니다. REF8685 침입을 연구하던 중 새로운 것으로 판단되는 로더와 C2 임플란트를 발견하여 이 상세한 멀웨어 및 침입 분석 결과를 공개하게 되었습니다.
악성 페이로드는 공격 대상 조직 내부에서 전송된 고도로 표적화된 피싱 이메일을 통해 이라크에 기반을 둔 통신사에 전달되었습니다. 이메일의 내용은 네트워크 관리의 기술적 세부 사항에 관한 엔지니어들 간의 토론 내용입니다. 이메일의 내용과 맥락을 고려할 때 이 미끼는 외부에서 제작된 것으로 엔지니어 엔드포인트, 메일 서버 또는 둘 다의 손상을 나타내는 것 같지는 않습니다.
Dears,
We would appreciate it if you would check the following alarms on Core Network many (ASSOCIATION) have been flapped.
Problem Text
*** ALARM 620 A1/APT "ARHLRF2SPX1.9IP"U 250213 1406
M3UA DESTINATION INACCESSIBLE
DEST SPID
2-1936 ARSMSC1
END
Problem Text
*** ALARM 974 A1/APT "ARHLRF1SPX1.9IP"U 250213 1406
M3UA DESTINATION INACCESSIBLE
DEST SPID
2-1936 ARSMSC1
END
…
이 이메일에는 네트워크 알람을 해결하기 위한 클릭 유도 문안과 details.zip
이라는 이름의 압축된 첨부 파일이 포함되어 있습니다. 해당 zip 파일 안에는 이메일에 포함된 로그가 포함된 텍스트 파일과 실행 체인을 시작하는 Windows 실행 파일(JPerf-3.0.0.exe
)이 있으며, 이 실행 체인을 통해 SHELBYC2 임플란트가 전달되어 환경에 대한 원격 액세스를 제공합니다.
REF8685 침입에서는 관찰되지 않았지만 VirusTotal에 따르면 JPerf-3.0.0.exe
(feb5d225fa38efe2a627ddfbe9654bf59c171ac0742cd565b7a5f22b45a4cc3a)가 별도의 압축 아카이브(JPerf-3.0.0.zip
)에 포함되어 있고 이라크에서 제출되었다는 점에 유의해야 합니다. 이 캠페인의 피해자가 같은 피해자인지 아니면 다른 피해자인지는 명확하지 않습니다. 파일 유사성 검색은 또한 추가 압축 아카이브가 있는 Setup.exe
라는 두 번째 임플란트를 식별합니다(5c384109d3e578a0107e8518bcb91cd63f6926f0c0d0e01525d34a734445685c).).
이 파일들(JPerf-3.0.0.exe
및 Setup.exe
)을 분석한 결과 C2
및 AES 키 검색 메커니즘에 GitHub가 사용된 것으로 나타났습니다(자세한 내용은 멀웨어 분석 섹션에서 확인할 수 있습니다). REF8685 멀웨어에 사용된 Github 계정(arthurshellby
및 johnshelllby
)은 악의적인 것으로 밝혀져 Github에서 폐쇄했습니다.
참고로 아서와 존 셸비는 영국 범죄 드라마 ' 피키 블라인더스'의 등장인물입니다. 이 쇼는 2013 에서 2022 년까지 제작되었습니다.
arthurshelby[.]click
도메인은 2.56.126[.]151
, 스탁 인더스트리(AS44477) 호스트 서버를 가리켰습니다. 이 VPS 호스팅 제공업체는 다른 대규모 사이버 공격에서 프록시 서비스에 사용된 적이 있습니다. 이 서버에는 중복되는 해상도가 있습니다:
arthurshelby[.]click
[REDACTED]telecom[.]digital
speed-test[.]click
[REDACTED]airport[.]cloud
[REDACTED]airport[.]pro
셸바이로더 샘플 중 하나의 압축 아카이브와 C2 도메인은 이라크에 본사를 둔 통신 회사인 [REDACTED] 텔레콤의 이름을 따서 명명되었습니다. [편집됨]의 커버리지 맵은 이라크 북부와 동부의 이라크-쿠르드스탄 지역에 초점을 맞추고 있습니다.
"샤르자공항"은 세 번째 표적이 될 가능성이 있는 피해자를 나타냅니다. [편집됨] 국제공항([편집됨])은 아랍에미리트의 항공화물 전문 국제 공항입니다. 두바이 국제공항(DXB)에서 14.5마일(23.3km) 떨어져 있습니다.
[REDACTED]airport[.]cloud
1월 1일 하루 동안 21, 2025 에서 새 서버인 2.56.126[.]157
로 해결되었습니다. 그 후, 합법적인 [REDACTED] 공항 서버인 Google DNS를 가리키고 마지막으로 Namecheap 주차 주소를 가리켰습니다. 2.56.126[.]157
서버를 호스팅하는 스타크 인더스트리(AS44477)는 [REDACTED]-connect[.]online
, [REDACTED]는 [REDACTED] 국제공항의 공항 코드이기도 합니다.
[REDACTED]airport[.]cloud
도메인은 1월 23일부터 2.56.126[.]188
,25, 2025 을 잠시 가리키는 하위 도메인 portal.[REDACTED]airport[.]cloud
을 가지고 있습니다. 그런 다음 이 글을 쓰는 시점까지 트래픽을 172.86.68[.]55
로 리디렉션했습니다.
배너 해시 피벗은 추가 서버-도메인 콤보를 표시합니다: 195.16.74[.]138
, [REDACTED]-meeting[.]online
.
172.86.68[.].55
서버는 또한 원래 피해자를 노린 피싱 도메인으로 보이는 mail.[REDACTED]tell[.]com
을 호스팅합니다.
웹 로그인 페이지는 hxxps://portal.[REDACTED]airport[.]cloud/Login
(VirusTotal).
공격자는 이 두 하위 도메인을 무기화하여 클라우드 로그인 자격 증명을 피싱한 것으로 평가합니다. 이러한 자격 증명이 확보되면([REDACTED] Telecom의 경우) 공격자는 피해자의 클라우드 이메일에 액세스하여 진행 중인 내부 이메일 스레드를 무기화하여 고도로 표적화된 피싱을 제작했습니다.
이렇게 무기화된 내부 이메일은 피해자의 엔드포인트에 재피싱하는 데 사용되었습니다.
이 캠페인과 관련된 모든 도메인은 제로SSL 인증을 활용했으며, 스타크 인더스트리 인프라에 있습니다.
침입 분석의 다이아몬드 모델
Elastic Security Labs는 다이아몬드 모델을 활용하여 침입의 공격자, 기능, 인프라, 피해자 간의 높은 수준의 관계를 설명합니다. 다이아몬드 모델은 단일 인시던트에 가장 일반적으로 사용되며, 인시던트 간의 관계를 생성하는 방법으로 활동 스레딩(섹션 8)을 활용하지만, 공격자 중심(섹션 7.1.4)으로도 사용할 수 있습니다. 접근 방식을 사용하면 복잡하지만 하나의 다이아몬드를 만들 수 있습니다.
REF8685 및 MITRE ATT&CK
Elastic은 MITRE ATT& CK 프레임워크를 사용하여 지능형 지속적 위협이 기업 네트워크에 대해 사용하는 일반적인 전술, 기술 및 절차를 문서화합니다.
전술
전술은 기술 또는 하위 기술의 이유를 나타냅니다. 이는 적의 전술적 목표, 즉 행동을 수행하는 이유입니다.
기술
기술은 공격자가 행동을 수행하여 전술적 목표를 달성하는 방법을 나타냅니다.
YARA 규칙
Elastic Security는 이 활동을 식별하기 위해 YARA 규칙을 만들었습니다. 다음은 SHELBYC2 및 SHELBYLOADER 멀웨어를 식별하기 위한 YARA 규칙입니다:
rule Windows_Trojan_ShelbyLoader {
meta:
author = "Elastic Security"
creation_date = "2025-03-11"
last_modified = "2025-03-25"
os = "Windows"
arch = "x86"
category_type = "Trojan"
family = "ShelbyLoader"
threat_name = "Windows.Trojan.ShelbyLoader"
license = "Elastic License v2"
strings:
$a0 = "[WARN] Unusual parent process detected: "
$a1 = "[ERROR] Exception in CheckParentProcess:" fullword
$a2 = "[INFO] Sandbox Not Detected by CheckParentProcess" fullword
$b0 = { 22 63 6F 6E 74 65 6E 74 22 3A 20 22 2E 2B 3F 22 }
$b1 = { 22 73 68 61 22 3A 20 22 2E 2B 3F 22 }
$b2 = "Persist ID: " fullword
$b3 = "https://api.github.com/repos/" fullword
condition:
all of ($a*) or all of ($b*)
}
rule Windows_Trojan_ShelbyC2 {
meta:
author = "Elastic Security"
creation_date = "2025-03-11"
last_modified = "2025-03-25"
os = "Windows"
arch = "x86"
category_type = "Trojan"
family = "ShelbyC2"
threat_name = "Windows.Trojan.ShelbyC2"
license = "Elastic License v2"
strings:
$a0 = "File Uploaded Successfully" fullword
$a1 = "/dlextract" fullword
$a2 = "/evoke" fullword
$a4 = { 22 73 68 61 22 3A 20 22 2E 2B 3F 22 }
$a5 = { 22 2C 22 73 68 61 22 3A 22 }
condition:
all of them
}
관찰
모든 관측값은 결합된 압축 파일 번들로 ECS 및 STIX 형식으로도 다운로드할 수 있습니다.
이 연구에서는 다음과 같은 관찰 가능성에 대해 논의했습니다.
관측 가능합니다. | 유형 | 이름 | 참조 |
---|---|---|---|
0e25efeb4e3304815f9e51c1d9bd3a2e2a23ece3a32f0b47f829536f71ead17a | SHA-256 | details.zip | 루어 zip 파일 |
feb5d225fa38efe2a627ddfbe9654bf59c171ac0742cd565b7a5f22b45a4cc3a | SHA-256 | JPerf-3.0.0.exe | |
0354862d83a61c8e69adc3e65f6e5c921523eff829ef1b169e4f0f143b04091f | SHA-256 | HTTPService.dll | 쉘바이로더 |
fb8d4c24bcfd853edb15c5c4096723b239f03255f17cec42f2d881f5f31b6025 | SHA-256 | HTTPApi.dll | SHELBYC2 |
472e685e7994f51bbb259be9c61f01b8b8f35d20030f03215ce205993dbad7f5 | SHA-256 | JPerf-3.0.0.zip | 루어 zip 파일 |
5c384109d3e578a0107e8518bcb91cd63f6926f0c0d0e01525d34a734445685c | SHA-256 | Setup.exe | |
e51c6f0fbc5a7e0b03a0d6e1e1d26ab566d606b551c785bf882e9a02f04c862b | SHA-256 | 루어 zip 파일 | |
github[.]com/johnshelllby | URL | GitHub 계정 이름 - C2 | |
github[.]com/arturshellby | URL | GitHub 계정 이름 - C2 | |
arthurshelby[.]click | 도메인 이름 | DNS 도메인 | |
speed-test[.]click | 도메인 이름 | ||
2.56.126[.]151 | ipv4 | ||
2.56.126[.]157 | ipv4 | ||
2.56.126[.]188 | ipv4 | ||
172.86.68[.]55 | ipv4 | ||
195.16.74[.]138 | ipv4 |