사이트 내 전체검색
[linux] 백도어의 종류
로빈아빠
https://cmd.kr/server/418 URL이 복사되었습니다.

본문

백도어의 종류

트로이목마 프로그램은 시스템에 대한 재침입을 위한 백도어로 사용하기 위해 시스템에 설치하는 경우가 많다. 다음은 공격자에 의해 사용될 수 있는 넓은 의미의 백도어들을 소개하기로 한다.

■ 패스워드 크래킹 백도어
유닉스 시스템에 접속하기 위한 최초이며 고전적인 침입 방법으로 백도어들은 패스워드 크래커를 실행하여 취약한 패스워드를 가진 계정을 알아낸다. 이러한 계정들은 시스템에 침입하기 위한 백도어의 가능성을 내재하고 있다. 침입자들은 취약한 패스워드를 가진 사용하지 않는 계정들을 탐색하여 그 패스워드를 어려운 계정으로 바꾸어버린다. 시스템 관리자가 유추가능한 취약한 패스워드를 찾아 사용을 금지시키려 해도 이미 이러한 계정을 찾을 수 없는 상태가 된다.

■ Rhosts + + 백도어
네트워크에 연결된 유닉스 시스템에서 사용의 편리성을 위해 rsh, rlogin 등의 서비스를 많이 사용하고 있다. 이 명령어들은 호스트 이름에 의해 인증이 이루어지고 추가적인 패스워드를 묻지 않는 보안 취약성을 내재하고 있다. 침입자는 어떤 사람의 rhosts 파일에 "+ +"를 넣어 어떤 호스트의 어떤 사용자라도 해당 사용자로 패스워드 없이 들어올 수 있도록 한다. 많은 침입자들은 NFS가 홈디렉토리를 모든 호스트에 export하고 있을 경우에 이 방법을 많이 사용한다. 이 계정들은 시스템에 침입할 수 있는 백도어가 된다. 시스템 관리자가 rhosts 파일에서 "+ +"를 검사할 수 있으므로, 침입자는 여기에 자신이 해킹한 다른 계정을 등록함으로써 발견 가능성을 줄인다.

■ Checksum과 Timestamp 백도어
침입자들이 실행파일을 자신의 트로이목마 버전으로 교체시키는 경우가 있다. 많은 시스템 관리자들은 타임 스탬프와 유닉스의 sum 프로그램 등과 같은 체크섬 값에 의해 실행파일의 변경유무를 진단한다. 하지만 침입자들의 기술도 발달되어 트로이목마 프로그램의 타임 스탬프를 원래 파일의 타임 스탬프 값으로 생성시킬 수 있고, CRC 체크섬 값도 원래의 체크섬 값으로 가장할 수 있다. MD5 체크섬은 이러한 임의적인 가장이 불가능하므로 무결성 보장을 위한 도구로 권고되고 있다.

■ Login 백도어
유닉스 시스템에서 login 프로그램은 사용자가 텔넷을 통해 시스템에 접속할 경우 패스워드 인증을 수행한다. 침입자들은 login.c 프로그램을 수정하여 특정한 백도어 패스워드가 입력될 경우 관리자가 어떤 패스워드를 설정해 놓든지에 상관없이 로그인을 허용하고, utmp나 wtmp와 같은 로그파일에 기록도 하지 않도록 한다. 침입자는 침입한 흔적을 남기지 않고 시스템에 로그인하여 쉘을 획득할 수 있다. 시스템 관리자는 "strings"라는 명령어를 사용하여 login 실행 프로그램에 백도어 패스워드의 유무를 점검하기도 하지만, 침입자들은 백도어 패스워드를 암호화하여 저장함으로써 이러한 명령어에 의한 발견을 피할 수 있다. 가장 좋은 방법은 MD5 체크섬을 이용하여 이러한 백도어들을 탐지해 내는 것이다.

■ Telnetd 백도어
사용자가 시스템에 텔넷 접속을 할때, inetd 서비스가 그 포트를 리슨하고 있다가 in.telnetd에 연결시켜 주고, in.telnetd는 login 프로그램을 구동한다. 어떤 침입자는 시스템 관리자가 login 프로그램을 수시로 점검하기 때문에 아예 in.telnetd를 수정하는 경우도 있다. in.telnetd는 사용자들로 부터 터미널 종류 등 몇 가지 사항을 점검한다. 일반적으로 터미널은 Xterm이나 VT100으로 설정되어 있다. 침입자는 터미널 종류가 "letmein" 등 특수하게 설정되어 있을 경우 인증과정 없이 쉘을 부여하도록 in.telnetd를 수정할 수 있다. 침입자는 어떤 서비스에 백도어를 설치하여 특정 소스 포트로 부터 오는 연결에 대해서는 쉘을 부여하도록 할수도 있다.

