볞묞 바로가Ʞ

SWUFORCE/악성윔드

[악성윔드 분석 시작하Ʞ] 2장_정적 분석

핎당 도서의 2장_정적 분석(53p-103p) 정늬

 


정적분석(Static analysis)읎란?

- 의심슀러욎 파음을 싀행하지 않고 분석하는 Ʞ법

- 의심슀러욎 바읎너늬에서 유용한 정볎 추출핎 얎떻게 분류/분석할지와 읎후 분석의 쎈점 얎디에 둘지 결정하Ʞ 위한 쎈Ʞ 분석 방법

 

핎당 장에서는 파음에 대한 닀양한 정볎륌 발견할 수 있는 여러 Ʞ법을 섀명핚.

몚든 방법을 따륌 필요는 없윌며, 순서륌 지킬 필요도 없닀.

 


1. 파음 유형 파악

분석할 때 의심슀러욎 바읎너늬의 파음 유형을 구분하는 것은 악성윔드의 목표 욎영 시슀템곌 아킀텍처 식별에 도움읎 된닀. 

공격자는 유저가 핎당 파음을 싀행하도록 하Ʞ 위핎 파음 확장자륌 수정하거나 왞형을 바꿈.

→ 파음 확장자 대신 파음 시귞니처(File signature)륌 읎용핎 파음 유형을 구분할 수 있닀. 

*파음 시귞니처: 파음 헀더에 작성되는 바읎튞의 독특한 ë°°ì—Ž 순서

 

1-1. 수작업을 통한 파음 유형 식별

헥사 펞집Ʞ(hex editor)로 파음을 ì—Žì–Ž 파음 시귞니처륌 찟을 수 있닀.

*헥사 펞집Ʞ: 파음의 각 바읎튞륌 ꎀ찰할 수 있는 도구. 파음 분석에 도움을 죌는 여러 Ʞ능을 제공 (ex. HxD)

 

늬눅슀에서 xxd 명령얎륌 사용한 화멎. 위와 같읎 헥사 덀프륌 생성핚

늬눅슀에서 파음 시귞니처륌 찟고자 한닀멎 xxd 명령얎륌 사용할 수 있닀.

 

1-2. 도구륌 읎용한 파음 유형 식별

늬눅슀 시슀템에서는 file 유틞늬티륌 읎용핎 파음을 식별할 수 있음.

file 명령얎륌 두 개의 닀륞 파음에 싀행한 예시.

첫 번짞 파음(mini)에 확장자가 없음에도 32비튞 싀행 파음(PE32)띌는 것을 볎여쀌.

두 번짞 파음(notepad.exe)은 64비튞(PE32+)띌는 사싀을 볎여쀌.

 

윈도우에서는 익슀플로러 슀위튞에 포핚된 CFF Explorer륌 읎용핎 파음 유형을 구분할 수 있음.

파음 유형을 구분하는 것에만 제한되지 않고 싀행 파음(32비튞와 64비튞)을 조사하거나 PE 낎부 구조 검사하고 필드 수정하거나 늬소슀 추출 가능. 

 

1-3. 파읎썬을 읎용한 파음 유형 구분

파읎썬에서 python-magic 몚듈을 읎용핎 파음 유형을 구분할 수 있음.

윈도우에 python-magic 몚듈 섀치하렀멎 http://github.com/ahupp/python-magic에 섀명된 절찚 따륎멎 된닀. 

 

python-magic 섀치 시, 슀크늜튞에 포핚된 위 명령얎 읎용핎 파음 유형 구분 가능

 

만앜 워드 묞서처럌 볎읎Ʞ 위핎 확장자륌 .exe에서 .doc.exe로 변겜한 파음의 겜우,

'윈도우 폮더 볎Ʞ 옵션'에서 Ʞ볞적윌로 활성화된 '알렀진 파음 유형의 확장자 숚ꞰꞰ'륌 ì•…ìš©í•š.

→ CFF Explorer에서 파음을 ì—Žë©Ž 위와 같읎 핎당 파음읎 32비튞 싀행 파음도, 워드 파음도 아니란 사싀읎 드러낚.

 

2. 악성윔드 식별

식별(Fingerprinting)하Ʞ: 의심슀러욎 바읎너늬의 낎용을 바탕윌로 암혞 í•Žì‹œ 값을 생성하는 활동을 포핚.

MD5, SHA1, SHA256 등의 암혞 í•Žì‹œ 알고늬슘은 악성윔드 샘플의 파음 핎시륌 생성할 때 사싀상 표쀀윌로 생각됚. 

 

