Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
dtls-fuzzer — dtls-fuzzer는 DTLS 서버 구현을 위한 프로토콜 상태 퍼저입니다. | Kitploit
도구/GitLabGitLab/pfg666/dtls-fuzzer
FuzzingNetwork Security
GitLabpfg666/dtls-fuzzer

dtls-fuzzer

dtls-fuzzer는 DTLS 서버 구현을 위한 프로토콜 상태 퍼저입니다.

저장소 보기
655년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

dtls-fuzzer는 DTLS 서버의 프로토콜 상태 퍼징을 수행하는 Java 도구입니다. 구체적으로 다음과 같은 기능을 지원합니다:

  1. 알파벳이 주어지면 로컬 DTLS 서버 구현의 모델을 자동으로 생성할 수 있습니다.
  2. 테스트(입력 시퀀스)와 알파벳이 주어지면 DTLS 서버 구현에서 테스트를 실행할 수 있습니다.
  3. 여러 학습 실행을 포함하는 배치 학습 작업을 실행할 수 있습니다.

dtls-fuzzer는 DTLS 메시지를 생성/구문 분석하고 상태를 유지하기 위해 [TLS-Attacker][tlsattacker]를 사용합니다. 이를 위해 TLS-Attacker가 DTLS 지원으로 확장되었습니다. dtls-fuzzer는 DTLS 개선 사항을 구현한 TLS-Attacker의 [버전 3.0b][tlsattackerver]에 의존합니다.

아티팩트 내용

아티팩트에는 다음이 포함됩니다:

  1. 소스 코드와 논문에 표시된 것과 일치하는 실험 데이터를 포함한 dtls-fuzzer의 파일 구조 설명;
  2. 선택한 SUT(System Under Test)/DTLS 서버 구현에서 dtls-fuzzer를 평가하기 위한 안내.

dtls-fuzzer 파일 구조

dtls-fuzzer 루트 디렉토리에서 가장 중요한 폴더는 다음과 같습니다:

  1. 'src', dtls-fuzzer의 Java 소스 코드를 포함하는 디렉토리;
  2. 'examples', 알파벳, 테스트, 명세(즉, 모델) 및 학습 실험을 시작하기 위해 dtls-fuzzer에 제공될 수 있는 인수 파일의 예제를 포함하는 디렉토리. 이 디렉토리의 파일은 학습 실험을 위한 입력으로 사용됩니다;
  3. 'experiments', 실험과 관련된 데이터를 포함하는 디렉토리. 이 데이터 중 일부는 학습 실험을 위한 입력으로도 사용됩니다. 가장 주목할 만한 폴더는 다음과 같습니다:
    1. 'suts', Java SUT용 바이너리 포함. 이 SUT는 소스 코드가 공개되어 있는 맞춤형 DTLS 서버 프로그램입니다;
    2. 'patches', 소스 코드가 컴파일되기 전에 일부 SUT(특히 유틸리티)에 적용된 패치. 이러한 패치의 주요 목적은 학습 중 타이밍 유도 동작을 방지하고, SUT에서 기능을 활성화/비활성화하며, 사전 공유 키와 같은 매개변수를 구성하는 것이었습니다;
    3. 'keystore', 학습 중 사용된 키 자료(예: 공개-개인 키 쌍, Java 키 저장소);
    4. 'results', 실험 결과.

실험 결과

'experiments/results'에는 작업의 주요 출력인 실험 결과가 포함됩니다. 특히:

  • 'all_ciphers'에는 실행된 모든 실험의 출력 폴더가 포함됩니다;
    • 'mapper'에는 매퍼 결정 중 일부를 정당화하는 데 도움이 되는 실험 결과가 포함됩니다(섹션 5.2 참조).
  • 'included'에는 수렴된 실험의 출력 폴더가 포함됩니다(수렴은 학습이 성공적으로 모델을 생성했음을 의미함).
    • 'all_ciphers'의 모든 실험이 성공적이거나 최종 모델로 종료된 것은 아닙니다(이러한 경우 학습이 수렴되지 않았다고 말합니다).

출력 폴더

