백도어(Backdoor)

i2sec/System hacking 2014. 4. 27. 16:50

1.Backdoor란?

원래는 서비스 기술자나 유지보수 프로그래머들의 다른 PC에 대한 액세스 편의를 위해 시스템 설계자가 고의적으로 만들어 놓은 것이다. 최근에는 해킹에 취약한 부분을 일컫는 용어로 쓰이고 있다.


2.Backdoor 사용 이유

관리자는 편의성을 위해

해커는 침투 후 제침입을 위해 사용된다.


3.Backdoor 종류

로컬 백도어 : 서버의 셀을 얻어낸 뒤에 관리로 권한 상승을 할 때 사용하는 백도어로 트랩도어도 로컬 백도어라고 볼수있다.

시스템에 로그인한 뒤에 관리자로 권한 상승시키기 위한 것으로 공격자는 일반계정이 하나 필요하다.


원격 백도어 : 원격에서 관리자로 계정과 패스워드를 입력한 것처럼 바로 시스템 관리자 계정을 할 수 있는 백도어

네트워크에 자신의 포트를 항상 열어 놓는 경우가 많다. 일종의 서비스를 제공하는 데몬처럼 동작하는 것


원격 GUI 백도어 : 크기가 크고, 많은 데이터를 전송해야 되므로 노출되기 쉽기 때문에 실제로 많이 사용하지 않는 백도어다


패스워드 크래킹 백도어 : 인증회피가 아니라 인증에 필요한 패스워드를 원격지의 공격자에게 보내주는 역할을 하는 백도어

    사용자가 누르는 키보드의 정보를 원격지에 보내는 경우가 있고

    특정 문자열 즉'passwd'와 같은 문자열 뒤에 누를는 키보드의 정보를 보내는 경우


시스템 설정 변경 : 원격지의 쉘을 얻어낸다기 보다는 해커가 원하는대로 시스템의 설정을 변경하기 위한 백도어

 유닉스에서 프로그램 스케줄러로 사용되는 cron데몬을 이용하는 경우가 많다.


트로이 목마형 : 처음부터 백도어를 목적으로 만들어진 프로그램이 아닌데 백도어로 동작하는 경우

   윈도우에서는 웹 브라우저나 명령창 간단한 게임등도 백도어와 섞을 수 있다.

   이렇게 만들어진 백도어를 실행하면 원래 목적의 프로그램도 실행도과 동시에 백도어도 설치된다.


거짓 업그레이드 : MS사의 IE 웹브라우저를 무료로 업그레이드하라는 내용의 스팸 메일을 통해 사용자에게 프로그램 설치를                            유도하고 이 프로그램이 설치후 실행되면 몇몇 시스템 파일에 대한 수정과 다른 원격 시스템으로의                                  접속을 시도하는 행위를한다


그 외  : 네트워크 데몬이나 시스템 유틸리티를 수정한 백도어

     TCP/IP 프로토콜을 이용한 Shell binding 백도어

     kernel 모듈을 수정한 백도어

     방화벽을 우회하는 백도어

5.Backdoor 생성 및 숨기기

<소스코드>


<컴파일>

*컴파일 명령어는 만들어질 실행파일 명을 먼저 적고 컴파일할 파일 이름을 적는다.

(컴파일이 잘됬는지 확인하는 센스!)


<setUID 설정>



<유저아이디 접속후 백도어 실행>

*일반 계정으로 로그인 후 backdoor 파일을 실행 했을시 권한이 상승된 것을 볼수 있다.


<숨기기>

백도어 파일을 생성하고 잘 동작하는 것을 확인 했다면 이제는 관리자한테 들키지 않게 잘 숨겨둬야한다.

방법 중 하나는 기존의 SetUID가 걸려있는 파일을 바꿔치기하거나 변조하는 방법이다.

find / -perm -4000 명령어로 setuid가 걸려있는 파일을 찾는다.


이중에서 마음에 드는 파일과 바꿔치기하기!



*백도어를 이용하면 일반 사용자가 쉽게 관리자 권한을 가져올 수 있다.

 그러나 백도어를 생성하고 setuid를 설정하기 위해서는 관리자 권한이 필요하다는 치명적 단점도 존재한다.

그래서 보통 해킹을 끝내고 제접속을 위해 마지막에 백도어를 숨기고 나온다.

백도어는 간편하면서도 가장 무서운 양날의 칼 같은 존재인 것 같다.

보안관리자가 가장 중요시 점검해야되는 부분인 것 같다.




windows Backdoor 프로그램에는 netbus란게 있다.

클라이언트쪽에서 patch파일을 실행하면 포트가 열리면서 내가 접속할 수 있게되는 프로그램인데

상대방 PC의 행동 제어 및 화면 훔쳐보기가 가능하다.

툴시연은 올리지 않곘다.

'i2sec > System hacking' 카테고리의 다른 글

백도어 탐지  (0) 2014.04.27
SetUID  (0) 2014.04.27
Unix & Windows 인증 구조  (0) 2014.04.27
패스워드 크래킹  (0) 2014.04.23
Windows 단축키 및 주요 프로세스  (0) 2014.04.21

