강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

트로이 목마와 백도어 분석 보고서

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

트로이 목마와 백도어 분석 보고서

1999. 5.

정현철/CERTCC-KR, 한국정보보호센터

hcjung@{certcc,kisa}.or.kr

 

비인가된 사용자에 의한 불법 침입이 가능한 트로이 목마 버전의 TCP Wrapper, MS사에서 제공하는 유용한 패치 프로그램을 가장한 IE의 트로이목마 프로그램, 그리고 최신 버전의 루트킷(rootkit) 발표 등 최근 트로이 목마와 백도어 관련 사고가 증가하고 있다.

트로이 목마(trojan horse)는 정상적인 기능을 할 것처럼 보이나 실제로 다른 기능을 하는 프로그램을 말하고 백도어(backdoor)는 시스템에 비인가된 접근을 가능하게 하는 프로그램을 말하는 것으로써, 트로이목마가 시스템의 불법적인 침입을 위한 백도어로 사용되기도 한다.

본 고에서는 시스템을 침해할 수 있는 악성 프로그램인 트로이 목마와 백도어의 개념을 먼저 살펴보고, 최근 발견되고 있는 트로이 목마 프로그램들을 소개한다.

그리고 백도어의 종류, 백도어 프로그램 설치를 위한 패키지인 루트킷에 대해서 알아본다. 마지막으로 트로이목마에 대한 대책으로써 파일 시스템 무결성 점검 도구인 Tripwire를 소개하고 기타 트로이 목마와 백도어에 대한 대응책을 알아보도록 한다.

1. 트로이 목마와 백도어의 개념

가. 트로이 목마(trojan horse)란?

트로이목마는 정상적인 기능을 하는 프로그램으로 가장하여 프로그램 내에 숨어서 의도하지 않은 기능을 수행하는 프로그램의 코드 조각이다. 이는 바이러스나 웜에서 주로 사용하는 메커니즘이다.

고전적인 의미로 트로이 목마는 오딧세우스의 소설에 등장하는 것으로 트로이 전쟁 동안 사용된 커다랗고 속이 텅 빈 목마이다. 그리스는 이 목마에 병사들을 숨긴 채 트로이 성 입구에 놔 두었다. 트로이 사람들은 그 목마를 성 안으로 가져 왔고, 트로이 병사들이 잠든 한밤중에 목마에 숨어 있던 병사들이 목마 안에서 나와 도시를 공격하고 마침내 전쟁을 승리로 이끌었다.

최근의 컴퓨터 세계에서 말하는 트로이 목마는 유용하고 흥미있는 기능을 수행하거나 그런 기능을 하는 것처럼 보이는 독립된 프로그램에 숨어 있다. 이러한 표면적으로 드러나는 기능과 함께 트로이 목마 프로그램은 어떤 다른 비인가된 기능을 수행한다. 전형적인 트로이 목마는 유용한 것으로 가장하여 사용자가 그 프로그램을 실행하도록 속인다. 사용자가 의심하지 않고 그 프로그램을 실행하게 되면 실제 기대했던 기능이 수행된다. 하지만 실제 목적은 사용자의 합법적인 권한을 사용하여 시스템의 방어 체제를 침해하고 공격자는 접근이 허락되지 않는 정보를 획득하는 것이다. 트로이 목마는 새로운 시스템 기능에 대한 정보를 보여주거나 새로운 게임이라고 하는 프로그램들에 숨어 있는 경우가 많다.

전통적인 트로이 목마 공격은 Dennis M. Ritchie에 의해 소개되었다.

공격자는 정상적인 login 기능을 하는 것 같은 패스워드 수집기(Password grabber)프로그램을 작성한다. 의심없는 사용자가 로그인 프롬프트(login :)를 보면 로그인하려고 하고, 프로그램은 정상적인 로그인 순서로 사용자가 평범한 방법으로 로그인하고 있다고 생각하게 한다. 하지만 트로이 목마를 가진 그 프로그램은 로그인 ID와 패스워드를 받으면 이 정보를 공격자 소유의 파일에 복사하거나 메일로 공격자에게 전송한다. 그리고 "login incorrect"라는 오류 메시지를 보낸다. 사용자는 자신이 잘못 쳐 酽었다고 생각하고 로그인 ID와 패스워드를 다시 친다. 그 동안 트로이 목마를 가진 프로그램은 빠져 나오고 실제 login 프로그램에게 제어권을 넘겨 준다. 다음에 사용자는 성공적으로 로그인하게 되고 자신의 로그인 ID와 패스워드 정보가 유출되었다는 사실을 전혀 의심치 않는다.