출력 폴더 이름은 실험 구성에 따라 지정됩니다. 즉:

  • 테스트된 SUT/구현;
  • 사용된 알파벳(포함된 키 교환 알고리즘 측면에서), 'all'은 4개의 키 교환 알고리즘이 모두 사용되었음을 나타냄;
  • 해당되는 경우 클라이언트 인증이 필요(req), 선택 사항(nreq) 또는 비활성화(none)되었는지 여부;
  • 테스트 알고리즘: 무작위 걷기(rwalk) 또는 그 변형(stests);
    • 변형을 사용한 실험은 논문에 포함되지 않았습니다.
  • 선택적으로, 재전송이 출력에 포함되었는지/제외되었는지 여부(incl 또는 excl).
    • 재전송은 기본적으로 포함되었습니다.

예를 들어, 폴더 이름 'jsse-12_rsa_cert_none_rwalk_incl'은 JSSE 12 DTLS 구현에 대한 실험을 나타내며, RSA 핸드셰이크를 수행하기 위한 입력을 포함하는 알파벳을 사용하고, 클라이언트 인증이 비활성화되었으며, 테스트 알고리즘은 무작위 걷기이고 재전송이 포함됩니다.

출력 폴더에는 다음이 포함됩니다:

  • 'alphabet.xml', 입력 알파벳;
  • 'command.args', 다양한 실험 매개변수가 포함된 인수 파일. 가장 주목할 만한 것은:
    • queries, 가설이 최종으로 간주되기 위해 통과해야 하는 무작위 걷기 테스트 수의 상한
    • equivalenceAlgorithms, 사용된 모델 기반 테스트 알고리즘
    • runWait 및 timeout, 각각 시작 및 응답 시간 제한(이에 대해서는 나중에 다룸)
  • 'sul.config', TLS-Attacker에 대한 SUT 종속 구성. 동일한 구성을 사용하여 TLS-Attacker만으로 SUT에서 워크플로 추적을 실행할 수 있습니다;
  • 'hyp[0-9]+.dot', 중간 가설;
  • 'statistics.txt', 총 테스트 수, 학습 시간 등의 실험 통계;
    • 표 4에 이 데이터가 표시됩니다.
  • 'nondet.log', 발생한 비결정적 동작의 로그;
  • 'learnedModel.dot', 학습이 수렴된 경우 학습된 모델(즉, 최종 가설);
  • 'error.msg', 실험이 실패하거나 학습이 중지되어 최종 모델로 수렴되지 않은 경우 생성된 오류 메시지.
    • 주요 원인은 시간 관련 비결정성(동일한 입력이 다른 결과를 초래함)입니다.

평가자는 (예를 들어) 'included'의 실험 결과가 표 4에 표시된 결과와 일치하는지, 또는 표 2에서 테스트된 구성이 'all_ciphers'에도 나타나는지 확인할 수 있습니다. 논문에 나타난 모델은 상당한 정리/트리밍의 결과인 반면, 출력 폴더에 나타난 모델은 변경되지 않았습니다.

dtls-fuzzer 평가 단계

dtls-fuzzer를 평가하기 위해서는 다음 단계를 수행해야 합니다:

  1. 사전 요구 사항 충족 확인
  2. dtls-fuzzer 설치
  3. SUT 설정
  4. dtls-fuzzer를 사용하여 SUT에 대한 모델 생성
  5. 결과 분석

이 평가 섹션 다음에는 dtls-fuzzer의 주요 사용 사례를 소개하는 사용 가이드가 이어집니다.

사전 요구 사항 확인

dtls-fuzzer는 Ubuntu 18.04 및 Debian 9 Linux 배포판에서 테스트되었습니다. 최신 Linux 배포판에서도 작동할 것입니다. 다른 플랫폼에 대한 지원은 테스트되지 않았습니다. 이 가이드는 Debian 기반 배포판('apt-get'이 있는)을 사용한다고 가정합니다.

Java 8 JDK(Java Development Kit) 가상 머신(VM)이 필요합니다. 실험을 실행하는 데 사용된 버전은 1.8.0_222이지만, 이후 Java 8 버전도 작동해야 합니다. 도구는 Java 9 이상에서는 빌드되지 않습니다. 또한 종속성 관리/배포를 위해 maven('mvn' 유틸리티)에 의존합니다.

