1. 백도어와 트로이 목마
먼저 백도어의 종류를 살펴보자. 백도어 종류는 매우 다양하여 시스템과 네트워크의 모든 것을 사용해서 만든다고 생각해도 된다.
이는 세분화하면 '트로이 목마'와 '백도어'로 나눌 수 있다. 그렇다면 트로이 목마와 백도어의 차이점은 무엇일까?
사용자가 의도하지 않은 코드를 정상적인 프로그램에 삽입한 것을 트로이 목마라고 한다.
트로이 목마와 비슷한 종류로 스파이웨어가 있다. 스파이웨어는 설치된 시스템 정보를 주기적으로 원격지의 특정한 서버로 보내는 프로그램이다.
백도어는 트로이 목마와 조금 다르다. 백도어의 원래 의미는 운영체제나 프로그램을 만들 때 정상적인 인증 과정을 거치지 않고, 운영체제나 프로그램 등에 접근할 수 있도록 만든 일종의 통로이다. 이는 트랩 도어라고도 하며, 개발자의 장난이나 악의적으로 만든 것도 있지만 꼭 해킹할 용도로 만들었다고 볼 수는 없다. 운영체제를 개발할 때는 정상적인 인증을 거치지 않은 상태에서 관리자 권한으로 어떤 작업을 수행해야 할 때가 있다. 트랩 도어는 이런 상황에 사용하는 일종의 편법이라고 할 수 있다.
간단한 예가 시스템에 설정한 패스워드를 잊어버렸을 때로, 트랩 도어를 이용하여 운영체제의 패스워드를 재설정할 수 있다.
그러나 이것을 해커가 발견한다면 트랩 도어는 운영체제의 치명적인 단점이 되어 버린다.
2. 백도어 종류
2.1 로컬 백도어
로컬 백도어는 서버의 셸을 얻어 내 관리자 권한 상승할 때 사용하는 백도어이다. 앞서 설명한 트랩 도어도 로컬 백도어라고 생각할 수 있다. 즉, 시스템에 로그인한 후 관리자로 권한을 상승시키는 백도어이다. 공격자가 로컬 백도어를 이용하려면 일반 계정이 하나 필요하다. 시스템에 계정이 많으면 임의의 계정응ㄹ 생성하여 사용할 수 있지만, 겨우 서너 개라면 관리자가 새 계정을 쉽게 알아챌 수 있기 때문에 기존 계정의 패스워드를 알아내서 이용하는 경우가 많다.
2.2 원격 백도어
원격 백도어는 로컬 백도어와 달리 시스템 계정이 필요 없다. 원격 백도어는 계정에 패스워드를 입력하고 로그인한 것처럼 원격으로 바로 권리자 권한을 획득하여 시스템에 접근할 수 있는 백도어이다. 이런 백도어는 네트워크에 자신의 포트를 열어 놓는 경우가 많다. 즉, 서비스를 제공하는 일종의 데몬처럼 동작하는 것이다.
2.3 패스워드 크래킹 백도어
패스워드 크래킹 백도어는 키 로거라고도 하는데, 다른 백도어처럼 인증을 회피하지 않는다. 회피보다는 인증에 필요한 패스워드를 원격지의 공격자에게 보내 주는 역할을 하는 백도어이다. 패스워드 크래킹 백도어는 여러분이 누르는 키보드 정보나 passwd 같은 특정 문자열 뒤에 누르는 키보드 정보를 원격지에 보낸다. 리눅스는 원격지에 /etc/passwd 파일 정보를 보내기도 한다.
2.4 시스템 설정 변경 백도어
시스템 설정 변경 백도어는 원격지 셸을 얻어 낸다기보다 시스템 설정을 해커가 원하는 대로 상황에 따라 변경하는 툴이다.
2.5 트로이 목마 형태의 프로그램
트로이 목마 형태의 프로그램은 처음부터 백도어를 목적으로 만든 것은 아니지만, 백도어로 동작한다. 윈도우에서는 웹 브라우저나 명령 창, 간단한 게임 등도 백도어와 섞을 수 있다. 이렇게 만든 백도어를 동작하면 원하는 프로그램을 실행하면서 동시에 백도어도 설치된다.
3. SetUID형 로컬 백도어 설치와 이용하기
이전에 SetUID를 이용한 백도어를 알아보았는데 여기서는 비슷하지만 약간 다른 백도어를 알아본다. 왜냐하면 이전에 실습해본 백도어는 SetUID비트를 설정했기 때문에 find명령으로 setUID비트가 설정된 파일을 찾을 때 목록에서 발견될 것이다.
또 관리자가 이를 실행하면 바로 관리자 셸을 얻으므로 백도어 임을 알게 된다.
이번에는 쉽게 알아차리지 못하도록 변형하는 것이 목적이다.
다음과 같은 코드를 작성하고 권한을 부여한다.
실행시 다음과 같이 결과를 얻을 수가 있다.
하지만 이 백도어에 어떤 인수도 주지 않고 실행하면 아무런 반응도 나타나지 않는다.
관리자가 실행하더라도 용도를 파악하기 쉽지 않은데,, 이것은 프로그램을 매뉴얼 없이 이용하는 것과 같다고 할 수 있다.
백도어를 숨기는 방법은 두 가지를 생각할 수 있다.
기존 SetUID가 부여된 파일 중에 잘 사용하지 않는 실행 파일을 찾아 백도어와 바꾸어 놓는 방법과 백도어를 시스템의 실행 파일인 것처럼 위장하는 것이다. 먼저 SetUID 비트가 주어진 정상 파일을 찾아보자
실습을 하기 위해 권한을 부여한 파일과 더불어 조회가 되는 것을 확인할 수 있다.
내가 만든 백도어를 위장하기 위해 /usr/bin/newgrp으로 위장하려고 한다.
그리고 소스코드의 마지막 줄에 속이기 위한 printf문을 추가한다.
printf("Usage: newgrp <interface-config> <up|down|report>\n");
이후 백도어를 다음과 같이 숨기고 인자를 주지 않을 경우
이와 같이 나타나고 인자를 줄 경우 제대로 된 백도어의 역할을 한다.
이렇게 만들어낸 백도어를 어떻게 찾아낼 것인지는 뒤에서 다룰 것이다.
4. 리눅스 백도어
리눅스의 백도어를 살펴보기 전에 먼저 서비스를 제공하는 데몬의 운영체제에서 권한 속성을 알아보자. 인터넷에서 웹 서비스를 제공하는 데몬은 80번 포트를 사용하는 http 데몬이다. 각 데몬은 실행한 계정의 권한으로 운영된다. http 데몬은 root 권한이나 nobody권한으로 운영하거나 일본 사용자 계정으로 운영하기도 한다. root 권한으로 운영할 때는 http데몬을 시작 프로그램으로 자동 실행하거나 관리자가 보안에 관심이 없는 경우이다. root 권한으로 운영하는 http데몬은 보안에 매우 위험하기 때문이다.
물론 root 권한이든 nobody권한이든 사용자가 악의가 없을 때는 문제없다. 하지만 공격자가 운영하는 데몬의 취약점을 찾아내 권한을 빼앗을 때가 문제이다. 공격자는 root로 운영하는 데몬에서 root권한으로 시스템에 침투하고, nobody로 운영하는 데몬에서는 공격에 성공해도 nobody권한으로 시스템에 침투한다. 이런 이유 때문에 데몬의 실행 권한을 설정하는 것은 매우 중요하다.
백도어도 이와 똑같다. 백도어의 소유자, 즉 생성해서 실행해 놓은 계정의 권한으로 시스템에 침투할 수 있다. 따라서 백도어를 일반 계정으로 생성해서 실행해 두고, 앞서 배운 SetUID백도어 등을 이용하여 관리자로 권한을 상승시켜 공격을 수행해도 된다. 하지만 처음부터 관리자 권한으로 백도어를 만들어 실행해 두면 접속할 때 바로 관리자 권한을 얻는다.
리눅스에서는 백도어의 동작을 통제하려고 cron같은 스케줄러를 이용하기도 한다. 윈도에도 작업 스케줄러가 있지만 일반적으로 이용하지 않는다. 스케줄러를 이용한 백도어 통제의 유용한 점은 필요할 때만 백도어를 동작시켜 백도어의 존재 자체를 효과적으로 숨길 수 있다는 것이다. 스케줄러가 어떻게 동작하는지 살펴보자.
cron 데몬은 /etc/crontab내용에 따라 프로그램을 주기적으로 실행하거나 중지한다.
맨 위의 작업을 간단히 살펴보자
차례 대로 분/시/일/월/요일/user를 나타내며 *은 매분/매시/매달... 등을 뜻한다.
그때마다 뒤의 cd / && run-parts --report /etc/cron.hourly를 수행한다.
만약 ishd 백도어를 설치하고 crontab에 4~5시에 구동하도록 한다면 관리자는 이 시간에만 구동되는 백도어를 확인할 수 있다.
이는 다음과 같다
0 4 * * *./ishd -i 65000
0 5 * * * pkill -U root ishd
'Security_lab' 카테고리의 다른 글
해킹 침해사고 대응절차 (0) | 2021.08.03 |
---|---|
백도어 탐지 순서와 대응책 (0) | 2021.08.02 |
포맷 스트링 공격 (0) | 2021.07.29 |
버퍼 오버플로 공격 대응책 (0) | 2021.07.28 |
gdb를 통한 heap buffer overflow (0) | 2021.07.27 |