Remco SprootenRuben Groenewoud

무법자 Linux 멀웨어: 지속적이고 정교하며 놀라울 정도로 효과적인 악성코드

아웃로우는 간단한 무차별 대입과 채굴 전술을 활용하여 오래 지속되는 봇넷을 유지하는 지속적인 Linux 멀웨어입니다.

33 min readMalware 분석
무법자 Linux 멀웨어: 지속적이고 정교하며 놀라울 정도로 효과적인 악성코드

서문

아웃로우는 지난 몇 년 동안 여러 버전에서 관찰된 지속적이면서도 정교하지 않은 자동 전파 코인 채굴기 패키지입니다[1],[2],[3],[4]. 은신 및 고급 회피 기술이 부족하지만, SSH 무차별 대입, SSH 키 및 크론 기반 지속성, 수동으로 수정된 상품 채굴기 및 IRC 채널 등 간단하지만 영향력 있는 전술을 활용하여 여전히 활동적이고 효과적입니다. 이러한 지속성은 봇넷 운영자가 정교한 기술에 의존하지 않고도 광범위한 영향력을 행사할 수 있는 방법을 보여줍니다.

OUTLAW의 행동과 운영 패턴에 대한 심층적인 인사이트를 얻기 위해 공격자를 유인하고 활동 중인 공격자를 관찰하도록 설계된 허니팟을 배포했습니다. 취약한 시스템을 모방한 환경을 신중하게 제작하여 공격자가 서버와 상호 작용하도록 미끼를 던질 수 있었습니다. 이러한 상호작용을 통해 운영자가 직접 명령을 입력하고, 즉석에서 수정하고, 심지어 명령을 잘못 입력하는 등 자동화된 작업과 수동 작업을 모두 확인할 수 있었으며, 이는 사람이 개입한 명백한 징후였습니다. 캡처한 GIF는 이러한 순간을 보여주며, 실시간 의사 결정 과정을 엿볼 수 있는 보기 드문 장면입니다.

아웃로 분석을 통해 운영자가 사용하는 툴과 시간이 지남에 따라 진화하는 전략에 대한 새로운 인사이트를 얻을 수 있습니다. 이 멀웨어는 공격 체인이 거의 전체 MITRE ATT&CK 프레임워크에 걸쳐 있기 때문에 탐지 엔지니어링 원칙을 적용할 수 있는 귀중한 기회를 제공합니다. 감염 과정을 조사하면 예측 가능하고 반복적인 행동을 활용하는 효과적인 탐지 전략을 개발할 수 있습니다.

이 보고서는 자세한 탐지 규칙과 헌팅 쿼리를 포함한 전체 공격 체인 분석을 제공합니다. OUTLAW의 구성 요소를 분석하여 초보적인 멀웨어도 최신 환경에서 어떻게 수명을 유지할 수 있는지, 방어자가 단순성을 활용하여 탐지 및 대응을 강화할 수 있는 방법을 보여줍니다.

핵심 사항

  • 지속적이지만 정교하지 않습니다: 아웃로우는 SSH 무차별 대입, SSH 키 조작, 크론 기반 지속성 같은 기본적인 기술을 사용함에도 불구하고 여전히 활동 중입니다.
  • 상품 툴링: 이 멀웨어는 수정된 XMRig 마이너를 배포하고, C2용 IRC를 활용하며, 지속성 및 방어 회피를 위해 공개적으로 사용 가능한 스크립트를 포함합니다.
  • 광범위한 공격 표면: 아웃로우의 감염 체인은 거의 전체 MITRE ATT&CK 프레임워크에 걸쳐 있어 많은 탐지 및 헌팅 기회를 제공합니다.
  • 웜과 유사한 전파: 아웃로우는 감염된 호스트를 사용하여 로컬 서브넷에 대한 추가적인 SSH 무차별 대입 공격을 실행하여 봇넷을 빠르게 확장합니다.

OUTLAW 개요

아웃로우는 페이로드 다운로드 및 실행, 지속성 확립, SSH 무차별 대입 공격을 통한 봇넷 확장으로 시작되는 다단계 감염 프로세스를 따릅니다. 실행 체인은 아래와 같습니다:

1. 초기 감염 & 배포

  • 공격은 tddwrt7s.sh 이 C2 서버에서 dota3.tar.gz 패키지를 다운로드하면 시작됩니다.
  • 추출된 initall.sh 스크립트가 실행되어 감염 체인이 시작됩니다.

2. 제어권 확보 & 지속성

  • 이 멀웨어는 경쟁하는 무차별 대입 공격자와 채굴자를 죽임으로써 지배력을 확보합니다.
  • 그런 다음 배포합니다:
    • 암호화폐 채굴(마이닝 풀에 연결)을 위한 수정된 XMRIG.
    • IRC C2를 통한 원격 제어용 STEALTH 쉘봇.
    • BLITZ를 사용하여 SSH 무차별 대입 공격을 수행합니다.

3. 전파 & 확장

  • 무차별 대입 모듈은 SSH C2 서버에서 대상 목록을 검색하여 새 머신에 대한 SSH 무차별 대입 공격을 시도합니다.
  • 성공적으로 손상된 시스템은 감염되어 이 과정을 반복합니다.

이 자동화된 감염 루프를 통해 아웃로우는 공격자의 최소한의 노력으로 활동성과 수익성을 유지할 수 있습니다. 전체 공격 체인을 자세히 살펴보겠습니다.

아웃라브 실행 체인

아웃로우는 MITRE ATT&CK 프레임워크에서 광범위한 전술과 기법을 효과적으로 다룹니다. 이 섹션에서는 감염 사슬과 방법에 대한 개요를 제공하기 위해 동작을 매핑합니다.