충분히 강력한 머신을 사용하는 것이 좋습니다. 그렇지 않으면 응답 대기 시간과 같은 민감한 타이밍 매개변수가 너무 낮아져 논문에서 얻은 것과 다른 출력이 발생할 수 있습니다. 더 나쁜 경우 학습 실험이 실패할 수 있습니다. 원래 실험은 다중 코어 서버에서 실행되었지만, i7 프로세서가 있는 데스크탑에서도 학습이 가능할 것으로 예상됩니다(완전히 테스트되지는 않았지만). 타이밍 매개변수를 적절히 조정하면 약한 시스템에서도 학습이 가능합니다. 마지막으로, .dot 모델을 .pdf로 내보내 시각화하려면 [graphviz 라이브러리][graphviz]를 설치해야 합니다. graphviz에서 제공하는 'dot' 유틸리티가 시스템 PATH에 있는 것으로 가정합니다.

요약하면, 권장되는 사전 요구 사항은 다음과 같습니다:

  • 최신 Linux 배포판, 가급적 Debian 기반
  • 실험 재현/안정적인 학습을 위한 데스크탑/서버 머신
  • (>=) 4GB RAM
  • Java 8 JDK
  • maven
  • graphviz

환경 설정

Java 8 JDK

dtls-fuzzer는 Java 8 JDK(Java Development Kit)가 필요합니다. Java가 설치되지 않은 경우 OpenJDK 구현(Ubuntu에서는 'apt-get'을 통해)을 설치하며, 이 하위 섹션의 나머지는 건너뛸 수 있습니다.

> sudo apt-get install openjdk-8-jdk

Java 버전이 설치된 경우 다음을 실행하여 버전을 확인할 수 있습니다:

> java -version

버전 코드는 1.8로 시작해야 하며(예: 1.8.0_242), 가상 머신은 "Server VM"(전체 JDK가 설치되었음을 나타내며, 런타임 환경만이 아님)이어야 합니다. 그렇다면 Java 설정이 완료된 것입니다. 그렇지 않은 경우, 설치된 Java VM을 나열하여 Java 8 JDK가 플랫폼에 설치되었지만 현재 선택되지 않았는지 확인할 수 있습니다:

> update-java-alternatives --list

Java 8 JDK가 나타나면 동일한 명령을 사용하여 Java 8 JDK를 기본 Java 구현으로 구성할 수 있습니다.

> sudo update-java-alternatives --set java-1.8.0-openjdk-amd64

그렇지 않으면 처음에 표시된 대로 전체 설치를 수행해야 합니다. 불행히도 'update-java-alternatives'가 때때로 성공하지 못하여 "오류" 메시지가 표시됩니다. 이러한 경우 'update-alternatives'를 사용하여 'java'(인터프리터) 및 'javac'(컴파일러)로 선택된 Java VM을 대화식으로 구성할 수 있습니다.

> sudo update-alternatives --config java
> sudo update-alternatives --config javac

기타

Java 8이 설정되면 다른 종속성인 maven, graphviz 및 일부 일반적인 SUT 종속성을 설치합니다. 그런 다음 dtls-fuzzer의 저장소를 선택한 폴더에 복제하고 아티팩트 브랜치를 체크아웃합니다. 마지막으로 해당 폴더를 현재 디렉토리로 만듭니다.

> sudo apt-get install maven graphviz autotools-dev automake libtool
> git clone  -b usenix20-artifact https://github.com/assist-project/dtls-fuzzer.git ~/dtls-fuzzer
> cd ~/dtls-fuzzer

dtls-fuzzer 설치

먼저 'prepare.sh' 스크립트를 실행하여 dtls-fuzzer가 의존하는 라이브러리, 즉 두 개의 로컬 .jar와 TLS-Attacker 3.0b를 설치합니다. 그런 다음 도구 자체를 설치합니다. POSIX 시스템에서 결과 명령은 다음과 같습니다:

> bash prepare.sh
> mvn clean install

이 단계 후에 'target' 디렉토리가 생성되어 'dtls-fuzzer.jar'를 포함해야 합니다. 이것이 실행 가능한 라이브러리입니다. 이 시점부터 명령은 dtls-fuzzer의 루트 디렉토리에서 실행된다고 가정합니다.

빠른 실행

