Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
NSEC3-Encloser-Attack — 이 프로젝트는 CVE-2023-50868의 공격을 재현하고 평가하기 위해 사용자 정의 NSEC3 매개변수를 사용하여 DNS zonefiles를 생성합니다. | Kitploit
도구/GitHubGitHub/goethe-universitat-cybersecurity/nsec3-encloser-attack
Vulnerability AnalysisExploitationPapers & ResearchLearning & EducationDNS FuzzingDNS Analysis
GitHubgoethe-universitat-cybersecurity/nsec3-encloser-attack

NSEC3-Encloser-Attack

이 프로젝트는 CVE-2023-50868의 공격을 재현하고 평가하기 위해 사용자 정의 NSEC3 매개변수를 사용하여 DNS zonefiles를 생성합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

NSEC3-Encloser-Attack Zonefile 생성

이 프로젝트는 CVE-2023-50868의 공격을 재현하고 평가하기 위해 사용자 정의 NSEC3 매개변수로 DNS zonefile을 생성합니다.

요구 사항

Python3 (Python3.10에서 테스트됨)

설치된 Python 종속성:

  • cryptography 42.0.5
  • dnspython 2.6.1

구성 요소

  • lib: Python 유틸리티, 포함:
    • keys.py: 키를 파일에 로드/저장하기 위한 래퍼 함수
    • nsec.py: DNSSEC NSEC 해시 구현
    • dnssec.py: NSEC3 지원이 추가된 수정/패치된 dnspython 함수
    • config.py: 구성 로딩 유틸리티
  • keys: 사전 생성된 키가 포함된 PEM 파일 (gen_keys.py로 생성)
  • zones: Zonefile (gen_zones.py로 생성)
  • config.json: 예제 구성
  • 설정

    • config.json을 수정하여 생성할 NSEC3 영역을 구성합니다 (Config 참조)

    • 키 생성: $ ./gen_keys.py

      각 영역에 대해 KSK와 ZSK가 생성됩니다. 구성에서 영역 이름이 변경되지 않는 한 키는 구성을 변경할 때 재사용됩니다.

    • zonefile 생성: $ ./gen_zones.py -c

      -c 옵션은 구성 파일의 내보내기를 활성화합니다 (현재는 BIND9 전용)

    자세한 옵션은 --help를 사용하세요.

    Config

    구성 구조는 두 가지 요소를 포함합니다:

    • default: 영역의 기본 매개변수 (현재까지 일부만 지원됨)
    • zones: 내보낼 모든 영역의 목록

    영역 (Zone)

    영역은 다음을 포함합니다:

    • name (필수): 영역을 참조할 때와 내보낼 때 파일명으로 사용되는 이름
    • origin (필수): 표준 영역 오리진 도메인 이름
    • parent: 이 영역의 NS, A, DS 및 NSEC3PARAM 레코드가 추가되는 상위 영역 이름 (오리진이 아님)
    • keysize (필수): RSA 키 크기 (현재는 RSA만)
    • nsec3: NSEC3 매개변수:
      • iterations: 기본값 0
      • salt: 기본값 ''
      • algorithm: 정수 값, 현재는 SHA-1 (1)만 지원
      • tight: 오리진 직후와 *.origin의 전후에 NSEC3 레코드를 추가할지 제어하는 특수 부울 값입니다. 예를 들어, *.origin에 NSEC3 레코드 1d..ua.origin.가 있는 경우, 1d..u0.origin. 및 1d..ub.origin.에 대한 레코드도 zonefile에 추가됩니다. 이렇게 하면 오리진의 하위 도메인(예: a.origin.)에 대한 모든 NXDOMAIN 증명이 세 개의 NSEC3 레코드를 필요로 하게 됩니다. 오리진과 와일드카드를 포함하는 NSEC3 레코드는 next_hash까지의 범위가 매우 작기 때문입니다.
    • ns: 이 영역의 네임서버. 단일 값 또는 다음의 목록:
      • ns: 네임서버의 도메인 이름, 기본값 ns1.origin
      • ip: IPv4 주소 (현재 IPv6는 지원되지 않음), 기본값 172.0.0.1
    • soa: SOA RDATA
    • rrsets: 추가 RRset 목록으로, 5-튜플 목록 [도메인 이름, ttl, 클래스, 타입, rdata]으로 제공되며 모든 값(선택적으로 ttl 제외)은 문자열로 제공됩니다.

    공격 재현

    NSEC3 공격을 재현하기 위해 이 섹션에서는 DNS 네임서버와 피해자 리졸버로 구성된 가능한 사용자 설정을 설명합니다. 계속하기 전에 시스템 환경이 공격 zonefile에 공용 서버가 노출되지 않도록 방화벽이 적절히 구성되어 있는지 확인하세요.

    1. NSD 네임서버 설치 (최신 버전)

      설치 지침은 NLNetlabs 웹사이트 (https://nsd.docs.nlnetlabs.nl/en/latest/installation.html)를 참조하세요.

      네임서버는 VM이나 컨테이너에 배포하는 것이 좋습니다. 시작점으로 docker/nsd에 작은 Dockerfile이 있습니다.

      다음 예와 같이 docker build -t <tag> <path_to_dockerfile>로 컨테이너를 빌드합니다: cd docker/nsd && docker build -t nsd .

      컨테이너에서 콘솔을 열려면 docker run -it --name <name> nsd bash로 컨테이너를 실행합니다.

      다음으로, 네임서버가 공격자 zonefile을 호스팅하도록 구성해야 합니다. 이를 위해서는 생성할 zonefile의 올바른 구성이 필요합니다 (가장 중요한 것은 NS 레코드에 제공된 IP 주소가 컨테이너의 IP 주소와 일치해야 한다는 점입니다). 네트워크가 구성되지 않은 경우, 컨테이너의 IP 주소는 다음 명령으로 확인할 수 있습니다: docker container inspect <name> | grep IPAddress

      구성 출력으로 영역을 생성하고 (./gen_zones.py -c, 위 참조) 저장소 디렉토리에서 docker 컨테이너로 zones 출력 폴더를 복사합니다: docker cp ./zones <name>:/etc/nsd

      컨테이너 콘솔에서 컨테이너의 NSD 구성 /etc/nsd/nsd.conf에 다음 줄을 추가해야 합니다:

      root@kitploit:~
      verify:
          enable: no
      remote-control:
          control-enable: no
      
      include: "/etc/nsd/zones/nsd.conf"
      

      마지막으로, 컨테이너 셸에서 다음 명령으로 NSD를 실행합니다: /usr/sbin/nsd -d -c /etc/nsd/nsd.conf

      -V 4 옵션으로 로깅 출력을 활성화합니다.

      이제 문제가 없다면 권한 네임서버가 실행 중이어야 합니다. 호스트 시스템에서 dig를 사용하여 영역 도메인 중 하나에 쿼리를 실행하여 확인할 수 있습니다: dig @<ip-addr-of-nsd-container> <domain>

    2. 리졸버 설치. 이 데모에서는 Unbound 1.17.1에 대한 가능한 접근 방식을 보여줍니다.

      공식 dockerfile은 여기에서 찾을 수 있습니다: https://github.com/NLnetLabs/pythonunbound

      우리는 docker/unbound에 이 Dockerfile의 수정된 버전을 포함시켰으며, Ubuntu 버전이 업데이트되고 Unbound 1.17.1로 사전 구성되었습니다.

      저장소를 클론하고, 해당 디렉토리로 이동한 후 Unbound 컨테이너를 빌드합니다: docker build -t <tag> .

      다음 명령으로 컨테이너를 실행합니다: docker run --name <name> -it <tag> bash

      다음으로, Unbound가 NSD 권한 네임서버를 찾을 수 있도록 구성해야 합니다. 이는 컨테이너 작업 디렉토리의 unbound.conf 파일을 수정하여 수행됩니다. 이를 위해 서버.module-config 항목이 구성에서 제거되었는지 확인하세요.

      DNSSEC 검증을 활성화하려면 공격자 상위 영역의 DNSKEY 레코드를 수동으로 구성해야 합니다. 이는 서명 생성에 사용된 키와 동일해야 합니다. 예:

      root@kitploit:~
      server:
          chroot: ""
          do-ip6: no
          trust-anchor: "attack.er. DNSKEY 257 3 7 AwEAAdqDN3rJYlmGP3jJs5lCZq5NYrCn pCVlV0ko17JnbfYfLCroEF4reO/Xy0MK C9AVvSRTk83MHDuzMYXogm7m/gcn3Mh0 MwB2InP8jkPw5not+TMH/Wrbs31xkT2n RIBJJ+1lPF+e2AvwWvgREcEVTRbdhIqQ iM1StWXoTVudry4V"
      

      또한, Unbound 리졸버가 NSD 권한 네임서버를 찾을 수 있도록 스텁 영역을 구성해야 합니다. 이는 unbound.conf 파일에 다음을 추가하여 수행됩니다:

      root@kitploit:~
      stub-zone:
          name: "attack.er."
          stub-prime: yes
          stub-addr: <ip-addr-of-nsd-container>
      

      컨테이너에서 unbound를 다음 명령으로 시작합니다: unbound -vvv (데몬화를 방지하려면 사용)

    이 가이드에 문제가 있으면 추가 안내를 위해 저희에게 연락하세요.

    도구 다운로드
    -dd

    이제 dig로 unbound에 쿼리하고 응답 시간을 관찰할 수 있어야 합니다: dig @127.0.0.1 attack.er