
Opensvp는 방화벽의 프로토콜 수준 공격에 대한 저항성을 테스트할 수 있도록 "공격"을 구현하는 보안 도구입니다.
Opensvp는 프로토콜 수준 공격에 대한 방화벽의 저항성을 테스트하기 위해 "공격"을 구현하는 보안 도구입니다. (Netfilter 세계에서 helper라고 불리는) 응용 계층 게이트웨이에 대한 클래식한 공격뿐만 아니라 몇 가지 새로운 유형의 공격도 구현합니다.
예를 들어, opensvp는 특정 조건에서(자세한 내용은 아래 설명 참조) ftp 서버를 보호하는 방화벽에 핀홀을 열 수 있습니다. 필터링 정책이 서버에 21번 포트만 열려 있음을 보장하더라도 opensvp를 사용하여 서버의 '임의의' 포트를 열 수 있습니다.
192.168.2.3이 방화벽 뒤에 배치된 ftp 서버를 실행하는 서버라고 가정해 봅시다. 사용자가 root로 다음을 실행하면::
opensvp --attacker -t 192.168.2.3 --helper ftp --port 23 -v -i eth0
그러면 방화벽 규칙과 무관하게 서버의 23번 포트에 임시로 접근할 수 있습니다.
"iptables 및 연결 추적 헬퍼의 안전한 사용" 문서 https://home.regit.org/netfilter-en/secure-use-of-helpers/ 는 이러한 유형의 공격에 대한 보호 방법을 설명합니다.
구현된 공격에 대한 자세한 설명은 다음 장을 참조하십시오.
eth0 인터페이스를 통해 방화벽에 직접 연결된 네트워크에 있는 공격자는 다음 명령을 실행할 수 있습니다 ::
opensvp --attacker -t 192.168.2.3 --helper ftp --port 23 -v -i eth0
192.168.2.3은 FTP 서버의 주소이고 23은 서버에서 열고자 하는 포트입니다. 공격이 성공한 후 192.168.2.3의 23번 포트에 연결할 수 있습니다.
클라이언트가 방화벽에 의해 가능한 동적 연결 개시로 해석되는 위조된 명령 메시지를 보낼 수 있습니다.
표준 서버를 사용하여 공격을 보낼 수 있지만, 사용자 지정 서버를 사용하면 가능한 NAT 게이트웨이가 수행하는 변환을 알 수 있습니다.
일반적인 세션은 다음과 같습니다. IP 주소가 1.2.3.4인 서버에서 다음을 실행할 수 있습니다 ::
$ opensvp --server --helper irc -v
그런 다음 클라이언트에서 다음을 실행할 수 있습니다 ::
$ opensvp --client -t 1.2.3.4 --helper irc --port 23 -v 2.3.4.5:23 should be opened from outside
서버에는 다음 메시지가 표시됩니다 ::
You should be able to connect to 2.3.4.5:23
여기서 2.3.4.5는 클라이언트의 공인 주소입니다.
공격자 측에서는 opensvp를 시작하고 사용 중인 Netfilter 큐와 출력 인터페이스를 지정해야 합니다 ::
그런 다음 iptables를 사용하여 프로토콜 인식 메커니즘에서 숨기려는 트래픽을 userspace로 보내야 합니다 ::
iptables -I INPUT -p tcp --sport 443 -j NFQUEUE iptables -I OUTPUT -p tcp --dport 443 -j NFQUEUE
완료되면 CTRL+C를 눌러 공격 프로세스를 중단합니다.
일부 네트워크 프로토콜은 클라이언트와 서버 간의 교환을 위해 여러 연결을 사용합니다. 가장 잘 알려진 예는 ftp로, 명령은 21번 포트의 연결을 통해 전송되고 데이터 교환은 두 가지 서로 다른 모드(20번 포트에서의 연결 또는 동적 연결)로 수행됩니다.
일부 방화벽 구현은 이러한 병렬 연결을 감지하고 동적으로 허용하기 위해 ALG(응용 계층 게이트웨이)를 구현합니다. 다른 솔루션으로는 애플리케이션 릴레이(투명 프록시)를 사용하거나 가능한 모든 흐름을 여는 것(거의 모든 것을 읽는 것)이 있습니다.
ALG는 트래픽을 분석하고 피어 간에 전송되는 명령을 감지하고 파싱하여 병렬 연결의 매개변수를 선언합니다. 완료되면 예상되는 트래픽이 통과할 수 있도록 방화벽에 임시 핀홀을 엽니다.
이 공격의 아이디어는 이러한 유형의 메시지를 위조하여 방화벽에 핀홀을 열되, 열리지 않았어야 할 핀홀을 여는 것입니다.
조건:
절차는 다음과 같습니다 :
공격자 네트워크의 스니퍼가 프로토콜 흐름에서 패킷 하나를 캡처합니다
위조된 패킷이 방화벽에 연결된 인터페이스로 전송됩니다
방화벽은 패킷을 클라이언트로 다시 전송하고 이제 공격자 입력에 기반한 특성을 가진 패킷을 기대합니다
이 공격은 설명된 원리의 직접적인 적용입니다. 데이터 패킷이 수신되면 공격자는 위조된 DCC 명령을 보냅니다.
이 공격에서는 클라이언트 연결이 공격자에 의해 열립니다. 공격자는 방화벽 뒤의 ftp 서버에 연결하여 실제 연결을 시작합니다. 세션이 설정되면 위조된 227 명령을 보내 공격을 시작합니다.
IPv6를 사용하는 경우 위조된 229 명령으로 동일한 공격이 수행됩니다.
가능한 대상
이러한 공격의 주요 제약은 공격자가 방화벽에 직접 연결된 네트워크에 있어야 한다는 것입니다.
따라서 주요 가능성은 다음과 같습니다:
* 사용자 LAN에서의 공격
* 호스팅 팜에서의 공격
두 경우 모두 공격자에게 보호되지 않는 서비스에 대한 접근을 제공하여 심각한 정보 노출로 이어질 수 있습니다.
Linux
~~~~~
이 공격은 rp_filter가 0으로 설정된 경우 IPv4 Netfilter 방화벽에서 작동하는 것으로 알려져 있습니다 (다행히 기본값은 아닙니다).
현재 IPv6에 대한 역경로 필터링 구현이 없으므로 방화벽은 보호되지 않으며, 보호는 방화벽 규칙에서 설정해야 합니다 (다음 장 참조).
일부 방화벽 소프트웨어는 취약한 것으로 알려져 있습니다:
* fwbuilder: 특정 정책을 설정해야 합니다
* shorewall: 최신 버전에서 문제가 수정되었습니다
* edenwall: 취약합니다
이 공격은 게이트웨이 방화벽과 로컬 방화벽 모두에서 작동합니다. 로컬 방화벽에서는 FORWARD 필터링이 활성화되어야 하고 이 체인에 ESTABLISHED ACCEPT 규칙이 설정되어야 합니다. 이는 가상 머신을 실행하는 시스템의 경우일 수 있습니다.
공격에 대한 방어
==========================
Linux
-----
이 주제를 다루는 다음 문서를 참조하십시오: https://home.regit.org/netfilter-en/secure-use-of-helpers/
기타 OS 및 장치
--------------------
기본 요구 사항은 엄격한 안티스푸핑을 활성화하고 가능한 경우 ALG의 로딩을 제어하는 것입니다.