/
Cyber Resilience

멀웨어 페이로드 & 비콘: 악성 페이로드의 유형

이전 블로그 게시물에서는 페이로드가 어떻게 악의적인 통신을 촉진하는지, 공격자가 페이로드와 비콘을 성공적으로 실행한 후 시스템을 제어할 수 있는 방법에 대해 설명했습니다. 메타스플로잇 프레임워크의 미터프리터 페이로드에 의해 촉진되는 reverse_tcp 통신 채널을 사용했습니다.

이 글에서는 페이로드의 고유한 유형과 페이로드가 사용할 수 있는 메모리 조작 기법의 예시를 자세히 알아보는 데 중점을 두겠습니다.

멀웨어는 특히 70년대 초 크리퍼 프로그램과 같은 단순한 바이러스의 시대와 달리 구성과 실행 방식이 더욱 정교해졌습니다. 주로 은밀한 목적을 가진 위협 행위자의 경우, 탐지되지 않고 네트워크에 장기간 머무르는 것이 가장 큰 관심사입니다. 따라서 디코이, 인코딩, 난독화, 암호화 및 모방과 같은 해당 기술을 사용하여 원하는 수준의 운영 보안을 달성할 수 있습니다.

위협 행위자가 사용할 수 있는 실행 파일 형식은 여러 가지가 있습니다. 공격자의 선택은 초기 공격 벡터와 이후의 익스플로잇 이후 조치에 따라 달라집니다. 다음은 메타스플로잇 프레임워크의 실행 파일 및 변환 형식 중 일부입니다.

메타스플로잇 실행 파일

1부에서 설명한 것처럼 비콘 또는 페이로드는 공격자가 피해 컴퓨터 또는 네트워크에 삽입하여 진입한 후 발판을 마련하는 역할을 합니다. 이는 멀웨어 무기고와 전체 공격 라이프사이클의 중요한 부분으로, 위협 행위자가 추가적인 악의적 활동을 추구하기 위해 직접 액세스할 수 있게 해줍니다.

실제 광범위한 분류와 관련하여 페이로드는 "단계적"이거나 "단계적이지 않은" 상태일 수 있습니다. 위협 행위자는 여러 가지 요인에 따라 한 가지를 선택할 수 있으며, 그 중 가장 중요한 것은 운영상의 보안 고려 사항일 수 있습니다.

스테이지 페이로드란 무엇인가요?

단계별 페이로드는 공격의 단계를 세분화하여 단일 페이로드가 수행했을 여러 페이로드 단계를 사용하는 경우가 많습니다. 이러한 페이로드는 일반적으로 '스테이저'(초기 페이로드 또는 비콘) 실행 파일과 '스테이지'(메인 페이로드) 실행 파일로 나뉩니다.

스테이저는 초기 페이로드인 작은 실행 파일입니다. 스테이지 페이로드라고 하는 훨씬 더 크고 성능이 뛰어난 페이로드를 준비하기 위해 실행되는 비교적 작은 코드 조각입니다. 즉, "무대 연출자가 무대를 설정한다"는 뜻입니다. 스테이저는 일반적으로 초기 진입이 취약점을 활용할 때 일부 익스플로잇 코드의 일부가 됩니다. 여기서 익스플로잇 코드는 대상 취약점을 성공적으로 익스플로잇한 다음 스테이저 코드(페이로드)를 실행합니다. 그런 다음 스테이저가 작동을 시작합니다.

스테이저의 주요 임무는 탐지되지 않고 성공적으로 실행하고 공격자 인프라에 다시 접속하여 원하는 메인 페이로드를 다운로드한 다음, 해당 페이로드를 실행하도록 시스템을 설정하는 것입니다. 다운로드된 단계 이상의 메인 페이로드는 공격자가 요구하는 기능에 따라 하나 이상의 페이로드가 될 수 있습니다. 스테이지가 다운로드되면 스테이저는 실행 제어를 전달하여 악성 활동을 계속합니다.

취약점 익스플로잇의 경우, 초기 익스플로잇 프로그램은 손상된 시스템에서 리소스 할당 측면에서 스테이저가 메인 스테이지 페이로드에 대해 수행하는 것과 유사한 작업을 스테이저에 대해 수행합니다. 이와 유사한 패턴을 따릅니다:

