Hongfluenza

FTP(File Transfer Protocol) 본문

STUDY/NETWORK

FTP(File Transfer Protocol)

Hongfluenza 2019. 8. 3. 16:12
1> FTP란

- TCP/IP 프로토콜 테이블의 응용 계층에 속함

- TCP/IP 프로토콜을 가지고 서버와 클라이언트 사이의 파일 전송을 하기 위한 프로토콜

- HTTP 프로토콜을 통해 접속되는 WWW(World Wide Web) 방식이 주된 방식

- WWW는 일반 분자를 비롯하여 사진·음악·동영상 콘텐츠까지 간편하게 사용할 수 있고, 네이버 클라우드, 구글 드라이브 등 간편하고 빠른 웹 하드 서비스를 쉽게 접할 수 있다. → 큰 데이터의 파일을 한번에 주고 받기 어렵다는 단점이 있음

- FTP는 파일 전송 전용 서비스라는 특징과 인터넷을 통한 파일 송수신 만을 위해 고안된 서비스(프로토콜)이기 때문에 동작방식이 단순하고 직관적이며, 그렇기 때문에 사용법이 간단하고 빠른 속도로 많은 파일을 주고 받을 수 있다는 장점이 있다.

- 빠른 파일 전송이 주된 목적이기 때문에 사진이나 음악, 동영상 등의 멀티미디어 콘텐츠는 내려받기가 완료된 다음에 확인할 수 있다. (스트리밍 서비스가 되지 않는다.)

 

1.1> FTP 동작원리

port 20 : 데이터(파일) 전송 채널, port 21 : 신호/명령채널

- FTP 서비스를 제공하는 서버와, 여기에 접속하는 클라이언트 사이에 두 개의 연결(세션)이 생성됨

- 21번 포트 : 데이터 전송을 제어하기 위한 신호를 주고받기 위한 포트

- 20번 포트 : 실제 데이터(파일) 전송에 사용되는 포트

- FTP 서버에 접속할 때는 사용자 계정과 암호를 입력하는데, 이러한 정보들은 데이터 제어 신호를 통해서 주고받게 된다. 그리고 실제 파일 송수신 작업은 데이터 전송(20번 포트)에서 처리된다.

- FTP 클라이언트 프로그램은 여러 파일을 연속으로 송수신해야 하기 때문에, 서버와의 지속적인 응답 메시지 전송을 통해 연결 상태(세션)를 유지한다.

- FTP통신은 TCP통신을 하기 때문에, 처음 3-way-handshaking 과정을 거친 후 클라이언트가 명령어를 입력하면, 서버는 숫자 코드로 응답한다.

 

 

1.1.1> FTP 보안 취약점

 

- 사용자 인증정보에서 암호화 부재
- 계정 로그인의 인증 취약점을 악용한 Brute force 공격
- Sniffing 공격으로 인한 인증정보 유출
- 익명(Anonymous) FTP 취약
- FTP 바운스 공격. 명령 채널과 파일 전송 채널이 별도로 존재하므로 실제 파일을 전송받는 클라이언트가 바뀔 수 있다는 취약점이 존재함.

 

 

 

 

1.2> FTP 통신 : 데이터 전송 (Active Mode · Passive Mode)

- FTP는 데이터(파일)를 전송 함에 있어, 수동 모드(Passive Mode)와 능동 모드(Active Mode) 두 가지를 지원한다.
Active Mode : 이 모드로 데이터 전송을 할 때에는 서버는 20번 포트 사용
Passive Mode :  이 모드로 데이터 전송을 할 때에는 서버는 1024~65535 사이의 랜덤한 비특권 포트를 사용한다.

 

 

1.2.1> 능동 모드(Active Mode)

능동모드(Active Mode)는 클라이언트에서
① FTP 서버의 21번 포트로 접속을 시도하고, 사용할 두 번째 포트를 서버에 알려준다.
② 서버는 ACK로 응답 한 후 서버의
③ 20번 포트는 클라이언트가 알려준 두 번째 포트로 접속을 시도하고,
④ 마지막으로 클라이언트가 ACK로 응답한다.

 

 

능동 모드(Active Mode) : 최초 접속 요청

1. 클라이언트는 서버의 21번 포트로 접근하여 로그인 요청을 한다.
2. 서버는 정상적인 접근일 경우 그에 대한 승인을 하고 로그인이 이루어진다.

 

 

능동 모드(Active Mode) : 데이터 전송을 위한 절차

1. 클라이언트가 로그인을 하게 되면 서버에게 "데이터 전송을 위해서 내 쪽의 xxxx포트로 접속해"를 알려준다. 이에 서버는 20번 포트를 이용하여 클라이언트가 알려준 포트로 접속을 하고 데이터를 전송한다.

 

