멀웨어 분석과 리버스 엔지니어링 6장, 7장 - 멀웨어 이해 & 패커

2025.08.23 - [보안/시스템해킹] - 멀웨어 분석과 리버스 엔지니어링 4장 - 가상 메모리 및 PE 파일

2025.08.24 - [보안/시스템해킹] - 멀웨어 분석과 리버스 엔지니어링 5장 - 윈도우 내부

 

멀웨어 이해

구성요소

  • 페이로드: 공격 기능을 담당하는 바이너리
  • 패커: 소프트웨어 압축 기술이지만 난독화에 이용
  • 지속성(persistence): 피해자의 컴퓨터에서 반복적으로 실행
  • 방어성(armoring): 안티 바이러스 소프트웨어나 분석가에 의해 분석되지 않도록 방어
  • 은폐성(stealth): 안티 멀웨어 솔루션으로부터 숨기기
  • 통신(communication): 공격자의 지시를 받거나 훔친 데이터를 보내기 위해 통신 수행
  • 전파성(propagation): 더 많은 피해자를 찾고 다른 네트워크에 접근하기 위해 확산

 

배포

대부분의 배포 기법은 사회 공학적 기법에 의존한다. 물리적 전달, 웹 사이트 전달, 이메일 전달 등이 사용된다.

익스플로잇

취약점을 대상으로 하는 작은 프로그램이다. 

대부분 취약점은 입력의 유효성을 검증하지 않아 발생한다. 공격자는 웹 서버를 공격하기 전에 웹 서비스를 실행 중인지, 어떤 종류, 어떤 버전을 사용하고 있는지 확인한다. 그리고 해당 버전에서 알려진 취약점을 이용해 익스플로잇을 보낸다.

 

가정용 PC는 경로가 노출되어 있지 않아 직접 공격하긴 어렵다. 공격자는 서버에 미끼를 설치하고 개인 사용자가 그 미끼를 물어 감염되기를 기다린다. 각각의 PC에서 어떤 브라우저, 어떤 소프트웨어를 사용하는지 알 수 없으므로 다양한 소프트웨어, 브라우저, 버전을 대상으로 작성된 익스플로잇을 포함하는 익스플로잇 키트를 사용한다.

 

익스플로잇은 크기가 작어 기능이 제한적이다. 따라서 초기 전달 메커니즘을 수행한다. 대다수는 멀웨어를 다운로드하고 실행하는 기능을 수행한다.

 

감염된 저장장치(USB 등), 멀버타이징(대규모 광고 감염 후 배포), 스팸 메일 등 다양한 방법을 이용해 배포할 수 있다.

공유 폴더를 이용하거나, 인증이 취약한 서버에 직접 로그인할 수도 있다. 


멀웨어 패커

소프트웨어는 난독화하여 크래킹을 방지하고 저작권을 보호하며, 압축을 통해 파일 크기를 줄인다.

 

멀웨어도 마찬가지다. 안티 멀웨어 제품이 탐지할 수 없도록 암호화를 해야 하고, 파일 크기를 줄여 다운로드 시간을 줄일 수 있도록 압축해야 한다. 

 

패커는 실행 파일을 압축하는 소프트웨어다. 파일을 입력으로 받아 압축된 새 파일을 생성한다.

https://malware.news/t/the-basics-of-packed-malware-manually-unpacking-upx-executables/35961

패커는 압축할 때 로더 코드(loader code)나 언패킹 스텁 코드(unpacking stub code)를 추가한다.

압축된 실행 파일을 실행하면 스텁 코드가 압축된 코드와 데이터를 가져와 압축을 해제한 뒤 출력한다.

 

크립토, 프로텍터, 인스톨러

크립토는 멀웨어의 외형을 Adobe PDF Reader 등 일반 소프트웨어처럼 위장하는 프로그램이다. 

 

프로텍터는 동일한 동작을 하는 더 복잡한 소스 코드로 교체해 난독화하는 프로그램이다.

 

MSI, Inno Setup, autoIT와 같은 인스톨러는 설치 프로그램을 보여주지 않고 몰래 설치를 진행한다. 

 

패킹된 프로그램 확인하기

 

 

멀웨어의 다운로드 링크가 포함된 txt 파일의 원본을 Bintext로 확인해보면 위처럼 나온다.

위 파일을 패킹하고 확인해보면 알아볼 수 없는 문자열로 처리되었음을 확인할 수 있다. 

이렇게 난독화되어 있다면 패킹이 되어 있지 않을까 의심해야 한다.

패킹 여부는 엔트로피(entropy)를 통해서도 확인할 수 있다.

 

엔트로피는 데이터의 무작위성을 측정하는 지표로, 패킹되어 있으면 무작위성이 높아지므로 엔트로피도 높다.

 

PeiD 프로그램으로 엔트로피를 확인할 수 있다.

좌측 이미지는 패킹되지 않은 파일로 엔트로피가 5.89이고, 오른쪽 이미지는 패킹된 파일로 엔트로피가 7.9이다. 

 

정적 분석을 통한 문자열 확인

 

프로그램의 String을 확인해봤을 때 읽을 수 없는 문자열이 많다면 패킹되었음을 알 수 있다.

 

패킹된 파일이라도 모든 문자열이 난독화되는 것은 아니다. API 이름, import dll, 컴파일러 코드 문자열, locale 등은 패킹되더라도 확인할 수 있는 문자열이다. 

동적 분석을 통한 문자열 확인

 

패킹된 PE 실행 파일을 실행하고, Process Explorer에서 더블 클릭한 후 Strings 탭을 확인해보자.

Image 옵션은 디스크에 있는 파일의 문자열이 표시하고, Memory 옵션은 실행 중인 프로세스 메모리에 있는 문자열을 표시한다.

 

패킹 프로그램을 실행하면 압축을 해제하여 코드와 데이터가 메모리에 로드되기 때문에, 정적 문자열을 사람이 읽을 수 없는 상태고 동적 문자열은 사람이 읽을 수 있는 상태다. 

 

이렇게 되어 있다면 패킹된 상태라고 판단할 수 있다.

또한 PEiD를 이용하면 어떤 패커를 사용했는지 확인할 수 있다.

userdb.txt 파일에 저장된 시그니처를 활용해 분석해준다.

 

섹션

패킹되지 않은 프로그램의 섹션
패킹된 파일의 섹션

패킹을 통해 생성된 파일은 패커에 따라 특정한 섹션과 패턴을 갖는다.

upx로 패킹한 파일의 경우 섹션명이 UPX0, UPX1, UPX2 등으로 되어 있다.

 

 

  • 멀웨어 제작자는 맞춤형 패커를 사용한다. 섹션명, 진입코드가 유명 패커 프로그램과 다를 수 있다.
  • 패킹되었다고 멀웨어인 것은 아니다.