스테이저 패턴

아래 예시는 Windows 실행 파일로 스테이징된 페이로드를 보여줍니다.

스테이징된 페이로드 윈도우 실행 파일

스테이지드 페이로드는 버퍼 오버플로 취약점을 악용하는 데 사용되는 셸 코드의 경우처럼 페이로드 전달 및 실행과 관련하여 디스크 및 메모리 공간과 같은 시스템 관련 제약이 있을 수 있는 시나리오에 대응할 수 있습니다.

스테이그리스 페이로드란 무엇인가요?

스테이지형 페이로드와 반대되는 개념이 무스테이지형 페이로드입니다. 스테이드리스 페이로드는 독립형 페이로드이며 일반적으로 스테이징 페이로드보다 훨씬 큽니다. 일반적으로 공격자에게 필요한 모든 기능을 하나의 실행 파일에 결합합니다.

여기에서는 일반적으로 메인 페이로드(스테이저)를 다운로드하는 초기 페이로드(스테이저)가 필요하지 않습니다. 스테이그리스 페이로드가 실행되면 메모리 주입, 공격자 인프라로의 호출, 공격자를 위한 셸 전달 등 악의적인 작업을 수행하는 데 필요한 모든 기능을 갖추게 됩니다.

아래 예는 Windows 실행 파일로 스테이그리스 Meterpreter 역방향 tcp 페이로드를 보여줍니다.

스테이그리스 미터프리터 역방향 TCP 페이로드

악성 캠페인의 일부로 사용할 페이로드 유형을 결정하는 것을 해당 위협 행위자에 대한 '운영 보안 고려 사항'이라고 합니다. 악성 캠페인을 지원하는 해당 공격자 인프라의 유형은 이러한 고려 사항의 영향을 일부 받습니다.

스테이징 페이로드와 스테이그리스 페이로드 비교

메타스플로잇 스테이징 페이로드 뒤에 슬래시 기호( / )가 있습니다. 아래 스크린샷은 Windows 스테이지 Meterpreter 페이로드의 예를 보여줍니다.

Windows 스테이지 미터프리터 페이로드

스테이그리스 페이로드는 미터프리터라는 단어 뒤에 밑줄 기호( _ )를 사용합니다. 아래 스크린샷은 윈도우 미터프리터 스테이그리스 페이로드의 예를 보여줍니다.

Windows 미터프리터 스테이그리스 페이로드

아래 예시는 두 가지 범주의 페이로드를 모두 보여줍니다.

Windows 미터프리터 페이로드

스테이드리스 페이로드는 자체적으로 포함되며 멀웨어가 공격자 인프라에 콜백을 수행한 후 피해 시스템에 스테이지(메인 페이로드)를 전송하는 추가 단계가 필요하지 않습니다. 아래 스크린샷에서 역방향 TCP 핸들러가 시작된 후 다음 단계는 스테이지와 같은 추가 페이로드를 전송할 필요 없이 바로 피해 시스템에 실제 Meterpreter 원격 셸 세션을 여는 것임을 알 수 있습니다.

미터프리터 원격 셸 세션

아래 스크린샷을 보면 스테이저가 공격자 인프라에 콜백을 한 후 스테이지를 전송하는 추가 단계가 있음을 알 수 있습니다: "203.0.113.1로 스테이지(175174) 전송".

전송 단계

스테이지형과 스테이지리스 간의 또 다른 차이점은 페이로드의 크기입니다. 아래 스크린샷에서 단계적 초기 페이로드(web1_meeting_update.exe)가 73KB인 것에 비해 단계적 페이로드(meeting_update_stageless.exe)는 245KB로 훨씬 더 큽니다.

스테이그리스 페이로드 크기

셸코드란 무엇인가요?

셸코드는 컴퓨터 메모리에서 실행 중인 프로그램의 정상적인 흐름을 가로채려는 악성 코드입니다. 그런 다음 정상 프로그램 대신 악성 코드가 실행되도록 흐름을 리디렉션하여 공격자에게 셸 또는 실제 액세스 권한을 부여합니다. 이러한 공격은 주로 저수준 프로그래밍 코드 또는 익스플로잇과 결합된 머신 코드 형태의 비콘 또는 페이로드입니다. 익스플로잇은 취약점을 성공적으로 활용하는 로우레벨 또는 네이티브 코드 조각입니다.