초기 액세스: 블리츠

OUTLAW는 취약하거나 기본 자격 증명이 있는 시스템을 대상으로 기회주의적 SSH 무차별 대입을 통해 초기 액세스 권한을 얻습니다. 이 멀웨어는 kthreadadd 과 같은 다른 이름으로도 알려진 blitz 구성 요소를 사용하여 대량 스캔 및 비밀번호 추측 시도를 수행합니다. C2 서버에서 검색된 대상 IP 및 자격 증명 목록을 활용합니다.

또한 아웃로우는 웜처럼 작동하여 감염에 성공한 모든 시스템에 자동으로 설치됩니다. 이러한 자체 전파 메커니즘을 통해 네트워크 전체에 빠르게 확산되어 새로 감염된 각 디바이스를 다른 노드로 전환하여 추가적인 무차별 대입 및 감염 시도를 할 수 있습니다.

이 글의 뒷부분에서 OUTLAW가 이러한 공격을 수행하고 스스로 전파하는 방법에 대해 자세히 살펴보겠습니다.

실행: tddwrt7s.sh

OUTLAW의 첫 감염은 간단한 드롭퍼 스크립트에서 비롯된 것으로 보입니다: tddwrt7s.sh. 이 셸 스크립트는 기존 설치가 있는지 확인합니다. 멀웨어가 이미 존재하고 압축이 풀린 경우, 이 멀웨어는 initall 스크립트를 실행하여 감염 체인을 시작합니다. 그렇지 않으면 제공된 스테이징 서버 목록에서 패키지를 다운로드하려고 시도합니다. 이해를 돕기 위해 드롭퍼를 간략하게 보여주는 그림이 아래에 나와 있습니다:

압축을 푼 dota3.tar.gz 패키지는 .rsync 이라는 숨겨진 폴더에 내용물을 추출하며, 다음 항목이 포함되어 있습니다:

 ├── a
 │   ├── a
 │   ├── init0
 │   ├── kswapd0
 │   ├── kswapd01
 │   ├── run
 │   ├── socat
 │   └── stop
 ├── b
 │   ├── a
 │   ├── run
 │   └── stop
 ├── c
 │   ├── blitz
 │   ├── blitz32
 │   ├── blitz64
 │   ├── go
 │   ├── run
 │   ├── start
 │   ├── stop
 │   └── v
 ├── init
 ├── init2
 └── initall

실행 체인을 하나씩 분해해 보겠습니다.

기본 초기화 스크립트: initall

세 개의 init 스크립트는 멀웨어의 전반적인 실행 흐름과 배포를 제어합니다. initall 스크립트부터 시작하여 메인 이니셜라이저가 실행 경로를 결정합니다. 시스템 환경을 확인하고 파일 권한 및 사용 가능한 디렉터리에 따라 init 또는 init2 중 어느 것을 사용할지 결정합니다.

이러한 init 스크립트는 모두 변수 기반 문자열 연결 난독화를 사용하며, 명령이 동적으로 연결되고 실행되는 작은 변수 조각으로 분할되어 정적 분석을 더욱 어렵게 만듭니다. 예를 들어 initall 스크립트는 다음과 같습니다:

그러나 evalecho 으로 변경하면 아무런 노력 없이 출력을 얻을 수 있습니다:

이 스크립트는 기본적으로 init 을 일관되게 실행합니다. 숨겨진 디렉터리 ~/.configrc6 에 멀웨어를 설치하는 기본 실행 경로입니다. 대체 실행 경로는 init2 이며, ~/.configrc6 에 액세스할 수 없을 때 사용됩니다. 가장 큰 차이점은 이 경로는 모든 컴포넌트를 현재 작업 디렉터리에 유지한다는 것입니다. 앞서와 동일한 난독화 해제 원리를 적용하면 다음 두 개의 스크립트가 생성됩니다:

첫 번째 스크립트(init)는 숨겨진 디렉토리 ~/.configrc6 에 구성 요소를 숨기고, 두 번째 스크립트(init2)는 작업 디렉토리에서 직접 실행합니다. 이러한 차이에도 불구하고 실행 흐름은 동일하게 유지되며, a/b/ 디렉터리에서 a 이라는 바이너리를 백그라운드 프로세스로 시작하고 지속성을 설정합니다. 두 스크립트 모두에서 멀웨어는 일정한 간격으로 그리고 시스템 재부팅 시 바이너리를 실행하는 크론 작업을 설치합니다:

5 6 * * 0   ~/.configrc6/a/upd
@reboot     ~/.configrc6/a/upd
5 8 * * 0   ~/.configrc6/b/sync
@reboot     ~/.configrc6/b/sync
0 0 */3 * * ~/.configrc6/c/aptitude

스크립트는 a/b/ 디렉터리에서 a 바이너리를 거의 동시에 실행하지만, 여기서는 a/ 디렉터리의 실행 흐름을 먼저 따르겠습니다.

서브루틴 a/ 디렉터리 실행: XMRIG

첫 번째로 실행되는 스크립트는 a 으로, crontab -r 을 사용하여 기존 크론 작업을 모두 제거한 다음 현재 작업 디렉터리를 변수에 저장합니다. 그런 다음 upd 라는 셸 스크립트를 생성하여 프로세스( bash.pid 에 저장됨)가 여전히 실행 중인지 확인합니다. 프로세스가 실행되고 있지 않으면 ./run 을 백그라운드 프로세스로 실행하여 악성 코드가 종료될 경우 계속 재시작되도록 합니다.

