고성능 (D)DoS 취약점 테스트 툴킷. 다양한 L4/7 공격 벡터를 구현합니다. 네트워킹에 대한 비동기식 접근 방식은 복잡한 네트워크 상호 작용을 수행하는 동시에 CPU/RAM 요구 사항을 낮추는 데 도움이 됩니다.
메모 ? 툴킷에는 대상 서버 또는 네트워크의 적절한 성능 테스트에 필요한 기능이 없습니다. 목표는 일반적인 함정을 남용하고 일반적인 보호 조치를 우회하도록 특별히 설계된 공격을 수행하여 보호 수준을 이해하는 것입니다.
경고 ❗ 소유자의 동의 없이 인프라(서버, 웹사이트, 네트워크 장치 등)를 테스트하지 마십시오. 테스트를 실행할 때 의도하지 않은 큰 영향을 방지하기 위해 패키지 기본 설정이 조정되었습니다.
MHDDoS 프로젝트에서 영감을 얻었습니다.
PyPI에서:
$ pip install fiberfox
출처:
$ git clone https://github.com/kachayev/fiberfox.git
$ cd fiberfox
$ python setup.py install
Docker 이미지 빌드:
$ git clone https://github.com/kachayev/fiberfox.git
$ cd fiberfox
$ docker build -t fiberfox .
예:
$ fiberfox
--targets tcp://127.0.0.1:8080 http://127.0.0.1:8081
--concurrency 512
--rpc 1024
--strategy STRESS
--duration-seconds 3600
--proxies-config ./proxies.txt
특징:
--concurrency
(또는 -c
)는 실행할 비동기 코루틴 수를 정의합니다. Fiber는 새로운 OS 스레드를 생성하지 않으므로 약간의 오버헤드로 많은 OS 스레드를 실행할 수 있습니다. TCP 공격 벡터의 경우 파이버 수는 대략 열려 있는 최대 TCP 연결 수에 해당합니다. UDP 공격의 경우 너무 많은 파이버를 실행하면 일반적으로 성능이 저하됩니다.SLOW
또는 CONNECTIONS
와 같은 공격 벡터를 사용하는 경우) 대상보다 더 많은 파이버를 설정해야 합니다.플래그에 대한 추가 문서:
$ python fiberfox --help
usage: fiberfox [-h] [--targets [TARGETS ...]] [--targets-config TARGETS_CONFIG] [-c CONCURRENCY] [-s {UDP,TCP,STRESS,BYPASS,CONNECTION,SLOW,CFBUAM,AVB,GET}] [--rpc RPC] [--packet-size PACKET_SIZE]
[-d DURATION_SECONDS] [--proxies [PROXIES ...]] [--proxies-config PROXIES_CONFIG] [--proxy-providers-config PROXY_PROVIDERS_CONFIG] [--log-level {DEBUG,INFO,ERROR,WARN}]
[--connection-timeout-seconds CONNECTION_TIMEOUT_SECONDS]
options:
-h, --help show this help message and exit
--targets [TARGETS ...]
List of targets, separated by spaces (if many)
--targets-config TARGETS_CONFIG
File with the list of targets (target per line). Both local and remote files are supported.
-c CONCURRENCY, --concurrency CONCURRENCY
Total number of fibers (for TCP attacks means max number of open connections)
-s {UDP,TCP,STRESS,BYPASS,CONNECTION,SLOW,CFBUAM,AVB,GET}, --strategy {UDP,TCP,STRESS,BYPASS,CONNECTION,SLOW,CFBUAM,AVB,GET}
Flood strategy to utilize
--rpc RPC Number of requests to be sent to each connection
--packet-size PACKET_SIZE
Packet size (in bytes)
-d DURATION_SECONDS, --duration-seconds DURATION_SECONDS
How long to keep sending packets, in seconds
--proxies [PROXIES ...]
List of proxy servers, separated by spaces (if many)
--proxies-config PROXIES_CONFIG
File with a list of proxy servers (newline-delimited). Both local and remote files are supported.
--proxy-providers-config PROXY_PROVIDERS_CONFIG
Configuration file with proxy providers (following MHDDoS configuration file format). Both local and remote files are supported.
--reflectors-config REFLECTORS_CONFIG
File with the list of reflector servers (IP per line). Only required for amplification attacks. Both local and remote files are supported.
--log-level {DEBUG,INFO,ERROR,WARN}
Log level (defaults to INFO)
--connection-timeout-seconds CONNECTION_TIMEOUT_SECONDS
Proxy connection timeout in seconds (default: 10s)
공격 벡터는 스크립트 실행 시 --strategy
옵션으로 정의됩니다.
참고: 패키지는 현재 개발 중이며 더 많은 메서드가 곧 추가될 예정입니다.
L4 공격은 전송 계층을 표적으로 삼도록 설계되었으므로 주로 네트워크 용량을 과부하하는 데 사용됩니다. 대상에 대한 최소한의 지식이 필요합니다.
전략 | 층 | 수송 | 설계 | 메모 |
---|---|---|---|---|
UDP | L4 | UDP | 단순 플러드: 무작위로 생성된 UDP 패킷을 대상으로 보냅니다. | 네트워크 장치에서 NO_BUFFER_AVAILABLE 을 수신하면 자동으로 광섬유를 조절합니다. 이러한 일이 발생하지 않도록 하려면 UDP 플러드 공격을 테스트할 때 대상당 광섬유를 2개 이상 구성하지 마십시오. |
TCP | L4 | TCP | 단순 플러드: 무작위로 생성된 RPC TCP 패킷을 열린 TCP 연결로 보냅니다. | 단일 패킷의 크기와 열려 있는 각 연결로 전송될 패킷 수에 대한 구성을 지원합니다. |
CONNECTION | L4 | TCP | TCP 연결을 열고 가능한 한 오랫동안 연결을 유지합니다. | 이러한 유형의 공격이 효과적이려면 평소보다 더 많은 수의 섬유가 필요합니다. 최신 서버는 개방형 비활성 연결을 처리하는 데 꽤 능숙합니다. |
L4 공격의 특별한 클래스입니다.
UDP는 비연결 프로토콜입니다. 애플리케이션 계층에서 명시적인 처리를 수행하지 않는 한 소스 IP 주소의 유효성을 검사하지 않습니다. 이는 공격자가 임의의 소스 IP 주소를 포함하도록 데이터그램을 쉽게 위조할 수 있음을 의미합니다. 종종 애플리케이션 프로토콜은 응답으로 생성된 패킷이 증폭 효과(따라서 이름)를 생성하는 훨씬 더 큰 방식으로 설계됩니다. 이러한 데이터그램을 다양한 서버(반사체)로 전송함으로써 공격자는 대상(피해자) 장치에 상당한 트래픽을 생성할 수 있습니다.
증폭 공격 구현:
전략 | 규약 | 증폭 인자 | 취약점 |
---|---|---|---|
RDP | 원격 데스크톱 프로토콜(RDP) | ||
CLDAP | 연결 없는 CLDAP(Lightweight Directory Access Protocol) | 56세 70세 | |
MEM | 멤캐시드 | 10,000~50,000 | |
CHAR | 문자 생성기 프로토콜(CHARGEN) | 358.8 | 문자 생성 요청 |
ARD | Apple 원격 데스크톱(ARD) | ||
NTP | 네트워크 시간 프로토콜(NTP) | 556.9 | TA14-013A |
DNS | 도메인 이름 시스템(DNS) | 28~54 | TA13-088A |
모든 증폭 공격에는 반사 서버 목록이 제공되어야 합니다.
L7 공격은 애플리케이션 계층 프로토콜이나 애플리케이션(또는 OS 커널)의 특정 구현 세부 사항의 약점을 악용하도록 설계되었습니다. 일반적으로 더 강력하지만 대상 시스템의 작동 방식에 대한 지식이 필요할 수 있습니다.
전략 | 층 | 수송 | 설계 | 메모 |
---|---|---|---|---|
GET | L7 | TCP | 열린 TCP 연결을 통해 무작위로 생성된 HTTP GET 요청을 보냅니다. | 200 OK HTTP 응답 코드가 필요하지 않습니다(응답을 전혀 소비하지 않으므로). 로드 밸런서 또는 WAF에 대해 수행되는 공격은 효과적이지 않을 수 있습니다(L4 TCP 플러드와 비교). |
STRESS | L7 | TCP | 단일 개방형 TCP 연결을 통해 큰 본문이 포함된 일련의 HTTP 요청을 보냅니다. | 성능을 최대화하려면 대상 호스트가 파이프라인(응답을 먼저 읽지 않고 지속적인 연결 내에서 새 요청 보내기)을 허용하는지 확인하세요. 200 OK HTTP 응답 코드가 필요하지 않습니다(응답을 전혀 사용하지 않으므로). 로드 밸런서 또는 WAF에 대해 수행되는 공격은 효과적이지 않을 수 있습니다(L4 TCP 플러드와 비교). |
BYPASS | L7 | TCP | 열린 TCP 연결을 통해 HTTP get 요청을 보내고 응답을 다시 읽습니다. | 청크 읽기는 HTTP 응답으로 구문 분석하지 않고 연결의 recv 바이트로 수행됩니다. |
SLOW | L7 | TCP | STRESS와 마찬가지로 HTTP 요청을 발행하고 단일 바이트를 다시 읽고 전송 작업 사이에 시간 지연을 두고 추가 페이로드를 전송하여 연결 활용을 유지하려고 시도합니다. | 이상적으로는 읽기 시간 초과로 인해 피어에 의해 연결이 재설정되는 것을 방지하기 위해 시간 지연을 적절하게 설정해야 합니다(피어 설정에 따라 다름). |
CFBUAM | L7 | TCP | 오랜 지연 후 동일한 TCP 연결을 통해 더 많은 요청을 발행한 후 단일 HTTP GET을 보냅니다. | |
AVB | L7 | TCP | 전송 작업 간에 긴 지연이 있는 열린 연결에 HTTP GET 패킷을 발행합니다. 읽기 시간 초과로 인해 피어에 의해 연결이 재설정되는 것을 방지하기 위해 최대 지연은 1초로 설정됩니다. |
프록시 서버 세트를 구성하면 단일 시스템에서 툴킷을 실행하는 경우에도 분산 공격을 시뮬레이션할 수 있습니다. 프록시를 사용할 수 있는 경우 fiberfox
먼저 프록시에 연결하고 해당 시스템에서 대상에 대한 연결을 설정합니다. 이렇게 하면 시스템은 가장 간단한 IP 차단 보호 조치를 우회할 수 있습니다. 이 툴킷은 HTTP/SOCKS4/SOCS5 프로토콜과 사용자/비밀번호 인증을 지원합니다. 또한 응답하지 않거나 공격 요구 사항을 충족하지 않는 프록시의 사용을 방지하기 위해 제공된 프록시 세트를 동적으로 관리합니다.
프록시를 사용할 때 염두에 두어야 할 몇 가지 고려 사항이 있습니다.
이제 수행되는 공격의 성공 여부는 부분적으로 프록시 서버의 용량에 따라 달라집니다. 예를 들어 공용 프록시를 사용하는 경우 프록시가 너무 많아 네트워크 속도가 낮을 수 있습니다. 이 경우 전용 인프라 또는 전용 프록시 서버의 유료 클러스터 사용을 고려해보세요.
프록시 서버 자체는 몇 가지 공격 벡터를 완화할 수 있습니다. 예를 들어 "느린 연결" 접근 방식을 사용하는 경우 연결을 제한하거나 닫도록 프록시 서버를 구성할 수 있습니다. 그렇게 함으로써 목표를 "보호"하는 방식입니다. 프록시 설정이 공격 메커니즘(네트워킹, 프로토콜 등)에 어떻게 개입하는지 주의하세요.
툴킷의 목표 중 하나는 취약점 조회를 안내하는 포괄적인 모니터링 정보를 제공하는 것입니다.
이 도구는 각 대상당 통계 수(패킷 수, 트래픽 및 속도)를 보고합니다. TCP 기반 공격(L4 및 L7 모두)의 경우 단일 세션 내에서 전송된 패킷의 히스토그램도 보고합니다. 여기서 세션은 단일 개방형 연결 내에서 전송된 트래픽을 의미합니다. 이상적으로는 히스토그램이 왼쪽으로 치우쳐 있어야 합니다. 이는 "연결당 요청 수" 패킷이 전송되기 전에 피어가 연결을 닫는다는 의미입니다. 주로 오른쪽에 있는 경우 대상은 "쓰레기 트래픽"으로 간주되어야 하는 것을 허용합니다.
분석에 주의하세요. 낮은 네트워크 속도, 높은 연결 시도 빈도, 높은 오류율 등. 이러한 모든 신호는 대상이 공격에 맞서 여전히 강하다는 사실과 대상이 이미 죽었다는 사실을 모두 나타낼 수 있습니다. 보호 수준을 완전히 이해하려면 대상 측에서 모니터링 정보(예: 문제가 발생할 때 올바르게 작동하는 기능)를 사용해야 합니다.
아웃바운드 비율은 대략적으로 표시됩니다. 모든 패킷 전송에 대한 시간 측정에는 일정 지연(파이버의 경우) 및 선택/풀링이 포함됩니다. 대부분의 경우 이는 무시할 수 있습니다. 10,000개 이상의 파이버를 실행할 때는 분석에 주의하세요.
feature-*
브랜치로 포크하여 변경 작업을 시작하세요. MIT 라이센스에 따라 출시됩니다. 전체 라이선스는 라이선스를 참조하세요.
████
████▒▒██
████ ▒▒██
██▒▒ ▒▒▒▒▒▒██
██▒▒██ ██
████ ██▒▒██ ██
██▒▒▒▒██████ ██▒▒██ ▒▒ ████
██▒▒▒▒██ ████ ██████▒▒▒▒▒▒██ ▒▒▒▒██████████████
██▒▒ ████▒▒▒▒██████▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒████
██▒▒▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒████
██ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ██▒▒▒▒▒▒▒▒▒▒████▒▒▒▒▒▒▒▒██
████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▒▒▒▒▒▒████▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
████ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██ ▒▒██████▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ██▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██ ████▒▒▒▒▒▒▒▒▒▒ ██ ▒▒ ▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒██
██ ██ ████ ▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██ ██▒▒██ ▒▒ ▒▒▒▒▒▒▒▒▒▒██
██████████████████████▒▒▒▒██ ▒▒▒▒▒▒██
██▒▒ ██▒▒▒▒▒▒▒▒██ ▒▒▒▒██
██▒▒▒▒ ██▒▒▒▒▒▒▒▒████ ▒▒▒▒██
██▒▒▒▒▒▒██▒▒▒▒▒▒██ ██ ██
██████▒▒▒▒▒▒██ ██ ████
██████ ██ ██████
██ ████
██████