악용되는 취약점은 주로 공격자가 정상적인 프로그램 흐름을 리디렉션하기 위해 할당된 메모리를 오버런한 애플리케이션의 메모리에서 버퍼 오버플로우를 발생시킵니다. 익스플로잇이 성공하면 멀웨어인 페이로드가 실행됩니다.

가장 순수한 형태의 셸코드는 메모리 관련 익스플로잇에 일반적으로 사용되는 네이티브 또는 어셈블리 코드입니다.

아래 예는 파워쉘(ps1) 셸코드를 보여줍니다.

파워쉘 셸코드

이 특정 예제에서는 반사 로더를 통해 메모리에 주입된 Windows DLL( 동적 링크 라이브러리)을 사용합니다. 셸코드는 영숫자 형식으로 생성됩니다. 성공적으로 실행되면 메타스플로잇 프레임워크에서 생성된 역방향 DNS TCP 세션을 통해 공격자에게 다시 연결할 수 있습니다.

전달 메커니즘의 선택, 익스플로잇의 유형, 취약한 표적 시스템 등이 모두 공격에 연결된 비콘 또는 페이로드의 선택을 결정합니다. 이 익스플로잇은 기본 운영 체제에 액세스하기 전에 취약한 애플리케이션을 이용하는 데 사용됩니다. 이러한 경우 해당 애플리케이션의 특정 코드(예: 웹 서버 프런트엔드 애플리케이션의 경우 PHP 또는 ASP)를 사용할 수 있습니다.

셸코드 특성

성공적인 셸코드 실행을 보장하고 높은 운영 보안을 유지하기 위한 몇 가지 중요한 고려 사항과 특성이 있습니다.

코드가 있어야 합니다:

  • 비교적 작은 크기로 원하는 셸을 실행하는 데 필요한 모든 명령어를 포함하고 있습니다.
  • 메모리에서 '위치 독립적'이어야 합니다. 이는 취약한 프로세스의 메모리 중 어디에 로드될지 미리 알 수 없는 경우가 많기 때문에 매우 중요합니다.
  • 널 문자(0x00)와 같이 잠재적인 오류를 발생시키거나 전체 프로세스를 중단시킬 수 있는 항목이 포함되어서는 안 됩니다.
  • 코드 또는 리플렉션 주입과 같은 일부 주입 기술을 사용하여 기존 메모리 할당에 피기백할 수 있어야 합니다.

이 시점부터 공격자는 익스플로잇 후 실행할 적절한 실행 파일 유형(예: Windows의 경우 EXE 또는 DLL, Linux의 경우 ELF, Android의 경우 APK)을 선택하여 대상 시스템에서 실행해야 합니다. 다시 말하지만, 운영 보안을 강화하기 위해 메모리 전용 사후 익스플로잇 기법이 선호됩니다.

코드 인젝션과 DLL 인젝션이란 무엇인가요?

DLL 인젝션은 다른 프로세스의 컨텍스트에서 코드(DLL)를 실행하는 프로세스입니다. 미터프리터 페이로드는 스텔스 및 회피 메커니즘을 위해 DLL 인젝션 기술을 사용합니다.

Windows에서 동적 링크 라이브러리 또는 DLL(Linux에서는 '공유 라이브러리')은 공유 라이브러리 파일로 저장된 코드 조각입니다. 즉, 다양한 컴퓨터 프로그램에서 필요할 때마다 사용할 수 있습니다. 운영 체제(이 경우 Windows)는 런타임에 라이브러리 쓰기 및 로딩을 처리합니다. 프로그램은 필요한 DLL 파일을 호출하거나 참조하기만 하면 그 안에 포함된 코드를 사용할 수 있습니다.

프로그래머는 코드를 한 번만 작성하고 컴파일하여 공유 라이브러리 또는 DLL로 저장한 다음 필요할 때마다 여러 프로그램에서 사용할 수 있으므로 유용합니다.