SetUID

i2sec/System hacking 2014. 4. 27. 16:45

1.SetUID란?

- 프로그램 소유주의 권한으로 프로그램을 실행하는 것을 말한다.

- 이는 리눅스에서 매우 중요한 부분이며 해킹 중 90%이상 차지하는 방법이다. 

  잘쓰면 가장 유용하지만 잘못관리하게 되면 가장 취약한 점이 될수있는 위험한 부분이다


2.SetUID 설정

<일반 권한>


(1) 파일형식 : 파일 형식을 나타내는 부분 => -:파일, d:디렉토리, l:링크파일

(2) 소유자 권한 

(3) 그룹 권한

(4) 나머지 사용자 권한


* r은 읽기 권한을 의미 == 4

 w는 쓰기 권한을 의미 == 2

 x는 실행 권한을 의미 == 1

ex> .bashrc의 권한을 해석해보면 소유자는 읽고 쓰기가 가능하고 그룹 사용자는 읽기만 가능 그외 사용자들은 읽기만 가능

      이권한을 숫자로 표현하게되면 r+w =6, r =4, r=4   ==> 644가 된다.


<SetUID 권한>

파일을 하나 생성 후 chmod 명령어로 실행권한을 4644로 변경하였다.

(setUID = 4000, SetGID = 2000, Sticky bit= 1000)

나머지 권한은 644랑 같은 것 같은데 바뀐부분이 2가지 있다.


첫번째는 쇼유자의 x자리가 s로 바뀌었다.

setUID가 설정되게되면 소유자 권한의 x부분이 s로 바뀌게 되고

SetGID가 설정되면 그룹 권한의 x부분이 s로 바뀌게 되고

Sticky bit가 설정되게 되면 나머지 사용자권한의 x부분이 t로 바뀌게 된다.

(실행권한이 안들어가 있으면 대문자로 표현되고 실행권한이 있으면 소문자로 표현된다) 


두번째는 파일이름이 붉은 블럭형태로 변경된 것을 볼 수있다.

권한을 보지 않고도 파일 이름의 형태로만으로 유추가 가능하다.


ex> 7777권한을 표시 --> -rwsrwsrwt


3.Passwd 실행 원리(Setuid 비트)



R : 계정관리

RUID : Real UID 실제 계정이 누구인가?

RGID : Real GID 실제 그룹이 누구인가?


E : 프로세스 권한확인

EUID : Effective UID 어떤 유저권한으로 프로세스를 실행하고있는가?

EGID : Effective GID 어떤 그룹권한으로 프로세스를 실행하고있는가?


* ruid는 계정 자체의 권한을 말하고, euid는 프로세스 실행시의 권한을 의미한다.

예를 들어 setuid를 이용하여 일시적으로 권한을 0(루트)으로 변경했다고 하자.

이경우 euid 가 0번 권한을 가지고, ruid는 여전히 500 권한이다. 프로세스가 실행시에만 루트 권한을 획득한다는 의미이다.  프로세스를 다시 종료 시키면, 500 권한으로 돌아온다.

여기서 setuid가 일시적으로 소유자의 권한을 부여한다는것을 알수가 있다.




'i2sec > System hacking' 카테고리의 다른 글

백도어 탐지  (0) 2014.04.27
백도어(Backdoor)  (0) 2014.04.27
Unix & Windows 인증 구조  (0) 2014.04.27
패스워드 크래킹  (0) 2014.04.23
Windows 단축키 및 주요 프로세스  (0) 2014.04.21

Unix & Windows 인증 구조

i2sec/System hacking 2014. 4. 27. 15:30

1.unix 인증구조


1)Passwd 파일 구조

root : x : 0 : 0 : root : /root : /bin/bash

(1)   (2) (3) (4)  (5)    (6)      (7)


(1) Login name : 사용자 계정 의미

(2) Password : 사용자 암호가 들어갈 자리이나 /etc/shadow 파일에 저장

(3) User ID : 사용자 ID 즉, UID를 의미하고 root의 경우 0이 된다

(4) User Group ID : 사용자가 속한 그룹 ID 즉, GID를 의미하고 root 그룹의 경우 0이 된다

(5) Comment : 사용자으 ㅣ코멘트 정보를 적는 곳

(6) Home Directory : 사용자의 홈 디렉토리를 지정하는 곳

(7) Shell : 사용자가 기본으로 사용할 쉘 종류 지정


2)Shadow 파일 구조

root:$1$T/4NE$Gs/5lTpDNNAAPkN9iBdU11:16157:0:99999:7:  :   :

(1) (2)      (3) (4) (5) (6)(7)(8) (9)


(1) Login name : 사용자 계정

