본문 바로가기

System Security/Theory

​Chapter 3. Malware I

Chapter 3. Malware I
1. Malware
 - 사용자의 의사와 이익에 반해 System을 파괴하거나 정보를 유출하는 등 악의적 활동을 수행하도록 의도적으로 제작된 Software를 말한다.
 - 대표적인 Malware를 이용한 공격으로 Backdoor Attack, Key Logger Attack, Rootkit Attack이 있다.

 

2. Backdoor Attack
 - 정상적인 인증 과정을 거치지 않고 System에 접근하는 System 공격 방법
 - System Resource, Data 등을 빼내기 위해 Hacking을 한 경우 다음 접속을 쉽게 하기위해 시스템 보안이 제거된 비밀 통로
 - Backdoor는 생성 과정에서 공격자가 관리자 권한을 이미 획득한 상황에서 공격을 시도하는 것이 일반적이다.
 - 설치된 Backdoor는 최초 Backdoor를 설치한 공격자만 이용할 수 있는 것이 아니기 때문에 보안상 매우 취약하게 된다.
 - Backdoor의 유형
  · 로컬 백도어(Local Backdoor)

  ◦ Server의 Shell을 얻어 관리자로 권한 상승을 하고자할 때 사용하는 Backdoor 방식
  ◦ 이 Backdoor를 이용해 공격하기위해서는 System에 Login 한 뒤 관리자로 권한을 상승시키기 위한 Backdoor이기 때문에 Local Backdoor를 이용하기 위해서 공격자는 비밀번호를 확보한 일반 계정을 최소한 한 개는 확보해야한다.
  · 원격 백도어(Remote Backdoor)
  ◦ 공격자가 공격대상 System에 접속하여 관리자 권한을 행사할 수 있도록 해주는 Daemon(Service)을 작동시키는 Backdoor 방식
  ◦ 원격 백도어는 Hacking 대상(Victim) 쪽에 자신의 Port를 열어 놓고 침투하는 경우가 많으며 일종의 Service를 제공하는 Daemon이나 기존의 Daemon에 Load된 Library File로 둔갑하는 경우도 있다.
  · 패스워드 크래킹 백도어(Password Cracking Backdoor)
  ◦ 인증을 회피한다기보다 인증에 필요한 Password를 원격지의 공격자에게 보내주는 역할을 하는 Backdoor 방식
  ◦ 사용자가 누르는 Key Board의 정보를 원격지에 보내는 Key Logger와 같은 Program을 이용하는 경우도 있다.
  · 시스템 설정 변경 백도어(System Setting Change Backdoor)
  ◦ 로컬 백도어처럼 Shell을 얻어 낸다는 것보다는 Hacker가 원하는 대로 System의 설정을 변경하기 위한 Backdoor 방식
  ◦ Unix에서는 Program Scheduler로 사용되는 Cron Daemon을 이용하는 경우가 많다.
  · 트로이목마 형태 백도어(Troian Horse Form Backdoor)
  ◦ Backdoor를 목적으로 만들어진 것이 아니지만 어떤 Program이 Backdoor와 섞여서 실행되면서 동시에 Backdoor도 실행되는 형태의 Backdoor
  ◦ Program 배포 Site의 정상적인 Program을 Backdoor를 설치한 Program으로 바꿔치는 경우도 있다.
 - Windows Backdoor : Beast
  · Windows의 대표적인 Backdoor Attack Program으로는 'Beast'가 있다.
  · Beast를 이용한 Windows Attack

  ◦ Beast
   ▹ 원격 백도어와 트로이 목마 형태의 백도어의 일종으로 가장 많이 알려진 원격 백도어 공격 Tool이다.
   ▹ Beast를 이용해 공격을 하기위해서는 Beast로 만들어낸 Service File을 공격대상(Victim)에서 실행하게 해서 해당 Port를 열게 해야 한다.
   ▹ Service File은 Process로 실행되거나 DLL File로 다른 Process에 Library File로 Load되는 방식으로 실행된다.
   ▹ Service File을 실행하게 하기위해 다른 File과 섞어서 만들어내며 공격대상은 이를 모르고 실행하는 경우가 대부분이다.
   ▹ Beast의 Backdoor 방식
    ▸  Direct Backdoor
     ▫  말 그대로 Backdoor Service가 Port를 열어주면 해당 Computer의 IP로 Hacker가 Direct로 접속해 통제권을 Hacker가 가져가는 Backdoor 방식이다.
     ▫  이 방식은 공인 IP에서 공인 IP 또는 사설 IP에서 사설 IP로 밖에 할 수 없으며 이는 사설 IP를 사용하는 Computer의 Router의 Port로 외부에서 들어오는 통신을 해당 사설 IP를 사용하는 Computer와 바로 통신되지 않기 때문에 사설 IP 대역의 Computer를 Hacking하기 위해서는 Reverse Backdoor를 이용해야한다.
      ▸  Reverse Backdoor
     ▫  Direct와는 달리 Backdoor Service가 Port를 열어 Hacker의 Computer에 접속해 Victim의 Computer의 통제권을 넘기는 역방향 Backdoor 방식이다.
     ▫  이 방식은 Hacker만 공인 IP를 가지고 있거나 Hacker가 Router를 사용 시 Hacker의 Router가 Hacker의 사설 IP로 모든 Packet을 보낼 수 있도록 Routing Table이 갖춰져 있다면 사용할 수 있다.
     ▫  Victim이 Hacker의 Computer에 접속하기 전까지 Hacker의 Computer가 해당 Port를 열고 Listen 상태로 대기한 후 접속한 Victim Computer의 통제권을 가져가는 방식이다.
  ◦ Beast를 이용한 Direct Backdoor
   
 Backdoor File 생성

    ▸  'Build Server' 선택

    ▸  1) : Direct Backdoor Attack을 할 때 선택하는 항목
    ▸  2) : Direct Backdoor Attack 시 사용할 Victim의 Port로 초기 값은 6666 Port로 설정되어 있다.
    ▸  3) : Library File로 바꿔서 Process 상으로 확인할 수 없게 하거나 혼동되게 한다.
    ▸  4) : Process 상으로 확인할 Service 이름으로 실행한다.
    ▸  5) : 그 밖에 Backdoor Service File의 설정한다,
    ▸  6) : 설정을 모두 마치고 File을 생성 시 선택하는 항목 

    ▸  초기 생성 시 File ICON
   ▹  Backdoor Service File 숨기기 : Binder

    ▸  Service File을 다른 File과 이어 붙여(Bind) 다른 File 속에 숨김과 동시에 해당 File이 실행되면 Backdoor File이 동시에 실행되게 한다.
    ▸  Backdoor File을 숨겨서 사용할 수 있기 때문에 Hacking 대상(Victim)은 자신이 Backdoor File을 언제 실행하게 된지도 모르며 Vaccine을 사용하지 않은 사용자들에게 이러한 피해가 증가하게 된다.

    ▸  'Binder' 선택

    ▸  Add File을 통해 이어 붙일 File 추가 후 Bind Files를 선택해 File을 합친다.
   ▹  Backdoor를 이용해 Hacking 대상(Victim)에 Direct 접속 및 제어
    ▸  Backdoor를 통해 Victim에 접속하기 위해서는 이전에 생성한 Service File(server)가 Victim의 Computer에 실행되고 있어야한다.
    ▸  Backdoor를 이용한 접속

     ▫  Victim에 접속하기위해 Victim의 IP주소와 Port를 입력 후 'Go BEAST!'를 선택한다.

     ▫  접속이 성공하면 'Disconnected' 부분이 'Connected'로 변경되며 'Go BEAST!' 부분이 'Disconnected' 즉, 접속 끊기로 변경된다.
    ▸  Victim 제어

     ▫  Victim 제어는 첫 번째 Tab의 항목으로 제어할 수 있으며 File 및 Registry를 수정할 수도 있으며 Application Program을 이용해 Victim의 화면을 보거나 WebCam과 같은 장치를 통제할 수도 있다.
     ▫  Managers
      ▪  File : Victim의 File을 Download/Upload한다.
      ▪  Registry : Victim의 Registry 설정을 변경한다.
      ▪  Screen : Victim의 화면을 확인한다.(일정 시간 초단위로 Screen Shot을 보낸다.)
      ▪  Apps : Victim이 실행하고 있는 Program을 확인한다.
      ▪  Process : Victim이 실행하고 있는 Process를 확인한다.
     ▫  Windows
      ▪  Hide All : System의 모든 내용을 숨기고 바탕화면의 배경화면만 보인다.
      ▪  Power Off/Shut Down : Victim의 System을 종료한다.
      ▪  Reboot : Victim의 System을 Reboot한다.
      ▪  Log off : Victim의 System을 Log off시킨다.
     ▫  Lamerstuff
      ▪  Hide Icon : Victim 바탕화면의 ICON을 숨긴다.
      ▪  Swap But's : Victim의 Mouse의 Button 기능을 맞바꾼다.
     ▫  Fun Stuff
      ▪  Hide Mouse : Victim의 Mouse Pointer를 숨긴다.
      ▪  Go ToURL : Victim을 지정한 URL로 접근시킨다.
      ▪  Chat : Victim과 대화창을 열어 대화한다.
    ▸  Victim이 Backdoor Service File을 실행 시 변경되는 사항
     ▫  Port 추가
     ▫  Process 추가 또는 현재 실행중인 Process 내의 Library File 추가

     ▫  Network Port를 확인하면 File 생성 시 설정했던 Port가 열린 것을 확인할 수 있다.

     ▫  초기 설정 시 'Reside in <Windows>'로 설정했기 때문에 svhost.exe로 실행되어있다.
     ▫  svhost.exe는 사용자로 실행도지 않으며 System과 Network Service로서 실행된다.
     ▫  Injection을 이용하면 Service로 실행되지 않아 확인이 불가능하다.
    ▸  Backdoor Service File 제어

     ▫  Update : Service File을 Update하기 위해서 사용하는 항목으로 'Bulid Server'를 선택했을 때와 같은 화면이 출력되며 수정내용을 바로 적용시킬 수 있다.
     ▫  Close Server : Service를 종료한다. 하지만 설정 상 System을 재시작 하면 Service File도 재시작 된다.
     ▫  Kill Server : Service를 종료하며 Victim의 System 상에서 Service 자체를 제거한다.
     ▫  Info : Beast의 정보를 보여준다.
  ◦ Beast를 이용한 Reverse Backdoor
  
 ▹ Backdoor File 생성

    ▸  'Build Server' 선택

    ▸  1) : Reverse Backdoor Attack을 할 때 선택하는 항목
    ▸  2) : Reverse Backdoor Attack 시 사용할 Hacker의 Port로 초기 값은 9999 Port로 설정되어 있다.
    ▸  3) : Library File로 바꿔서 Process 상으로 확인할 수 없게 하거나 혼동되게 한다.
    ▸  4) : Process 상으로 확인할 Service 이름으로 실행한다.
    ▸  5) : 그 밖에 Backdoor Service File의 설정한다,
    ▸  6) : 설정을 모두 마치고 File을 생성 시 선택하는 항목

    ▸  Reverse Backdoor Attack은 SIN IP가 필요해 'Notifications' Tab의 IP Address를 Hacker의 IP로 수정해 File을 생성해야한다. 

    ▸  초기 생성 시 File ICON
   ▹ Backdoor를 이용해 Hacking 대상(Victim)에 Reverse 접속 및 제어
    ▸  Backdoor를 통해 Victim에 접속하기 위해서는 이전에 생성한 Service File(server)가 Victim의 Computer에 실행되고 있어야한다.
    ▸  Reverse Backdoor Attack은 SIN IP가 필요해 'Notifications' Tab의 IP Address를 Hacker의 IP로 수정해 Fild
    ▸  Backdoor를 이용한 접속

     ▫  Reverse Backdoor Attack은 Victim에 접속하기위해 Victim의 접속을 기다려야하기 때문에 'Start Listening[SIN]'을 선택해 Victim의 접속을 기다린다.(Victim의 접속과 동시에 Backdoor Service가 실행된다.)

     ▫  'Start Listening[SIN]'을 누르면 'Stop Listening[SIN]'으로 변경된다.
     ▫  접속한 Victim이 있을 시 Pop-up 창과 함께 접속한 Victim을 확인할 수 있게 된다.

     ▫  접속이 성공하면 'Disconnected' 부분이 'Connected'로 변경되며 'Go BEAST!' 부분이 'Disconnected' 즉, 접속 끊기로 변경된다.
     ▫  접속 후의 기능은 Direct Backdoor Attack과 같다.
 - Linux Backdoor
  · Linux Backdoor는 Source Code를 Compiler로 실행 File로 만들어 사용한다.
    ※ Program 생성 과정 및 Library File에 관한 내용은 C Language Chapter 1. 참고
  · Linux System의 권한
  ◦ Linux System의 권한 종류

   ▹ 기본 권한 읽기(r), 쓰기(w), 실행(x)
   ▹ Linux System 특수 권한
    ▸  SetUID

     ▫  Owner 허가권의 x가 s인 허가권
     ▫  SetUID 권한이 설정되어 있는 실행 File을 실행할 경우 그 File의 소유자 권한을 빌려온다.
    ▸  SetGID

     ▫  Group 허가권의 x s인 허가권
     ▫  SetUID와 동일하게 소유자 권한을 빌려오며 Group의 권한으로 실행된다.
    ▸  Sticky bit

     ▫  Other 허가권의 x t인 허가권
     ▫  Windows의 공유폴더와 비슷한 개념으로 해당 권한이 설정되어 있는 Directory의 모든 유저는 File을 생성하고 삭제하는 것이 자유롭지만 삭제 시에는 소유자 혹은 관리자(Owner)만 삭제가능하다
  ◦ UID의 종류
   ▹ RUID(Real UID)
    ▸  현재 사용자가 가진 권한
    ▸  SetUID가 설정된 File이 실행되도 변하지 않는다.
   ▹ EUID(Effective UID)
    ▸  File이 임시로 부여하는 권한
    ▸  SetUID가 설정된 File이 실행되면 해당 File에 부여된 권한으로 바뀌는데 현재 사용자의 권한이 File의 권한 보다 높을 시 변경되지 않는다.
  ◦ UID 변경의 예

   ▹ getuid : 현재 사용자의 RUID를 얻어온다.
   ▹ geteuid : 실행된 File로부터 현재 사용자에게 부여된 EUID를 얻어온다.
   ▹ 위 Code를 Compile을 통해 실행 File로 만든 후 SetUID를 부여
    ▸ Compile 명령어 : gcc -o uid uid.c
    ▸  SetUID 권한 부여 : chmod 4755 uid
   ▹ SetUID 부여 전 사용자별 UID

   ▹ SetUID 부여 후 사용자별 UID

  · Linux Backdoor
  ◦ Linux System 특유의 권한 상승을 이용해 System을 Hacking하는 방법을 사용한다.
  ◦ 권한 상승을 위한 방법으로 SetUID를 사용한다.
  ◦ System 상에서의 명령어는 RUID에 의해 실행 여부가 결정되지만 Program 내에서는 EUID에 의해 실행여부가 결정되어 관리자(root)가 해당 File을 생성 후 SetUID를 부여했을 시 일반 사용자 또한 Program 내에서 관리자 권한의 명령어를 실행할 수 있다.
  ◦ Backdoor

   ▹  File을 실행함과 동시에 SetUID에 의해 Program 내에서 사용하는 System 명령어는 관리자(root) 권한으로 실행되며 이 Program에서는 관리자의 Shell을 실행해 관리자가 할 수 있는 모든 작업을 수행 가능한 상태가 된다.
   ▹  이 Backdoor의 전제조건
    ▸  Hacking File을 생성하기 이전에 관리자로서의 접속을 한번이라도 해야 하며 접속을 했을 당시 위 내용의 File을 생성해 SetUID로 권한을 설정해놔야 한다.
   ▹ system("")
    ▸  System에서 사용하는 명령어를 Program 내에서 불러오는 명령어로 ""안의 명령어 System 명령어로 인식해 실행한다.
    ▸  SetUID가 설정된 Program 내에서 실행 시 사용 중인 사용자의 권한이 아닌 생성한 사용자의 권한을 받아 명령어가 실행된다.
   ▹ 이 Program처럼 Shell을 곧바로 사용 시 Compile된 Program의 내용에서의 문자열은 기계어로 변환되지 않아 '/bin/bash'로 남아 있어 발견되기 쉬우므로 '/bin/bash' 대신 'vi'로 명령어를 만들어 Program 실행 시 ':! /bin/bash' 명령어로 Shell을 실행하면 관리자의 추적을 피할 수 있다.
 - Linux Backdoor : Ishell
 · Ishell은 Windows의 Beast와 같이 Service를 통한 공격방법으로 실행 시 Victim의 Shell을 Hacker의 Computer에서 실행한다.
 · 공격 대상(Victim)은 'ishd' Service를 실행하고 있어야한다.
 · Hacker는 ish을 통해 공격을 시도한다.
 · Ishell Program 생성

  ◦ Hacker와 Victim의 Computer에서 Ishell 압축 File을 Download 받아 압축을 해제 후 'make linux' 명령어를 이용해 'ish''ishd' File을 생성한다.
 · Victim에서의 Service 실행

  ◦ Victim Computer에서는 './ishd'를 실행 후 대기한다.
 · Hacker에서의 공격 시도

  ◦ './ish [Victim IP]' 명령어를 입력해 Victim에 접속한다.
  ◦ 관리자(root)의 Shell인 bash shell이 바로 실행되며 'ifconfig'와 같은 명령어로 접속이 정상적으로 이루어졌는지 확인할 수 있다.
  ◦ 단 방화벽이 설정되어 있을 시 접속이 불가능하다.

 

