/
랜섬웨어 억제

.Net 어셈블리를 사용한 랜섬웨어 기법 설명: EXE와 DLL 어셈블리

에서 첫 번째 부분 이 시리즈에서는 멀웨어가 사용하는 몇 가지 기술을 살펴 보았습니다. 랜섬웨어 구체적으로.앞서 살펴본 바와 같이 다운로더, 드롭퍼 및 로더와 같은 이러한 개별 기술과 인코딩 및 암호화는 모두 합법적이고 프로그래밍 가능한 기능입니다. .Net (닷넷) 소프트웨어 프레임 워크 및 기타 여러 프로그래밍 프레임 워크 및 코드 언어.다음은 이전 기사에서 설명한 몇 가지 기술을 모아 놓은 것입니다.

이 두 번째 기사에서는 Microsoft의 프레임 워크를 통해 어셈블리의 기본 사항을 살펴 보겠습니다. .Net.어셈블리 (EXE와 DLL) 간의 차이와 이러한 기능이 C# 프로그래밍 코드와 같은 초기 상위 코드에서 어떻게 실행되는지 자세히 살펴보겠습니다.이전 문서에서 소개한 코드를 사용하여 이러한 차이점과 관계를 살펴보겠습니다.

마이크로소프트 닷넷은 무엇인가요?

마이크로소프트 .Net 여러 프로그래밍 언어를 지원하고 다양한 운영 체제를 대상으로 하도록 설계된 소프트웨어 개발 프레임워크입니다.C# (C sharp로 발음) 과 같이 지원되는 프로그래밍 언어는 비관리형 코드나 네이티브 코드가 아닌 관리 코드로 컴파일되고 실행됩니다.이를 위해서는 .Net 코드를 대상 플랫폼에 직접 실행하지 않고 전용 가상 머신에서 실행합니다.이 가상 머신은 다음과 같이 알려져 있습니다. .Net CLR (공용 언어 런타임)C#, VB.Net, F #과 같은 다양한 프로그래밍 언어에서 컴파일되거나 어셈블된 코드를 최종적으로 실행하는 일반적인 중개자라고 생각할 수 있습니다. .Net 지원합니다.아래 예제는 이전 문서의 C# 프로그래밍 언어 코드를 보여줍니다.

관리 코드란 위의 고급 C# 프로그래밍 언어 코드와 F# 및 VB.Net과 같은 다른 코드를 먼저 중간 언어 (IL) 로 컴파일하는 것을 의미합니다.위에 표시된 C# 상위 코드는 아래 이미지에 표시된 중간 언어 명령으로 컴파일됩니다.이 코드는 저수준 어셈블리 프로그래밍 구문과 비슷합니다.

그런 다음 이 중간 언어 (IL) 를 관련 머신 플랫폼을 대상으로 하는 네이티브 또는 머신 코드로 추가로 컴파일됩니다.이 컴파일은 다른 사람이 수행합니다. .Net JIT (저스트-인-타임) 컴파일러라는 컴포넌트.

네이티브 코드 또는 머신 코드는 특정 컴퓨터의 프로세서 (CPU) 가 이해하는 명령 세트 (0과 1) 입니다.이 마지막 단계는 JIT도 포함하는 CLR (공용 언어 런타임) 에서 관리합니다.CLR은 .Net 런타임 환경 또는 가상 머신Java는 중간 런타임 개념을 사용하는 또 다른 소프트웨어 프레임워크입니다.Java 가상 머신과 마찬가지로 Java 가상 머신을 만드는 주요 요소입니다. .Net 플랫폼 독립적. .Net 프로그래밍 코드가 중간 CLR에 의해 관리되고 컴퓨터의 CPU에서 직접 실행되지 않기 때문에 코드를 관리 코드라고 합니다.

에서 관리 코드의 이점 .Net 자동 메모리 관리 및 가비지 컬렉션입니다.즉, 개발자는 C 또는 C++ 코드의 경우처럼 시스템 리소스를 절약하기 위해 코드에서 컴퓨터 메모리를 할당하거나 할당 취소하는 것에 대해 걱정할 필요가 없습니다.에서 .Net, 할당 해제된 메모리를 처리하기 위해 주기적으로 실행되는 가비지 컬렉터가 있습니다.필요할 때 프로그래머가 호출할 수도 있습니다.아래 다이어그램은 a의 아키텍처를 보여줍니다. .Net 애플리케이션.

반대로, 비-.Net VB6, C, C++와 같은 컴파일러는 상위 수준 코드를 대상 플랫폼 (OS 및 CPU) 의 시스템 코드에 직접 컴파일합니다.따라서 생성된 실행 파일 또는 코드 어셈블리는 컴파일러의 대상 시스템 플랫폼에 연결됩니다.이를 비관리형 코드 또는 네이티브 코드라고도 합니다.구조는 다르지만 어셈블리의 코드, 특히 네이티브 코드로 개발된 DLL의 코드를 사용할 수 있습니다. .Net-다음과 같은 기능을 통해 관리되는 애플리케이션 Interop 마샬링 (플랫폼 호출).이러한 예로는 네이티브 Windows 운영 체제 DLL 또는 외부 라이브러리 (예: C++로 작성된 코드) 를 관리 시스템에서 참조하는 경우를 들 수 있습니다. .Net 일부 저수준 운영 체제 기능을 활성화하는 응용 프로그램입니다.이 경우에는 .Net 그 자체만으로도 Windows 운영 체제가 의존하는 네이티브 DLL을 안전하게 감싸는 것으로 생각할 수 있으며, 대부분은 실제로 C++로 작성되었습니다.

