본문 바로가기

리버싱/x64dbg 디버거를 활용한 리버싱과 시스템 해킹의 원리

ch01 - 리버싱과 해킹의 이해

728x90

1. 해킹의 이해

2. 리버스 엔지니어링

 

1. 해킹의 이해

 1.1 해커의 의미

 - 해커는 초기에 "컴퓨터를 능숙하게 다루는 전문가"나 "시스템 프로그래밍을 잘하는 사람"인 좋은 인식이었지만 점점 "컴퓨터 시스템이나 네트워크의 문제점을 이용하여 침입하거나 정보를 탈취하는 사람"으로 좋지 않은 인식으로 바뀌었다.

  • 화이트햇(White Hat) - 일반적으로 좋은 사람이며 윤리적 해커로 법을 위반하지 않고 악의적인 활동에 관여하지 않는 해커를 말한다.
  • 블랙햇(Black Hat) - 개인적인 이익을 위해 취약점을 이용해 특정 시스템을 공격하며 '크래커'로 불린다.
  • 그레이 햇(Grey Hat) - 악의적인 행동은 아니지만 해킹 방법이 합법적 또는 윤리적 경계를 넘을 수 있는 해커다.
  • 그린햇(Green Hat) - 초보자이며 매일 자신의 기술을 향상하려고 노력하는 해커다.
  • 레드햇(Red Hat) - 해킹 세계에서 중간자와 같으며, 자신의 규칙에 따라 활동한다. 화이트 햇 해커는 취약점을 찾고 그것을 방어하기 위한 대책을 세우는 반면 레드햇 해커는 블랙햇 해커를 발견하면 공격을 수행하고 그들을 무력화시킨다.(블랙햇 퇴치)
  • 블루햇(Blue Hat) - 악의적인 행위를 일반적으로 한 사람이나 회사에 대한 분노로 시작하며 스크립트 키드로 시작한다. 실력 향상보다 보복을 위한 기술을 알려고 한다.
  • 스크립트 키드(Script Kiddy) - 해킹에 관심이 있는 사람들을 말하며 알려진 코드를 복사해 프로그램에 시도해본다.
  • 핵티비스트(Hacktivists) - 블랙햇 해커의 일종으로, 정치적 목적으로 해킹 기술을 사용한다.

 

 1.2 해킹 학습 방법

 - 기술적인 면에서 컴퓨터 지식, 네트워크, 프로그래밍 등 여러 지식이 필요하다. 

운영체제에서 메모리 구조, 프로세스 동작원리, 시스템 권한 체계, 파일 시스템 구조 등..

다양한 플랫폼에서 웹 서버, 모바일 폰, 가상화 시스템, IoT 보안 등..

네트워크 지식으로 TCP/IP 구조, 패킷 트레이서, 무선망 통신, 인증 프로토콜 등..

프로그래밍 기술로 C, C++, 자바, 파이썬, 어셈블리어, PHP 등..

 

 - 최신 해킹 관련 지식은 기술 교류 세미나, 학회 등에서 습득할수 있고 국내에선 코드게이트나 KISA가 대표적이다.

 해킹대회 참여(KISA 해킹방어대회, 코드게이트, 화이트햇, posko 등 많다)

 

 1.3 해킹의 절차

1) 목표 대상 선정(Targeting) - 먼저 공격 대상을 선정한다. 공격의 목적이나 테스트의 목적에 따라 공격 대상을 파악

 

2) 정보 수집(Probing) - 공격 목표에 대한 정찰 과정으로 목표 네트워크 연결 구조, IP 또는 MAC 주소, DNS 정보, 보안장비 유무, 시스템이나 네트워크 관리자 인적 사항 등을 파악한다.

 

3) 취약점 검색(Scanning & Enumeration) - 침투할 곳의 취약한 서비스를 알아낸다. 주로 취약점 점검 도구나 스캐닝 도구를 활용한다. 침투할 시스템의 운영체제를 알아내고, 네트워크 서비스를 검색한다. 관리자나 사용자 계정을 알아내거나, 중요 서버에 접속하는 컴퓨터의 IP 정보도 포함된다.

 

4) 권한 획득(Gaining Access) - 시스템이나 네트워크의 사용자 또는 관리자의 권한을 획득하는 과정이다. 사회공학적 방법으로 시스템이나 네트워크 관리자로부터 패스워드를 알아내는 것도 포함된다. 시스템 취약점을 이용하여 직접 해킹을 시도할 수 있다. 악성 코드를 유포하여 감염을 통해 시스템 내의 권한을 취득할 수 있다.

 

5) 정보 재수집(Pilfering) - 획득한 관리자 권한으로 원하는 정보를 수집할 수 있다. 이러한 정보를 활용하여 점령한 시스템을 경유지로 다른 시스템을 공격할 수 있다. 또한 사용자 정보를 수집하여 다른 시스템의 권한을 획득하는 자료로 활용할 수 있다.

 