3. Key Logger
 - 사용자가 입력한 Key Board를 통해 입력되는 Key Value를 저장하고 중요한 정보들을 빼내가는 Program이다.
 - Key Logger의 종류
  · Software Key Logger

  ◦ 여러 가지 기능을 포함한 Program으로 제작 되어있으며 활용도가 다양하다.
  ◦ 감지당해 제거당할 위험이 있다.
  · Hardware Key Logger
  ◦ Key Board와 Computer 사이의 연결에 물리적 장치를 연결하여 사용한다.
  ◦ 입력 정보는 해당 장치의 Memory에 저장되며 특별한 Program을 통해 저장된 내용을 탐색할 수 있다.
  ◦ Computer에 입력되기 전 Key Value를 가로채기 때문에 물리적 장치를 확인하기 전까진 Key Value가 가로채지고 있는지 확인할 수 없다.
 - Key Logger Program
  · actualspy

  ◦ 유료 Program으로 다양한 기능을 포함하고 있으며 저장한 Key Value를 여러 가지 기능으로 전송할 수 있다.
  ◦ 사용자가 모르게 설치한 후 확인할 수 없도록 숨겨 몰래 Key Value를 빼돌려 사용자의 개인정보를 훔쳐낼 수 있다.

 

4. Rootkit
 - 단일 Computer 또는 일련의 Computer Network에 대해 관리자(root) Level의 접근을 가능하도록 하는 도구의 집합이다.
 - Hacker가 Computer에 일반 사용자 Level로 접근한 뒤 Rootkit을 설치해 Hacker에게 관리자 Level로 접근 가능하도록 하는 도구이다.
 - 정상적인 File을 변경하기 때문에 Rootkit에 의해 변경된 명령어를 통하면 Backdoor File이나 Process를 확인할 수 없게 된다.
 - Rootkit 유형
  · Application Level Rootkit : Application Level에서 동작하는 Rootkit
  · Kernel Level Rootkit : Kernel Level에서 동작하는 Rootkit
 - Windows의 Rootkit
  · Beast : Backdoor Program이기도 하지만 관리자 Level을 획득해 접속하는 점에서 Application Rootkit Program이라고도 할 수 있다.
 - Linux의 Rootkit
  · 'white_rootkit'을 이용하며 Rootkit을 하기위해서는 Backdoor를 먼저 실행해야한다.
  · Backdoor를 하기 전 방화벽을 해제한다.
  · Victim Computer의 File 생성 및 실행

  ◦ 'white_backc.c' File을 Compile 후 실행한다.
  · Hacker Computer의 File 생성 및 실행

  ◦ 'white_backs.c' File의 IP 주소를 Victim의 IP로 수정

  ◦ 수정한 'white_backs.c' File을 Compile 후 실행한다.
  · Backdoor 실행 후 Victim의 설정이 변경된 점

  ◦ Victim의 System에 Rootkit 관련 Process와 Port가 추가된 것을 확인할 수 있다.

  ◦ Hacker Computer에서 Backdoor 실행
  · Rootkit 실행
  ◦ Process 및 Port 출력 시 제외시킬 목록을 담을 File 생성

   ▹ ./white_psfile 'ps -ef' 명령 출력 시 제외시킬 Process 명을 담을 File 생성
   ▹ ./white_netfile : 'netstat -antup' 명령 출력 시 제외시킬 Port 명을 담은 File 생성
  ◦ Program 설치

   ▹ 'make', 'make install' 명령을 이용해 설치한다.
   ▹ 기존에 있던 'ps' 명령 실행 File과 'net' 명령 실행 File을 숨기고 'ps' File의 자리에 'white_ps' File로 대체하고 'net' File의 자리에 'white_net' File로 대체한다.
   ▹ 'white_ps' File과 'white_net' File은 '.white_psfile'과 '.white_netfile'을 각각 인용해 숨길 Process와 Port를 각각의 File에서 읽어 숨긴다.
  ◦ 숨길 Process 및 Port 추가

   ▹ './white_psfile'에 Process명 추가
   ▹ './white_netfile'에 Port명 추가
  ◦ Process 및 Port 확인

   ▹ 명령어를 이용해 확인해보면 Rootkit의 Process와 Port가 확인 불가능한 것을 확인할 수 있다.
  · Linux Rootkit 방지 방법
  ◦ System File의 Hash 값을 File로 만들어 저장해 실제 File과 해당 File의 내용(Hash 값)을 비교해 Rootkit이 해당 System에서 Rootkit이 실행되고 있는지 확인한다.
  ◦ Rookit 방지
   ▹ hash 값 목록 생성 명령어 : md5sum 사용

    ▸  md5sum [File Name] : 해당 File의 Hash 값 생성
    ▸  > [Create File Name] : 해당 명령어의 결과 값을 생성할 File 내용에 저장한다.
   ▹ Rootkit 후 hash 목록과 실제 File의 값 비교 : md5sum 사용

    ▸  md5sum [File Name] -c [Check File Name] : 현재 File과 Check File의 Hash 값을 비교(-c : Compare)
    ▸  2> /dev/null : 오류 값 제외
    ▸  grep 실패 '실패'만 출력
    ▸  > [Create Result File] : 결과 값을 생성할 결과 File 내용에 저장한다.

 

'System Security > Theory' 카테고리의 다른 글

Chapter 6. BOF(Buffer OverFlow) II  (0) 2015.08.18
Chapter 5. BOF(Buffer OverFlow) I  (0) 2015.08.18
Chapter 4. Malware II  (0) 2015.08.18
Chapter 2. System Security Setting  (0) 2015.08.18
Chapter 1. Password Cracking  (0) 2015.08.18