.Net 어셈블리란 무엇입니까?

마이크로소프트는 이렇게 설명합니다 .Net 단일 배포 단위로 어셈블리를 제공합니다.즉, 어셈블리란 호환 가능한 모든 형식에서 실행할 수 있는 형식으로 컴파일 (어셈블링) 된 다양한 유형의 코드 및 관련 파일의 모음이라는 의미입니다. .Net 대상 플랫폼.실행은 다음과 같이 수행됩니다. 닷넷 공용 언어 런타임Windows 운영 체제의 어셈블리로는 실행 파일 (.exe), 클래스 라이브러리 또는 동적 링크 라이브러리 (.dll) 파일이 있습니다.

아래 예제 코드 이미지를 자세히 살펴보면 왼쪽에는 C# 실행 가능 어셈블리가 표시되고 오른쪽에는 또 다른 C# DLL (클래스 라이브러리라고도 함) 어셈블리 코드가 표시됩니다.실행 코드는 DLL 파일을 참조한 다음 실행 중에 DLL 코드에서 특정 메서드 (함수) 를 호출합니다.이러한 참조와 호출은 아래 이미지에 강조 표시되어 있습니다.이 문서 뒷부분에서 두 코드에 대한 세부 정보를 설명하겠습니다.또한 이 시리즈에서는 이 조합을 악의적인 목적으로 사용할 수 있는 방법도 살펴보겠습니다.

다음 예제에서는 실행 코드에서 DLL 파일을 수동으로 참조합니다. 즉, 실행 코드를 컴파일하는 동안 DLL 및 해당 메타데이터 및 코드 (모듈, 클래스 및 메서드로 구성) 에 대한 관련 정보가 참조됩니다.

공유 라이브러리로서 DLL 코드는 단독으로 직접 실행할 수 없습니다.코드 관점에서 보면 DLL에는 실행할 기본 진입점 함수가 없기 때문에 실행 가능 (.exe) 코드가 설정된 방식으로는 독립 실행형 코드로 실행할 수 없기 때문입니다.예를 들어 아래 오류 메시지는 컴파일러에서 직접 클래스 라이브러리 또는 DLL 파일을 실행하려고 할 때의 결과를 보여줍니다.

반면 실행 코드에는 실행을 시작하는 기본 진입점 함수나 메서드가 있지만 DLL은 주로 다른 어셈블리에서 참조하는 코드 블록 라이브러리이므로 주 진입점 함수가 필요하지 않습니다.

참조가 완료되면 관심 있는 DLL 파일의 특정 코드를 호출하여 실행할 수 있습니다.이전 문서에서 볼 수 있듯이 아래의 코드 예제 (EXE 및 DLL) 도 이 점을 다시 한 번 강조합니다.

실행 가능한 응용 프로그램이 실행되고 해당 응용 프로그램이 참조한 DLL에서 코드를 호출하여 다음 이미지에 표시된 출력을 생성합니다.

이 간단한 프로그램은 그 방법을 보여줍니다 .Net EXE 및 DLL과 같은 어셈블리를 함께 사용할 수 있습니다.

위에서 언급한 DLL 코드에는 입력당 두 개의 매개 변수 (이름과 나이) 를 취한 다음 이 정보를 사용하여 인사말 메시지를 표시하는 메서드 (함수) 가 있습니다.반면 실행 코드는 명령줄에서 이름과 나이에 대한 사용자 입력 세부 정보를 받아 해당 정보를 DLL 메서드에 인수나 입력으로 전달하는 코드를 실행합니다.그러면 EXE 응용 프로그램이 사용자로부터 수집한 정보를 사용하여 DLL 코드의 메시지가 콘솔 화면에 다시 표시됩니다.

.Net 어셈블리 분석