파음명(위조 가능) Ʞ쀀윌로 악성윔드 샘플 식별하는 대신, 파음 낎용에 Ʞ반핎 생성된 암혞 í•Žì‹œ(유음한 식별자)로 파음을 구분 가능

악성윔드 샘플의 암혞 핎시는 새롭게 드롭/복사된 샘플읎 원볞 샘플곌 동음한지 여부 식별 가능

파음 핎시는 악성윔드 샘플읎 옚띌읞 또는 닀쀑 백신 슀캐닝 서비슀의 데읎터베읎슀륌 검색핎 읎전에 탐지된 적 있는지륌 판당할 때 사용

 

2-1. 도구륌 읎용한 암혞 í•Žì‹œ 생성

늬눅슀에서는 md5sum, sha256sum, sha1sum 도구륌 읎용핎 파음 í•Žì‹œ 생성 가능.

늬눅슀에서의 파음 í•Žì‹œ 생성

 

윈도우용 파음 í•Žì‹œ 생성 도구는 옚띌읞에서 닀양하게 발견 가능.

 

 

2-2. 파읎썬에서 암혞 í•Žì‹œ 파악

파읎썬에서는 hashlib 몚듈을 사용핎 파음 핎시륌 생성할 수 있닀.

 

 

 

3. 닀쀑 백신 슀캐닝

의심슀러욎 바읎너늬륌 닀쀑 백신 슀캐너로 슀캐닝하멎 의심슀러욎 파음에 악성윔드 시귞니처가 졎재하는지 확읞 가능

특정 파음의 시귞니처 읎늄 통핎 파음곌 ê·ž Ʞ능에 대한 추가 정볎 얻을 수 있음

 

3-1. 바읎러슀토턞을 읎용한 의심 바읎너늬 슀캐닝

바읎러슀토턞: 웹 êž°ë°˜ 악성윔드 슀캐닝 서비슀. 파음 업로드하멎 닀양한 백신 슀캐너로 슀캐닝하고 결곌륌 볎여쀌

바읎러슀토턞 데읎터 집합을 Ʞ반윌로 구축한 바읎러슀토턞 귞래프(등록한 파음곌 도메읞, IP 죌소, URL곌 같은 ꎀ렚 지표 사읎의 ꎀ계 시각화 가능) Ʞ능도 제공핚.

 

악성윔드 바읎너늬에 대핮 탐지한 읎늄을 볎여죌며

67개 백신 엔진윌로 바읎너늬륌 슀캔했음을 볎여쀌. 

 

3-2. 바읎러슀토턞 공개 API륌 읎용한 í•Žì‹œ 값 질의

바읎러슀토턞은 공개 API륌 통핎 슀크늜튞 작성할 수 있는 Ʞ능도 제공.

파음 등록 자동화, 파음/URL 슀캔 늬포튞 검색, 도메읞/IP 늬포튞 검색을 제공.

 

파읎썬 바읎러슀토턞 공개 API륌 볎여죌는 파읎썬 슀크늜튞.

입력값윌로 핎시값을 받아 바읎러슀토턞 데읎터베읎슀륌 질의.

 

닀륞 방법윌로는 pestudio 또는 PPEE 같은 PE 분석 도구가 있음.

바읎너늬 로딩하멎 바읎너늬의 í•Žì‹œ 값ㅇ륎 바읎러슀토턞 데읎터베읎슀로 자동 질의 후 결곌륌 볎여쀌. 

 

4. 묞자엎 추출

묞자엎(String): 파음에 포핚된 출력 가능한 ASCII와 유니윔드의 순찚적읞 묞자 집합.

묞자엎 추출은 프로귞랚 Ʞ능곌 의심 바읎너늬 ꎀ렚 지표에 대한 닚서륌 제공. 

 

4-1. 도구륌 읎용한 묞자엎 추출

늬눅슀 시슀템에서 strings 유틞늬티륌 사용할 수 있음.

strings 명령얎는 Ʞ볞적윌로 최소 4묞자 읎상의 ASCII 묞자엎을 추출핚.

-a 옵션을 읎용하멎 전첎 파음에서 묞자엎 추출 가능. 

 

바읎너늬에서 유용한 정볎륌 얻윌렀멎 ASCII와 유니윔드 묞자엎 몚두륌 추출핎알 핹. 

strings 명령얎륌 읎용한 유니윔드 추출은 -el 옵션을 사용하멎 됚. 

 

윈도우 환겜에서는 ASCII와 유니윔드 묞자엎 몚두륌 표현핮 죌는 pestudio띌는 도구 읎용 가능. 

 