어떤 이는 이러한 종류의 트로이 목마를 "Trojan mule"이라고 부르는데 그 이유는 전형적인 트로이 목마처럼 유용한 시스템 정보를 보여주는 프로그램이나 게임 프로그램에 숨어 있는 것과는 다르게, 유용한 기능을 가장하지 않고 단순한 눈속임이기 때문이다.

어떤 트로이 목마는 자기 존재의 흔적을 남기지 않아 발견될 염려가 없고, 의심받지 않는 소프트웨어에 숨어 있다. 또 발견되기 전에 스스로를 파괴하도록 프로그래밍 될 수도 있다.

나. 백도어(backdoor)란?

백도어는 시스템 설계자나 관리자에 의해 고의로 남겨진 시스템의 보안 헛점으로 응용 프로그램이나 운영체제에 삽입된 프로그램 코드이다. 즉 백도어는 시스템 접근에 대한 사용자 인증 등 정상적인 절차를 거치지 않고 응용 프로그램 또는 시스템에 접근할 수 있도록 한다. 이러한 보안 헛점을 남겨두는 이유가 항상 악의적인 것은 아니다. 경우에 따라서는 현장 서비스 기술자나 시스템 공급자의 유지보수 프로그래머가 사용할 목적으로 특수 계정을 허용하는 코드를 운영체제나 응용프로그램에 넣을 수도 있다. 이러한 백도어는 디버깅 시 개발자에게 인증 및 셋업시간 등을 단축하기 위한 뒷문으로 사용된다. 하지만 이러한 백도어가 비양심적인 프로그래머가 비인가된 접근을 시도하거나 개발이 완료된 후 삭제되지 않은 백도어가 다른 사용자에 의해 발견될 경우 대단히 위험할 수도 있다.

1983년 Ken Thompson이 ACM에서의 강연에서 초기의 유닉스 버전에는 백도어가 존재하고 뛰어난 해커라면 이를 공격할 수도 있다고 말했다. 이러한 스킴으로 'login' 프로그램이 재 컴파일되어 특정 패스워드가 입력되었을 경우 접근을 허락하도록 하는 코드가 숨겨져 있을 수도 있다. 그 결과 시스템에 계정이 있든지 없든지 간에 시스템으로의 접근이 허용될 수 있다.

컴퓨터 시스템에 침입하려는 공격자들은 시스템에 비정상적인 방법으로 시스템에 접근하고자 백도어 기술을 개발하였다. 침입을 위한 백도어 프로그램들의 주요 특징은 다음과 같다.

① 모든 패스워드들을 바꾸는 등 관리자가 안전하게 관리하려고 함에도 불구하고 시스템에 침입할 수 있다.

② 발견되지 않고 시스템에 침입할 수 있다. 대부분의 백도어 프로그램은 로그를 남기지 않고, 온라인으로 들어 왔음에도 불구하고 이를 발견할 수 없다.

③ 시스템에 최단 시간에 침입할 수 있다.

2. 최근 발견되고 있는 트로이목마 프로그램들

최근 유닉스 시스템뿐만 아니라 윈도우즈 시스템에서도 각종 트로이목마가 등장하고 있어 주의를 요한다. 다음은 최근에 발견되고 있는 트로이목마들이다.

■ 인터넷 익스클로러(IE)의 거짓 업그레이드

마이크로소프트사의 IE 웹브라우저를 무료로 업그레이드하라는 내용의 전자 우편이 광범위하게 배포되고 있다.

