LEVEL 4
[level4] passcode : suck my brain
(NO DRAG, NO PASSCODE)
역시 hint 존재한다. 살펴보자.
누군가 /etc/xinetd.d/에 백도어를 심어놓았다고 한다.
백도어란 정상적인 인증 절차를 거치지 않고 시스템에 접근할 수 있는 방법을 말한다. 이는 시스템에 최단 시간에 침입할 수 있으며 관리자의 감시망을 완전히 벗어나는 침입 경로이다. 게다가 로그 기록을 남기지 않으며 온라인으로 접속해도 이를 발견할 수 없다.
/etc/xinetd.d/ 디렉토리로 이동하여 어떤 파일이 존재하는지 살펴보자
피상적으로도 백도어 프로그램으로 의심되는 backdoor 라는 파일이 존재한다. 살펴보자.
backdoor 의 코드를 살펴보면 다음과 같다.
service finger //service 의 이름을 명시 : finger
{
disable = no //슈퍼데몬을 사용 : no(외부에서 접속시 실행 O), 데몬 사용 X : yes(외부에서 접속시 실행 X)
flags = REUSE //해당 서비스 포트가 사용중일 경우 재사용 허가
socket_type = stream //TCP : stream, UDP : dgram
wait = no //xinetd가 새로운 service 요청을 받은 경우 이후에 즉시 그를 처리할 것인지의 여부, TCP : no wait
user = level5 //어떠한 권한으로 service 할 것인지 : level5
server = /home/level4/tmp/backdoor //xinetd(슈퍼 데몬)에 의하여 실행될 데몬 파일
log_on_failure += USERID //로그 접속에 실패하면 USERID 기록을 남김
}
|
데몬과 슈퍼데몬
데몬(daemon) 은 사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램. 시스템 로그를 남기는 syslogd처럼 보통 데몬을 뜻하는 ‘d’를 이름 끝에 달고 있으며, 일반적으로 프로세스로 실행됨. 또한 데몬에는 두 가지 종류가 있음.
1. 스탠드얼론(standalone)
standalone 은 데몬이 메모리에 독립적으로 메모리에 상주하고 있는 방식.
그러나 항상 메모리를 차지하고 있기 때문에 비효율적.
2. 슈퍼데몬(xinetd)
더 많은 데몬들은 사용하기 위하여 슈퍼데몬에서 관리하는 데몬이 호출될 경우 일시적으로 메모리를 할당 받았다가 사용을 종료하면 해제하는 방식.
이 때문에 standalone 방식 보다는 처리 속도가 느림.
슈퍼데몬은 telnet, ftp, finger, login, shell 등과 같은 서버스를 제어하는데, 슈퍼데몬은 이러한 서비스를 사용자가 실행하려고 할 때 그 사용자가 허가된 사용자인지를 검증하고 해당 서비스 위치에 있는 파일을 실행하여 사용자가 서비스를 이용할 수 있게 해줌.
이번에는 finger 를 살펴보자.
이 finger 코드가 원래 finger 의 original 코드인 것 같다. disable = yes 로 되어있어 사용되지는 않는 것 같다.
그럼 먼저 backdoor 에 정의되어 있는 것처럼 /home/level4/tmp/backdoor 의 경로로 이동하여 어떤 파일이 있는지 살펴보자.
tmp 에 아무것도 들어있지 않기 때문에 임의적으로 만들어 주어야 한다. 가짜 finger(backdoor)을 실행시켜서 passcode 를 얻어내야 하므로 tmp 디렉토리에 실행파일 backdoor 를 만들어주도록 하자.
backdoor 에 대한 코드를 작성해주었으면 컴파일하여 실행 파일을 만들자.
성공적으로 생성되었다. 이제 finger 명령어를 이용하여 passcode 를 얻어내는 일만 남았다.
finger
- finger : 현재 시스템에 로그인 되어 있는 사용자 확인
- finger [user] : finger는 로컬에 접속
- finger @host명 : 해당 서버에 접속해 있는 모든 유저의 정보 확인
- finger user명 @host명 / @host명 user명 : 원격서버의 사용자 정보 확인
일단 finger 명령어를 입력하여 실행하였더니 원래의 finger 가 실행되었다.
backdoor 코드에 diable = no 라고 되어있었으므로 외부에서 접속을 해야 backdoor 파일이 실행될 것이다.
finger 명령어에는 로컬 사용자 정보뿐만이 아니라 원격서버 사용자의 정보도 알 수 있는데, 이를 이용하여 backdoor 를 실행시킬 수 있을 것 같다.
finger 에서 명시한 것처럼 원격서버의 사용자 확인 문법을 이용하여 해결해보자.
성공적으로 passcode 를 획득하였다.
백도어 탐지 기법 및 대응
백도어 프로그램은 주로 SetUID 권한을 가진 파일을 변조해서 사용한다. 또한 항상 프로세스를 항상 동작하게 만들거나, 포트를 열어두는 방식을 사용한다.
따라서 다음과 같은 대응이 필요하다.
- 해커가 접근을 위하여 실행시켜둔 프로세스나 열어둔 포트가 있는지 확인
- SetUID 권한이 있는 파일을 검사
- 백도어 탐지 툴을 이용하거나 바이러스 검사
- 무결성 검사를 하여 침입자에 의하여 변경된 파일이 있는지 검사
- 로그를 분석하여 침입자의 기록 확인
- /etc/xinetd.d/finger 파일의 삭제
- /etc/services 파일 내에서 finger 행의 삭제 또는 주석(#) 처리.
[level5] : what is your name?
'Pwnable > FTZ' 카테고리의 다른 글
FTZ - level6 [Force Shutdown] (0) | 2019.12.31 |
---|---|
FTZ - level5 [Symbolic Link / Race Condition] (0) | 2019.12.23 |
FTZ - level3 [Command] (0) | 2019.11.10 |
FTZ - level2 [Editor] (0) | 2019.11.10 |
FTZ - level1 [SetUID] (0) | 2019.11.10 |