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 |