4-2. FLOSS륌 읎용한 난독화된 묞자엎 디윔딩

대부분의 겜우 악성윔드 제작자는 탐지 회플하고자 ê°„ë‹ší•œ 묞자엎 난독화 Ʞ법을 사용.

난독화된 묞자엎은 strings 유틞늬티와 닀륞 추출도구륌 읎용핎 추출읎 불가능.

 

FLOSS(FireEye Labs Obfuscated String Solver): 악성윔드에서 난독화된 묞자엎 자동윌로 추출하고 식별하고자 디자읞된 도구. 

 

5. 파음 난독화 파악

악성윔드 제작자는 난독화륌 통핎 악성윔드 낎부의 동작을 볎안 연구자, 악성윔드 분석가, 늬버슀 엔지니얎로부터 볎혞. 

난독화 Ʞ술은 바읎너늬륌 탐지/분석하Ʞ 얎렵게 하Ʞ 때묞에 추출할 수 있는 묞자엎은 별로 되지 않윌며 묞자엎 대부분 몚혞.

백신곌 같은 볎안 제품의 탐지 회플하고자 팚컀(Packer)와 크늜터(Cryptor) 같은 프로귞랚 자죌 사용.

 

5-1. 팚컀와 크늜터 

팚컀: 싀행 파음을 입력윌로 받아 싀행 파음의 낎용을 압축핎 난독화하는 프로귞랚.

크늜터: 팚컀와 유사하지만, 싀행 파음의 ë‚Žìš© 난독화하고자 압축 대신 암혞화륌 사용. 

 

5-2. Exeinfo PE륌 읎용한 파음 난독화 탐지

정상적읞 싀행 파음 대부분은 파음 낎용을 난독화하지 않지만, 음부는 자Ʞ듀의 윔드 조사하지 못하도록 난독화 하Ʞ도 핹.

팚킹한 샘플 발견한닀멎 악성윔드음 확률 높음.

 

윈도우에서 팚컀 탐지하고자 Exeinfo PE와 같은 묎료 도구륌 사용할 수 있음.

팚컀 또는 크늜터 탐지 가능, 샘플의 얞팚킹 방법에 대한 정볎/찞고정볎륌 제공핚

 

6. PE 헀더 정볎 조사

윈도우 싀행 파음은 PE/COFF륌 반드시 쀀수핎알 핹.

PE 파음 포맷은 윈도우 싀행 파음읎 사용하며, 읎러한 파음을 PE(Portable Excutable) 파음읎띌고 부늄. 

PE 파음은 욎영 시슀템읎 메몚늬로 로딩할 때 필요한 정볎륌 가진 음렚의 구조첎와 하위 컎포넌튞임. 

 

싀행 파음을 컎파음하멎 핎당 구조첎륌 섀명하는 헀더(PE 헀더)륌 포핚.

바읎너늬 싀행하멎 욎영 시슀템 로더는 PE 헀더에서 구조첎 정볎 읜은 후 바읎너늬 ë‚Žìš© 파음에서 읜얎 메몚늬로 로딩.

PE 헀더: 싀행 파음읎 메몚늬 얎디에 로딩되얎알 할지, 싀행 파음의 시작읎 얎딘지, 애플늬쌀읎션읎 의졎하는 띌읎람러늬/핚수 목록, 바읎너늬가 사용하는 늬소슀 등의 정볎륌 포핚.

 

PE 구조와 하위 컎포넌튞 검사/수정할 수 있는 도구듀:

  • CFF Explorer
  • PE Internals
  • PPEE
  • PEBrowseProfessional

 

6-1. 파음 의졎성곌 임포튞 조사

음반적읞 악성윔드는 파음, 레지슀튞늬, 넀튞워크 등곌 상혞작용.

상혞작용 수행하고자 악성윔드는 욎영 시슀템에서 제공하는 핚수에 많읎 의졎.

 

윈도우는 API(Application Programming Interface)로 불늬는 핚수륌 임포튞하고 있음, 상혞작용 위핎선 DDL(Dynamic Link Library) 파음읎 필요.

싀행 파음은 음반적윌로 닀륞 Ʞ능 제공하는 닀양한 DLL에서 읎런 핚수 임포튞하거나 혞출

 

악성윔드가 의졎 쀑읞 DLL곌, DLL읎 임포튞하고 있는 API 핚수 조사하멎 악성윔드의 Ʞ능, 성능, 싀행 쀑 예상할 수 있는 Ʞ능 알 수 있음.

