정적 분석으로 악성코드 탐지하는 법은

정적 분석은 악성코드를 분석하는 기초적인 방법입니다. 이 기법을 통해 위험이 도사리는 파일을 조기에 식별하고 예방할 수 있습니다.


정적 분석의 기본 원리

정적 분석이란 의심스러운 파일을 실행하지 않고도 그 안의 정보를 추출해 분석하는 방법입니다. 이 기법은 악성코드 분석의 첫 단계로, 해당 파일의 특징과 기능을 파악해 이후 분석의 방향성을 정하는 데 도움을 줍니다.


정적 분석의 정의

정적 분석(static analysis)은 의심스러운 파일을 실행하지 않고 분석하는 기법을 의미합니다. 이 방법은 악성 바이너리에서 유용한 정보를 추출하고 이를 기반으로 파일의 분류 및 분석 초점을 결정하는 데 중요한 역할을 합니다.

“정적 분석은 파일의 원본 상태를 바탕으로 분석을 수행하여 실행 시 발생할 수 있는 위험 요소를 미리 확인하는 데 중점을 둡니다.”


의심 파일의 정보 추출

정적 분석의 중요한 단계 중 하나는 의심 파일의 정보를 추출하는 것입니다. 악성코드를 식별하고 분석하기 위해 아래와 같은 기법을 활용할 수 있습니다.

기법 설명
해시 값 생성 md5, sha1, sha256 같은 암호 해시 알고리즘을 사용해 파일의 유니크한 식별자를 추출합니다.
문자열 추출 프로그램 기능과 관련된 단서를 제공하는 ASCII 및 유니코드 문자열을 추출합니다.
PE 헤더 정보 조사 PE 포맷의 실행 파일에서 필요한 구조체 정보를 확인합니다.

이처럼 다양한 방법을 통해 의심 파일의 정보를 얻을 수 있으며, 이를 바탕으로 다음 단계의 분석 방향을 설정할 수 있습니다.


파일 유형 구분하기

파일의 유형을 구분하는 것은 악성코드의 목표 운영 시스템과 아키텍처를 파악하는 데 있어 매우 중요합니다. 악성 파일은 공격자가 사용자가 실행하도록 유도하기 위해 파일 확장자를 변경하는 경우가 많습니다.

  1. 헥사 편집기 사용: 파일의 시그니처를 확인하여 파일 유형을 식별할 수 있습니다. 헥사 편집기를 통해 파일의 바이트 배열을 관찰하여 해당 시그니처를 찾습니다.

  2. 도구 사용: 리눅스의 file 유틸리티나 윈도우의 CFF Explorer와 같은 도구를 이용하여 파일 유형을 식별합니다. 이를 통해 파일의 확장자가 없는 경우에도 정확한 유형을 파악할 수 있습니다.

  3. 파이썬 활용: python-magic 모듈을 사용하여 파일 유형을 구분할 수 있습니다. 이러한 방법들은 분석 과정에서 효율성을 높이며, 악성코드를 보다 쉽게 식별하는 데 기여합니다.

정적 분석의 접근 방식은 유연하고 상황에 따라 다양한 방법을 활용할 수 있으며, 각 단계에서 얻은 정보는 악성코드의 특성과 행동을 이해하는 데 필수적입니다.

정적 분석으로 악성코드 탐지하는 법은


파일 식별 기법

파일 식별 기법은 의심스러운 파일을 정적 분석하기 위한 기초적인 단계이며, 악성코드 분석의 시작점이라 할 수 있습니다. 이를 통해 파일의 특성을 이해하고, 향후 더 깊이 있는 분석을 준비할 수 있습니다.


파일 시그니처 활용

파일 시그니처는 각 파일의 헤더에 포함된 바이트 배열로, 파일의 유형을 판별하는 중요한 요소입니다. 이를 통해 우리는 의심스러운 바이너리를 분류하고, 이후의 분석 방향을 정할 수 있습니다.

“파일 시그니처를 통해 공격자는 파일의 외형을 수정하더라도, 내부 내용을 통해 파일 유형을 확실히 구분할 수 있습니다.”

파일 시그니처 설명
PE 파일 Windows에서 실행되는 프로그램 파일
ELF 파일 Unix와 Linux 환경에서 사용되는 파일 형식
APK 파일 Android 애플리케이션 패키지

리눅스 시스템에서는 file 유틸리티를 통해 빠르게 파일 시그니처를 확인할 수 있습니다.

정적 분석으로 악성코드 탐지하는 법은


헥사 편집기를 이용한 분석

