TFTP에 대한 보안
작성자 정보
- 웹관리자 작성
- 작성일
컨텐츠 정보
- 6,512 조회
- 0 추천
- 목록
본문
1. Trivial-FTP(TFTP)란 TFTP는 관리의 편의성 때문에 만들어진 일종의 관리자용 유틸리티인데 해킹에 사용될 수 있는 가능성 때문에 다음의 사항을 유념하여 이로인한 해킹사고를 미연에 방지하도록 한다. 초기에 개발되었던 취지는 tftp가 제공되는 서버는 "부팅서버"로서 사용하기 위한 것이었습니다. TFTP는 인증된 시스템에서 지정된 서버의 특정한 곳(디렉토리)으로 패스워드 없이 접속하여 파일을 가져가고 가져올 수 있도록 하는 일종의 관리툴이었습니다. 하지만 inetd.conf에서 설정되는 간단한 설정하나로 실로 엄청난 불행한 결과를 초래할 수 있습니다. 아래에서 자세히 설명됩니다. 일반적으로 tftp는 chroot기능을 이용하므로 지정된 디렉토리를 root디렉토리로 인식합니다. 따라서 지정된 디렉토리의 상위디렉토리는 절대로 이동할 수 없기 때문에 별 문제가 될 것은 없다고 할 수 있습니다.
2. TFTP의 가장큰 특징과 위험성 TFTP는 시스템에 계정이 없는 사람도 누구나 들어올 수 있다는 것이 가장큰 특징입니다. 즉, 패스워드의 입력없이 누구나 지정된 디렉토리로 들어로 수 있다는 것입니다. 일반적으로는 inetd.conf내에서 설정된 tftp의 기능은 다음과 같지만 아래와 같이 주석처리를 해두시고 사용하지 않는 것이 가장 현명한 방법입니다. 본인이 추천하는 것은 주석처리보다는 아예 이 행을 지워 버리는 것이 가장 현명한 것이 아닐까 합니다. #tftp dgram udp wait root /usr/sbin/tcpd in.tftpd -s /tftpboot 위의 설정은 주석처리이지만 다음의 설정은 주석처리가 되어있지 않기 때문에 tftp로의 접근이 가능하게 됩니다. tftp dgram udp wait root /usr/sbin/tcpd in.tftpd -s /tftpboot 일반적으로 이렇게 설정해 두면 지정한 디렉토리(/tftpboot)의 상위디렉토리로는 더 이상 접근이 될 수 없습니다. 하지만 여기에서 -s옵션이 없다면 어떻게 될까요? 이는 어떤디렉토리로든 접근이 가능하게됨을 뜻하므로 시스템의 모든 데이터가 노출된 것과 같은 것입니다. 이런 위험한 것을 꼭 사용해야하는가? 라는 의문이 드는 군요.
3. TFTP의 설정과 실제사용예 다음은 tftp로 host.jindong.net에 접속을 해서 파일을 가져오기 위해 첫 번째 host.jindong.net 서버의 /etc/inetd.conf에서 tftp요청을 받아 들일 수 있도록 하고, inetd를 다시 restart시켜준 것이다.
첫째, host.jindong.net의 /etc/inetd.conf에서 tftp서비스를 설정한다. tftp dgram udp wait root /usr/sbin/tcpd in.tftpd
둘째, inetd를 restart 한다. [root@host /etc]# ps -ef | grep inetd root 361 1 0 Oct18 ? 00:00:00 inetd [root@host /etc]# kill -HUP 361
셋째, host.jindong.net으로 tftp 접속한다. 그리고 하나의 파일을(aaaa)을 가져온 후에 빠져나와서 가져온 파일을 확인한다.
[webserver:/user1/sspark/imsi 26 ] tftp host.jindong.net tftp> ? Commands may be abbreviated. Commands are: connect connect to remote tftp mode set file transfer mode put send file get receive file quit exit tftp verbose toggle verbose mode hash toggle hask marks trace toggle packet tracing status show current status binary set mode to octet octet set mode to octet ascii set mode to netascii netascii set mode to netascii rexmt set per-packet retransmission timeout timeout set total retransmission timeout help print help information rate display transfer rate information ? print help information tftp> get aaaa tftp> get /etc/passwd tftp> tftp> quit [webserver:/user1/sspark/imsi 27 ] [webserver:/user1/sspark/imsi 27 ] ls -l total 5 0 -rw-r--r-- 1 root webhost 0 12월 3일 19:42 *.txt 1 drwxr-xr-x 3 sspark webhost 512 12월 3일 19:43 ./ 2 drwxr-xr-x 32 sspark webhost 2048 11월26일 14:58 ../ 0 -rw-r--r-- 1 root webhost 0 12월 3일 19:43 aaaa 1 drwxr-xr-x 4 sspark webhost 512 10월27일 13:21 public_html/ 0 -rw-r--r-- 1 sspark webhost 223 12월 3일 19:42 passwd 1 -rw-r--r-- 1 sspark webhost 224 11월15일 17:41 user.sql [webserver:/user1/sspark/imsi 28 ]
그런데 여기서 큰 보안상의 문제가 발생한다는 것을 알 수 있다. 즉, inetd.conf에 보면 s 옵션없이 그냥 실행이 되었는데 이렇게 하면 tftp 접속을 / (root) 디렉토리로 받아들이게 된다. 즉, 접속한 시스템의 모든 정보를 빠짐없이 다 가져올 수 있다는 결론이 나온다. 정말 어처구니 없는 일이라는 것을 알 수 있다. 이 얼마나 황당한 일인가? 관리자의 부주의가 이런 엄청난 것을 자초한다는 것을 알아야만 한다.
그렇다면 이를 해결하기 위해 어떤 조치가 필요할까? 당연히 -s 옵션을 이용하여 chroot() 기능을 이용하는 것이다. 즉 다음과 같이 설정하도록 한다.
tftp dgram udp wait root /usr/sbin/in.tftpd -s /home/sspark
주의 할 것은 /usr/sbin/in.tftpd 로 설정하고 -s 옵션을 반드시 줘야하며 뒤에는 chroot()의 홈디렉토리로 사용할 절대경로를 주면 보안상의 문제는 없어진다.
[webserver:/user1/sspark/imsi 32 ] tftp host.jindong.net tftp> tftp> get index.html tftp> tftp> quit [webserver:/user1/sspark/imsi 33 ] ls -l total 4 1 drwxr-xr-x 2 sspark webhost 512 12월 3일 19:58 ./ 2 drwxr-xr-x 32 sspark webhost 2048 11월26일 14:58 ../ 1 -rw-r--r-- 1 root webhost 513 12월 3일 20:02 index.html
즉, 가져온 index.html 파일은 /home/sspark에 있는 파일이다.
|
관련자료
-
이전
-
다음