실행 파일에 대한 정적 분석을 수행하면 실행을 위해 가져온 DLL 및 기타 구성 요소의 다양한 참조가 표시됩니다.실행 가능 어셈블리는 자체 사용자 지정 DLL 외에도 다음과 관련된 추가 DLL도 가져옵니다. .Net 그 자체 (예: mscorlib 기본 코드 (클래스, 유형 등) 를 포함하는 DLL이며 프로그램이 원활하게 실행되기 위해 필요한 것입니다.

코드 개발 환경인 Visual Studio에서는 다음과 같은 사용을 확인할 수 있습니다. mscorlib 데이터 유형 중 하나에서 출처를 추적하여 (이 경우 ...에서 시스템. 문자열 에서 .Net).이렇게 하면 내장 기능이 드러납니다. .Net 해당 유형이 시작된 어셈블리, 즉 mscorlib 아래 그림과 같이.

문자열은 프로그래밍 용어로 사용자가 입력한 후 다시 표시되는 텍스트가 저장되는 데이터 유형입니다.또한 정적 분석을 통해 이름이 “" 인 DLL도 확인할 수 있습니다.DLL_도트넷_어셈블리.”“를 포함하는 사용자 지정 DLL입니다.메시지 표시 방법” 메서드는 사용자가 세부 정보를 입력한 후 메시지를 표시합니다.

이 예제에서는 프로그램이 실행되기 전에 모든 코드를 컴파일하는 동안 사용자 지정 DLL을 수동으로 참조하고 로드했습니다.실행 파일을 실행하는 동안 DLL을 참조할 수도 있습니다.이는 코드를 컴파일하는 동안 원하는 DLL에 액세스할 수 없는 경우에 특히 유용할 수 있습니다.이 프로세스를 리플렉션이라고 하며 이를 통해 데이터를 검사할 수 있습니다. .Net 어셈블리 (메타데이터 및 속성) 및 프로그램 실행 시간 동안 어셈블리에 포함된 코드 (모듈, 클래스, 메서드 및 속성) 를 사용할 수도 있습니다.반사형 DLL 인젝션 공격으로 알려진 악의적인 의도에 맞게 이 기법을 조정할 수도 있습니다.

.Net 또한 어셈블리 (실행 파일 및 클래스 라이브러리) 는 어셈블리에 대한 메타데이터와 중간 언어 (IL) 코드에 대한 메타데이터를 포함하는 매니페스트 파일로 구성됩니다. 이 파일을 함께 사용하면 공용 언어 런타임에서 실행 가능한 모든 호환 플랫폼에서 어셈블리를 실행할 수 있습니다. .Net.아래 이미지는 두 어셈블리 (EXE 및 DLL) 의 IL 어셈블리 지침과 매니페스트 구조를 보여줍니다.매니페스트 파일에는 에 대한 메타데이터가 들어 있습니다. .Net 버전 번호, 설명 등과 같은 어셈블리

이제 우리는 기본적인 이해를 해야 합니다. .Net 소프트웨어 프레임워크, 관련 어셈블리, 상호 작용하는 방법

다음 글에서는 지금까지 논의하고 학습한 기술과 기능을 단일 악성 랜섬웨어 실행 파일에 넣을 것입니다.

자세히 알아보기 Illumio 제로 트러스트 세그멘테이션이 랜섬웨어 침해를 방지하는 데 어떻게 도움이 되는지 알아보십시오.

관련 주제

항목을 찾을 수 없습니다.

관련 기사

랜섬웨어 억제에 Illumio를 사용해야 하는 9가지 이유
랜섬웨어 억제

랜섬웨어 억제에 Illumio를 사용해야 하는 9가지 이유

Illumio의 실시간 가시성과 간단한 제어가 미사용 RDP 포트와 같은 랜섬웨어 위험의 가장 큰 원인을 어떻게 빠르게 줄일 수 있는지 알아보십시오.

제조사가 IIoT 리소스를 랜섬웨어로부터 보호해야 하는 이유
랜섬웨어 억제

제조사가 IIoT 리소스를 랜섬웨어로부터 보호해야 하는 이유

제조 부문의 IIoT 리소스에 대한 랜섬웨어 위험에 대한 통찰력을 얻으십시오.

Bishop Fox: 랜섬웨어에 대한 제로 트러스트 세그멘테이션의 효과 테스트
랜섬웨어 억제

Bishop Fox: 랜섬웨어에 대한 제로 트러스트 세그멘테이션의 효과 테스트

Bishop Fox가 제로 트러스트 세그멘테이션의 효과를 테스트하기 위해 랜섬웨어 공격 에뮬레이션을 만든 방법을 알아보십시오.

.Net 어셈블리를 사용한 랜섬웨어 기법 설명: 5가지 주요 기법
랜섬웨어 억제

.Net 어셈블리를 사용한 랜섬웨어 기법 설명: 5가지 주요 기법

.Net 소프트웨어 프레임워크를 사용하는 5가지 랜섬웨어 기술에 대해 알아보십시오.

Illumio로 락비트 랜섬웨어 공격을 억제하는 방법
랜섬웨어 억제

Illumio로 락비트 랜섬웨어 공격을 억제하는 방법

LockBit 랜섬웨어의 작동 방식과 2022년 여름 Illumio 제로 트러스트 세그멘테이션이 LockBit 랜섬웨어 공격을 어떻게 억제했는지 알아보십시오.

전문가 Q&A: 기업이 여전히 랜섬웨어에 비용을 지불하는 이유는 무엇입니까?
랜섬웨어 억제

전문가 Q&A: 기업이 여전히 랜섬웨어에 비용을 지불하는 이유는 무엇입니까?

조직의 평판, 재정 및 보안 위험에도 불구하고 몸값을 지불하게 만드는 요인에 대한 전문가의 견해를 들어보십시오.

Assume Breach.
Minimize Impact.
Increase Resilience.

Ready to learn more about Zero Trust Segmentation?