또한 rsync, go, kswapd0, blitz,, redtail 와 같은 이름으로 이 멀웨어의 다른 버전이 존재할 수 있음을 나타내는 몇 가지 주석이 달린 명령이 있습니다 .

스크립트 아래쪽에 /sys/module/msr/parameters/allow_writes 가 존재하는지 확인하고" 에서 "로 설정하여 모델별 레지스터(MSR)에 쓸 수 있도록 하는 함수를 만듭니다. 파일이 존재하지 않으면 modprobe msr allow_writes=on 명령을 통해 MSR 쓰기를 활성화합니다.

그런 다음 /proc/cpuinfo 을 확인하여 활성 CPU를 식별하고 특정 MSR 레지스터 값을 적용하여 성능을 최적화합니다.

마지막으로, 이 기능은 모든 CPU 코어에 대해 hugepages 을 활성화하여 메모리 사용량을 최적화하고 메모리 액세스 효율성을 높입니다. 사용 가능한 프로세서(nproc)를 기준으로 필요한 hugepages 개수를 계산하여 /sys/devices/system/node/node*/hugepages/ 디렉터리에 설정합니다.

optimize_func() 함수는 위협 행위자가 만든 것이 아닙니다. 위협 행위자는 XMRig 리포지토리의 오픈 소스 스크립트, 특히 randomx_boost.sh 스크립트를 사용하여 감염 사슬을 지원했습니다.

사용자의 권한에 따라 전체 최적화 기능을 실행하거나 sysctl 을 통해 hugepages 의 수를 설정하려고 시도합니다:

이 체인에서 수행되는 모든 단계는 암호화폐 채굴 시스템 최적화의 명백한 징후를 보여줍니다. 마지막으로 스크립트는 upd 파일에 실행 권한을 부여하고 해당 폴더의 모든 파일에 "777" 권한을 부여한 후 upd 을 실행합니다.

앞서 살펴본 것처럼 upd 파일은 bash.pid 에 저장된 프로세스가 아직 실행 중인지 확인하고, 실행 중이 아니라면 run 스크립트를 실행합니다:

실행 스크립트는 stop 스크립트를 시작하는데, 이 스크립트는 알려진 모든 마이너 구성의 방어를 무력화하고 이름/프로세스 ID 또는 네트워크 트래픽을 기반으로 알려진 모든 마이너 프로세스를 종료하는 일반적인 스크립트입니다. 이 스크립트의 단축 버전은 아래에 설명되어 있습니다:

흥미롭게도 Linux 환경에서 암호화폐 채굴자를 죽이기 위한 오픈 소스 스크립트인 init0 라는 두 번째 프로세스 죽이기 스크립트가 존재합니다. 이 스크립트의 실행 흐름이 a 스크립트에서 주석 처리되었으므로 이 스크립트는 실행되지 않습니다.

stop 스크립트가 성공적으로 실행되면 run 스크립트는 nohup 을 통해 백그라운드에서 kswapd01kswapd0 바이너리를 시작합니다.

kswapd01

kswap01 바이너리는 멀웨어의 인프라 내에서 지속적인 통신을 보장하는 데 중요한 역할을 합니다. 주요 임무는 공격자의 C2 서버와의 통신에 필수적인 socat 프로세스를 지속적으로 모니터링하고 유지하는 것입니다.

실행 시 kswap01 은 감염된 컴퓨터에서 실행 중인 기존 socat 프로세스가 있는지 확인합니다. 활성 연결이 발견되지 않으면 실행 중인 socat 프로세스를 모두 종료하고 미리 정의된 목록에서 대체 IP 주소를 선택합니다. 그런 다음 바이너리는 로컬 컴퓨터에서 수신 대기하고 일반적으로 포트 4444에서 원격 서버로 트래픽을 전달하기 위해 새로운 socat 프로세스를 시작하여 새 연결을 설정합니다. 이렇게 하면 멀웨어가 감염된 시스템을 계속 제어하고 공격자로부터 명령을 계속 받을 수 있습니다.

그러나 관찰되는 모든 버전의 OUTLAW 멀웨어 패키지에 socat 바이너리가 포함되어 있는 것은 아니라는 점에 유의해야 합니다. 이러한 경우 socat 에서 제공하는 기능은 다른 수단으로 복제되거나 단순히 생략되어 지속성과 커뮤니케이션을 유지하기 위한 대체 방법에 의존합니다.

이러한 검사 및 수정을 수행함으로써 kswap01 은 C2 연결의 지속성을 유지하여 방어자가 공격자와 손상된 시스템 간의 통신 채널을 차단하기 어렵게 만듭니다.

kswapd0

kswapd0 파일은 합법적인 XMRig 암호화폐 채굴기(특히 버전 6.22.1)의 악의적으로 수정된 사본입니다.

두 가지 주요 수정 사항은 멀웨어의 동작을 정의합니다:

1. 시작 셸 명령

  • 이 멀웨어는 피해자의 ~/.ssh 폴더를 제거하고 다시 생성한 후 공격자가 제어하는 SSH 공개 키를 주입하고 수정하지 못하도록 제한 권한(chattr +ia)을 다시 적용합니다. 이렇게 하면 영구적인 SSH 액세스 권한이 부여됩니다.
  • 또한 기존 XMRig 구성 파일(예: ~/.xmrig.json, ~/.config/xmrig.json)을 제거하거나 잠가 공격자의 임베디드 채굴기 설정이 그대로 유지되도록 합니다.