윈도우 싀행 파음의 파음 의졎성은 PE 파음 구조의 임포튞 테읎랔에 저장됚. 

 

악성윔드 Ʞ능 파악하는 것 왞에도 임포튞는 악성윔드 샘플의 난독화 여부 탐지에 도움을 쀌. 

 

6-2. 익슀포튞 조사

싀행 파음곌 DLL은 닀륞 프로귞랚에서 사용할 수 있는 핚수륌 익슀포튞(export) 할 수 있음.

음반적윌로 DLL은 싀행 파음읎 임포튞할 수 있는 핚수(익슀포튞)륌 녞출.

DLL은 당독 싀행 불가 → 혞슀튞 프로섞슀 통핎 싀행

공격자는 악의적 핚수 익슀포튞하는 DLL을 자죌 생성핚.

DLL 역시 닀륞 띌읎람러늬(DLL)에서 핚수 임포튞핎 시슀템 연산 수행 가능.

 

파읎썬에서 peflie 몚듈 읎용핎 익슀포튞 핚수 나엎 가능. 

 

6-3. PE 섹션 테읎랔곌 섹션 조사

PE 파음의 싀제 낎용은 섹션(section)윌로 구분.

섹션은 PE 헀더 바로 닀음에 졎재핚. 

섹션은 윔드 또는 데읎터 나타낎며, 읜Ʞ/쓰Ʞ와 같은 메몚늬 낎부 속성을 가짐.

 

PE 파음의 공통 섹션 음부:

 

섹션명은 사람을 위한 것윌로 욎영 시슀템에서는 사용 X

→ 공격자 또는 난독화 소프튞웚얎가 섹션명을 닀륞 읎늄윌로 변겜 가능하닀는 의믞.

 

섹션에 대한 정볎(섹션명, 섹션 위치, 특징)는 PE 헀더에 있는 섹션 테읎랔에 졎재.

섹션 테읎랔 조사하멎 섹션곌 섹션의 특징 정볎 얻을 수 있음.

 

pestudio에 싀행 파음 로드 시 sections 큎늭하멎 섹션 테읎랔에서 추출한 섹션 정볎와 ê·ž 속성을 표시.

필드 섀명
읎늄(Names) 섹션명을 표시
가상-크Ʞ(Virtual-Size) 메몚늬 로딩할 때 섹션의 크Ʞ 나타냄
가상-죌소(Virtual-Address) 섹션을 메몚늬 얎디에서 찟을 수 있는지 나타낮는 상대적 가상 죌소
원시-크Ʞ(Raw-size) 핎당 섹션읎 디슀크에 졎재할 때의 크Ʞ 나타냄
원시-데읎터(Raw-data) 파음에서 핎당 섹션 찟을 수 있는 였프셋
엔튞늬 포읞튞(Entry-point) 윔드가 싀행 시작하는 RVA(Relative Virtual Address, 상대적 가상 죌소).

 

섹션 테읎랔 검사는 PE 파음의 읎상 식별하는 데 도움을 쀌. 

 

위 파읎썬 슀크늜튞는 pefile 몚듈을 통핎 섹션곌 섹션의 특징 볎여쀌.

 

6-4. 컎파음 타임슀탬프 조사

PE 헀더는 바읎너늬가 컎파음될 때 생성되는 정볎륌 포핚.

읎 필드 조사하멎 악성 윔드가 ì–žì œ 처음 생성됐는지 알 수 있얎서, 공격 활동의 타임띌읞 작성할 때 도움을 쀌.

공격자가 싀제 타임슀탬프 알 수 없도록 타임슀탬프 수정핎버늎 수도 있음.

 

위 파읎썬 명령얎 사용핎 컎파음 타임슀탬프륌 알 수 있음.

 

6-5. PE 늬소슀 조사

아읎윘, 메뉎, 대화상자, 묞자엎 등 싀행 파음에 필요한 늬소슀는 싀행 파음의 늬소슀 섹션(.rsrc)에 저장.

때때로 공격자는 추가 바읎너늬, 믞끌(decoy) 묞서, 섀정 데읎터 등의 정볎륌 늬소슀 섹션에 저장핚.

늬소슀 섹션은 귌원지, 회사명, 프로귞랚 제작자 섞부 정볎, 저작권 ꎀ렚 정볎 녞출할 수 있는 버전 정볎도 포핚

 

늬소슀 핎컀: 의심 바읎너늬에서 늬소슀 조사하고 확읞 후 추출할 수 있는 도구

 

7. 악성윔드 비교와 분류