■ Services 백도어
대부분의 네트워크 서비스들 즉, finger, rsh, rexec, rlogin, ftp 심지어 inetd 등은 백도어 버전이 존재한다. 이 프로그램들은 uucp와 같이 전혀 사용되지 않는 서비스를 백도어 프로그램으로 교체하여 inetd.conf 파일에 등록는 경우도 있다. 관리자는 시스템에서 어떤 서비스들이 제공되고 있는지 항상 점검하고, 원래 서비스가 수정되지 않았는지 MD5 체크섬에 의해서 진단해야 한다.

■ Cronjob 백도어
Cronjob은 유닉스 시스템에서 특정 프로그램을 특정 시간에 구동될 수 있도록 한다. 침입자는 백도어 쉘 프로그램을 cronjob에 추가하여 새벽 1시에서 2시 사이에 구동되도록 할 경우 이 시간동안 침입자는 시스템에 접속할 수 있다. 침입자는 cronjob에서 전형적으로 구동되는 합법적인 프로그램인 것처럼 가장한다.

■ Library 백도어
대부분의 유닉스 시스템에서는 공유 라이브러리를 사용한다. 공유 라이브러리는 같은 루틴들을 재사용하여 프로그램의 크기를 줄이기 위해 사용한다. 어떤 침입자들은 crypt.c나 _crypt.c 프로그램 같은 루틴들에 백도어 프로그램을 넣어 두기도 한다. login.c는 crypt() 루틴을 사용하게 되는데 백도어 패스워드가 사용될 경우 바로 쉘을 부여하게 된다. 관리자가 login 프로그램의 MD5를 점검한다고 하더라도 백도어 코드를 찾을 수 없고 대다수의 관리자들이 백도어의 근원지를 찾아내기가 상당히 힘들다. library 백도어에 대한 대책은 MD5 체크섬 점검기를 정적으로 연결하여 시스템에서 구동하는 것이다. 정적으로 연결된 프로그램은 트로이목마의 공유 라이브러리를 사용하지 않는다.

■ Kernel 백도어
kernel은 유닉스 시스템이 운용되는 핵심이다. 라이브러리에서 사용되었던 같은 방법으로 MD5 체크섬을 우회할 수 있다. 잘 만들어진 백도어가 설치된 커널은 관리자가 찾기 가장 어려운 백도어일 것이다. 다행히 커널 백도어 스크립트들은 널리 쓰이고 있지는 않지만 아무도 실제 얼마나 배포되어 쓰이고 있는지 모른다.

■ 파일 시스템 백도어
침입자는 서버로부터 획득한 전리품과 데이터들을 관리자에게 발각되지 않고 저장하고자 한다. 침입자들이 저장하는 파일들은 일반적으로 해킹 스크립트의 도구박스, 백도어들, 스니퍼 로그들, 전자우편 메시지들과 같은 데이터, 소스코드 등이다. 침입자는 특정 디렉토리나 특정 파일을 숨기기 위해 "ls", "du" 그리고 "fsck"와 같은 시스템 명령어들을 수정한다. 그렇지 않으면, 숨기려는 부분을 "bad" 섹트로 보이게 하고, 침입자는 숨겨진 파일을 오직 특수한 도구를 통해서만 보이게 할 수도 있다.

■ Bootblock 백도어
일반 PC에서는 바이러스가 bootblock에 자신을 숨기고 대부분의 바이러스 백신은 bootblock이 바뀌어졌는지를 감시한다. 유닉스 시스템에서는 부트 블럭을 점검할수 있는 소프트웨어가 거의 없어, 침입자들이 부트 블럭 공간에 백도어를 숨겨두기도 한다.