그러나 마이크로소프트사는 패치나 업그레이드를 전자우편을 통해서 제공하지 않고 전자우편을 통해서는 보안 게시(security bulletins)만을 한다고 발표했다.

메일 메시지에는 Ie0199.exe라는 실행 프로그램이 첨부되어 있다. 사용자가 무심코 첨부된 Ie0199.exe 프로그램을 설치하여 실행하게되면 그 프로그램은 몇몇 시스템 파일에 대한 수정과 다른 원격 시스템으로의 접속을 시도하는 행위를 한다.

트로이목마의 한 버전은 다음과 같은 메시지를 포함한다.
 

As an user of the Microsoft Internet Explorer, Microsoft Corporation provides you with this upgrade for your web browser. It will fix some bugs found in your Internet Explorer. To install the upgrade, please save the attached file (ie0199.exe) in some folder and run it.


위와 같은 메시지는 실제 마이크로소프트사가 보낸 것이 아니다.

■ 트로이 목마 버젼의 TCP Wrappers

TCP Wrappers는 유닉스 시스템에서 네트워크 서비스를 필터링하고 모니터링할 수 있는 유용한 도구로써 시스템 보안을 위해서 광범위하게 사용되고 있다.

최근 공격자에 의해 소스가 변경되어 트로이목마가 숨겨진 tcp_wrappers_7.6.tar.gz이 배포되고 있다. 이 트로이 목마는 1999년 1월 21일 이후, 몇몇 FTP 서버에서 발견되고 있다.

트로이목마 버전의 TCP Wrapper는 소스 포트가 421번을 가지고 있는 접속이 시도될 경우 root로의 접근을 허락한다. 또한 이 트로이 목마 버전은 컴파일 도중에 사용자 계정과 시스템의 정보를 'whoami'와 'uname -a'를 이용하여 얻은 후 외부에 전자메일을 통해 발송한다.

이 트로이 목마 버전의 TCP Wrapper가 동작 중인 호스트에 공격자는 시스템 관리자 권한으로 불법 침입이 가능해 진다.

■ 트로이목마 버젼의 util-linux

util-linux는 리눅스 시스템을 위한 몇몇 기본적인 유틸리티를 포함하는 배포판이다. 1999년 1월 22일에서 1월 24일 사이에 최소한 한 ftp 서버의 util-linux-2g.tar.gz 파일에 트로이목마가 있다. 이 트로이목마는 미러 FTP 사이트를 통해서도 배포될 수 있었다.

트로이목마 버전의 util-linux에는 /bin/login이 수정되어 있다. 이 수정된 코드는 호스트 이름과 로그인한 사용자의 uid를 포함하는 내용을 전자우편을 통해 공격자에게 보낸다. 또한 어떤 사용자에게 명령을 실행시킬 수 있는 로그인 프로프트를 제공해 주도록 수정되었다.

트로이목마가 설치되었는지 확인하기 위한 빠른 방법은 다음의 명령을 실행시켜 보는 것이다.

$ strings /bin/login | grep "HELO"

실행결과 아래의 결과가 나타나면 트로이 목마 버전의 util-linux-2.9g이 설치되어 있는 것이다.

HELO 127.0.0.1

실행결과 아무런 출력이 없으면 트로이목마가 설치되지 않은 것이다.

util-linux의 개발자에 의해서 제공되는 사이트에서 안전한 파일을 받을 수 있다.

ftp://ftp.win.tue.nl/pub/linux/utils/util-linux/util-linux-2.9h.tar.gz

3. 백도어의 종류

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

■ 패스워드 크래킹 백도어

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

■ 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 시스템에 설치하는 것이 쉬워졌다.


4. 루트킷(RootKit)

루트킷은 시스템 침입 후 침입 사실을 숨기거나, 차후의 침입을 위한 백도어 등 각종 트로목마 프로그램의 모음이다. 리눅스와 SUN 시스템에 이러한 루트킷이 발견되고 있으며, 지난 '98년 11월 기능이 보강된 리눅스 루트킷 버전 4가 발표되었다.

루트킷은 원격접근, 내부 사용흔적 삭제, 관리자 권한 획득 그리고 기타 용도의 프로그램들의 모음이다.

