작은 메모장
PE 파일 악성 식별 본문
PE 파일의 악성 및 비정상 여부 식별 전략
섹션의 엔트로피 분석
패킹 되었거나 암호화된 영역이 있는 실행 파일은 악성코드일 가능성이 상대적으로 높다.
원본의 악성 파일을 압축 및 암호화하여 대상이 되는 실행파일의 섹션 부분에 데이터를 주입하는 방식으로 숨기는 것이다.
이를 확인하는 방법은 세션의 엔트로피를 조사하면 되는데, 이 값이 7 이상인 경우 패킹 및 암호화된 것으로 판단한다.
해당 조사는 엔트로피 값을 계산할 수 있는 툴(PEScanner, PE Studio 등)을 사용하여 확인 가능하다.
엔트리 포인트 분석
일반적인 경우, 엔트리 포인트가 첫번째 섹션에 속하며, ".text", ".code"등의 이름을 가진다.
이 섹션 외, 즉 첫번째 섹션에 엔트리포인트가 속하지 않는 경우 악성일 가능성이 높다.
CRC Checksum 값 검사
CRC(Cyclic Redundancy Checking)는 순환중복검사라고도 불리며, 실행 파일을 일정 비트 별로 검사하여 체크섬 값을 계산하기 위해 사용되는 방법이다.
이 방식은 원본 데이터 손실 검사 및 악성코드 탐지 등 다양한 방면으로 사용되는 방식으로, 이를 응용한 'CRC 체크섬 값 비교 방식'은 여러 우회 기법들을 효과적으로 판별하는 방법 중 하나다.
특히 이 방식은 다형성을 가진 악성코드를 검사하는데 효과적인데, 이는 다형성이 높은 악성코드의 특징 때문이다.
다형성이 있는 악성코드는 시그니처 기준이 되는 특정 문자열이나 코드들을 지속적으로 변경하여 자가복제하는 형태인데, 파일 전체의 체크섬 값 변화가 발생하기 때문이다.
따라서 정교하지 않은 악성코드는 변경된 체크섬 값을 실행파일 헤더에 다시 적용시키지 않으면 생성 시점의 체크섬 값과 달라져 곧바로 감지되게 된다.
해당 검사는 PE파일의 Checksum 값을 대조해주는 도구(PEScanner 등)을 사용하여 확인 가능하다.
버전 및 설명 정보 분석
버전 및 설명 정보가 없는 실행 파일의 경우 악성코드일 가능성이 있다.
일반적인 실행 파일은 관리를 위해 리소스 섹션(.rsrc) 내부에 파일의 버전, 벤더, 설명 정보가 포함되어 있다.
악성코드는 실행 파일을 관리할 필요도 없고, 자동화 도구를 이용하여 생성했기 때문에 해당 정보들이 누락되어 있거나 제대로 담겨져 있지 않은 경우가 많다.
물론, 이러한 이유로 반드시 악성코드라고 할 수는 없지만, 해당 정보가 없는 실행파일의 경우 일단 의심 후 확인할 필요가 있다.
해당 검사는 PE파일의 리소스 정보를 보여주는 도구들(CFF Explorer 등)을 사용하여 확인 가능하다.
임포트한 API 목록 분석
악성코드는 기능을 수행하기 위해 운영체제에서 제공하는 API 집합을 사용한다.
따라서, 악성코드가 많이 사용하는 API로 분류된 집합(dangerous API)를 임포트하는 실행파일은 악성일 가능성이 높다.
다만 해당 방식이 단순히 API 함수만을 보고 탐지하는 것이기에, 너무 일반적인 API 함수를 탐지하는 경우 오탐이 발생할 가능성이 높아 주의가 필요하다.
해당 검사는 임포트 정보를 나열해주는 도구들(각종 PE 파일 파싱 도구, IDA 등)을 사용하여 확인 가능하다.
API 해시 사용여부 분석
악성코드는 기능 수행을 위해 운영체제에서 제공한느 API 집합을 사용한다.
상기 설명한 API 목록 기반 분석을 회피하거나, 파일 사이즈를 줄이기 위해 API/라이브러리 함수 문자열의 해시값을 이용하는 방식으로 이를 구현한다.
이 방식을 사용하는 경우, API/라이브러리 함수 문자열이 해시화 되어 있어 문자열로 탐지가 불가능하다.
때문에 해당 방식을 감지하기 위해선, 해시 함수를 이용하여 미리 계산된 API 해시와 일치 여부를 확인한다.
혹은, API 이름이 아닌 API 해시를 이용하여 동적 바인딩을 시도하는 실행 파일은 악성 파일일 가능성이 높다.
해당 검사는 API 해시 패턴 매칭을 이용하여 확인 가능하다.
실행파일 포함 여부
악성코드를 drop하는 악성코드의 경우 내부에 실행파일 자체를 포함하고 있다.
따라서, 내부에 다른 실행파일을 포함하고 있다면 비정상으로 판단 후 확인이 필요하다.
해당 검사는 실행파일 시그니처를 검색하거나, 이미지를 추출해주는 도구들(YARA, PE Carver 등)을 사용하여 확인 가능하다.
배치 스크립트 포함 여부
내부에 배치 스크립트(.BAT)를 포함하고 있는 경우, 악성일 가능성이 높다.
이 배치 스크립트는 전역변수 영역에 정의되어 있거나, 리소스 섹션 내에 임베드 되어 있을 수 있다.
해당 검사는 문자열 분석도구(Strings, IDA 등), 리소스 섹션 내의 내용을 볼 수 있는 도구(CFF Explorer 등)을 사용하여 확인 가능하다.
서명 정보 분석
정상적으로 만들어진 파일은 마이크로소프트 서명 정책("PE Authenticode")에 따라 개발자에 의해 생성된 서명정보가 임베드 되어 있다.
해당 서명정보는 PKCS#7을 기반으로 하는 공개키 기반 구조를 가지며, 윈도우 운영체제는 해당 자료구조에 따라 신뢰성을 검증하여 실행여부를 결정한다.
악성 실행파일은 개발자의 서명정보가 없을 가능성이 높으며, 이런 이유로 서명 정보가 없다면 악성 실행파일임을 의심할 수 있다.
해당 검사는 서명정보 분석 도구(Sysinternals Suites의 sigcheck 등)를 사용하여 확인 가능하다.
PE 파일의 악성 및 비정상 여부 식별 실습
해당 과정은 KISA에서 파일을 제공받아 실습을 진행하였다.
일단, 가장 간단하게 확인할 수 있는 서명정보를 확인해본다.
서명 정보가 없는 파일은 의심할 수 있는 파일이다.
Sigcheck를 확인하여 서명 정보를 확인하면 다양한 파일들의 서명 정보가 나온다.
서명 정보의 유무는 Verified 필드를 보면 된다.
서명 정보가 없는 파일은 Unsigned로 되어있으나, 확실하게 서명된 파일은 Signed로 되어있는 것을 확인할 수 있다.
확인 결과, malware로 시작하는 10개의 파일 전부 서명이 되어 있지 않은 것을 확인할 수 있다.
다음 확인은 엔트리 포인트를 분석한다.
분석에는 StudPE 프로그램을 사용하여 정상 및 악성 파일을 확인한다.
그 갯수가 많기에, 정상 파일과 비정상 파일을 하나씩 비교해본다.
위는 일반 계산기 프로그램, 아래는 악성 프로그램을 StudPE 프로그램으로 실행시킨 것이다.
StudPE 프로그램의 섹션 탭을 확인하면, 엔트리 포인트와 섹션을 확인할 수 있다.
정상 프로그램의 섹션은 .text로 시작하여 정상적인 섹션 타입을 보이는 반면,
악성 프로그램의 섹션은 UPX1로 시작하여 비정상적인 섹션 타입을 보인다.
다음으로는 임포트한 API 목록을 분석한다.
해당 분석에는 PE Studio 툴을 이용하여 악성 파일을 열람해본다.
PE Studio를 이용하여 파일을 분석하면 정말 다양한 결과를 알려준다.
여기서, libraries 탭을 확인하면 참조하고 있는 dll 파일의 목록을 보여준다.
또, imports 탭을 확인하면 사용하고 있는 API 목록을 보여준다.
PE Studio를 확인하면, 악성 행위에서 많이 사용하는 참조 목록을 flag로 표시해주는것을 확인할 수 있으며, 이를 통해 의심 여부를 판단한 수 있다.
API 해시 사용여부 또한 분석해본다.
이 분석에는 유용한 시그니처 검색 도구인 YARA를 사용한다.
원할한 테스트를 위해, 악성 프로그램이 많이 사용하는 ROR13 알고리즘으로만 검색한다.
그럼 이렇게 API 해시에 매칭된 패턴이 상당 수 발견되는 것을 확인할 수 있다.
마지막으로 실행파일 포함 여부를 확인해본다.
해당 분석에는 CFF Explorer툴을 사용하여 악성 파일을 열람할 것이다.
CFF Explorer 툴의 Resource Editor 탭을 확인하면 숨어있는 악성 파일을 열람할 수 있다.
해당 내용을 확인하면, 실행 파일의 시그니처인 MZ로 시작하는 것을 확인할 수 있다.
따라서 이 파일은 의도적인 파일 삽입이 있으며, 더욱 자세한 내용을 분석하려면 해당 내용을 복사 후 프로그램으로 다시 만들어 분석해야한다.
'KISA 사이버 보안 훈련 > 멀웨어 식별' 카테고리의 다른 글
PE 파일 개론 (0) | 2024.07.23 |
---|---|
악성 오피스 문서 식별 (0) | 2024.07.23 |
악성 문서파일의 구성요소와 포맷 (0) | 2024.07.22 |
프로세스 이상징후 분석 (시나리오 3) (0) | 2024.07.22 |
프로세스 이상징후 분석 (시나리오 2) (0) | 2024.07.22 |