정적분석

Sirius·2023년 10월 15일
post-thumbnail

1. 기초정적분석

악성코드 분석시 가장 먼저 진행(악성코드 연구의 시작단계)
->exe파일 분석하고 어떻게 동작하는지 파악
프로그램의 기능을 파악하기 위해 코드나 프로그램의 구조를 분석(프로그램을 실행시키지않는다.)

2. 분석방법

악성여부를 판단하는 안티바이러스 도구를 사용한다.(VT 자동분석도구)
악성코드 판별 해시 사용
파일의 문자열, 함수, 헤더에서 대략적인 내용확인

3. 해시값추출

악성코드의 지문 확인
해시를 이름으로 사용
악성코드 식별을 위해 해시 공유
식별여부를 위해 해시 검색

4. 기초정적분석도구

1) 문자열검색
exe파일들이 hex코드로 되어있음 -> 이거를 읽기 편하기위해 16진수로 표현함
그러면 그 안에서 문자열들이 있을 것이고 IAT를 배웠고 거기 API함수들 중에서도 이 exe파일안에서는 문자열들임
-> url이나 도메인이 문자열 형태로 저장되어있을것이다.(밑의 2, 3, 4 확인가능)
2) 프로그램 메시지 출력
3) URL 접속
4) 특정위치로 파일 복사

import hash는 유사성 체크를 할떄 사용하는 해시값이다.
여기부분만 바뀌었다고하면 비슷하게 나옴, 해시값이 단위별로 측정하여서 한자만 틀려도 뒷블록 해시값만 바뀐다.
b라는애가 a를 조금 변형된 악성코드라면(도메인만 바뀌거나)
이러면 유사성을 확인해볼 필요성이 있다.

import에는 API에서 사용하는 함수들이 들어있다 반면 strings는 조금 다름 근데 import address table에 있는것이 같이 있다.
아래쪽으로내리면 조금조금 문자열들이 보인다.
MalService만 봐도 해석가능한 문자열들이 있다.

즉 문자열 정보로 어떤 행동을 하는지 얼추 판단할 수 있다.

  • 추가로 업체를 통해서 알 수 있는 방법도 있다.
    ex> 바이러스 토탈

5. 패킹(Packing)

패킹의 여부를 확인하고 언패킹하여 리버싱을 보다 쉽게 하기 위한 단계

패킹: 기존의 파일들을 다 압축함
그러다보면 주소값이나 데이터의 크기들이 변경됨
자기들만의 압축기법 사용하다보니 문자열 정보들이 깨진다.
ZIP파일 형태랑 비슷함
나중에 이거 압축해제하면 정상적인 파일들이 나온다.

메모리 공간에 올라갈때는 언패킹해서 올라감
원본파일이 메모리 공간어디 공간에는 있다.
그래서 Unpackingstub은 오리지널코드의 시작은 어디인가를 알려줌
그래서 시작 원본파일 찾으면 동작됨
압축율은 안좋은데 코드가 더해지고 파일크기가 커지는 경우가 있다.
패킹을 더욱 강력하게 하다보니 코드들이 많아지고 크기가 커질때도있다.(패킹기법에 따라 다르다.)

패킹은 개발자 입장에서 저작권 보호하다보니 생긴것이다.(리버싱못하게), 자바도 패킹기법있다.

패킹하면 ImportAddressTable이나 String정보들이 감춰진다.

EP 엔트리포인트: 코드를 가리키는 부분
시작점이 UPX압축된 부분이다.


압축이 되어있지 않은 경우는 뭐로 만들어졌는지 정보가 나온다.(C++)

  • UPX 툴 사용
    기존거에 덮어씌어질 수 있기 때문에 분석대상을 복사해서 오리지널을 만든다.
    ex> a_original.exe
  1. UPX폴더에 분석하고자하는 파일 넣는다. 그리고 경로 복사한다.

  2. 복사한 경로로 이동한다(cd), 그후 upx 명령어 쳐본다.

  1. upx -d <파일>
    분석시작(압축해제)기존거에 덮어씌워짐

    파일 사이즈가 줄어들었다는 것을 볼 수 있다.

  2. 이제 다시분석시작(PEStudio)

    다 풀려있다.