[ 1] 대표적인 트로이목마와 뒷문 프로그램 사례

분류

주요 파일

기 능

비 고

원격

접근

trojaned login

매직 패스워드를 사용, 로그후 로그를 안남김


trojaned inetd

외부에서 숨겨진 포트에 접속 허용


trojaned rshd

매직 패스워드를 사용, 로긴후 로그를 안남김


trojaned tcpd

특정 IP에대해 무조건 접근허가


trojaned crontab

crontab에 백도어 데몬 심음


내부

사용

흔적

삭제

trojaned ps, top

특정 프로세스의 정보를 숨김


trojaned pidof

특정 프로세스의 정보를 숨김

버전 4.0에 추가

trojaned ifconfig

스니퍼링 탐지를 방해


trojaned netstat

특정 IP의 접속정보 숨김


trojaned ls

특정 파일이나 디렉토리 숨김


trojaned du

특정 파일이나 디렉토리 숨김


trojaned find

특정 파일이나 디렉토리 숨김

버전 4.0에 추가

trojaned syslogd

특정 로그내용 숨김


wted

wtmp/utmp 편집기


z2

특정 사용자 로그인 정보 삭제


관리자권한

획득

trojaned shell

부팅화일들이나 보안취약점을 이용 생성


trojaned chfn

일반사용자가 루트가 되게하는 백도어 루틴내장


trojaned chsh

일반사용자가 루트가 되게하는 백도어 루틴내장


trojaned passwd

일반사용자가 루트가 되게하는 백도어 루틴내장


기타

sniffchk

스니퍼 동작 상태 점검

버전 4.0에 추가

trojaned killall

특정 프로세스를 보호

버전 4.0에 추가


리눅스 루트킷은 rootkit.h라는 구성파일에 시스템 관리자로 접근하기 위한 매직패스워드, 숨기고자 하는 프로세스, 주소, 파일, 로그 등이 정의되는 파일을 설정할 수 있도록 되어 있다.

다음은 rootkit 설치시 기본적으로 설정된 rootkit.h 파일이다.
 

/* LINUX ROOTKIT DEFINES. */

/* ROOTKIT_PASSWORD must be 6 letters due to my lame attempts at string

hiding... */

#define ROOTKIT_PASSWORD "lrkr0x"

/* Processes to hide */

#define ROOTKIT_PROCESS_FILE "/dev/ptyp"

/* Addresses to hide */

#define ROOTKIT_ADDRESS_FILE "/dev/ptyq"

/* Files and directories to hide */

#define ROOTKIT_FILES_FILE "/dev/ptyr"

/* Log entries to hide */

#define ROOTKIT_LOG_FILE "/dev/ptys"

/* Define this if you want to be able to list hidden files/processes

for ls, du, ps, netstat . using / on the command line */

#define SHOWFLAG


설치시 공격자는 각 구성파일의 내용을 바꿀 수 있지만, 경우에 따라서 이러한 구성파일을 수정없이 사용하는 초보적인 공격자도 있으므로 관리자는 이러한 파일들을 주기적으로 점검하여야 한다.

위의 구성파일에서 #define ROOTKIT_PASSWORD "lrkr0x"라고 정의된 것은 공격자가 rootkit이 설치된 시스템에 정상적인 로그인 과정을 거치지 않고 불법적인 접근을 시도할 때 사용하는 패스워드를 "lrkr0x"로 하겠다는 의미이다.

다음 그림은 불법적인 접근 과정을 보여주고 있다.

01.gif

위의 그림에서 공격하고자 하는 시스템에 root로 접근하고자 하였을 경우 콘솔이외의 터미널에서 root로 접근하고자 하였으므로 접속이 거부되고 있지만 rewt라는 계정과 매직패스워드(lrkr0x)로 접근하였을 시 로그인이 허락되고 시스템관리자 권한을 부여하는 것을 알 수 있다. 또한 불법적인 접근 사실이 로그파일(utmp)에 기록되지 않아 w 명령어를 통해서 공격자가 로그인한 사실이 보이지 않은 것도 확인할 수 있다.