DLL과 EXE 파일의 주요 차이점은 DLL은 독립적으로 실행할 수 없다는 점입니다. 호출하거나 참조한 다음 실행하려면 EXE와 같은 프로그램이 필요합니다. 다음 예는 Windows 운영 체제의 DLL 파일로, 일반적으로 C:\Windows\ WinSxS 폴더에 저장됩니다(WinSxS는 Windows Side-by-Side의 약자임).

DLL 파일 Windows

DLL의 기능은 위협 행위자에게도 매우 유용합니다. 기본 수준의 코드 인젝션은 한 프로세스(악성 프로세스)가 원격 프로세스(피해자 프로세스)에 핸들을 첨부(또는 획득)하려는 시도를 포함합니다. 그런 다음 피해 프로세스에서 충분한 메모리를 할당하거나 페이지 권한을 변경하여 DLL과 같은 새 코드를 실행한 후, 새 또는 이미 실행 중인 피해 프로세스의 메모리 공간에 DLL 악성 코드를 복사(주입)합니다.

그런 다음 프로세스가 특정 작업을 실행하는 방식인 새 스레드가 피해 프로세스에서 시작되어 주입된 코드 또는 DLL에 포함된 명령어를 실행합니다.

스레드는 스레드를 시작한 프로세스와 동일한 메모리 공간을 공유하는 반면, 다른 프로세스는 변수를 공유하지 않는 경우 특히 할당된 메모리 공간이 다릅니다. 이는 운영 체제에 의해 시행됩니다. 그러나 운영 체제는 프로세스 간 통신(IPC)을 사용하여 필요한 경우 파이프(이름 또는 익명), 소켓, 세마포어, 공유 메모리 및 메시지 큐와 같은 프로세스가 통신할 수 있는 메커니즘을 제공합니다.

Windows 운영 체제에서 코드 인젝션은 악의적인 목적을 위해 합법적인 Windows API 및 함수를 사용하는 것을 포함합니다. 예를 들어

  • OpenProcess는 프로세스에 대한 핸들을 얻는 데 사용됩니다,
  • 그런 다음 VirtualAllocEx는 해당 원격 프로세스 또는,
  • VirtualProtectEx를 사용하여 메모리(페이지) 권한을 재정의할 수 있습니다.
  • WriteProcessMemory는 DLL과 같은 악성 코드를 피해 프로세스에 기록합니다.
  • CreateRemoteThread, RtlCreateUserThread 또는 NtCreateThreadEx는 새 스레드(프로세스가 특정 작업을 실행하는 방식)를 생성하고 자격 증명 탈취 또는 랜섬웨어 실행과 같은 악성 기능을 실행하는 데 사용됩니다.

Windows에서 DLL을 로드하려면 libloaderapi.h의 일부인 LoadLibraryA 또는 LoadLibraryExA 함수를 호출해야 합니다. 이러한 함수는 Microsoft의 표현대로 "지정된 모듈을 호출 프로세스의 주소 공간에 로드"합니다. LoadLibrary를 사용하여 DLL을 로드하려면 디스크에서 DLL을 로드해야 합니다.

그러나 반사적 DLL 주입 기술을 사용하면 현재 LoadLibrary에서 제공하지 않는 기능인 메모리에서 직접 DLL을 로드할 수 있습니다. 위협 행위자는 반사적 DLL 인젝션을 사용하여 디스크에서 기본 Windows 로더를 호출할 필요 없이 메모리에 악성 코드를 자체 로드할 수 있습니다. 여기서는 Windows LoadLibrary 대신 사용자 지정 로더를 사용합니다.

공격자는 다음과 같은 다른 인젝션 및 프로세스 조작 기법도 사용할 수 있습니다:

  • 프로세스 중공 - 악성코드가 일시 중단된 상태에서 피해자 프로세스를 시작하는 경우, 메모리를 비워 새 코드를 위한 공간을 확보하고 페이지 권한을 변경하며 악성 코드를 삽입한 다음 프로세스를 재개하여 삽입된 악성 코드를 실행합니다.
  • DLL 사이드 로딩 - 합법적이고 종종 오래된 취약한 Windows 프로그램(피해자 프로세스)이 피해자가 예상한 합법적인 프로그램과 동일한 이름을 가진 악성 DLL을 강제로 로드하도록 하고 취약한 프로그램과 동일한 디렉터리에 나란히 배치하는 경우입니다. 피해 프로그램의 프로세스는 먼저 해당 폴더에서 이름이 변경된(사칭된) 악성 DLL을 찾습니다. 이 기술은 Windows 로더가 사용하는 DLL 검색 순서를 활용하여 성공합니다.