능동모드의 문제점 (③) TCP/IP의 특징인 '클라이언트가 서버에 접속을 시도하는 것'이 아니라 '서버가 클라이언트에 접속을 시도한다'는 것 이때 클라이언트PC에 내부적인 환경요인(방화벽)과 외부적인 환경요인(FTP를 제대로 인지하지 못하는 공유기)으로 FTP가 접속이 제대로 되지 않거나, 접속이 된다 하더라도 이후 데이터 목록을 받아오지 못하는 에러가 발생할 수 있다.

 

 

1.2.2>수동 모드(Passive Mode)

서버가 클라이언트에 접속을 시도하는 비정상적인 능동모드에 대한 문제점을 해결하기 위해 수동모드(Passive Mode)가 등장했다.
① 클라이언트가 21번 포트로 접속을 시도하면
② 서버에서는 서버가 사용할 두 번째 포트를 알려준다.
③ 클라이언트는 다른 포트를 열어 서버가 알려준 이 포트로 접속을 시도하면
④ 이에 서버는 ACK로 응답한다.

수동 모드에서는 두 번째 data포트로써 능동모드에서 사용했던 20번 포트를 사용하지 않고 1024 ~ 65535 사이의 임의의 비특권 포트를 사용한다.

 

수동 모드(Passive Mode) : 최초 접속 요청

- 능동 모드와 동일한 절차를 거쳐 로그인
- 서버의 21번 포트로 접속을 하게 되고 서버는 승인을 한다.

 

수동 모드(Passive Mode) : 데이터 전송을 위한 절차

- 데이터 전송 시 능동모드와 달리 클라이언트는 서버 쪽에서 알려준 임의포트와 연결하여 데이터를 송수신하게 된다.

 

 

2> 익명(Anonymous) FTP

 

2.1> 익명 FTP 취약점과 보안 문제점

 

- FTP를 설치하기 되면 default로 Anonymous FTP가 실행된다. 하지만 보안 절차를 거치지 않고 익명으로 사용하는 사용자에게 FTP 서버 접근을 허용하는 경우 여러가지 보안 문제점이 발생한다.

- Anonymous FTP 서버로 사용자들이 데이터를 upload 할 수 있는 기능을 제공하는 경우 악의를 가진 사용자가 문제가 있는 소프트웨어를 upload하면 심각한 문제를 유발할 수도 있다.

- Anonymous FTP 서버에 침입자가 침입하여 루트 권한을 획득할 경우 서버에 있는 모든 자료들을 수정 할 수 있기 때문에 서버가 신뢰하는 자료를 가지고 있다고 보기 어렵다. 예를 들어 수백 기가바이트의 자료를 가지고 있던 서버가 침입을 당했을 경우 이 모든 자료들은 믿을 수가 없기 때문에 모두 버려져야 하고 처음부터 다시 자료들을 미러링 해와야 하므로 안정된 FTP 서비스 제공이 어려워지게 된다.

 

2.2> 익명 FTP 보안 대책

 

1. 호스트에서 제공할 서비스와 사용할 계정을 고려


- Anonymous FTP 서비스만 제공하는 호스트를 구축한다. FTP 외에 다른 서비스를 같이 제공하는 호스트를 구축할 경우 다른 서비스들에 대한 차단을 할 수 없는 경우가 많기 때문에 호스트의 보안을 설정하는데 많은 문제점을 야기할 수 있다.

- 불필요한 계정은 만들지 않는다. 대부분의 Anonymous FTP 서버에는 일반 사용자 계정을 두지 않는 것이 관례이다.

 

2. 사용자에 대한 최소한의 정보만 유지

 

ftp/etc 디렉터리에는 passwd와 group 파일을 만들어 주게 되는데, 이 파일의 용도는 익명의 사용자가 ls -l 등을 이용할 때 그 파일의 소유주나 그룹을 보여 주는 역할만을 할 뿐, 실제로 유닉스의 /etc/passwd나 /etc/group 파일이 이용되는 것과 같은 용도로는 사용되지는 않는다.
그러므로 보안 수준을 높이고 싶다면 이 파일을 만들지 않는 방법이 추천되고 있다. 

사용자들에게 좀 더 좋은 인터페이스를 제공하기 위해서 이 파일들을 가져다 놓게 될 경우, /etc/passwd 나 /etc/group 파일을 그대로 복사하여 가져다 놓을 수 있는데 이는 그 호스트의 사용자와 그룹의 정보를 유출시킬 수 있기 때문에 불필요한 사용자들을 지워버리는 것이 좋다.

 

3. 권한의 설정

 

최소한의 서비스를 위한 권한만 사용자에게 제공한다.

 

