level 4에 로그인하고 hint를 본다.
백도어(Backdoor)
백도어란 정상적인 인증 절차를 거치지 않고, 컴퓨터와 암호 시스템 등에 접근할 수 있도록 하는 장치다.
설계자나 관리자에 의해 남겨진 시스템의 보안 허점을 말한다.
설계자가 일부러 남겨놓은 경우는 개발 단계에서 테스트를 위해 유지 보수 시의 효율성을 위해 특수 계정을 허용하는 것이다. 하지만 이런 개발을 위한 의도를 비양심적으로 활용하거나 개발이 완료된 후 삭제되지 않은 백도어를 다른 사용자가 발견해 악용하게 될 경우는 아주 위험하다.
그렇게 되면 누군가 나의 접속 기록 및 로그인 정보 등 시스템 사용 내용을 모두 볼 수 있고 금전적인 손해까지 입을 수 있다.
backdoor 파일이 있는 것을 확인했다.
backdoor가 finger를 통해 서비스를하고 있다. finger란 무엇인가? finger를 알아야 하기에 구글링이 필요한 시점이다.
추가로 xinetd에 대해 배우면 xinetd.d 디렉터리도 알게 되어 도움이 된다.
xinetd(eXtended InterNET Daemon)
xinetd.d 디렉터리를 배우기 전에 우리는 etc 디렉터리에 대해 Training 4에서 간단히 배웠다.
etc 디렉터리는 패스워드 파일, 쉐도우 파일, 그 외 대부분의 리눅스 설정 파일 등 중요한 파일들이 들어있는 디렉터리다.
xinetd(eXtended InterNET Daemon)는 인터넷 슈퍼데몬(Internet Super Daemon)을 의미하는 것으로 Sendmail, HTTPD등과 같이 리눅스 시스템에서 실행되는 하나의 데몬이다. 하지만 이 데몬이 Sendmail, HTTPD 등과는 다르게 슈퍼데몬이라고하는 특별한 이유가 있다. 리눅스 서버에서 서비스되는 여러 가지 데몬들을 제어하면서 각각의 서비스들의 연결을 담당하고 있기 때문이다.
예를 들어 xinetd 슈퍼데몬에 의해 제어되는 가장 대표적인 telnet 서비스가 있다. 원격 시스템의 서버나 PC에서 누군가 telnet으로 접속을 시도할 때에는 바로 telnet으로 연결되는 것이 아니라 xinetd에 의해 허가된 사용자인가를 검사받은 후에 xinetd의 telnet 설정파일 (/etc/xinetd.d/telnet)에 정의되어 있는 telnet 서비스 데몬과 연결되어 telnet 서비스를 이용하게 되는 것이다. 리눅스 서버에서 서비스되는 각종 데몬들은 xinetd 슈퍼데몬에 의해 제어되어 서비스되는 것들이 있지만 xinetd 와는 무관하게 독립적인 서비스를 하는 데몬들이 있다.
xinetd는 간단히 말해서 데몬을 관리하는 데몬이다.
standalone 방식 xinetd 방식
여기에는 두 가지 방식 standalone 방식과 xinetd 방식이 있다.
standalone 방식은 개별서비스별로 서버 프로세스(데몬)가 동작하는 방식으로 속도가 빠른 장점이 있지만, 서버 리소스를 많이 점유하고 있는 단점이 있다.
이 방식으로 운영되는 서비스는 /etc/init.d 디렉터리에 있는 파일을 보면 알 수 있다.
xinetd 방식은 슈퍼 데몬을 이용하여 개별 서비스를 동작시키는 방식으로 상대적으로 속도가 느리지만, 서버 리소스를 절약할 수 있다.
이 방식으로 운영되는 서비스는 /etc/xinetd.d 디렉터리에 있는 파일을 보면 알 수 있다.
standalone, xinetd 서비스 비교
구분 | standalone으로 서비스되는 데몬 | xinetd으로 서비스되는 데몬 |
의미 | xinetd와는 무관하게 독립적으로 서비스됨 | xinetd데몬에 의해 실행되고 종료됨 |
메모리 상주 | 항상 메모리에 독립적인 데몬으로 상주하고 있음 | xinetd에 의해 불렸을 때만 메모리에 올려졌다가 서비스가 종료되면 메모리에서 제거됨 따라서 메모리에 상주하지 않음 (주의 xinetd데몬 자체는 메모리에 상주) |
응답 속도 | 서비스 요청이 있을 때 바로 응답을 하므로 xinetd 환경의 서비스 보다는 응답속도가 빠름 | xinetd를 거쳐서 해당 서비스를 실행 하므로 standalone보다는 느림 |
설정파일 | 해당 프로그램이 설치된 위치에 독립적인 설정파일이 존재 (rpm으로 설치되었을 때는 대부분 /etc 디렉터리에 존재) | 대부분 "/etc/xinetd.d/서비스명"으로 설정파일이 존재함. |
접근제어 | 접근제어를 자체적으로 하거나 아니면, 하지 않음 (시스템 자체의 방화벽(iptables 등)과는 별도의 의미) |
tcp_wrapper에 의해서 접근 제어됨 데몬명 : tcpd (/etc/hosts.allow, /etc/hosts.deny) |
장점 | 빠른 응답 속도 | 통합관리 가능, 자원절약(메모리절약), 접근제어 가능 |
단점 | 자원낭비(메모리상주), 개별관리 | 응답속도 느림 |
서비스 예 | httpd, mysql, sendmail, named, sshd등 | telnet, ftp, pop, finger |
적용 | 비교적 서비스 요청이 빈번한 서비스에 적용하는 것이 효율적 | 비교적 서비스 요청이 많지 않은 서비스에 적용하는 것이 효율적 |
기타 | xinetd로 서비스되는 서비스를 standalone으로 변경이 가능하고, standalone으로 서비스되는 서비스를 xinetd로 변환 가능 (지원하지 않는 서비스들도 있음) |
xinetd 슈퍼데몬에서 가장 핵심적인 부분은 /etc/xinetd.d/ 디렉터리에 파일의 형태로 존재하고 있는 xinetd 슈퍼데몬의 제어하에 서비스되는 각각의 파일들을 정확하게 이해 해야 한다.
각각의 서비스별로 별도의 파일에 설정할 수 있는데 그 설정파일들을 /etc/xinetd.d/ 디렉터리에 저장한다.
위 backdoor의 내용도 서비스 설정을 저장한 것이다.
서비스 설정 파일 설명
설정 옵션 | 설명 |
flags = REUSE | 서비스 포트가 사용 중이면 해당 포트의 재사용을 허가한다. |
socket_type | 서비스 타입이 tcp 기반이면 stream. (신뢰성 있는 데이터전송) udp 기반이면 dgram으로 설정. (미연결 데이터전송) |
wait | no : 동시 접속 가능, yes : 동시 접속 불가 |
user | 서버 데몬의 프로세스 소유자를 여기 적혀 있는 계정으로 한다는 의미 |
disable | 서비스 사용 가능 유무, no : 서비스 사용 가능, yes : 서비스 사용 불가 |
server | 서비스실행 경로를 적는 곳 |
log_on_failure += USERID | 서비스 접속에 실패할 경우 기존 log 설정에 접속한 실패한 사용자 ID를 포함해서 기록 |
finger
finger는 리눅스에서 로컬사용자 또는 원격 시스템의 서버 사용자의 계정정보를 확인하는 명령어다.
finger는 지정된 계정사용자 정보를 /etc/passwd 파일에서 읽어서 보여준다.
finger 옵션
옵션 | 의미 |
-s | 사용자의 로그인 이름, 실제 이름, 터미널 이름, 로그인 시간 출력 |
-l | -s 옵션 정보에 몇 가지를 추가하여 여러 줄에 걸쳐서 출력, default 기본값 |
-p | -l 옵션 정보에서 .plan과 .project 파일을 미출력 |
옵션을 주지 않으면 기본적으로 -l 옵션을 사용한 것으로 간주한다. |
finger 사용
finger
finger만 입력하면 현재 시스템에 로그인되어 있는 사용자들을 보여준다.
finger user명
user를 적고 host명을 명시하지 않으면 finger는 로컬에 접속하게 된다.
finger @host명
host명만 적고 user를 명시하지 않으면, 해당 서버의 접속해 있는 모든 유저의 정보를 출력한다.
finger user명 @host명, finger @host명 user명
user명과 host명을 이런 식으로 입력하면 원격 서버의 사용자 계정 정보 확인하는 것이다.
서비스 실행 경로로 이동해 무슨 파일이 있는지 찾아본다. 하지만 아무것도 보이지 않는다.
결론은 더 보기에 나와 있다.
문제를 종합해서 보자면 backdoor가 설치되어 있고 그 backdoor는 xinetd에 의해 실행되고
설정 파일은 "/etc/xinetd.d"에 저장된다. backdoor의 설정은 아래 나와 있다.
backdoor는 finger를 통해 실행된다.
설정 옵션 "user = level5"를 위 서비스 설정 파일 설명을 통해 보자면 finger가 level 5의 데몬의 프로세스 소유자다. 즉, level 5의 권한으로 실행한다는 것이다.
또한, server의 옵션이 "/home/level4/tmp/backdoor"다. 이 경로에서 backdoor가 실행된다는 것이다.
그러나 실행 경로에 가보아도 아무것도 보이지 않는다.
결론은 finger를 실행시켰을 때 우리가 원하는 실행 파일을 만들면 된다는 것이다. 우리가 원하는 것은 level 5의 비밀번호를 알아내는 것이다. 실행 파일을 만들 때 my-pass를 이용해 코드를 작성하면 된다.
알아낸 방법은 두 가지다.
- C언어
- 쉘
1. C언어
Vi로 backdoor.c를 만들어 C언어로 코드 적고 저장한다. backdoor.c 파일을 실행파일로 바꿔야 한다.
실행파일로 바꾸는 것은 컴파일을 해야 한다. 방법은 Training 8에서 배웠던 gcc를 이용한다.
컴파일을 사용해 실행 파일을 만들었다. 이제 finger @localhost를 사용해 원격 접속을 하면 level 5의 비밀번호가 나온다.
2. 쉘
쉘을 이용한 방법은 좀 더 간단해 보인다.
이번에는 Vi로 backdoor를 만들고 쉘 실행 코드를 적고 쉘에서 쓸 명령어를 적어준다.
만들어진 backdoor는 실행 권한이 없으므로 실행 파일이 아니다. 생활코딩에서 배웠던 chmod를 통해 권한을 바꿔 주어야 한다.
실행 파일을 만들었으니 finger @localhost를 이용해 원격 접속을 하면 level 5의 비밀번호가 나온다.
'System Hacking > 해커스쿨 F.T.Z Hacking Zone' 카테고리의 다른 글
해커스쿨 F.T.Z Level 6 (0) | 2020.02.13 |
---|---|
해커스쿨 F.T.Z Level 5 (0) | 2020.02.11 |
해커스쿨 F.T.Z Level 3 (0) | 2020.02.06 |
해커스쿨 F.T.Z Level 2 (0) | 2020.02.05 |
해커스쿨 F.T.Z Level 1 (0) | 2020.02.05 |
댓글