PSK(사전 공유 키)만 사용하여 OpenSSL 1.1.1b에 대한 모델을 생성한다고 가정해 보겠습니다. dtls-fuzzer의 빠른 실행은 다음과 같습니다.

먼저 'setup_sut.sh' 스크립트에 의해 자동으로 SUT를 설정합니다.

> bash setup_sut.sh openssl-1.1.1b

그런 다음 'args/openssl-1.1.1b' 폴더에서 인수 파일을 선택합니다. 선택할 수 있는 여러 인수 파일이 있습니다:

learn_openssl-1.1.1b_all_cert_none_rwalk_incl  
learn_openssl-1.1.1b_all_cert_nreq_rwalk_incl  
learn_openssl-1.1.1b_all_cert_req_rwalk_incl  
learn_openssl-1.1.1b_psk_rwalk_incl

관심 있는 인수 파일은 'learn_openssl-1.1.1b_psk_rwalk_incl'이며, 파일 이름이 PSK를 나타냅니다. 따라서 이를 선택하고 퍼저를 실행합니다. 또한 학습 시간을 단축하기 위해 테스트 수를 200개로 제한합니다. 마지막으로 OpenSSL의 경우 LD_LIBRARY_PATH를 구현 디렉토리('suts/openssl-1.1.1b/')로 설정해야 합니다. 학습을 실행하기 전에 설정이 작동하는지 확인하기 위해 간단한 테스트를 실행하는 것이 좋습니다. 좋은 테스트는 핸드셰이크를 완료하는 것입니다. 인수 파일과 'examples/tests'의 해당 테스트를 매개변수로 제공합니다. 다음을 실행합니다:

>  LD_LIBRARY_PATH=suts/openssl-1.1.1b/ java -jar target/dtls-fuzzer.jar @args/openssl-1.1.1b/learn_openssl-1.1.1b_psk_rwalk_incl -test examples/tests/psk

모든 것이 잘 진행되면 서버는 "이것은 hello 메시지입니다"라는 메시지를 출력해야 합니다. 이 메시지는 핸드셰이크를 완료한 후 보내는 메시지입니다. 설정이 작동하는 것을 확인했으므로 이제 다음을 실행하여 학습을 시작할 수 있습니다:

> LD_LIBRARY_PATH=suts/openssl-1.1.1b/ java -jar target/dtls-fuzzer.jar @args/openssl-1.1.1b/learn_openssl-1.1.1b_psk_rwalk_incl -queries 200

실험을 위한 출력 디렉토리 'output/openssl-1.1.1b_psk_rwalk_incl/'가 생성된 것을 확인할 수 있습니다. 'ls' 명령으로 이 디렉토리를 확인하여 실험의 현재 상태(생성된 가설 수 등)를 확인할 수 있습니다.

> ls output/openssl-1.1.1b_psk_rwalk_incl/

모든 것이 잘 진행된 경우

모든 것이 잘 진행되면 20-30분 후에 출력 디렉토리에 'learnedModel.dot' 파일이 포함되어야 합니다. graphviz 'dot' 유틸리티를 사용하여 파일을 .pdf로 내보내고 즐겨 사용하는 .pdf 뷰어로 .pdf를 열어 시각화할 수 있습니다.

> dot -Tpdf output/openssl-1.1.1b_psk_rwalk_incl/learnedModel.dot > output/openssl-1.1.1b_psk_rwalk_incl/learnedModel.pdf
> evince output/openssl-1.1.1b_psk_rwalk_incl/learnedModel.pdf

마지막으로 'trim_model.sh'를 사용하여 더 나은/트리밍된 버전의 모델을 생성할 수 있습니다. 다음과 같이 수행할 수 있습니다:

> bash trim_model.sh --output output/openssl-1.1.1b_psk_rwalk_incl/nicerLearnedModel.dot output/openssl-1.1.1b_psk_rwalk_incl/learnedModel.dot 
> dot -Tpdf output/openssl-1.1.1b_psk_rwalk_incl/nicerLearnedModel.dot > output/openssl-1.1.1b_psk_rwalk_incl/nicerLearnedModel.pdf
> evince output/openssl-1.1.1b_psk_rwalk_incl/nicerLearnedModel.pdf

이제 모델을 명세와 비교하여 시스템의 적합성을 확인할 수 있습니다...

도구 다운로드