2. 임베디드 마이너 구성

  • 바이너리는 내부 마이닝 구성으로 컴파일되므로 외부 구성 파일 없이도 XMRIG를 실행할 수 있습니다.
  • 채굴 트래픽은 일반 텍스트 포트(:80, :4444), SSL(:442), 때때로 TOR 주소를 통해 여러 모네로 풀로 라우팅됩니다. 여기서 442 포트는 오타가 아닙니다.
  • 이 구성은 다음과 같이 성능을 최적화합니다:
    • 백그라운드에서 마이너 실행
    • 다음에 대해 큰 페이지 사용 RandomX
    • 기부 수준을 0으로 설정하기
    • CPU 스레드 사용량 최대화

kswapd0 은 관리자를 잠그고, 구성 변경을 방지하며, 공격자가 제어하는 SSH 키를 주입함으로써 합법적인 시스템 프로세스로 가장하면서 지속적인 모네로 채굴과 무단 원격 액세스를 허용하는 은밀한 지속성 메커니즘 역할을 합니다.

b/ 디렉토리의 서브루틴 실행: 스텔스 쉘봇

앞서 설명한 것처럼 b/ 디렉터리의 a 바이너리도 init 스크립트를 통해 실행되었습니다.

이 스크립트는 앞서 설명한 것과 동일한 목적(알려진 불량 프로세스를 모두 죽이는 것)으로 또 다른 stop 스크립트를 시작합니다. 그 후 run 스크립트를 실행하기 위한 목적으로 sync 라는 스크립트를 생성합니다. 이 스크립트는 앞서 설명한 크론잡에서 참조합니다. run 스크립트에는 perl 으로 파이핑되는 3개의 base64 인코딩된 블롭이 포함되어 있습니다. 단축된 스크립트의 예는 아래와 같습니다:

base64 디코딩 시 난독화된 perl 스크립트가 식별됩니다. 이러한 스크립트는 공개 Perl 난독화 유틸리티를 활용하여 내용을 난독화하므로 분석하기 어렵습니다:

다행히 작성자는 난독화된 스크립트에 표준 주석을 남겼습니다. 공개적으로 사용 가능한 난독 해독기를 사용하면 다음 명령을 통해 스크립트의 난독을 해제할 수 있습니다:

perl decode-stunnix-5.17.1.pl < obfuscated_run.pl > deobfuscated_run.pl

그 후 난독화된 콘텐츠를 볼 수 있습니다:

이것은 예시용으로 스크립트의 처음 몇 줄에 불과합니다. 이 난독화 해제 기술은 OUTLAW에서 사용하는 다른 난독화된 Perl 스크립트에도 사용할 수 있습니다. 잠시 후에 이러한 스크립트에 대해 자세히 살펴보겠습니다.

이 스크립트는 영구 액세스를 위한 자체 SSH 공개 키를 설치하고, 제한적 권한을 설정하고, chattr 을 통해 디렉터리를 변경할 수 없도록 변경 불가능하게 만드는 것으로 끝납니다:

스텔스 쉘봇 스크립트

아웃로에서 사용되는 스텔스 쉘봇 스크립트는 맞춤 제작이 아닌 공개적으로 사용 가능한 IRC 봇 스크립트로, 오래된 GitHub 리포지토리와 언더그라운드 포럼에서 제공되는 경우가 많습니다. 이러한 스크립트는 원래 원격 관리, 자동화 및 봇넷 관리를 위해 설계된 것으로 10년 이상 사용되어 왔습니다. 그러나 이후 멀웨어 제작자가 악의적인 활동을 위해 용도를 변경했습니다.

쉘봇 스크립트는 IRC 기반 백도어로 작동하여 공격자가 IRC 채널을 통해 전송된 미리 정의된 명령을 통해 감염된 시스템을 원격으로 제어할 수 있도록 합니다. 공격자의 IRC 서버에 연결되면 이러한 봇은 다음과 같은 작업을 수행할 수 있습니다:

  • 임의의 셸 명령 실행
  • 추가 페이로드 다운로드 및 실행
  • DDoS 공격 시작(이전 버전)
  • 자격 증명 도용 또는 시스템 정보 유출
  • 암호화폐 채굴기 또는 기타 멀웨어 구성 요소 관리

아웃로우는 이러한 레거시 쉘봇 스크립트를 보조 지속성 메커니즘으로 통합하여 무차별 대입 모듈이 중단되더라도 공격자는 여전히 원격 거점을 유지할 수 있습니다. 봇은 공격자가 제어하는 IRC C2에 연결하여 추가 명령을 수신 대기하고 악성 작업을 온디맨드 방식으로 실행합니다.

이러한 스크립트는 새로운 것은 아니지만, 공격자들이 새로운 멀웨어를 처음부터 개발하기보다는 공개적으로 사용 가능한 도구에 의존한다는 점을 강조합니다.

서브루틴 c/ 디렉터리 실행: 고객 브루트포서

세 번째이자 마지막 하위 루틴의 일부로 사용자 지정 무차별 대입 도구가 배포됩니다. 이 체인은 이전 하위 루틴과 마찬가지로 initinit2 스크립트에서 시작됩니다. 이 스크립트는 모두 다음 내용이 포함된 start 스크립트를 호출합니다:

이 스크립트는 현재 작업 디렉터리를 저장하고, 현재 디렉터리의 모든 파일에 대한 모든 권한(777)을 제공하며, run 스크립트를 실행하기 위해 aptitude (이전에 설정한 cron 작업에서도 호출됨)라는 이름의 스크립트를 만듭니다. aptitude 을 생성하면 실행 권한이 부여되고 실행됩니다.

run 스크립트는 아래와 같이 CPU 아키텍처 정보를 수집하고 CPU 코어를 계산하여 실행 동작을 결정하는 데 사용됩니다:

시스템이 x86_64인 경우 CPU의 코어 수가 7 미만인지 확인하여 백그라운드에서 ./go 을 실행하기 전에 무작위 지연을 도입합니다. 7 이상의 코어가 감지되면 실행이 건너뛰거나 변경됩니다(이전에 사용된 바이너리 golan 이제 주석 처리됨). 위협 행위자는 시스템에 존재하는 코어 수를 최대한 활용할 수 있는 Golang 바이너리를 테스트하거나 작업했을 수 있지만, 이는 추측에 불과합니다.

대부분의 시나리오에서 실행 흐름은 go 이라는 bash 스크립트로 이동합니다:

스크립트는 CPU 아키텍처를 결정하고 그에 따라 스레드 수를 할당합니다:

  • ARM 기반 시스템 → 75 스레드
  • i686(32비트 x86) → 325 스레드
  • 기타 모든 항목(기본값) → 475 스레드

그런 다음 무한 루프에 진입하여 다음 작업을 실행합니다:

  1. 임시 파일을 생성하고 정리합니다 (v, p, ip, xtr*, a.*, b.*).
  2. 하드코딩된 값(257.287.563.234sdaferthqhr34312asdfa)을 cd 파일에 씁니다.
  3. 시작하기 전에 임의의 지연 시간(1-30초)을 기다린 후 blitz 을 실행합니다.
  4. 지정된 매개 변수를 사용하여 3 시간 동안 blitz 을 실행합니다(-t $threads 은 멀티 스레드 처리를 제안합니다).
  5. 실행 후 정리를 수행하여 주기를 반복하기 전에 임시 파일과 로그 파일을 제거합니다.

BLITZ

아웃로우는 자체 개발한 무차별 대입 공격인 BLITZ를 사용하여 SSH 무차별 대입 공격을 통해 측면으로 확산되는 자가 전파 웜입니다. 공격적이고 자동화된 인증 정보 공격을 위해 설계된 BLITZ는 취약하거나 기본 SSH 인증 정보가 있는 시스템을 체계적으로 스캔하고 손상시켜 공격자의 개입을 최소화하면서 멀웨어가 발판을 확장할 수 있도록 합니다.

블리츠 실행 프로세스

실행 시 블리츠는 구조화된 공격 시퀀스를 따릅니다:

  1. IP 대상 및 자격 증명 검색
    • BLITZ는 SSH C2 서버에 연결하여 대상 IP 및 자격 증명 쌍의 목록을 가져옵니다.
  2. 무차별 암호 대입 인증 & 시스템 프로파일링
    • 블리츠는 멀티 스레드 SSH 무차별 대입을 사용하여 탈취한 자격 증명으로 인증을 시도합니다.
    • 일단 액세스 권한을 얻으면
      • 영구 액세스를 위해 사용자의 비밀번호를 변경합니다.
      • 시스템 정찰 명령을 실행하여 수집합니다:
        • 사용자 권한
        • CPU 세부 정보
        • SSH 배너 정보
        • OS 버전
      • 수집된 데이터를 C2 서버로 유출합니다.
  3. 서브넷 스캐닝 & 측면 이동
    • 이 멀웨어는 새로 감염된 시스템의 로컬 서브넷을 스캔하여 공격할 추가 SSH 액세스 가능 머신을 식별합니다.
  4. 자체 복제 & 멀웨어 배포
    • 블리츠는 외부 C2에서 다운로드하는 대신 감염된 호스트에서 새로운 피해자에게 dota3.tar.gz 멀웨어 패키지를 직접 전송하여 지속성을 강화하고 외부 인프라에 대한 의존도를 최소화합니다.

자동화된 무차별 공격, 시스템 프로파일링, 서브넷 스캐닝, 직접 멀웨어 전송을 결합하여 감염 효율성을 극대화하는 동시에 지속적인 네트워크 확장을 보장하는 BLITZ.

이진 분석 & C2 커뮤니케이션

분석 결과, 무차별 대입 연산 외에도 BLITZ는 시스템 셸 명령 및 내장된 SSH 라이브러리와 상호 작용하여 작업을 실행하는 것으로 나타났습니다. 감염된 시스템에 연결되면 C2 서버에 업데이트된 대상을 쿼리하고 인증 데이터를 전달합니다.

또한 OUTLAW에는 C2 인증을 위해 하드코딩된 SSH 키가 통합되어 있으며, 이 키는 "pegasus" 암호를 사용하여 잠금 해제해야 합니다. 인증에 성공하면 Blitz는 다음과 같은 구조의 "v" 파일에 공격 세부 정보를 기록합니다:

이 로그에는 다음이 포함됩니다:

  • 공격에 사용된 원래 사용자 아이디와 비밀번호입니다.
  • 피해자의 IP 주소와 멀웨어가 설정한 새 비밀번호.
  • CPU 사양을 포함한 SSH 포트 및 OS 세부 정보.

블리츠가 검사 주기를 완료하면 "v" 파일이 SSH C2 서버로 유출되어 공격자에게 지속적으로 업데이트되는 감염된 시스템 목록을 제공합니다.

타협 후

공격자의 침해 후 행동을 분석하기 위해 의도적으로 허니팟을 설정하고 공격자가 사용한 것과 동일한 SSH C2 서버에 자격 증명을 선제적으로 업로드했습니다. 이를 통해 공격자를 통제된 환경으로 효과적으로 초대하여 공격자의 후속 행동을 면밀히 모니터링할 수 있었습니다.