6) 루트킷 설치(Creating Rootkit) - 루트킷은 공격 흔적을 지우고, 백도어나 중요 프로세스를 숨기는 도구이며, 루트킷을 설치함으로써 지속적으로 시스템의 권한을 유지할 수 있다. 백도어는 접속을 인증 없이 할 수 있도록 하는 도구이며, 추후에 다시 접근하기 위한 목적으로 설치된다.

 

2. 리버스 엔지니어링

(RE, Reverse Engineering) : 여러 분야에서 사용되는 용어로 인공물로부터 설계 사상이나 지식을 추출하는 행위를 말하며 '역공학'이라고도 한다.(물건이나 기계장치 혹은 시스템 등의 구조, 기능 동작 등을 분석하여 그 원리를 이해하고 단점을 보완하거나 새로운 아이디어를 추가하는 작업이다.)

소프트웨어에 대한 역공학으로 리버스 코드 엔지니어링, 줄여서 리버싱이라 부른다.

 

 - 리버싱은 통상적으로 컴파일된 바이너리(exe, dll, sys 등)를 디스어셈블(disassemble) 도구를 이용하여 어셈블리 코드로 변환하여 필요한 작업을 수행하는 것이다. 어셈블리 코드에서 소프트웨어의 동작 방식을 알아낸다거나 일정 부분만 수정하는 것도 리버싱이라 한다. 

ex) 악성코드 프로그램을 분석하는 일은 그 프로그램에서 악성 행위를 하는 부분만 분석하면 된다.

 

 - 프로그램을 디스어셈블 하지 않고도 그 실행 파일이 만들어내는 데이터 파일이나 패킷 등을 분석하여 그 프로그램을 재현하는 것도 리버싱의 분야이다.

ex) 서버와 통신을 수행하는 기능이 있는 게임 프로그램이 디버거나 에디터를 활용하여 게임 프로그램을 조작하지 않고 패킷 분석 프로그램을 이용하여 패킷을 분석 및 동작을 흉내 내는 프로그램을 제작할 수 있다.

 

 2.1 리버싱 적용 분야

 - 악성코드 개발과 분석에 사용(일반적으로 악성코드는 기존 프로그램의 취약점을 찾아 시스템에 침투하는데 이용한다)

 안티 바이러스 소프트웨어 개발자들은 악성코드 프로그램을 분석하며 악성코드가 실행되는 각 단계를 추적하고 분석해서 악성코드에 의해 발생할 수 있는 피해 사항과 전파율을 측정하고 제거 방법과 전파를 방지하는 방법을 찾아낸다.

 

 - 저작권이 보호된 소프트웨어를 무력화시키거나 경쟁사 소프트웨어를 분석할 때 사용된다.

 - 소프트웨어 품질과 안정성을 측정할 때 사용된다.

 

 2.2 리버싱 방법

 - 파일의 겉모습을 관찰하고 분석하는 정적 분석(static analysis)과 파일을 직접 실행시켜 분석하는 동적 분석(dynamic analysis)으로 구분한다.

정적 분석 : 파일의 종류, 크기, 헤더 정보, 사용 API, 내부 문자열, 실행 압축 여부, 등록 정보, 디버깅 정보, 디지털 인증서, 내부 코드 구조 등의 내용을 확인할 수 있다.

동적 분석 : 파일, 레지스트리, 네트워크 패킷 등을 관찰하며 프로그램 행위 분석하며 이때 디버거나 패킷 캡처 프로그램 활용.

 

 - 리버싱은 프로그램 패치(patch)와 크랙(crack)에 사용된다.

 패치 : 프로그램의 파일이나 실행 중인 프로세스의 메모리 내용을 변경하는 작업

ex) os 업데이트, 소프트웨어 업데이트

 크랙 : 패치와 같은 개념이지만 그 의도가 비합법적이고 비도덕적인 경우

ex) 다른 회사 소프트웨어를 분석하여 복제하거나 인증 과정을 우회하는 경우

 

 2.3 리버싱의 위험도

 - 리버싱의 위험도를 판단하기 위해서 소프트웨어의 상호운용성, 경쟁 제품 개발, 저작권법이나 특허권 등을 고려해야 한다.

리버싱에 대한 법률 - 2009년 개정된 저작권법에 상호운용의 경우 허용하고 다른 목적은 저작권 침해로 규정

제101조의 4(프로그램코드역분석)

1. 정당한 권한에 의해 프로그램을 이용하는 자 또는 그의 허락을 받은 자는 호환에 필요한 정보를 쉽게 얻을 수 없고 그 획득이 불가피한 경우 해당 프로그램의 호환에 필요한 부분에 한하여 프로그램의 지적재산권자의 허락을 받지 아니하고 프로그램 코드 역분석을 할 수 있다.

2. 제1항에 따른 프로그램 코드 역분석을 통하여 얻은 정보는 다음 각 호의 어느 하나에 해당하는 경우에는 이를 이용할 수 없다.

 - 호환 목적 외의 다른 목적을 위하여 이용하거나 제삼자에게 제공하는 경우.

 

  • 미국의 디지털 밀레니엄 저작권법(DMCA, Digital millennium Copyright Act)