rootkit은 불법적인 접근과 함께 접근 후의 행위도 숨긴다.

공격자가 숨겨둔 해킹관련 도구나 해킹으로 수집한 정보들을 숨기기 위해 특정한 파일을 숨기기도 하고 스니퍼와 같은 해킹 프로세스의 동작을 숨기기 위해 특정 프로세스를 숨기기도 한다.

먼저 파일이나 디렉토리를 숨기기 위해서 rootkit.h의 ROOTKIT_FILES_FILE에 정의된 파일에 이들 파일이나 디렉토리를 추가한다. 설치시 ROOTKIT_FILES_FILE의 기본값은 /dev/ptyr 인데 이 파일에 다음과 같이 등록되어 있을 수 있다.

ptyr

lrk3

hacking

이 경우 ptyr, lrk3, hacking이라는 파일이나 디렉토리는 ls 등의 명령어를 통해서 보여지지 않는다.

마찬가지로 설치시 기본적으로 설정된 프로세스나 주소 그리고 로그를 숨기기 위한 파일은 각각 /dev/ptyp, /dev/ptyq, /dev/ptys인데 이들은 장치파일들이 저장되어 있는 디렉토리인 /dev를 사용하고 있다. /dev 디렉토리는 일반적으로 시스템 관리자들이 주의깊게 살피지 않는다는 헛점을 이용해 이 디렉토리에 이러한 파일들을 숨기는 사례가 많다.

5. 파일 시스템 무결성 점검

정보시스템 내의 트로이 목마와 백도어에 의한 불법적인 프로그램의 수정 및 변경 사실을 감시하기 위해서는 파일 시스템의 무결성을 점검하는 도구가 필요하다. 파일 시스템의 무결성 점검을 위해서 유닉스 시스템에서 기본적으로 제공하고 있는 16bit CRC 체크섬값을 사용할 수도 있으나 이는 공격자에 의해 위조될 수 있으므로 보다 전문적인 무결성 점검 도구의 사용이 필요하다.

무결성 점검을 위해 많이 사용되고 있는 알고리즘이 MD5 체크섬이다. 이는 일종의 해쉬 알고리즘으로 공격자에 의한 위조가 불가능하다.

MD5 무결성 점검값은 해커가 시스템을 공격하기 전에 만들어져야 한다. 일단 해커가 침입하여 트로이 목마나 백도어를 설치한 후에 MD5 기준값(baseline)을 생성하면 백도어 프로그램도 이 MD5 기준값에 포함되어 버린다. 시스템 관리자가 해커의 침입 흔적을 발견하고 시스템 백업 자료를 이용하여 다시 설치함으로써 백도어를 제거하려고 하지만, 이미 백업된 파일들 중에 백도어가 포함되어 있을 수 있다. 따라서, 이러한 MD5에 의한 시스템 무결성 검사의 기준값은 반드시 시스템이 해킹당하기 전에 미리 받아놓아야 한다.

무결성 점검을 위해 많이 사용되고 있는 도구 중의 하나가 tripwire이다.

tripwire는 파일시스템을 스캐닝하여 주요 파일에 대한 디지털 서명값을 유지하여, 차후 이들 파일이 변경되었는지 점검하는 도구이다. 불법적으로 변경된 파일에 대한 점검을 위해 CRC-16, CRC-32, SHA, Haval, MD-2, MD-4, MD-5(default 1), Snefru(default 2) 등 다양한 무결성 점검 알고리즘을 제공한다.

tripwite의 동작 개요는 다음 그림과 같다.

02.gif

① 설정파일인 tw.config 파일에 등록된 파일 및 디렉토리의 해쉬값을 생성한다.

② DB로 부터 이전에 생성된 각 파일 및 디렉토리의 해쉬값과 비교한다.

③ 비교시 tw.config의 select-maskes를 참조한다.

④ 비교 결과값이 다를 경우 경고 메시지를 출력한다.

위의 ③과정에서 사용되는 tw.config 파일은 무결성 점검 대상 디렉토리/파일 및 검색 방법이 정의된 파일로 다음과 같은 형태를 갖추고 있다.
 