블리츠가 허니팟 시스템에서 무차별 대입을 통해 새 비밀번호를 설정하는 데 성공한 지 며칠 후, 이 자격 증명을 사용한 원격 로그인이 관찰되었습니다. 로그인은 212.234.225[.]29에서 시작되었습니다. 공격자는 즉시 w 명령을 실행하여 로그인한 사용자를 확인한 다음 ps를 실행하여 어떤 프로세스가 실행 중인지 확인하는 등 기본적인 정찰을 수행했습니다. 명령을 입력하는 과정에서 작은 오타가 발생하여 Ctrl+C를 빠르게 눌러 프롬프트를 종료했는데, 이는 이 단계에서 자동화된 스크립트가 아닌 수동 상호 작용을 나타냅니다. 다음으로 공격자는 일련의 명령을 붙여넣어 wget 를 통해 dota3.tar.gz의 새 복사본을 다운로드하고 압축을 푼 다음 새로 가져온 스크립트를 실행했습니다.

이 전체 활동 체인은 Linux 논리 이벤트 모델에 따라 트리와 같은 구조로 구성된 Linux 프로세스 데이터를 조사 도구인 세션 보기를 통해 표시할 수 있으며, 프로세스는 부모와 실행 시간별로 정리되어 있습니다. 터미널에서 영감을 받은 가독성 높은 형식으로 이벤트를 표시합니다. 따라서 Linux 인프라에서 세션 활동을 모니터링 및 조사하고 사용자 및 서비스 동작을 이해하는 데 강력한 도구가 됩니다.

위에 표시된 공격 체인은 원래 감염 방법을 반영하고 있으며, 공격자가 지속성을 유지하기 위해 구성 요소를 업데이트하거나 호스트를 재감염하고 있음을 시사합니다. 업데이트된 페이로드가 실행 중임을 확인한 직후, 공격자는 호스트와의 연결을 끊어 지속적인 SSH 무차별 대입 공격, 암호화폐 채굴, IRC를 통한 원격 제어를 위한 환경을 조성했습니다.

이 간단한 로그인은 정교하지 않은 캠페인에도 대화형 공격자의 활동(일종의 수동 품질 검사 "품질 검사" )이 포함될 수 있음을 상기시키며 적시에 탐지하고 신속하게 차단하는 것이 중요하다는 점을 강조합니다.

MITRE ATT를 통한 불법 탐지&CK

OUTLAW는 SSH 무차별 대입 공격, 암호화폐 채굴, 웜과 유사한 전파를 통해 시스템을 감염시키고 제어권을 유지하는 Linux 멀웨어입니다. 고도로 정교하지는 않지만 광범위한 MITRE ATT&CK 기술을 다루고 있어 탐지 엔지니어링에 효과적인 사례입니다.

이 섹션에서는 OUTLAW의 공격 체인을 MITRE ATT&CK에 매핑하여 다양한 단계에서 활동을 식별할 수 있는 Elastic SIEM과 엔드포인트 규칙 및 위협 헌팅 쿼리를 강조합니다.

OUTLAW는 구조화된 감염 흐름을 따릅니다:

  • 초기 액세스 - 취약한 자격 증명에 대한 SSH 무차별 공격.
  • 실행 - 악성 스크립트를 실행하여 여러 단계의 멀웨어 감염을 시작합니다.
  • 지속성 - 크론 작업을 설치하고 SSH 키를 수정합니다.
  • 방어 회피 - 숨겨진 디렉토리에 숨고, 파일 권한을 수정하고, 패킹 기술, 명령 인코딩을 사용하고, 스크립트를 난독화합니다.
  • 자격 증명 액세스 - 자격 증명을 수정하고 공개 SSH 키를 삽입합니다.
  • 검색 - 사용자, 시스템 및 하드웨어 세부 정보를 열거합니다.
  • 측면 이동 - 내부 SSH 무차별 대입 및 멀웨어 전송을 통해 확산됩니다.
  • 수집 & 유출 - 시스템 데이터를 수집하여 C2로 유출합니다.
  • 명령 및 제어 - C2 통신을 위해 socat 및 STEALTH 쉘봇을 사용합니다.
  • 영향 - 암호화폐를 채굴하기 위해 XMRIG를 시작하고 감염된 호스트를 무차별 대입 노드로 활용합니다.

다음 섹션에서는 각 기법에 대한 탐지 전략을 자세히 설명하여 방어자가 아웃로브의 감염을 효과적으로 식별하고 완화할 수 있도록 도와줍니다.

TA001: 초기 액세스

OUTLAW는 취약하거나 기본 자격 증명이 있는 시스템을 대상으로 기회주의적 SSH 무차별 대입을 통해 초기 액세스 권한을 얻습니다. Elastic의 사전 구축된 탐지 규칙은 이러한 초기 액세스 방법을 성공적으로 탐지할 수 있습니다. 여기에는 다음이 포함됩니다:

또한 인증 로그를 기반으로 의심스러운 SSH 인증을 탐지하는 몇 가지 규칙이 있습니다:

탐지에 의존하는 것 외에도 위협 헌팅을 워크플로에 통합하는 것이 중요합니다. Elastic Security는 탐지 규칙 리포지토리, 특히 Linux 헌팅 하위 디렉터리에서 공개적으로 제공되는 ES|QL과 OSQuery를 사용해 몇 가지 헌팅 쿼리를 제공합니다. 예를 들어, 다음 두 가지 헌팅은 공격의 서로 다른 단계를 식별하는 데 도움이 될 수 있습니다:

TA002: 실행

초기 액세스 권한을 얻은 후 OUTLAW는 일련의 스크립트와 바이너리를 실행하여 제어권을 설정합니다. 다운로드 및 압축을 풀면 감지됩니다:

스텔스 쉘봇 스크립트가 탐지됩니다:

또한 이 멀웨어는 여러 의심스러운 시스템 명령을 실행하여 트리거합니다:

TA003: 지속성

이러한 크론 기반 실행과 SSH 키 조작의 조합을 통해 아웃로우는 손상된 시스템에 대한 지속적인 발판을 유지할 수 있습니다. 이 두 가지 지속성 기술은 모두 "Linux 탐지 엔지니어링 - 지속성 메커니즘에 대한 입문서(" ) 게시글에서 광범위하게 연구되었습니다. 다음 SIEM 및 엔드포인트 규칙을 통해 이러한 기법을 탐지할 수 있습니다:

또한 다음 ES|QL 및 OSQuery 헌팅을 통해 이러한 기술을 헌팅할 수 있습니다:

TA005: 방어 회피

아웃로우는 탐지를 피하기 위해 다양한 방어 회피 기술을 사용합니다. 기본 방법 중 하나는 다음과 같은 사전 구축된 규칙을 통해 감지되는 Base64 디코딩입니다:

또한 멀웨어의 바이너리는 UPX로 압축되어 크기를 줄이고 서명을 변경하여 기존의 멀웨어 탐지를 회피합니다. 멀웨어가 메모리에서 압축을 풀면 일반 멀웨어 탐지를 통해 이를 탐지합니다.

실행 체인을 계속 진행하면서 악성 코드는 여러 개의 숨겨진 파일과 디렉터리를 생성하고 chattr 을 사용하여 수정합니다:

다음 헌팅 쿼리를 통해 탐지 기능을 더욱 강화할 수 있습니다:

TA006: 자격 증명 액세스

아웃로우는 자격 증명을 조작하여 손상된 시스템에 대한 지속적인 액세스를 유지합니다. SSH 무차별 대입 인증에 성공한 후, 멀웨어는 기존 SSH authorized_keys 파일을 악성 SSH 공개 키가 포함된 새 버전으로 교체하여 영구적인 액세스 권한을 부여합니다. 이는 다음 신호를 통해 감지됩니다:

그런 다음 악성 코드는 passwd 유틸리티를 사용하여 새 비밀번호를 입력하여 인증된 계정의 사용자 자격 증명을 변경합니다:

TA007: 발견

OUTLAW는 감염에 성공하면 시스템 정보를 수집하여 손상된 환경을 프로파일링합니다. 이 멀웨어는 다양한 명령을 실행하여 시스템의 CPU, 사용자 권한, 운영 체제, 메모리 사용량 및 사용 가능한 바이너리에 대한 세부 정보를 수집합니다. 이 정찰 단계는 공격자가 시스템의 기능을 평가하고 손상된 시스템을 가장 잘 활용할 수 있는 방법을 결정하는 데 도움이 됩니다. 이 모든 것은 rules_building_block 디렉토리에 나열된 여러 빌딩 블록 규칙을 통해 감지됩니다. 다음은 아웃로에서 트리거되는 가장 중요한 기능의 간략한 목록입니다:

기본 인터페이스 설정에는 상대적으로 노이즈 수준이 높기 때문에 빌딩 블록 규칙이 포함되어 있지 않습니다. 그러나 이러한 규칙을 활성화하면 잠재적인 위협을 식별하는 데 도움이 될 수 있습니다.

TA008: 측면 이동

아웃로브 멀웨어는 내부 SSH 무차별 대입 공격을 수행하여 손상된 네트워크를 통해 확산됩니다. 다음 ES|QL 규칙을 통해 이 동작을 식별할 수 있습니다:

시스템이 무차별 대입에 성공하면 멀웨어 패키지( dota3.tar.gz)가 감염된 호스트에서 새로운 표적에 배포됩니다. 그런 다음 로컬 서브넷에서 추가 대상을 검색하여 멀웨어의 지속적인 전파를 확인합니다.

Elastic의 사전 구축된 탐지 규칙은 이러한 측면 이동 시도를 식별할 수 있습니다:

또한 아웃로 멀웨어가 원격 호스트에 복사되면 멀웨어 방지 경고가 시작됩니다.

TA009: 컬렉션 & TA010: 유출

아웃로우는 주로 감염된 호스트를 추적하고 추가 공격을 용이하게 하기 위해 감염된 컴퓨터에서 기본 시스템 정보, 자격 증명 및 SSH 세부 정보를 수집합니다. 이 데이터는 C2 서버에 업로드되기 전에 간단한 텍스트 파일에 저장됩니다. 이 수집 활동은 시스템 세부 정보를 수집하여 파일에 기록하는 것으로 제한되므로 그 자체로는 의심스럽지 않습니다.

유출은 아웃로우가 sftp-server를 통해 아웃바운드 SSH 연결을 시작하여 수집된 정보를 미리 정의된 C2 서버로 전송할 때 발생합니다. 이는 정상적인 SSH 활동과 비슷할 수 있지만, ES|QL을 통해 파일 전송 유틸리티의 의심스러운 실행을 감지할 수 있습니다:

TA011: 명령 및 제어

아웃로우는 여러 채널을 통해 C2 인프라와 통신을 유지하여 공격자가 명령을 내리고, 데이터를 유출하고, 감염된 시스템을 관리할 수 있도록 합니다. 다음 규칙을 통해 멀웨어가 사용하는 여러 유틸리티를 탐지할 수 있습니다:

멀웨어의 초기 접속 시도를 탐지하는 데 사용한 것과 동일한 헌팅 쿼리를 이 C2 활동을 헌팅하는 데도 사용할 수 있습니다. 또한 다음과 같은 헌팅 쿼리를 사용할 수 있습니다:

TA040: 영향

OUTLAW는 암호화폐 채굴을 위해 CPU 리소스를 소모하고 전파를 위해 SSH 무차별 대입 공격을 수행하여 감염된 시스템에 영향을 미칩니다. 수정된 XMRIG 채굴 소프트웨어를 실행하기 전에 MSR 쓰기 액세스 활성화, 거대한 페이지와 같은 커널 매개변수 설정 등 몇 가지 CPU 및 메모리 최적화를 시도합니다. 이러한 수정 사항은 다음 규칙을 통해 감지할 수 있습니다:

OUTLAW가 모드프로브를 통해 MSR 쓰기 액세스를 활성화하려고 시도하지만 필요한 권한이 부족하면 커널 드라이버 관련 규칙이 트리거됩니다:

이 규칙은 Auditd를 통해 init_module()finit_module() 시스템 호출을 직접 모니터링합니다. 드라이버 이벤트 등을 캡처하기 위해 Auditd Manager 통합을 설정하는 방법에 대한 자세한 내용은 Linux 탐지 엔지니어링을 사용한 Auditd 발행물을 확인하세요.

동시에 감염된 호스트에서 SSH 무차별 대입 시도가 시작되어 트리거됩니다:

아웃로우는 실행하는 동안 킬 스크립트를 실행하여 경쟁 멀웨어 또는 이전 감염에서 남은 프로세스를 종료합니다. 이 동작이 트리거됩니다:

타협 지표(IOC)

전체 지표 세트는 Github에서 번들로 찾을 수 있습니다.

야라 시그니처

rule Linux_Hacktool_Outlaw_cf069e73 {
    meta:
        author = "Elastic Security"
        description = "OUTLAW SSH bruteforce component fom the Dota3 package"
        reference_sample = "c3efbd6b5e512e36123f7b24da9d83f11fffaf3023d5677d37731ebaa959dd27"
      
    strings:
        $ssh_key_1 = "MIIJrTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQI8vKBZRGKsHoCAggA"
        $ssh_key_2 = "MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAECBBBC3juWsJ7DsDd2wH2XI+vUBIIJ"
        $ssh_key_3 = "UCQ2viiVV8pk3QSUOiwionAoe4j4cBP3Ly4TQmpbLge9zRfYEUVe4LmlytlidI7H"
        $ssh_key_4 = "O+bWbjqkvRXT9g/SELQofRrjw/W2ZqXuWUjhuI9Ruq0qYKxCgG2DR3AcqlmOv54g"
        $path_1 = "/home/eax/up"
        $path_2 = "/var/tmp/dota"
        $path_3 = "/dev/shm/ip"
        $path_4 = "/dev/shm/p"
        $path_5 = "/var/tmp/.systemcache"
        $cmd_1 = "cat /proc/cpuinfo | grep name | head -n 1 | awk '{print $4,$5,$6,$7,$8,$9;}'"
        $cmd_2 = "cd ~; chattr -ia .ssh; lockr -ia .ssh"
        $cmd_3 = "sort -R b | awk '{ if ( NF == 2 ) print } '> p || cat b | awk '{ if ( NF == 2 ) print } '> p; sort -R a"
        $cmd_4 = "rm -rf /var/tmp/dota*"
        $cmd_5 = "rm -rf a b c d p ip ab.tar.gz"
    condition:
        (all of ($ssh_key*)) or (3 of ($path*) and 3 of ($cmd*))
}

MITRE ATT의 SIEM 및 엔드포인트 규칙 개요&CK Tactic

결론

아웃로우는 정교하지 않은 멀웨어도 최신 환경에서 어떻게 효과적으로 지속되고 확장될 수 있는지 보여줍니다. 고급 회피 기술이 부족하지만 SSH 무차별 대입 공격, 자체 복제, 모듈식 구성 요소의 조합으로 장기간 봇넷을 유지할 수 있습니다. 아웃로우는 감염된 호스트를 활용하여 감염을 더욱 확산시킴으로써 공격자의 개입을 최소화하면서 지속적인 확장을 보장합니다.

허니팟 실험을 통해 공격자의 실제 행동을 엿볼 수 있었으며, 아웃로우는 대부분의 작업이 자동화되어 있지만 사람이 직접 개입하는 순간도 있다는 것을 확인했습니다. 수동 명령, 정찰 시도, 단순한 오타까지 관찰할 수 있다는 점은 봇넷 유지 관리, 즉 운영자 주도의 품질 관리에서 종종 간과되는 측면을 강조합니다. 이러한 인사이트는 자동화된 공격뿐만 아니라 침해 후 수동 활동까지 고려하는 탐지 전략의 필요성을 강조합니다.

방어자는 OUTLAW가 감염을 운영, 확산 및 수익화하는 방식을 이해함으로써 그 영향을 완화할 수 있는 강력한 탐지 전략을 개발할 수 있습니다. 이 보고서는 실행 가능한 SIEM 규칙, 위협 추적 쿼리, 포렌식 인사이트를 제공하여 보안팀이 유사하게 진화하는 위협에 한발 앞서 대응할 수 있도록 지원합니다.

참고 자료

[1] 카운터크래프트, DOTA3 멀웨어의 거듭된 등장

[2] 주니퍼 네트웍스, DOTA3: 귀사의 사물 인터넷 디바이스가 달빛을 받고 있습니까?

[3] SANS ISC, 위생 위생 위생 위생

[4] 다크트레이스, 무법자의 귀 환: 돌아온 특징과 새로운 전술 발견하기