이러한 기법은 악성 활동을 합법적인 것처럼 보이게 하여 탐지를 회피하고 손상된 시스템에서 지속되도록 시도합니다.

이 시리즈의 1부에서 설명한 프로세스 조작 기법에서 원래 악성 web1_meeting_update.exe의 마이그레이션에 일부 코드 삽입이 포함되었음을 아래에서 확인할 수 있습니다.

이 예제에서 악성 페이로드는 코드를 삽입하기 위해 완전히 새로운 notepad.exe 프로세스를 원하는 피해자 프로세스로 시작(스폰)했습니다. 그런 다음 원래 악성 프로세스(PID 2472)가 새로운 notepad.exe 피해자 프로세스(PID 1768)에 주입되거나 마이그레이션됩니다.

notepad.exe 피해자 프로세스

Notepad.exe는 신뢰할 수 있는 Microsoft 프로세스이므로 공격자는 원래 악성 프로세스로 보이는 프로세스를 더 신뢰할 수 있는 프로세스로 위장할 수 있습니다. Notepad.exe는 네트워크 연결에 필요한 Windows API, 함수 또는 DLL을 호출(참조)할 필요가 없는 기본 Windows 텍스트 편집기로, 이 예제에서는 악성 프로세스가 실행되었습니다.

메모리에서 발생하는 인젝션을 감지하려면 동적 분석이 필요합니다. 또한 텍스트 편집기의 의심스러운 네트워크 통신(이 경우 notepad.exe 프로세스)을 감지하여 네트워크 연결을 감지하려면 애플리케이션 종속성 매핑이 필요합니다.

Conclusion

이 블로그 시리즈의 1부에 이어서, 위협 행위자가 사용할 수 있는 페이로드의 범주와 유형, 그리고 한 유형을 다른 유형보다 사용하기로 결정하는 이유에 대해 살펴보았습니다.

대부분의 위협 공격자는 초기 진입에 성공하고, 지속성을 유지하며, 탐지를 피하기 위해 많은 노력을 기울입니다. 지금까지 도구, 기술 및 절차의 조합은 성공적인 공격을 방지하거나 침해 사고를 가정하고 초기 사이버 사고가 큰 침해 사고로 발전하는 것을 방지하려면 동등한 능력의 보안 도구와 절차 조합이 필요하다는 것을 의미한다는 것을 살펴봤습니다.

이 시리즈의 마지막 부분에서는 몇 가지 기술과 기능을 더 살펴보고, 가장 중요한 분석 및 완화 기능에 대해 알아보겠습니다.

관련 주제

관련 문서

제로 트러스트 보안, '침해 가정' 사고방식, 영국의 데이터 개혁 법안
Cyber Resilience

제로 트러스트 보안, '침해 가정' 사고방식, 영국의 데이터 개혁 법안

조직의 90%가 2022년에 제로 트러스트 보안 전략의 우선순위를 정할 계획이지만, 보안 침해가 발생할 것이라고 생각하는 조직은 놀랍게도 거의 없습니다.

크라운 보석 자산 보호: 실행 계획은 무엇인가요?
Cyber Resilience

크라운 보석 자산 보호: 실행 계획은 무엇인가요?

'왕관 보석'을 보호하고 상상할 수 없는 일을 피하기 위해 어떻게 탄탄한 비즈니스 사례와 실용적인 실행 계획을 수립할 수 있을까요?

불필요한 위험을 초래하는 클라우드 보안의 대표적인 잘못된 가정
Cyber Resilience

불필요한 위험을 초래하는 클라우드 보안의 대표적인 잘못된 가정

Amazon Web Services가 최초의 클라우드 인프라 플랫폼을 출시한 지 15년이 지났습니다.

No items found.

위반 가정.
영향 최소화.
복원력 향상.

제로 트러스트 세분화에 대해 자세히 알아볼 준비가 되셨나요?