의심 바읎너늬륌 읎전 분석 샘플 또는 공개/사섀 저장소에 저장된 샘플곌 비교 시 악성윔드군, 악성윔드의 특징, 읎전 분석 샘플곌의 유사성 파악 가능. 

 

7-1. 퍌지 핎싱을 읎용한 악성윔드 분류

퍌지 핎싱(fuzzy hashing)은 파음 유사도륌 비교하는 방법.

 

ssdeep: 샘플에 대한 퍌지 핎시륌 생성하는 도구. 샘플 간의 유사성 비윚 파악하는 데 도움을 쀌. 

의심 바읎너늬와 저장소의 샘플듀 비교핎 유사한 샘플 식별에 유용, 동음한 악성윔드군 또는 동음 공격자 귞룹에 속하는 샘플 식별에 도움을 쀀닀.

 

늬눅슀 VM에 ssdeep을 섀치 후 아래 명령얎륌 싀행하멎 샘플의 퍌지 핎시륌 확읞 가능. 

 

ssdeep에 있는 상섞 음치 몚드(-p 옵션) 사용핎 유사도륌 알 수 있음.

 

7-2. 임포튞 핎시륌 읎용한 악성윔드 분류

임포튞 핎싱(import hashing)은 연ꎀ성 있는 샘플곌 동음한 공격자 귞룹에서 사용한 샘플을 식별하는 데 사용할 수 있는 닀륞 Ʞ술. 

임포튞 í•Žì‹œ(imphash)는 싀행 파음에 있는 띌읎람러늬/임포튞 핚수명곌 특유의 순서륌 바탕윌로 í•Žì‹œ 값을 계산하는 Ʞ술.

동음한 소슀, 방식윌로 파음 컎파음할 겜우 핎당 파음은 동음한 임포튞 핎시값을 갖는 겜향읎 있음. 

 

pestudio로 싀행 파음 로드하멎 imphash륌 생성. 

 

파읎썬에서는 위와 같읎 peflie 몚듈 읎용핎 imphash 생성 가능. 

 

7-3. 섹션 핎시륌 읎용한 악성윔드 분류

임포튞 핎시와 유사하게 섹션 핎싱(section hashing)도 ꎀ렚 샘플 식별하는 데 도움을 쀄 수 있음. 

 

싀행 파음을 pestudio에 로드하멎 각 섹션(.text, .data, .rdata 등)의 MD5륌 계산.

 

파읎썬에서는 위와 같읎 pefile 몚듈 읎용핎 섹션 í•Žì‹œ 구할 수 있음. 

 

7-4. YARA륌 읎용한 악성윔드 분류

YARA: 악성윔드륌 식별하고 분류하는 강력한 도구. 

악성윔드 연구자는 악성윔드 샘플에 포핚된 텍슀튞 또는 바읎너늬 정볎륌 Ʞ반핎 YARA 규칙을 생성할 수 있음.

읎 규칙은 로직을 결정하는 묞자엎곌 부욞 표현식의 집합윌로 구성됚.

YARA 규칙 작성하멎 YARA 유틞늬티 또는 yara-python 사용핎 작성한 도구로 파음 슀캐닝할 때 핎당 규칙 읎용 가능. 

 

YARA 규칙은 음반 텍슀튞 펞집Ʞ 읎용핎서도 작성 가능.

YARA 규칙의 컎포넌튞:

  • 규칙 식별자
    • 규칙을 섀명하는 읎늄.
    • 규칙 식별자는 영묞자, 숫자, 밑쀄 표현 가능하지만 첫 묞자로 숫자륌 사용할 수 업음.
    • 대소묞자륌 구분하고 128자 쎈곌할 수 없음.
  • 묞자엎 정의
    • 규칙의 음부읞 묞자엎읎 정의되는 섹션.
    • 규칙읎 묞자엎에 의졎하지 않을 겜우 생략 가능.
    • 각 묞자엎은 연속된 영묞자, 숫자, 밑쀄읎 뒀따륎는 $ 묞자로 구성된 식별자륌 가짐. 
  • 조걎 섹션
    • 규칙의 로직읎 위치하는 ê³³.
    • 규칙읎 음치하거나 음치하지 않는 조걎 지정하는 부욞 표현식 포핚핎알 핹.

규칙 쀀비 읎후에는 yara 유틞늬티 사용핎 규칙에 따띌 파음 슀캔핎알 핹. 

 

YARA는 몚든 파음의 팚턎을 감지하는 데 사용 가능. 

알렀진 샘플의 저장소륌 슀캔하는 YARA 규칙 생성하멎 동음한 특성 가진 샘플을 식별/분류 가능핚.