헥사 편집기(예: HxD)는 파일의 각 바이트를 분석하는 데 유용한 도구입니다. 헥사 덤프를 생성하여 파일의 시그니처를 수작업으로 검토할 수 있습니다. 헥사 편집기를 사용하면 파일의 구조를 자세히 살펴보아, 의심스러운 코드나 무작위 데이터의 존재를 확인할 수 있습니다.

리눅스에서는 xxd 명령어로 헥사 덤프를 생성할 수 있으며, 이를 통해 악성코드의 분석 가능성을 한층 높일 수 있습니다.


파일 해시 생성 방법

파일 해시는 각 파일의 유일한 식별자로, MD5, SHA1, SHA256 등 다양한 알고리즘을 통해 생성됩니다. 파일 해시는 악성코드 샘플을 식별하고, 온라인 데이터베이스와의 비교를 가능하게 합니다.

리눅스에서는 md5sum, sha256sum, sha1sum과 같은 도구를 사용하여 손쉽게 파일 해시를 생성할 수 있습니다. 윈도우 환경에서도 여러 파일 해시 생성 도구들이 제공되므로 상황에 맞게 활용할 수 있습니다.

파이썬의 hashlib 모듈을 사용해 파일 해시를 생성하는 방법도 널리 사용됩니다. 개발자들은 이를 통해 자동화된 악성코드 분석을 구현할 수 있는 혜택을 누릴 수 있습니다.

정적 분석으로 악성코드 탐지하는 법은

이러한 파일 식별 기법들을 활용해 의심스러운 파일을 효과적으로 분류하고 분석하여, 더욱 심층적인 악성코드 분석을 위한 기초를 마련할 수 있습니다. 파일 식별 기법은 많은 기술적 배경지식과 도구 활용을 요구하므로, 지속적인 학습과 경험이 중요합니다.


악성코드 검출 도구

악성코드는 점점 복잡해지고 다양해지며, 이를 효과적으로 분석하기 위해서는 다양한 도구와 기법이 필요합니다. 이번 섹션에서는 다중 백신 스캐닝 활용, 바이러스토털 소개, 그리고 API 활용한 해시 관리를 통해 효과적인 악성코드 검출 방법을 알아보겠습니다.


다중 백신 스캐닝 활용

다중 백신 스캐닝은 의심스러운 파일을 여러 백신 엔진으로 분석하여 악성 코드의 시그니처를 통해 악성 여부를 판단하는 방법입니다. 이 방법을 사용하면 단일 백신 솔루션으로 탐지할 수 없는 악성코드도 발견할 수 있는 가능성이 높아집니다.


장점

  • 다양한 탐지 능력: 여러 백신 엔진의 결과를 취합하여 다양한 시그니처를 한 번에 확인할 수 있습니다.
  • 신속한 피드백: 분석 시간이 단축되고, 각 백신 엔진의 탐지 결과를 비교할 수 있어 효율적입니다.

“한 가지 방법만으로는 모든 악성코드를 탐지하기 어렵다. 다각적인 접근이 필요하다.”


바이러스토털 소개

바이러스토털(VirusTotal)은 온라인에서 제공되는 무료 악성코드 스캐닝 서비스로, 사용자가 업로드한 파일을 다양한 백신 엔진으로 동시에 분석할 수 있도록 도와줍니다. 바이러스토털은 의심스러운 파일의 상태를 빠르게 확인할 수 있는 유용한 도구입니다.


기능

  • 파일 업로드: 사용자가 직접 파일을 업로드하여 여러 백신 엔진의 결과를 받을 수 있습니다.
  • 데이터 시각화: 특정 파일과 관련된 IP, 도메인, URL의 관계를 시각적으로 보여주는 기능도 갖추고 있습니다.

정적 분석으로 악성코드 탐지하는 법은

기능 설명
파일 스캐닝 최대 67개의 백신 엔진으로 스캔 가능
데이터 집합 파일 및 도메인 간의 연관성을 시각화


API 활용한 해시 관리

바이러스토털은 공개 API를 제공하여 사용자가 스크립트를 통해 파일 등록, 스캔 리포트 검색, 도메인/IP 리포트 검색 등을 자동화할 수 있습니다. 이 API를 활용하여 악성코드 샘플의 해시 값을 관리하고 검토하는 것이 매우 유용합니다.


활용 예시

  • 자동화된 스캔 요청: 특정 해시 값에 대해 자동으로 바이러스토털 API 요청을 보내고 결과를 받아 데이터베이스에 저장합니다.
  • 스캔 리포트 통합: 여러 스캔 리포트를 한 곳에서 관리하여 효율성을 높일 수 있습니다.

이러한 도구와 기법들을 활용하면 악성코드의 탐지 능력을 최대화할 수 있으며, 보안 작업의 효율성을 크게 향상시킬 수 있습니다. 안전한 디지털 환경 구축을 위해 이러한 방법들을 적극적으로 활용하는 것이 중요합니다.


