본문 바로가기
보안 공부/Reversing

[리버싱] 리버싱이란, 디버그란

by 그적 2019. 9. 15.

리버싱이란?
"역공학", 시스템 등의 구조, 기능, 동작을 분석해하여 그 원리를 파악하고 단점을 보완하고, 패치하는 일련의 과정
분석 방법을 크게 두 가지로 분류할 수 있는데

 (과정)
   1. 패커/프로텍터/암호화 탐지 >>탐지되면 언팩/복호화를 시도하고 imports 등을 복구함
   2. 정적 분석
   3. 동적 분석

-정적분석 : 프로그램 실행 X
(ex) 소프트웨어 매트릭 - 코드 中 오버플로우, 0으로 나누기, 잘못된 포인터 참조 등과 같은 오류를 파악하고 진단함
  **기초 정적 분석 : 개략적인 알고리즘 로직 분석 (ex. 어떤 식으로 동작할 것이다.)
  **고급 정적 분석 : IDA라는 툴을 사용해 디스어셈블하여 세부적 동작 분석.

이때, 난독화 과정(Code Obfuscation)을 거쳐진 프로그램은 분석이 쉽지 않다. 또한 코드 사이즈가 큰 경우에도 분석이 오래 걸리기 때문에 이런 경우 동적 분석을 수행한다.
-동적 분석 : 프로그램 실행 O -> 증상 기반
              파일, 프로그램 실행, 레지스트리, 서비스 등 관련 변경사항과 실행 시 발생하는 네트워크 트래픽을 분석



(+) 리버싱 정적 분석 툴 : IDA                                    // 추후 설치
 >>파일의 종류(이미지,문서,실행), 크기, 헤더, Import/Export API, 내부 문자열, 실행압축 여부, 등록정보, 디버깅 정보, 디지털 인증서 등의 다양한 내용을 확인한다.
  **과거 디스어셈블러 성격이 강했으나, 디버깅 기능이 많이 확장되었다.

(+) 리버싱 동적 분석 툴 :  OllyDBG, WinDBG 등등 
------------------------------------------------------------------------------------------------------------------------------------------------------------

디버그란?   ( ⇔ 안티디버깅 )
 : 컴퓨터 프로그램의 정확성이나 논리적인 오류를 찾아내는 테스트 과정

디버거 종류
1) 사용자 수준의 디버거
 - 응용프로그램을 디버깅하기 위해 사용
 (ex)OllyDBG, IDA pro, Immunity dbg

2) 커널 수준의 디버거
 - 운영체제 커널은 디버깅하기 위해 사용 
 (ex)WinDBG, SoftICE, Syser

차이점 : 커널 수준의 디버거는 더 높은 특권을 가지고 실행되어 커널 장치 드라이버와 장치를 디버깅할 수 있지만 사용자 수준 디버거는 제한된다.
 

(+) 커널수준, 커널 모드란? 
 운영체제에서 프로세스 접근 모드로 유저 모드와 커널 모드, 이 두 가지가 있다.                                //intel의 ring 0-3
유저 모드 : 접근 영역이 제한적
커널 모드 : 모든 자원(드라이버, 메모리, CPU 등)에 접근 가능

  >>유저모드, 커널 모드는 CPU 권한 상태에 따라서 결정된다. 이는 링(ring)이라는 개념을 사용하는데
링은 링 0(zero)부터 링 3까지 총 네가지 레벨이 있으며, 링 0이 가장 권한이 높아 커널모드, 링 3이 권한이 제일 낮아 유저모드로 불림.

  >> CPU는 SW코드와 메모리 각각에 어떤 Ring이 할당되는지 끊임없이 관리하며, Ring 간에 접근 제한을 수행한다. 모든 프로그램은 Ring번호를 할당받고, 자신이 할당받은 링보다 낮을 번호의 링 영역에 접근할 수 없다.

  **Ring3 프로그램이 Ring0 영역에 접근하기 위해서는 권한 이행이 필요, Native API를 이용해 Ring0 영역에 접근.
  **사용자 모드의 ntdll.dll에서 호출되면, 이 그룹들은 대부분! 커널모드에 들어가서 SSDT를 통해 ntoskrnl.exe의 같은 의미를 가진 함수를 호출한다.

댓글