1. 섹션의 엔트로피 분석
PE 악성코드는 악성코드 분석가의 분석을 회피하기 위해 파일 데이터를 압축, 패킹, 인코딩, 암호화등을 수행한다. 이러한 과정을 수행했을 때 엔트로피 값이 증가하게 되고, 악성코드 분석가는 각 섹션들의 엔트로피 값이 7 이상이면, 악성코드로 판단할 수 있다.
2. 엔트리 포인트 분석
일반적인 PE 실행파일은 엔트리포인트(EP)에서 .text, .code등의 문자열을 확인할 수 있다. 하지만 악성코드들은 패킹을 하기 때문에 엔트리포인트에 패커와 관련된 문자열인. upx0 같은 형태를 확인할 수 있다.
실습
Stud_PE로 확인하였을떄, 엔트리포인트(EP)가. text인 것을 통해서 정상적인 파일인 것을 확인할 수 있다.
비정상적인 파일은 엔트리포인트(EP)가 UPX1임을 통해 UPX 패커로 패킹되어 있는 악성코드로 의심해 볼 수 있다.
3. CRC Checksum 값 검사
polymorphic 악성코드들은 특정 문자열이나 코드들을 지속적으로 변경하여 자가복제하는 특성을 가지는데, 파일 내에 내장되어 있는 CRC Checksum값과 파일의 CRC Checksum 값이 불일치하는 경우가 발생한다. 이를 통해 악성코드로 의심해 볼 수 있다.
4. 버전 및 설명 정보 분석
악성코드는 정상적인 개발 프로그램과 달리 허술하게 개발된다. 따라서 리소스 섹션에 버전 및 설명 정보를 확인하면 정보가 누락되는 것을 통해 악성코드로 의심해 볼 수 있다.
실습
sigcheck를 통해서 확인하였을때 악성 파일들은 리소스 정보가 전체 또는 일부가 누락되어 있음을 확인할 수 있다.
정상파일들은 리소스정보가 누락없이 작성되어 있다.
5. 임포트 API 목록 분석
악성코드는 악성행위를 위해 일반적인 파일들이 사용하지 않는 API를 사용한다. 따라서 PE 파일의 임포트 API 목록을 분석하면, 악성코드를 판단할 수 있다.
실습
PEstudio를 사용하면, 임포트 된 API의 악성여부를 분석하여 정보를 제공해 준다. WININET.dll은 group이 network로 네트워크 행위를 하는 라이브러리로 보인다.
flag값을 통해 악성으로 의심할 수 있으며, 해당 API가 WININET과 연관이 있음을 알 수 있다.
6. API 해시 사용여부 분석
공격자는 임포트 API 목록을 통해서 악성코드를 탐지하는 것을 회피하기 위해 API를 해시화 하여 사용한다. 이를 분석하기 위해서는 악성 API값을 해시화한 값을 저장한 파일을 이용하여 API 해시 사용여부를 분석한다. 이러한 방법은 딕셔너리 공격과 매우 유사하다.
실습
Yara규칙을 통해서 해시값과 매칭되는 문자열을 확인할 수 있다.(일부 오탐이 존재할 수 있음)
7. 실행파일 포함 여부
공격자는 악성여부를 회피하기 위해서 실행파일 안에 또 다른 실행파일을 포함하는 방법을 사용한다. 이를 확인하기 위해서는 리소스 섹션과 같은 특정 섹션에 실행파일에서 확인되는 MZ 시그니처가 확인되면 악성코드로 의심해 볼 수 있다.
실습
CFF Explorer의 Resource Editor를 통해서 호가인해 볼수 있으며, 해당 섹션에서 PE 파일을 의미하는 MZ 시그니처가 확인되는 것으로 보아 리소스 섹션에 악성 PE파일을 내장하고 있다고 의심해 볼 수 있다.
8. 배치 스크립트 포함 여부
일반적인 PE파일에서 확인할 수 없는 특징인 배치 스크립트가 특정 섹션에 포함되어 있으면, 악성일 가능성이 높다.
9. 서명 정보 분석
정상적인 PE 파일에는 개발자에 이해 생성된 서명정보가 포함되어 있다. 하지만 악성 PE 파일에는 이러한 서명된 인증서가 존재하지 않기 때문에 이를 통해 악성여부를 파악할 수 있다. 이러한 서명 정보를 확인하기 위해서는 sigcheck와 같은 도구를 사용한다.
참고로 MS는 PE 파일을 실행할 때 인증서를 검증(Verify)하고 부적절한 파일에 대해서는 실행하지 않고 경고창을 보여준다.
실습
sigcheck를 통해서 확인하였을 때, 악성파일들을 verified가 Unsigned 되어 있는 것을 볼 수 있다.
정상 파일들은 Signed 되어있는 것을 확인할 수 있다.
참고자료
- [KISA] 호남지역 특별과정_악성 실행파일 분석