■ 프로세스 은닉 백도어(Process hiding backdoors)
침입자는 그들이 구동하고 있는 프로그램들을 숨기려고 한다. 그들이 숨기려고 하는 프로그램들은 일반적으로 패스워드 크래커, 스니퍼 프로그램 등이다.
아래는 프로세스를 숨기는 몇가지 방법이다.
○ 숨기려는 프로그램 자신의 argv[]를 수정하여 다른 프로세스 이름으로 보이도록 한다.
○ 침입자는 스니퍼 프로그램을 in.syslog와 같은 합법적인 서비스로 이름을 바꿀 수 있다. 관리자가 "ps" 등으로 어떤 프로세스들이 구동되고 있는지 점검하면 정상적인 이름들이 나타나게 된다.
○ 침입자는 라이브러리 루틴들을 수정하여 "ps"가 특정 프로세스를 보여주지 못하게 할수 있다.
○ 백도어 프로그램을 패치하거나 인터럽트 driven 루틴들을 삽입하여 프로세스 테이블에 나타나지 않도록 할 수 있다.
○ 커널을 수정하여 특정 프로세스를 숨기도록 할 수도 있다.

■ 루트킷(Rootkit)
백도어를 설치하는 가장 인기있는 패키지 중의 하나가 루트킷이다. 루트킷에 소개된 전형적인 백도어용 프로그램들은 다음과 같다.
○ z2 - utmp, wtmp, lostlog로 부터 특정 엔트리를 제거한다.
○ Es - sun4 기반 커널들의 이더넷 스니퍼
○ Fix - 체크섬 값을 가장하는 도구
○ Sl - 매직 패스워드를 통하여 관리자로 로그인하는 도구

■ 네트워크 트래픽 백도어(Network traffic backdoors)
침입자들은 시스템에서 자신들의 흔적을 숨기려고 할 뿐더러 가능하면 자신들의 네트워크 트래픽까지 숨기기를 원한다. 이러한 네트워크 트래픽 백도어들은 간혹 침입차단시스템(firewall)을 거쳐서 침입할 수 있는 것들도 있다. 많은 네트워크 백도어들은 일반적으로 사용하지 않는 네트워크 포트를 사용하여 시스템에 침입하므로 관리자들이 침입자의 트래픽을 간과하기 쉽다.

■ TCP 쉘 백도어
침입자는 침입차단시스템이 막지 않는 높은 TCP 포트에 TCP 쉘 백도어들을 설치할 수 있다. 관리자들은 netstat를 통해서 어느 포트들이 연결을 기다리고 있고, 어느 포트가 연결되어 있는지를 점검할 수 있다. 이러한 백도어들은 SMTP 포트 상에서 구동될 수도 있어, e-mail을 허용한는 침입차단 시스템을 통과할 수 있다.

■ UDP 쉘 백도어
관리자들이 TCP 연결에 대해서는 관리를 잘하고 이상한 행위를 알아차리기가 쉽지만, UDP 쉘 백도어는 유닉스 시스템에 접속한 상태를 netstat 등으로 알기가 쉽지 않다. 많은 침입차단시스템에서 DNS 서비스등을 위해 UDP 패킷들을 허락하도록 설정되어 있어 침입자는 UDP 백도어를 설치하여 침입차단 시스템을 무사히 통과할 수 있다.

■ ICMP 쉘 백도어
Ping은 ICMP 패킷을 보내고 받음으로써 시스템이 살아있는지 확인하는 가장 일반적인 방법이다. 많은 침입차단시스템들이 외부로부터 내부 시스템에 대한 ping을 허락한다. 침입자는 ping ICMP 패킷에 데이터를 추가하여 ping을 하고있는 시스템과 쉘을 제공받을 수 있도록 한다. 시스템 관리자는 다량의 ping 패킷들을 발견하겠지만 패킷 속의 데이터를 보지 않는 이상 침입 사실을 알수 없다.

■ 암호화된 링크
관리자가 스니퍼를 설치하여 쉘에 접근하려는 사람을 찾으려고 할 수 있다. 하지만 침입자는 네트워크 트래픽 백도어를 암호화하여 실제 두 시스템 간에 어떤 데이터가 전송되고 있는지를 숨긴다.

■ Windows NT
Windows NT는 유닉스 시스템처럼 단일 시스템에 다수 사용자들을 접속하도록 허락하지 않는다. 이는 침입자가 Windows NT 시스템에 침입하여 백도어를 설치하고 시스템을 공격하는 것을 어렵게 한다. 하지만 Windows NT가 다수 사용자 기술이 발달됨에 따라 Windows NT 시스템에 대한 공격 사례가 늘어나고 있다. 요즘 Windows NT를 위한 telnet 데몬이 이미 나와 있고, 네트워크 트래픽 백도어를 Windows NT 시스템에 설치하는 것이 쉬워졌다.

댓글목록

등록된 댓글이 없습니다.

1,139 (10/23P)

Search

Copyright © Cmd 명령어 18.225.195.4