문자열 추출 기법

문자열 추출은 악성코드 분석에서 중요한 과정입니다. 이를 통해 프로그램의 기능과 의심 바이너리에 대한 다양한 단서를 확보할 수 있습니다. 이번 섹션에서는 문자열 추출을 위한 여러 기법과 도구에 대해 자세히 알아보겠습니다.


strings 유틸리티 사용

리눅스 시스템에서는 strings 유틸리티를 통해 바이너리 파일 내부의 ASCII 문자열을 추출할 수 있습니다. 기본적으로 이 도구는 최소 4문자 이상의 ASCII 문자열을 대상으로 합니다. 명령어에 -a 옵션을 추가하면 전체 파일에서 문자열을 추출할 수 있으며, 유니코드 문자열을 추출하려면 -el 옵션을 사용하면 됩니다.

옵션 설명
-a 전체 파일에서 문자열 추출
-el 유니코드 문자열 추출

“바이너리의 유용한 정보를 얻기 위해 ASCII와 유니코드 문자열을 모두 추출하는 것이 중요합니다.”

윈도우 환경에서는 pestudio라는 도구를 사용할 수 있으며, 이 도구는 ASCII와 유니코드 문자열 모두를 표현해 줍니다.

정적 분석으로 악성코드 탐지하는 법은


난독화된 문자열 처리

악성코드 제작자는 문자열을 난독화하여 분석을 방해할 수 있기 때문에, 이러한 난독화된 문자열을 효율적으로 처리할 필요가 있습니다. floss (FireEye Labs Obfuscated String Solver) 도구는 이러한 난독화된 문자열을 자동으로 추출하고 식별할 수 있도록 설계되었습니다.

난독화된 문자열은 일반적인 strings 유틸리티와 다른 추출 도구로는 잘 나타나지 않기에, floss와 같은 전문 도구의 사용이 권장됩니다. 이 도구는 난독화된 문자열의 원래 형태를 찾아내어 악성코드의 기능 분석에 큰 도움을 줄 수 있습니다.


floss 도구로 분석

floss 도구는 난독화된 문자열 처리를 전문적으로 설계된 유틸리티로, 복잡한 문자열 구조를 간편하게 디코딩할 수 있게 합니다. 이를 통해 분석가는 악성코드 내부의 동작 방식 및 목표에 대한 통찰을 얻을 수 있습니다. floss는 악성코드 분석가가 간과할 수 있는 부분까지 세심하게 분석할 수 있도록 지원합니다.

다음 표는 floss 도구의 기능과 특징을 요약합니다.

기능 설명
자동 문자열 추출 난독화된 문자열을 자동으로 추출합니다.
쉬운 분석 복잡한 문자열 구조를 간단히 디코딩할 수 있습니다.
악성코드 탐지 기존 난독화 기법에 대한 대응력을 강화합니다.

이러한 도구들을 이용해 문자열을 추출하고 분석하는 과정은 악성코드 분석의 기본이자 핵심입니다. 이를 통해 더욱 효과적인 분석 결과를 도출할 수 있습니다.


PE 헤더 정보 분석

PE(Portable Executable) 파일 포맷은 윈도우 운영 체제의 실행 파일과 DLL 파일의 표준 형식입니다. 이 섹션에서는 PE 파일의 헤더 정보와 구조를 통해 주요 정보를 분석하고, 악성코드 분석 시 유용한 정보를 제공하는 컴파일 타임스탬프 및 리소스 섹션에 대해 살펴보겠습니다.


PE 파일 구조 이해하기

PE 파일 포맷은 바이너리가 메모리에 로드될 때 필요한 다양한 메타데이터를 포함하고 있습니다. PE 헤더는 실행 파일의 시작과 메모리 로딩 정보, 의존하는 라이브러리 및 기능에 대한 정보를 제공합니다. 이러한 구조를 이해하는 것은 악성코드 분석의 기본입니다.

필드 설명
이미지 베이스 주소 (Image Base) 바이너리가 메모리에서 로드될 주소
작은 메모리 섹션 (Section Table) PE 파일의 데이터와 코드 섹션에 대한 정보
임포트 테이블 (Import Table) 의존하는 DLL과 그 기능들에 대한 정보

“PE 헤더는 실행 환경에서 바이너리의 동작을 제어하는 중요한 요소입니다.”


컴파일 타임스탬프 조사

컴파일 타임스탬프는 바이너리가 언제 생성되었는지를 나타내는 중요한 정보입니다. 이 필드를 분석하면 파일의 생성 시점을 파악할 수 있습니다. 또한, 타임스탬프를 수정하는 공격자가 있을 수 있으므로, 원본 타임스탬프를 확인하여 의심스러운 활동을 식별할 수 있습니다. 아래와 같은 파이썬 코드를 통해 타임스탬프를 추출할 수 있습니다.

