문제분석 & 풀이
/etc/xinetd.d 경로에 백도어가 심어져있다고 한다.
경로로 접속해보자.
/etc/xinetd.d 에 접근해 파일을 확인해보니, xinetd 데몬이 관리하는 여러가지 서비스들 사이에 backdoor 파일이 있는 것을 확인 할 수 있다.
○ xinetd
리눅스의 슈퍼데몬으로 여러가지 데몬들을 관리하는 관리자 데몬이다. client가 서버에 특정 서비스에 대한 접속 요구시, /etc/xinetd.d에 있는 해당 서비스에 대한 설정 정보를 토대로 client의 접속을 해당 서비스로 넘겨준다.
backdoor 파일을 읽어보니 위와 같이 서비스가 설정되어있다.
요약하자면, tcp 타입으로 연결하는 finger 서비스고 level5의 권한으로 /home/level4/tmp/backdoor 파일을 실행하여 해당 서비스를 수행한다.
파일이름은 backdoor지만 실제로는 finger 서비스가 실행될 때, /home/level4/tmp/backdoor 파일을 level5의 권한으로 실행한다.
/home/level4/tmp/backdoor가 어떤 역할을 수행하는 파일인지는 모르겠으나, 이 파일을 우리가 원하는 명령을 수행하는 프로그램으로 조작한다면 level5의 패스워드를 얻을 수 있다.
/home/level4/tmp/backdoor 파일을 확인하기 위해 경로에 접속해서 확인해보자.
tmp 디렉토리 자체가 비어있는 것을 확인 할 수 있다.
backdoor라는 파일이 없는 것을 보아하니, 파일을 조작할 필요도 없이 원하는 명령을 실행하는 프로그램 파일을 backdoor라는 이름으로 만들면 될 것 같다.
○ 공격시나리오
1. /home/level4/tmp 경로 내에 "my-pass" 명령을 실행하는 backdoor 라는 이름의 파일을 생성
2. finger 서비스 실행
3. finger 실행 시 /home/level4/tmp/backdoor 가 실행된다.
4. backdoor 프로그램에 의해 "my-pass" 명령이 실행되고 level5의 패스워드 탈취!
공격시나리오를 바탕으로 공격을 수행해보자.
vi 에디터를 이용하여 my-pass 명령을 실행하는 코드를 작성했다.
이후 코드를 gcc 컴파일러로 backdoor라는 ELF로 컴파일했다.
이제 localhost를 대상으로 finger 서비스를 실행하자.