(2) Encrypted : 패스워드를 암호화시킨 값

  *'$' 구분자 역할을 하며 3부분으로 나뉜다.

   '1' : 암호화 방식을 나타내는 부분으로 1은 MD5를 의미한다.

   '$T/4NE' : Salt값으로 패스워드와 조합하여 해시값을 생성할 때 사용된다.

   'Gs/5lTpDNNAAPkN9iBdU11' : 해시값. 실제 비밀번호가 암호화된 부분이다.


(3) Last Changed : 1970년 1월 1일부터 패스워드가 수정된 날짜의 일수를 계산

(4) Minimum : 패스워드가 변경되기 전 최소사용기간(일수)

(5) Maximum : 패스워드 변경 전 최대 사용기간(일수)

(6) Warn : 패스워드 사용 만기일 전에 경고 메시지를 제공하는 일수

(7) Inactive : 로그인 접속 차단 일 수

(8) Expire : 로그인 사용을 금지하는 일수 (월/일/연도)

(9) Reserved : 사용하지 않음


*(3)~(9)은 거의 볼 일 없다 중요한 것은 (2)!!!


*해시값 만들기

 [root@localhost ~]# openssl passwd -1 -salt T/4NE(salt 값 입력)

 Password:                                        (원하는 패스워드 입력)

 $1$T/4NE$pT/ALNPWEcNks/yfrCKkC0                  (패스워드 + salt 값을 통해 생성된 해시값)



3)암호화 : 특정키를 이용해서 평문을 암호문으로 변경하는 것을 말한다. 치환기법

         암호문을 보고 평문을 찾아낼수있다.


4)해시 : 데이터를 자르고 치환하거나 위치를 바꾸는 등의 방법을 사용해 결과를 만들어낸 값을 해시값이라 한다.  

       확률이 낮으나 해시값이 언제든지 똑같이 나올수 있음.

       해시값은 복호화가 불가능하다.


5)존더리퍼(J.T.R)

Unix나 Linux의 패스워드를 검사하여 취약한 패스워드를 보여주는 툴이다.

Linux 패스워드 진단용으로 많이 사용되고 있다.

-------------------사용방법----------------------

john the ripper (존더리퍼) - password cracking tool

-------------------------------------------------

wget http://www.openwall.com/john/g/john-1.7.8.tar.gz(다운로드)

tar zxvf john-1.7.8.tar.gz(압출풀기)

cd john-1.7.8

cd src

-------------------------------------------------

make(시작)

make clean SYSTEM(현재 리눅스 서버 시스템이 무엇인지 검사)

make clean generic(조사가 끝나고 그것에 맞게 설정)

-------------------------------------------------

cd ../run

./john --test (벤츠마킹)

./john /etc/shadow (비밀번호 해독)

-------------------------------------------------

<실행 결과>


이렇게 간단하거나 사전적 단어로 설정된 비밀번호가 노출된다.

그러나 간단한 비밀번호라도 조금만 길어지니깐 찾질 못했다. 별로 효율성이 높은 툴은 아닌것 같다.


2.Windows 인증구조



<프로세스 설명>

winlogon(winlogon.exe): 윈도우 로그인 프로세스의 한부분이다.

GINA (msGINA.dll): Winlogon 내에서 msGINA.dll을 로딩시켜 사용자가 입력한 계정과 암호를 LSA에게 전달

lsa(lsass.exe): 전달받은 계정과 암호를 검증하기위해 NTLM모듈을 로딩하고 계정을 검증

                      SRM이 작성한 감사로그를 기록하는 역할수행.

SAM (sercurity accounts manager) : 사용자 계정 정보(암호화된 해시값)가 저장. ( 리눅스에 etc/shadow와 같은역할 ,                                                     중요하므로 복사본존재)

SRM (security reference monitor) : 사용자에게 고유의 SID를 부여한다. 

                                                  SID에 준하는 권한을 부여함

SID위치: HKEY_LOCAL_MACHINEWSOFTWARE \ Microsot \ Windows NT \ CurrentVersion \ ProileList


<동작원리>

1. 사용자가 ID/PW를 입력한다.

2.GINA에서 입력받은 ID/PW를 LSA에게 전달한다.

3.LSA가 내부에서 NTLM을 실행 시켜 검증을 시작한다.

4.NTLM이 SAM에 저장된 기존의 사용자 정보와 동일한지 비교

5.비교결과가 맞다면 SRM에서 사용자에게 교유 SID 부여

6.부여된 SID가 사용자에게 전달되면서 실행권한을 획득


<윈도우의 인증방식>

1.LM : 윈도에서 가장 약한(가장 최초) 인증 밥법이다. 윈도우 95,98,ME 버전에서 사용되었다.

2.NTLM 버전 1 : LM보다는 안전하지만 취약점이 발견되어 짧게 적용되었다.

3.NTLM 버전 2 : 현재 대부분의 시스템에 적용되고 있다.



'i2sec > System hacking' 카테고리의 다른 글

백도어 탐지  (0) 2014.04.27
백도어(Backdoor)  (0) 2014.04.27
SetUID  (0) 2014.04.27
패스워드 크래킹  (0) 2014.04.23
Windows 단축키 및 주요 프로세스  (0) 2014.04.21