- 익명 사용자가 로그인했을 때 루트가 되는 디렉터리를 ftp라고 하면 이 디렉터리의 소유주는 반드시 루트가 되어야 하며 퍼미션(permission)은 555(user, group, other에게 쓰기권한을 주지 않는다.)로 해야 한다.

- ftp/bin 디렉터리에는 FTP 서비스 시에 이용될 수 있는 프로그램들을 가져다 놓게 되는데 이 때 소유주는 루트로 하고 퍼미션은 111(noread, nowrite, execute)로 해주며, 여기에 가져다 놓게 되는 프로그램들 또한 위와 같은 소유주와 퍼미션을 주는 것이 좋다.

- ftp/etc의 소유주도 루트로 해주며, 이 퍼미션도 111로 해준다.

- 다운로드 할 수 있는 파일들을 보관하는 ftp/pub 디렉터리의 소유주는 이 FTP를 관리할 사람의 권한으로 해주고, 퍼미션은 555로 해준다.

- ftp/incoming 과 같이 누구나 파일을 업로드 할 수 있게 해줄 수 있는 권한을 줄 디렉터리는 소유주는 root, 퍼미션은 777로 해주고, 조금 더 보안의 수준을 높이고 싶다면 이 디렉터리만을 위한 새로운 파일 시스템을 만들어 준다.

- ftp 밑에 .rhost나 .forward 파일을 만들되, 파일의 크기를 0으로 하여 소유주는 root, 권한은 000(noread, nowrite, noexecute)으로 해둔다.

 

 

4. 정기적인 점검

 

정기적으로 ftpd 데몬에 의해서 만들어지는 로그 파일을 분석함으로써 불필요한 접근이나 명령어의 시도가 있었는지를 감시한다.

 

 

3> FTP Bounce Attack(FTP 바운스 공격)

 

3.1> FTP Bounce Attack

FTP Bounce 공격

FTP 바운스 공격 (FTP bounce attack)은 FTP 서버가 클라이언트가 지시한 곳으로 자료를 전송할 때 그 목적지가 '어떤 곳'인지를 검사하지 않는 FTP 프로토콜 구조의 허점을 이용한 공격 방법이다.
그래서 FTP 클라이언트가 실행되는 호스트가 아닌 다른 호스트를 지정하더라도 서버는 충실하게 지정된 곳으로 정보를 보내게 된다.
이 문제는 FTP서버의 버그가 아니라, 원래 FTP 프로토콜의 설계 상에서 발생한 문제이다. 처음부터 고의로 자료를 요청하는 곳과 자료를 받는 곳이 다른 곳일 수 있도록 FTP를 설계한 것이다. 결과적으로 클라이언트는 FTP 서버를 거쳐 간접적으로 임의의 IP에 있는 임의의 포트에 접근할 수 있으며 또한 임의의 메시지를 보낼 수도 있게 되는 것이다.

 

 

3.1.1> FTP 바운스 공격 예시

 

 

1. 포트 스캐닝

클라이언트가 자료 전송을 요청할 때, 지정한 포트가 열리지 않으면 실패 메시지가, 성공하면 성공 메시지가 출력되는데 이러한 메시지를 이용한 포트 스캐닝 스크립트에 이용할 수 있다.

 

2. 거짓 편지(Fake mail)

메일의 정보를 가진 부분을 헤더라고 하는데, FTP 바운스 공격을 이용하면 이러한 정보가 허위로 입력된 거짓 편지를 만들어 보낼 수 있다.
- 임의의 메일을 텍스트 형태의 파일로 만들어 바운스 공격을 통하여 서버에 전송한다.
- 서버는 이 fake mail을 지정된 목적지로 전송한다.
- 바운스 공격을 통해 전송된 메시지는 익명성을 가지며 송신지를 알 수 없다.
- FTP 서버의 주소는 알 수 있지만 여러 경로를 통하기 때문에 공격자를 거의 찾을 수 없다.

 

3. 방화벽을 넘어 접근하기

방화벽의 내부에 외부에서 익명 접근이 가능한 FTP 서버가 있다면 FTP 서버는 방화벽의 내부에 존재하기 때문에 방화벽의 Packet Filtering을 완전히 무시하고 여러가지 작업을 수행할 수 있다.

 

 

3.1.2> FTP 바운스 공격 대응책

 

- FTP가 자료를 전송할 때 1024번보다 낮은 포트(port)로 접속하지 않도록 설정한다.
- 클라이언트와 다른 호스트로 접속하지 않도록 설정한다.
- FTP 외의 다른 서비스들이 20번 포트로부터는 접속을 받아들이지 않도록 설정한다.
- 최신 버전의 FTP server를 설치한다.

 

 

 

 

 

 

 

...더보기