파일바이러스 분석 및 치료로직 개발1한정화 (daly25@gmail.com)www.CodeEngn.comCodeEngn ReverseEngineering Conference
순서• 악성프로그램• 파일바이러스• PE 구조• 파일 바이러스 감염 유형• 파일 바이러스 분석 및 치료로직 개발2
악성 프로그램• Trojan• Backdoor• Worm• Spyware• Adware• Virus3
파일(감염형) 바이러스• Trojan• Backdoor• Worm• Spyware• Adware• Virus– Sality– Virut– Parite– Patched– Detnat파일 감염형 바이러스(파일 바이러스)4
악성프로그램 통계Kaspersky Lab - Monthly Malware Statistics, February 20115
파일바이러스란?• 파일 감염형 바이러스• 특징(일반적)– 정상 파일에 기생하여 악의적인 행동을 함– 악성코드 자체로는 실행 수 없음– 실행 가능한 파일들을 감염시킴– 하나의 정상파일이 중복 감염될 수 있음– 숙주 파일이...
감염된 파일 비교• 파일 사이즈 증가감염 전감염 후Virus7
PE Format8
PE 구조 (1)DOS HeaderPE HEADERSECTION HEADERSECTION IMAGEDOS Stub Code…HEADERSECTION9
IMAGE_DOS_HEADERIMAGE_NT_HEADERIMAGE_SECTION HEADERIMAGE_OPTIONAL_HEADERIMAGE_DATA_DIRECTORY.text.data.idata…SECTION IMAGE...
DOS Header11
DOS Header – e_lfanwe12
NT Header13
File Header14
Optional Header15
SECTION HEADER16
Section #1 – “.text”Section #2 – “.data”Section #3 – “.rsrc”HeaderFile Memory0x000000000x000004000x00007C000x000084000x010...
파일 바이러스 감염 유형18
Overwriting 감염형프로그램코드정상 파일악성코드감염된 파일19
Overwriting 감염형프로그램코드악성코드프로그램코드악성코드악성코드악성코드20
Prepending 감염형악성코드프로그램코드감염된 파일악성코드21
Amoeba 감염형프로그램코드악성코드(Head)악성코드(Tail)감염된 파일악성코드(Head)악성코드(Tail)22
Classic 감염형악성코드프로그램코드②①프로그램코드①②정상 파일 감염된 파일악성코드23
Cavity 감염형JMP 프로그램코드프로그램코드악성코드 P정상 파일 감염된 파일24
Cavity 감염형 – 변종프로그램코드프로그램코드정상 파일 감염된 파일JMPEPEP25
Cavity 감염형 – 변종 특징JMP감염된 파일악성코드 조합(Heap)EP26
Appending 감염형JMP 프로그램코드악성코드OJ감염된 파일JMP악성코드OJ27
Section #nAppending 감염형 종류• 악성코드가 마지막 섹션에 덧붙인 경우HeaderSection #1Section #2Section #nVEPHeaderSection #1OEPSection #2Sectio...
Appending 감염형 종류• 악성코드가 섹션으로 덧붙은 경우HeaderSection #1Section #2Section #nSection #n+1VEPHeaderSection #1OEPSection #2Section...
Appending 감염형 종류• 악성코드로 JMP하는 코드가 EP에 패치된 경우HeaderSection #1Section #2Section #nSection#n or #n+1EPHeaderSection #1Section...
Appending 감염형 종류• 악성코드 일부가 EP에 패치된 경우HeaderSection #1Section #2Section #nSection#n or #n+1EPHeaderSection #1Section #2Sect...
파일 바이러스 감염유형 분석및 치료로직 설계32
Sality 분석 및 치료로직 설계33
대상 샘플 정보• 진단명 (VirusTotal)Anti-Virus Virus NameAhnLab-V3 Win32/Sality.SAvast Win32:SalityBitDefender Win32.Sality.LKaspers...
Sality PE 구조Stud PEPEview35
FileMon 툴을 이용한 분석36
파일관련 행위1. 파일 생성QUERY INFORMATION C:Doc…Sality.han.~01 NOT FOUND Attributes: ErrorQUERY INFORMATION C:Doc…Sality.han.~01 SU...
파일관련 행위2. 새로 생성한 파일에 데이터 쓰기WRITE C:Doc…Sality.han.~01 SUCCESS Offset: 0 Length: 65536READ C:Doc…Sality.han.~01 SUCCESS Off...
파일관련 행위3. 정상코드 복구3.1) 복원할 코드 정보ㄱ. FileOffset : 0, Size : 0x62AC(28332)ㄴ. FileOffset : 0x300(768), Size : 2ㄷ. FileOffset : ...
파일 관련 행위 정리1. [파일경로].~01 파일 생성2. 새로 생성한 파일(.~01)에 정상코드 복원3. 정상파일(.~01) 실행4. 실행 완료 후, 생성한파일(.~01) 삭제5. 다른 파일들을 계속 감염시킴40
• UPX 해제 부분악성코드 분석41
악성코드 분석• 새로운 파일 생성파일 생성42
악성코드 분석• 코드 복호화 부분43
악성코드 분석• 코드 복호화44
악성코드 분석• 생성한 파일에 정상코드 복원45
악성코드 분석• 복원된 정상파일46
감염구조프로그램코드 악성코드프로그램코드②①①②정상 파일 감염된 파일47
감염 구조정상1정상1정상2정상파일UPXSalitySality정상1정상2Sality VirusUPXSalitySalitySality Virus48
감염 구조정상1UPXSality정상10x6EAC0x895380x6EACSality정상1정상2 정상2정상파일 Sality VirusOverlay49
Sality 구조 분석UPX Sality• UPX 실행압축 해제– 첫번째 섹션(메모리)에 실행 압축 해제– 압축 해제 후, 해제된 코드(첫번째 섹션)로 JMP 해서 정상파일생성 및 악성코드 실행• 압축 해제 후 악성코드...
Sality 구조 분석정상1• 정상파일 앞부분• 암호화• 정상1 정보– Offset = 정상파일• 원래의 정상파일 뒷부분에 정상1이 덧붙었기 때문– Size = 패치된 UPX Sality 크기(0x6EAC)UPXSali...
치료로직 개발52
정상코드 복구과정1. 전체 복호화 – 복호화 로직 필요– 0 ~ 0x6EAB 까지 복호화(UPX_Sality Size)2. MZ 복구 – 정적 복구– 앞부분 2byte(“MZ”)3. 추가 복호화 – 복호화 로직 필요– ...
전체 복호화54
악성코드 분석• 코드 복호화 부분55
복호 Key 정보56• KeyTableunsigned char KeyTable[0x0A] ={0xF7, 0xD5, 0x28, 0xD3, 0xCD, 0x33, 0xDB, 0xF6, 0x74, 0x21 };• ExtKey=...
복호화 로직(C)for(Cnt = 0; Cnt < CodeSize; Cnt++){if( Cnt == 0){EBX = 0;}else{KeyPoint = (nCnt -1) % KeyTableSize;EBX = KeyTabl...
복호화58• 암호화된 코드• 복호화한 코드
MZ 복구59
MZ 복구60• MZ 복구 로직• 복구된 모습
추가 복호화61
추가 복호화 로직(ASM)62
추가 복호화 로직 정보• 복원할 위치 정보– Offset : 0xBB9– Size : 0x14• 정상코드 정보– Offset : 0x264– Size : 0x14• KeyTable– Offset : 0x2AF– Size...
추가 복호화 로직(C)KeyPoint = 0;for(Cnt = 0; Cnt < CodeSize ; Cnt++){KeyPoint = Cnt % KeyTableSize ;CodeBuff [Cnt] ^= KeyTable[Ke...
추가 복호화한 모습65• 복구된 모습
UPXSality정상파일 복구UPXSalitySality정상1정상2Sality Virus정상1정상1정상2복호화치료완료66
진단 조건 연구67• 복호화한 코드
진단&치료 테스트68
향후 연구 방향• 코드 다형성• 변종• 패킹(실행압축)• 로직에서의 정확한 코드 진단• 파일 바이러스 감염 및 확산 차단69
참고문헌• Peter Szor, The Art of Computer VirusResearch and Defense, 2005.02.2570
Questions?한정화 (daly25@gmail.com)71www.CodeEngn.comCodeEngn ReverseEngineering Conference
Upcoming SlideShare
Loading in...5
×

[2011 CodeEngn Conference 05] daly25 - 파일바이러스 분석 및 치료로직 개발

585

Published on

2011 CodeEngn Conference 05

FileVirus(FV)는 정상파일들을 악성코드로 감염시키기는 감염형 바이러스이다. FV는 일반적인 바이러스 치료방법(삭제)보다는 원래의 정상파일로 복원하여 치료해야한다. 이에 본 발표에서는 치료로직 개발에 필요한 FV 감염구조들에 대해 알아보고, 각 감염구조에 따른 악성코드 분석 및 치료로직 개발 방법에 대해 알아보도록 한다.

http://codeengn.com/conference/05

Published in: Technology, Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
585
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
13
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

[2011 CodeEngn Conference 05] daly25 - 파일바이러스 분석 및 치료로직 개발

  1. 1. 파일바이러스 분석 및 치료로직 개발1한정화 (daly25@gmail.com)www.CodeEngn.comCodeEngn ReverseEngineering Conference
  2. 2. 순서• 악성프로그램• 파일바이러스• PE 구조• 파일 바이러스 감염 유형• 파일 바이러스 분석 및 치료로직 개발2
  3. 3. 악성 프로그램• Trojan• Backdoor• Worm• Spyware• Adware• Virus3
  4. 4. 파일(감염형) 바이러스• Trojan• Backdoor• Worm• Spyware• Adware• Virus– Sality– Virut– Parite– Patched– Detnat파일 감염형 바이러스(파일 바이러스)4
  5. 5. 악성프로그램 통계Kaspersky Lab - Monthly Malware Statistics, February 20115
  6. 6. 파일바이러스란?• 파일 감염형 바이러스• 특징(일반적)– 정상 파일에 기생하여 악의적인 행동을 함– 악성코드 자체로는 실행 수 없음– 실행 가능한 파일들을 감염시킴– 하나의 정상파일이 중복 감염될 수 있음– 숙주 파일이 존재 함– 다형성 바이러스로 진화 함6
  7. 7. 감염된 파일 비교• 파일 사이즈 증가감염 전감염 후Virus7
  8. 8. PE Format8
  9. 9. PE 구조 (1)DOS HeaderPE HEADERSECTION HEADERSECTION IMAGEDOS Stub Code…HEADERSECTION9
  10. 10. IMAGE_DOS_HEADERIMAGE_NT_HEADERIMAGE_SECTION HEADERIMAGE_OPTIONAL_HEADERIMAGE_DATA_DIRECTORY.text.data.idata…SECTION IMAGE.text.data.idata…PE 구조도(2)DOS Stub CodeIMAGE_FILE_HEADER10
  11. 11. DOS Header11
  12. 12. DOS Header – e_lfanwe12
  13. 13. NT Header13
  14. 14. File Header14
  15. 15. Optional Header15
  16. 16. SECTION HEADER16
  17. 17. Section #1 – “.text”Section #2 – “.data”Section #3 – “.rsrc”HeaderFile Memory0x000000000x000004000x00007C000x000084000x010000000x010010000x010090000x0100B000Section #1 – “.text”Section #2 – “.data”Section #3 – “.rsrc”HeaderOffsetVirtualAddress0x000108000x0101400017
  18. 18. 파일 바이러스 감염 유형18
  19. 19. Overwriting 감염형프로그램코드정상 파일악성코드감염된 파일19
  20. 20. Overwriting 감염형프로그램코드악성코드프로그램코드악성코드악성코드악성코드20
  21. 21. Prepending 감염형악성코드프로그램코드감염된 파일악성코드21
  22. 22. Amoeba 감염형프로그램코드악성코드(Head)악성코드(Tail)감염된 파일악성코드(Head)악성코드(Tail)22
  23. 23. Classic 감염형악성코드프로그램코드②①프로그램코드①②정상 파일 감염된 파일악성코드23
  24. 24. Cavity 감염형JMP 프로그램코드프로그램코드악성코드 P정상 파일 감염된 파일24
  25. 25. Cavity 감염형 – 변종프로그램코드프로그램코드정상 파일 감염된 파일JMPEPEP25
  26. 26. Cavity 감염형 – 변종 특징JMP감염된 파일악성코드 조합(Heap)EP26
  27. 27. Appending 감염형JMP 프로그램코드악성코드OJ감염된 파일JMP악성코드OJ27
  28. 28. Section #nAppending 감염형 종류• 악성코드가 마지막 섹션에 덧붙인 경우HeaderSection #1Section #2Section #nVEPHeaderSection #1OEPSection #2Section #nOEPVEP28
  29. 29. Appending 감염형 종류• 악성코드가 섹션으로 덧붙은 경우HeaderSection #1Section #2Section #nSection #n+1VEPHeaderSection #1OEPSection #2Section #nOEPVEP29
  30. 30. Appending 감염형 종류• 악성코드로 JMP하는 코드가 EP에 패치된 경우HeaderSection #1Section #2Section #nSection#n or #n+1EPHeaderSection #1Section #2Section #nJMPEPOrg Code30
  31. 31. Appending 감염형 종류• 악성코드 일부가 EP에 패치된 경우HeaderSection #1Section #2Section #nSection#n or #n+1EPHeaderSection #1Section #2Section #nEP31
  32. 32. 파일 바이러스 감염유형 분석및 치료로직 설계32
  33. 33. Sality 분석 및 치료로직 설계33
  34. 34. 대상 샘플 정보• 진단명 (VirusTotal)Anti-Virus Virus NameAhnLab-V3 Win32/Sality.SAvast Win32:SalityBitDefender Win32.Sality.LKaspersky Virus.Win32.Sality.hMicrosoft Worm:Win32/Sality.ISophos W32/Sality-ALViRobot Win32.Sality.O34
  35. 35. Sality PE 구조Stud PEPEview35
  36. 36. FileMon 툴을 이용한 분석36
  37. 37. 파일관련 행위1. 파일 생성QUERY INFORMATION C:Doc…Sality.han.~01 NOT FOUND Attributes: ErrorQUERY INFORMATION C:Doc…Sality.han.~01 SUCCESS Length: 104452CREATE C:Doc…Sality.han.~01 SUCCESSOptions: Overwrite If SequentialAccess: 0013019637
  38. 38. 파일관련 행위2. 새로 생성한 파일에 데이터 쓰기WRITE C:Doc…Sality.han.~01 SUCCESS Offset: 0 Length: 65536READ C:Doc…Sality.han.~01 SUCCESS Offset: 32768 Length: 32768READ C:Doc…Sality.han.~01 SUCCESS Offset: 65536 Length: 32768READ C:Doc…Sality.han.~01 SUCCESS Offset: 98304 Length: 4096WRITE C:Doc…Sality.han.~01 SUCCESS Offset: 65536 Length: 38916SET INFORMATION C:Doc…Sality.han.~01 SUCCESS Length: 10445238
  39. 39. 파일관련 행위3. 정상코드 복구3.1) 복원할 코드 정보ㄱ. FileOffset : 0, Size : 0x62AC(28332)ㄴ. FileOffset : 0x300(768), Size : 2ㄷ. FileOffset : 0x12000(73728), Size : 0x52AC(28332)3.2) FileSize : 0x12000(73728)OPEN C:Doc…Sality.han.~01 SUCCESS Options: Open Access: 0012019FREAD C:Doc…Sality.han.~01 SUCCESS Offset: 0 Length: 28332READ C:Doc…Sality.han.~01 SUCCESS Offset: 768 Length: 2READ C:Doc…Sality.han.~01 SUCCESS Offset: 73728 Length: 28332SET INFORMATION C:Doc…Sality.han.~01 SUCCESS Length: 73728WRITE C:Doc…Sality.han.~01 SUCCESS Offset: 0 Length: 28332CLOSE C:Doc…Sality.han.~01 SUCCESS39
  40. 40. 파일 관련 행위 정리1. [파일경로].~01 파일 생성2. 새로 생성한 파일(.~01)에 정상코드 복원3. 정상파일(.~01) 실행4. 실행 완료 후, 생성한파일(.~01) 삭제5. 다른 파일들을 계속 감염시킴40
  41. 41. • UPX 해제 부분악성코드 분석41
  42. 42. 악성코드 분석• 새로운 파일 생성파일 생성42
  43. 43. 악성코드 분석• 코드 복호화 부분43
  44. 44. 악성코드 분석• 코드 복호화44
  45. 45. 악성코드 분석• 생성한 파일에 정상코드 복원45
  46. 46. 악성코드 분석• 복원된 정상파일46
  47. 47. 감염구조프로그램코드 악성코드프로그램코드②①①②정상 파일 감염된 파일47
  48. 48. 감염 구조정상1정상1정상2정상파일UPXSalitySality정상1정상2Sality VirusUPXSalitySalitySality Virus48
  49. 49. 감염 구조정상1UPXSality정상10x6EAC0x895380x6EACSality정상1정상2 정상2정상파일 Sality VirusOverlay49
  50. 50. Sality 구조 분석UPX Sality• UPX 실행압축 해제– 첫번째 섹션(메모리)에 실행 압축 해제– 압축 해제 후, 해제된 코드(첫번째 섹션)로 JMP 해서 정상파일생성 및 악성코드 실행• 압축 해제 후 악성코드 수행– 정상파일 생성– 정상파일 실행– 정상파일 삭제– 악성코드 실행UPXSality정상2정상10x6EAC0x6EAC0x89538Sality50
  51. 51. Sality 구조 분석정상1• 정상파일 앞부분• 암호화• 정상1 정보– Offset = 정상파일• 원래의 정상파일 뒷부분에 정상1이 덧붙었기 때문– Size = 패치된 UPX Sality 크기(0x6EAC)UPXSality정상2정상10x6EAC0x6EAC0x89538Sality51
  52. 52. 치료로직 개발52
  53. 53. 정상코드 복구과정1. 전체 복호화 – 복호화 로직 필요– 0 ~ 0x6EAB 까지 복호화(UPX_Sality Size)2. MZ 복구 – 정적 복구– 앞부분 2byte(“MZ”)3. 추가 복호화 – 복호화 로직 필요– 특정 위치(0xBB9 ~ 0xBCC) 복호화53
  54. 54. 전체 복호화54
  55. 55. 악성코드 분석• 코드 복호화 부분55
  56. 56. 복호 Key 정보56• KeyTableunsigned char KeyTable[0x0A] ={0xF7, 0xD5, 0x28, 0xD3, 0xCD, 0x33, 0xDB, 0xF6, 0x74, 0x21 };• ExtKey= SUM(0xF7, 0xD5, 0x28, 0xD3, 0xCD, 0x33, 0xDB, 0xF6, 0x74, 0x21 )+ 0x0A(SUM 개수=KeyTable Size)
  57. 57. 복호화 로직(C)for(Cnt = 0; Cnt < CodeSize; Cnt++){if( Cnt == 0){EBX = 0;}else{KeyPoint = (nCnt -1) % KeyTableSize;EBX = KeyTable[KeyPoint];}EBX ^= (ExtKey * nCnt);CodeBuff[nCnt] ^= (BYTE)EBX;}57• CodeBuff : 암호화된 코드• CodeSize : CodeBuff 의 Size(복호화 Size)• KeyTable : 복호화 KeyTable• ExtKey : KeyTable값들의 합+ KeyTable Size• KeyTableSize : 0x0A
  58. 58. 복호화58• 암호화된 코드• 복호화한 코드
  59. 59. MZ 복구59
  60. 60. MZ 복구60• MZ 복구 로직• 복구된 모습
  61. 61. 추가 복호화61
  62. 62. 추가 복호화 로직(ASM)62
  63. 63. 추가 복호화 로직 정보• 복원할 위치 정보– Offset : 0xBB9– Size : 0x14• 정상코드 정보– Offset : 0x264– Size : 0x14• KeyTable– Offset : 0x2AF– Size : 0x0A63
  64. 64. 추가 복호화 로직(C)KeyPoint = 0;for(Cnt = 0; Cnt < CodeSize ; Cnt++){KeyPoint = Cnt % KeyTableSize ;CodeBuff [Cnt] ^= KeyTable[KeyPoint];}64• CodeBuff : 추가 암호화된 코드• CodeSize : CodeBuff 의 Size(복호화 Size)0x14• KeyTableSize : 0x0A
  65. 65. 추가 복호화한 모습65• 복구된 모습
  66. 66. UPXSality정상파일 복구UPXSalitySality정상1정상2Sality Virus정상1정상1정상2복호화치료완료66
  67. 67. 진단 조건 연구67• 복호화한 코드
  68. 68. 진단&치료 테스트68
  69. 69. 향후 연구 방향• 코드 다형성• 변종• 패킹(실행압축)• 로직에서의 정확한 코드 진단• 파일 바이러스 감염 및 확산 차단69
  70. 70. 참고문헌• Peter Szor, The Art of Computer VirusResearch and Defense, 2005.02.2570
  71. 71. Questions?한정화 (daly25@gmail.com)71www.CodeEngn.comCodeEngn ReverseEngineering Conference
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×