# 예시 코드
import pefile
pe = pefile.PE('example.exe')
print(pe.FILE_HEADER.TimeDateStamp)

컴파일 타임스탬프를 분석하는 것은 공격의 연대기를 작성하는 데 매우 유용합니다.


리소스 섹션 검토

PE 파일에는 다양한 리소스가 포함되어 있으며, 이는 사용자의 인터페이스 요소를 제공하거나, 추가 데이터를 포함할 수 있습니다. 리소스 섹션(.rsrc)은 아이콘, 메뉴, 문자열, 대화상자 등 다양한 정보를 저장합니다. 이 섹션을 통해 공격자는 악성 행위의 은닉 또는 미끼 문서를 포함할 수 있습니다.

리소스 해커 도구를 활용하면 의심스러운 바이너리의 리소스를 조사하고 추출할 수 있습니다. 이 정보를 통해 공격자의 의도를 판단하고 악성코드의 기능을 분석하는 데에 도움을 받을 수 있습니다.

정적 분석으로 악성코드 탐지하는 법은

PE 헤더의 중요성을 이해하고 컴파일 타임스탬프 및 리소스 섹션을 검토하는 것은 악성코드 분석에 있어 필수적입니다. 이러한 정보를 통해 파일의 신뢰성을 평가하고, 잠재적인 위협을 사전에 차단할 수 있습니다.


악성코드 분류와 비교

악성코드를 효과적으로 분석하고 분류하기 위해서는 다양한 기법과 도구를 활용해야 합니다. 이번 섹션에서는 퍼지 해싱, 임포트 해싱, 그리고 Yara 도구의 활용에 대해 설명하겠습니다.


퍼지 해싱 기법

퍼지 해싱(fuzzy hashing)은 악성코드 샘플 간의 유사성을 비교하는 효율적인 방법입니다. 이 기법은 ssdeep이라는 도구를 통해 구현되며, 샘플 간의 유사성을 비율로 나타낼 수 있습니다.

“퍼지 해싱을 통해 우리는 의심 바이너리와 기존 데이터베이스의 샘플 간 유사성을 판단할 수 있습니다.”

퍼지 해싱의 주요 장점은 유사한 파일을 식별하는 데 도움을 주어, 특히 동일한 공격자 그룹에 속하는 샘플을 찾는 데 유용하다는 점입니다. 다음은 퍼지 해싱의 사용 예시입니다:

활용 목적 도구 설명
파일 유사도 비교 ssdeep 샘플 간 유사성 비율 확인
악성코드 그룹 식별 ssdeep 동일 공격자 그룹 또는 악성코드군 파악

정적 분석으로 악성코드 탐지하는 법은


임포트 해싱의 원리

임포트 해싱(import hashing)은 악성코드 샘플이 사용하는 라이브러리와 함수명에 기반하여 해시 값을 생성하는 기법입니다. 이러한 해시는 공격자가 동일한 방법으로 컴파일한 파일 사이의 연관성을 파악하는 데 도움을 줍니다. 주로 사용되는 도구는 pestudio로, 이를 통해 쉽게 임포트 해시를 생성할 수 있습니다.

임포트 해싱은 다음과 같은 특징을 가집니다:

  • 동일한 소스를 기반으로 컴파일된 파일은 유사한 해시 값을 가집니다.
  • 임포트 해시는 악성코드의 작업 수행 방식 파악에 필수적입니다.


Yara 도구 활용

Yara는 악성코드를 식별하고 분류하는 데 사용되는 강력한 도구로, 악성코드 샘플에 포함된 텍스트 및 바이너리 정보를 기반으로 규칙을 생성합니다. Yara 규칙은 다음과 같은 구성 요소로 이루어져 있습니다:

  • 규칙 식별자: 규칙을 설명하는 이름.
  • 문자열 정의: 감지할 문자열 정의.
  • 조건 섹션: 규칙이 일치해야 하는 조건 지정.

Yara를 활용하면 특정 특성을 가진 악성코드를 효율적으로 식별할 수 있으며, 알려진 샘플 저장소를 스캔하여 새로운 샘플과 비교하는 데 매우 유용합니다. Yara는 모든 파일의 패턴 감지에 활용 가능하여, 널리 사용되고 있습니다.

정적 분석으로 악성코드 탐지하는 법은

악성코드의 분석과 분류 과정은 계속 발전하고 있으며, 위에서 설명한 기법들은 그러한 발전의 일부입니다. 각각의 기법을 적절히 활용하여 악성코드 분석의 정확성을 높이는 것이 중요합니다.

함께보면 좋은글!

Leave a Comment