
행동 기반 트래픽 분석, Random Forest 분류, 커널 수준 ipset/iptables 적용을 사용하는 적응형 2단계 Layer 4 DDoS 완화 게이트웨이.
First Line Of Defense
적응형 2단계 Layer 4 볼류메트릭 DDoS 완화 게이트웨이.
저자: Abdullah Armiyao
프로젝트: 행동 기반 트래픽 분석을 이용한 준실시간 Layer 4 볼류메트릭 DDoS 완화를 위한 적응형 2단계 프레임워크

대부분의 DDoS 완화는 고정 임계값을 사용한다. 초당 하드코딩된 패킷 수를 초과하는 모든 트래픽을 차단하는 식이다. 이 방식은 양방향 모두에서 실패한다. 바쁜 시간대에 정상 트래픽이 급증하면 실제 사용자가 차단되거나, 공격자가 임계값 바로 아래에 머물러 통과한다.
FLOD는 정상 트래픽이 어떤 모습인지 학습하고 그에 맞춰 자체 탐지 경계를 이동시킨다. 누구도 수동으로 임계값을 조정하지 않고도 DDoS 플러드를 정상적인 급증인 플래시 크라우드와 구별한다.
트래픽 소스와 보호 대상 호스트 사이의 게이트웨이에 인라인으로 위치하며, 문제가 되는 소스를 커널에서 드롭하거나 스로틀링한다.
대시보드는 차단한 주소를 공격자로 명시하므로, 네트워크 구조를 미리 알지 못하는 사람도 어떤 발신자가 적대적인지 판단할 수 있다. 스로틀링된 주소는 별도로 나열되는데, 스로틀링은 예방 조치로도 사용되며 한 번에 그룹 전체에 적용되기 때문이다.
Stage 1은 패킷 경로 위의 Rust 센서다. 보호 대상 호스트로 향하는 모든 패킷을 캡처하고, 짧은 윈도우 동안 전송률과 소스 다양성을 계산하여 스스로 유지하는 기준선과 비교한다. 산술 연산만 수행하므로 트래픽에 방해가 되지 않는다.
Stage 2는 Python 서비스다. 윈도우마다 한 번씩 Stage 1로부터 요약을 받아 Random Forest로 분류하고, ipset과 iptables를 통해 커널 수준의 시행을 수행한다. Isolation Forest가 모든 윈도우에서 함께 실행되며, 두 모델 중 어느 것도 학습한 적 없는 트래픽을 표시하여 시행을 주도하지 않고 별도의 Anomalous 상태로 노출한다. Stage 2는 웹 대시보드도 제공한다.
둘은 Unix 도메인 소켓으로 연결된다.
FLOD는 패킷 헤더만으로 관찰 가능한 Layer 4 볼류메트릭 플러드에 작동한다. 전송률, 소스 IP 엔트로피, 프로토콜 구성, 그리고 트래픽이 가장 바쁜 소스에 얼마나 집중되어 있는지를 본다. 실제로 이는 대량이면서 동시에 집중된, 한정된 실제 주소 집합에서 오는 플러드를 의미한다.
명시적으로 범위 밖인 것 하나와 부분적으로 다루는 것 하나가 있다.
애플리케이션 계층 공격. 요청 내용을 파싱하지 않으므로, 저속·저용량 요청 플러드와 연결 고갈은 헤더만 사용하는 특징 집합으로 관찰할 수 있는 범위 밖이다.
무작위화된 소스 스푸핑. 패킷마다 새로운 소스 주소를 위조하면 엔트로피가 낮아지는 대신 높아져, 주소 기반 특징이 찾는 신호를 뒤집는다. 소스 포트 엔트로피, TTL 분산, TCP SYN 핑거프린트 다양성은 주소 위조에 불변이며 이 탐지 사각지대를 메우지만, 위조된 플러드를 탐지하는 것은 막는 것보다 좁은 문제다. 위조된 주소를 차단하는 것은 그 주소를 실제로 소유한 사람에게 여전히 피해를 주므로, 이 부류에 대한 안전한 시행은 여전히 미해결로 남아 있다. Detection과 Explainer를 참고하라.
git clone https://github.com/DevInBlack001/ddos-reduction-system.git
cd ddos-reduction-system
sudo bash scripts/install.sh --interface <IFACE> --victim-ips <IP1>,<IP2>
sudo systemctl enable --now ddos-stage2
sudo systemctl enable --now ddos-stage1
설치 프로그램은 Stage 1을 빌드한 다음, Stage 2의 코드와 가상 환경을 /opt/flod/stage2(root 소유)로 복사하고 그곳에 관리 계정을 설정한다. Stage 2는 root로 실행되며, 권한 없는 계정이 여전히 쓸 수 있는 체크아웃에서 무엇도 실행해서는 안 되기 때문이다. 변경 가능한 상태, 즉 데이터베이스, JSON 설정, 학습된 모델은 /var/lib/flod에 있다. 체크아웃 자체는 이제부터 소스일 뿐이며, scripts/install.sh나 scripts/update.sh를 다시 실행하면 설치된 복사본이 그것으로부터 갱신된다. 이유는 Security를 참고하라.
대시보드는 포트 8000에서 HTTPS로 제공되며, 설치 프로그램의 자체 서명 인증서가 준비되면 활성화된다. 이 시스템이 의존하는 네트워크 배치를 포함한 전체 지침은 wiki에 있다.
설치 프로그램은 가능한 경우 eBPF 빌드 툴체인도 설정하며, 배포판이 제공하는 LLVM에 맞춘다. 이 부분은 선택 사항이다. 없어도 센서는 libpcap으로 빌드되고 실행된다.
센서에는 두 가지 캡처 백엔드가 있다. libpcap이 기본이며 어디서나 작동한다. 툴체인이 준비되면 --capture-mode kernel이 XDP와 TC를 통해 드라이버 경로에서 패킷을 세어, 패킷마다가 아니라 윈도우마다 한 번 사용자 공간을 깨운다. 탐지는 어느 쪽이든 동일하다.
탐지 튜닝은 추측이 아니라 측정으로 이루어진다. scripts/calibrate.py는 센서 자체 로그를 읽고, 일반 트래픽을 샘플링하여, 당신의 네트워크에서 이상 경계가 어디에 있어야 하는지 계산한다.
아무것도 설치하지 않고 시험해 보려면 작업 복사본에서 실행하라.
sudo bash scripts/run.sh
필요한 각 값을 물어보고, 모든 값에 기본값을 제시하며, Stage 2도 시작할지 묻는다. 묻지 않고 모두 수락하려면 --defaults를 추가하라.
테스트 스위트를 실행하려면:
scripts/test.sh
Wiki, 시스템 실행용:
| 페이지 | 다루는 내용 |
|---|---|
| Installation | 요구 사항, 네트워크 배치, 첫 로그인 |
| Configuration | 센서 플래그, 시행 튜닝, 알림 |
| Dashboard Guide | 콘솔의 모든 페이지 |
| Troubleshooting | 무언가 작동하지 않을 때 |
docs/, 이해하거나 변경하기 위한 문서:
CONTRIBUTING.md는 개발 설정과 관례를 다룬다. SECURITY.md는 취약점 보고를 다룬다.
이 프로젝트는 나 자신의 것이다. 개념, 아키텍처, 2단계 설계, 탐지 접근법, 시행 정책, 특징 집합, 그리고 모든 버전에 걸친 모든 기능적 결정은 나로부터 비롯되었다. 나는 네트워크 보안, 통계적 탐지, 시스템 프로그래밍의 학습 과제로 이것을 만들었으며, 설계와 발전을 전 과정에서 주도했다.
구현 중에는 AI를 코딩 보조로 사용하여 내 사양에 따라 코드를 작성하고 리팩터링했으며, 설계상의 트레이드오프를 검토하는 동안 논의 상대로 활용했다. 무엇을, 왜 만들지, 그리고 시스템이 어떻게 동작해야 하는지에 대한 결정은 내 것이었다.
개인 오픈 소스 프로젝트이며 작동하는 시스템이지만, 프로덕션 보안 제품에 필요한 적대적 테스트를 거친 것은 아니다. 랩 네트워크나 잘못 작동해도 감당할 수 있는 곳에 배포하라.
LICENSE를 참고하라.
| 문서 | 다루는 내용 |
|---|
| Architecture | 파이프라인, 스레딩, 캡처 튜닝, 이그레스 측정 |
| Detection | Welford, EWMA, 엔트로피, 이상 경계, 기준선 지속성 |
| Explainer | 비기술 독자를 위해 설명된 모든 용어와 모든 와이어 포맷 필드 |
| IPC | 특징 벡터 와이어 포맷 |
| Enforcement | 분류, 네 가지 완화 등급, NAT 처리 |
| Training | 레이블된 데이터 캡처와 모델 학습 |
| Testing | 두 테스트 스위트 실행 |
| Security | 하드닝 작업과 위협 모델 |
| Roadmap | 완료 및 계획된 버전 |
| Benchmark Results | FLOD 대 고정 임계값: 하드웨어, 방법론, 전체 출력 |
| Lessons Learned | 개발 중 발견된 실제 버그, 일반화되는 교훈을 위해 보존됨 |