[!|=] entry [ignore-flags]

!?: 해당 디렉토리 검색 제외

=?: 디렉토리 자체만 검색?

entry : 검색 대상 디렉토리/파일

ignore-flags(select-maskes)

[template][ [+|-][pinugsam12] ... ]

- : ignore the following atributes

+ : do not ignore the following attributes

p : permission and file mode bits

i : inode number

n : number of links (ref count)

u : user id of owner

g : group id of owner

s : size of file

a: access timestamp

m: modification timestamp

c: inode creation timestamp

1: signature 1

2: signature 2


위의 ignore-flags에서 파일들을 특성들에 따라 자주 사용되는 값들의 template를 제공하고 있다.

R : +pinugsm12-a

읽기 전용 파일에 사용되며 접근 시간만을 제외하고 모든 변경값을 비교한다.

L : +pinug-sam12

로그 파일에 사용되며 파일 사이즈 접근 및 수정시간 그리고 해쉬값이 제외된다.

N : +pinusgsamc12

모든 값을 비교한다.

E : -pinusgsamc12

모든 값을 비교하지 않는다.

> : L과 같지만 증가하는 파일은 무시한다.

다음은 tw.conf파일의 예이다.
 

#file/dir selection-mask

/etc R # /etc/ 아래의 모든 시스템 파일

!/etc/lp R # /etc/lp는 점검에서 제외

=/tmp N # /tmp 디렉토리만 점검하고 디렉토리 내의

파일은 점검하지 않음

/etc/utmpL # 로그파일



6. 기타 대응책

트로이 목마와 백도어에 대한 대책으로 주기적인 무결성 점검이 필수적이다. 무결성 점검과 함께 다음과 같은 대응책을 강구할 수 있다.

첫째, 보안 취약점을 점검하여 제거한다.

네트워크가 얼마나 취약한지를 점검하여 정정하여야 하는 보안 헛점들이 어떤 것들이 있는지 찾아낸다. 네트워크와 시스템의 취약성을 스캐닝하는 것을 도와주는 많은 상업용 및 공개 도구들이 있다. 시스템 제공업체에서 무료로 보급하고 있는 보안 패치를 설치하는 것만으로도 시스템의 보안을 상당히 향상시킬 수 있다.

둘째, 침입탐지(Intrusion detection)를 한다.

침입탐지는 시스템에 대한 접속을 통제하는 것과 마찬가지로 중요하다. 예전의 대부분의 침입탐지 기술들은 로그를 기반으로 하였지만 최근의 침입탐지 기술은 실시간 스니핑과 네트워크 트래픽 보안 분석에 기반으로 하고 있다. 많은 네트워크 트래픽 백도어들은 이제 쉽게 탐지되어진다. 최근의 침입탐지 시스템 기술은 DNS UDP 패킷을 조사해서 DNS 프로토콜의 요청에 일치하는지를 판별한다. 만약 DNS 포트의 데이터가 DNS 프로토콜과 일치하지 않는다면 주의 경보를 알리고 데이터를 가로채서 좀더 면밀히 분석한다. ICMP 패킷의 데이터도 똑같이 적용되어 실제 정상적인 ping 데이터인지 아니면 암호화된 쉘 세션을 가지고 있는지를 조사하게 된다.

셋째, CD-ROM으로 부터의 부팅을 수행한다.

관리자들은 침입자가 설치한 백도어의 가능성을 줄이기 위해 CD-ROM으로부터 부팅하는 것을 고려할 수 있다. 하지만 이 방법은 전체 기업에 대해 적용하기에는 시간과 비용이 많이 든다는 단점이 있다.

마지막으로 새로운 취약성들이 매일 보고되고 있고, 침입자들이 새로운 공격기술과 백도어 기술을 만들어 가고 있기 때문에 어떠한 보안 기술도 항상 신경을 쓰지 않고는 효과적이지 못하다는 것을 명심하여야 한다.

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,040 명
  • 현재 강좌수 :  35,850 개
  • 현재 접속자 :  164 명