ImportAddressTable보면, 안보였던 정보들이 보이기 시작한다...

6. DLL 의존성 확인과 리소스 파일 분석

DLL파일을 가지고와서 사용한다.(윈도우 운영체제, 개발자추가)
DLL파일은 함수의 모음이다. -> 이거보고 악성코드가 어떤 기능을 하는지 파악가능하다.

exe파일 분석하고 있음
(DLL파일들을 가지고옴, 리소스파일, 설정파일)

depends22 x86 툴 사용

1. 어떤 DLL파일들을 의존하고 있느냐(왼쪽 빨간박스)

  1. 여기서 사용하고있는 function들(오른쪽 빨간박스)
    C라고 녹색으로 표기되어있는것이 참조해서 가져와서 사용한다.

1. DLL 의존성 조사

1) Kernel32.dll : 메모리, 파일, 하드웨어 접근과 조작
2) Advapi32.dll : 서비스 관리자, 레지스터 같은 추가 윈도우 핵심 컴포넌트
3) User32.dll : 유저인터페이스 (버튼 스크롤바, 사용자 행위 제어, 컴포넌트) -> 광고프로그램
4) Gdi32.dll : 그래픽 보기 및 조작 -> 광고프로그램
5) Ntdll.dll : 윈도우 커널 인터페이스
6) WS2_32.dll : 윈도우 소켓 네트워크 -> 네트워크(외부와 통신)
7) Wininet.dll: FTP, HTTP, NTP와 같은 상위 수준 프로토콜 구현 -> 네트워크(외부와 통신)

2. 리소스 영역 확인(리소스 안에 악성코드 심어짐)

1) 리소스 해커 사용
-> 노트패드 분석
악성코드는 똑똑함
1. 인터넷에서 악성코드라 생각하는거 받아서 실행할 수도 있음
실제악성코드는 작고 자기가 다운받는 경우도 있음(다운로드형)

  1. 아니면 프로그램 실행시키면 리소스 파일 어딘가에 exe파일 감춰놓음(드롭형)
    떨어지듯이 exe파일이 어디선가 나타난다.(다운로드는 아님)

PE스튜디오로 분석(0104파일)

SizeofResource, FindResourceA, LoadResourceA -> 리소스 사용하고 있다.
그런데 exe파일이고 작은사이즈인데 리소스 많이 사용한다...?

또한 Bin파일은 resources(executable)안에 있는 폴더명이다.
쭉 보면 그리고 헤더정보가 MZ라고 떠있다.

여기서 dump를 한다.(bin이라는 이름으로 같은 경로에 저장)

다시 리소스해커로 본다.(0104)
봐보면 아이콘이나 그런거없다.
일부러 다른 프로그램에다가 리소스 파일 숨겨놓으면 아이콘 보면 뭐가 있다.

PE스튜디오에서 이 Bin파일 분석하고 싶으면 이거를 똑같이 덤프 뜨면 된다.
Save Resource to a *.binfile 기능 사용

자 다시 아까 dump뜬 파일 다시 PEstudio로 분석한다.
1. libraries 보면 urlmon.dll이라는 파일 있다.

딱봐도 url 정보 모니터

  1. imports 보면 url모티너는 URLDownoadToFileA를 사용한다.

  2. GetWindowsDirectoryA: 윈도우즈 디렉터리 정보들을 가지고옴
    2.URLDownoadToFileA : url다운로드를 임의로 파일을 가져왔는데

  3. GetTempPathA : 그거를 temp라는 파일의 정보를 또 가지고옴

  4. WinExec: WinExec는 내가뭔가 다운로드 받은거나 자기가 가지고있는 exe파일을 실행한다.

  5. 마지막으로 strings 분석하면,

    updater.exe파일을 다운로드 받는 것을 볼 수 있다.

2) 아이콘 섹션
3) 메뉴 섹션
4) 대화상자 섹션
5) 문자열 테이블
6) 버전정보 세션

정리: 리소스 파일에 exe파일이 포함되어있다.(1. 드롭형) exe파일 분석해보니 URL 주소를 이용해 exe 다운로드하는 것을 확인했다.(2. 다운로드형)

즉 드로퍼하고 다운로드형태가 섞어져 있다. 그런 악성코드였다(0104)

0개의 댓글