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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
fwknop — 단일 패킷 인증 > 포트 노킹 | Kitploit
도구/GitHubGitHub/mrash/fwknop
Authentication & AuthorizationDefensive ToolsEncryption/Decryption ToolsNetwork SecurityCryptographyAuthentication
GitHubmrash/fwknop

fwknop

단일 패킷 인증 > 포트 노킹

저장소 보기
1.4k2532개월 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

fwknop - 단일 패킷 인증 (SPA)

소개

fwknop은 강력한 서비스 은닉을 위해 SPA(Single Packet Authorization)로 알려진 인증 방식을 구현합니다. SPA는 방화벽 뒤에서 기본적으로 패킷을 차단(default-drop)하는 상태에서 서비스에 대한 원하는 접근을 통신하기 위해 암호화되고 재전송이 불가능하며 HMAC을 통해 인증되는 단일 패킷만을 필요로 합니다. SPA의 주요 용도는 방화벽을 사용하여 SSH와 같은 서비스에 대한 모든 연결 시도를 차단함으로써 취약점(0-day 및 패치되지 않은 코드 모두)의 악용을 더 어렵게 만드는 것입니다. 열린 포트가 없으므로 SPA로 은닉된 모든 서비스는 Nmap으로 스캔될 수 없습니다. fwknop 프로젝트는 Linux, OpenBSD, FreeBSD 및 Mac OS X에서 iptables, firewalld, PF 및 ipfw의 네 가지 방화벽을 지원합니다. 또한 사용자 정의 스크립트를 지원하므로 fwknop이 ipset이나 nftables와 같은 다른 인프라를 지원하도록 확장할 수 있습니다.

SPA는 본질적으로 차세대 Port Knocking(PK)이지만, PK의 핵심 이점을 유지하면서 PK가 보여준 많은 한계를 해결합니다. PK의 한계로는 일반적으로 재전송 공격 방어의 어려움, 비대칭 암호 및 HMAC 방식을 안정적으로 지원하기 어려운 점, 네트워크를 통해 전송되는 PK 시퀀스에 추가 패킷을 스푸핑하여 PK 서버에 대한 DoS 공격을 쉽게 수행할 수 있다는 점(따라서 PK 서버가 클라이언트가 올바른 시퀀스를 모른다고 믿게 만듦) 등이 있습니다. 이러한 모든 단점은 SPA에 의해 해결됩니다. 동시에 SPA는 기본 차단 방화벽 정책 뒤에 서비스를 숨기고, SPA 데이터를 수동적으로 획득하며(일반적으로 libpcap 또는 기타 방법을 통해), SPA 패킷 인증 및 암호화/복호화를 위한 표준 암호화 작업을 구현합니다.

fwknop에서 생성된 SPA 패킷은 암호화 후 인증(encrypt-then-authenticate) 모델에서 HMAC을 활용한 인증 암호화를 사용합니다. HMAC 사용은 현재 선택 사항이지만(--use-hmac 명령줄 스위치로 활성화), 다음 세 가지 이유로 적극 권장됩니다:

  1. HMAC이 없으면 GnuPG를 사용하지 않는 한 fwknop으로 암호학적으로 강력한 인증이 불가능하지만, 그 경우에도 HMAC을 적용해야 합니다.
  2. 암호화 후 적용된 HMAC은 Vaudenay 공격 및 관련 트릭(예: 최근 SSL에 대한 "Lucky 13" 공격)과 같은 CBC 모드 패딩 오라클 공격에 대한 암호해독을 방어합니다.
  3. fwknopd 데몬이 HMAC을 검증하는 데 필요한 코드는 SPA 패킷을 복호화하는 데 필요한 코드보다 훨씬 간단하므로, 적절한 HMAC이 없는 SPA 패킷은 복호화 루틴을 거치지 않습니다.

위의 마지막 이유는 SPA 패킷이 GnuPG로 암호화된 경우에도 HMAC을 사용해야 하는 이유입니다. HMAC 검사가 먼저 통과되지 않으면 SPA 데이터가 libgpgme 함수를 통해 전송되지 않기 때문입니다. GnuPG와 libgpgme는 비교적 복잡한 코드이므로, HMAC 작업을 통해 잠재적인 공격자가 이 코드와 상호작용할 수 있는 능력을 제한하는 것은 더 강력한 보안 태세를 유지하는 데 도움이 됩니다. SPA 통신을 위한 HMAC을 생성하려면 일반 암호화 키 외에 전용 키가 필요하며, 두 키 모두 --key-gen 옵션으로 생성할 수 있습니다.

fwknop은 SPA 패킷을 Rijndael 블록 암호 또는 GnuPG와 관련 비대칭 암호를 사용하여 암호화합니다. 대칭 암호화 방법을 선택하면 일반적으로 암호화 키가 클라이언트와 서버 간에 공유됩니다(자세한 내용은 /etc/fwknop/access.conf 파일 참조). Rijndael 암호화에 사용되는 실제 암호화 키는 표준 PBKDF1 키 유도 알고리즘을 통해 생성되며 CBC 모드가 설정됩니다. GnuPG 방법을 선택하면 암호화 키는 GnuPG 키 링에서 파생됩니다.

사용 사례

SPA 또는 보안에 취약한 사촌인 Port Knocking(PK)을 사용하는 사람들은 일반적으로 SPA/PK 소프트웨어가 배포된 동일한 시스템에서 실행되는 SSHD에 접근합니다. 즉, 호스트에서 실행되는 방화벽이 모든 들어오는 SSH 연결에 대해 기본 차단 정책을 적용하여 SSHD를 스캔할 수 없도록 하지만, SPA 데몬이 방화벽을 재구성하여 수동적으로 인증된 SPA 클라이언트에게 임시로 접근을 허용합니다:

SPA-basic-access-SSHD "SSHD에 접근하기 위한 기본 SPA 사용"

fwknop은 위의 기능을 지원할 뿐만 아니라 NAT(iptables/firewalld 방화벽용)를 강력하게 사용합니다. 결국 중요한 방화벽은 일반적으로 독립형 호스트에 배포되는 것이 아니라 네트워크 간의 게이트웨이입니다. NAT은 이러한 방화벽에서 일반적으로 사용되어(적어도 IPv4 통신의 경우) RFC 1918 주소 공간의 내부 네트워크에 인터넷 액세스를 제공하고, 외부 호스트가 내부 시스템에서 호스팅되는 서비스에 접근할 수 있도록 합니다.

fwknop이 NAT과 통합되므로, 외부 인터넷 사용자는 SPA를 활용하여 방화벽을 통해 내부 서비스에 접근할 수 있습니다. 이는 현대의 전통적인 네트워크에서 많은 응용 분야가 있지만, Amazon AWS와 같은 클라우드 컴퓨팅 환경도 지원할 수 있습니다:

SPA-Amazon-AWS-cloud "Amazon AWS 클라우드 환경에서의 SPA 사용"

사용자 인터페이스

공식적인 크로스 플랫폼 fwknop 클라이언트 사용자 인터페이스 fwknop-gui (다운로드, github) 는 Jonathan Bennett이 개발했습니다. NAT 요청, HMAC 및 Rijndael 키(GnuPG는 아직 지원되지 않음), fwknoprc 저장 등 대부분의 주요 클라이언트 측 SPA 모드를 지원합니다. 현재 fwknop-gui는 Linux, Mac OS X 및 Windows에서 실행됩니다 - OS X의 스크린샷입니다: fwknop-gui-OS-X-screenshot "Mac OS X에서의 fwknop-gui" 마찬가지로 업데이트된 Android 클라이언트도 사용 가능합니다.

튜토리얼

fwknop에 대한 포괄적인 튜토리얼은 여기에서 찾을 수 있습니다:

http://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html

기능

다음은 fwknop 프로젝트에서 지원하는 전체 기능 목록입니다:

  • Linux의 iptables 및 firewalld, *BSD 및 Mac OS X의 ipfw, OpenBSD의 PF 방화벽에서 SPA 구현.
  • fwknop 클라이언트는 Linux, Mac OS X, *BSD, Cygwin 환경의 Windows에서 실행됩니다. 또한 SPA 패킷을 생성하는 Android 앱이 있습니다.
  • SPA 패킷의 암호화/복호화를 위해 Rijndael 및 GnuPG 방식을 모두 지원합니다.
  • Rijndael 및 GnuPG 모두에 대해 HMAC 인증 암호화를 지원합니다. 작업 순서는 암호화 후 인증(encrypt-then-authenticate)으로 다양한 암호해독 문제를 피합니다.
  • 재전송 공격은 유효한 들어오는 SPA 패킷의 SHA-256 다이제스트 비교를 통해 감지되고 차단됩니다. 다른 다이제스트 알고리즘도 지원되지만 SHA-256이 기본값입니다.
  • SPA 패킷은 libpcap을 통해 네트워크에서 수동적으로 스니핑됩니다. fwknopd 서버는 또한 별도의 이더넷 스니퍼(예: tcpdump -w <file> 사용)가 기록한 파일, iptables ULOG pcap 작성기, 또는 --udp-server 모드의 UDP 소켓을 통해 직접 패킷 데이터를 획득할 수 있습니다.
  • iptables 방화벽의 경우, fwknop에 의해 추가된 ACCEPT 규칙은 사용자 정의 iptables 체인에 추가되고 구성 가능한 시간 초과 후 삭제되므로 fwknop이 시스템에 이미 로드된 기존 iptables 정책을 방해하지 않습니다.
  • 인증된 SPA 통신을 위한 인바운드 NAT 연결을 지원합니다(현재 iptables 방화벽만 해당). 즉, fwknop은 DNAT 규칙을 생성하도록 구성할 수 있으므로 공개 인터넷에서 RFC 1918 IP 주소의 내부 시스템에서 실행되는 서비스(예: SSH)에 도달할 수 있습니다. SNAT 규칙도 지원되며, 이는 기본적으로 fwknopd를 SPA 인증 게이트웨이로 전환하여 내부 네트워크에서 인터넷에 접근할 수 있게 합니다.
  • fwknop 서버는 여러 사용자를 지원하며, 각 사용자는 /etc/fwknop/access.conf 파일을 통해 고유한 대칭 또는 비대칭 암호화 키를 할당받을 수 있습니다.
  • https://www.cipherdyne.org/cgi-bin/myip를 통한 외부 IP 주소 자동 확인(NAT 장치 뒤에서 fwknop 클라이언트를 실행할 때 유용함). 이 모드에서는 외부 IP 주소가 각 SPA 패킷 내에서 암호화되므로, 인라인 장치가 SPA 패킷을 가로채어 다른 IP에서만 전달하여 접근 권한을 얻으려는 중간자 공격(MITM)을 차단합니다.
  • SPA 패킷의 대상 포트와 iptables NAT 기능을 통한 후속 연결 포트에 대한 포트 무작위화를 지원합니다. 후자는 내부 서비스로의 전달된 연결 및 fwknopd가 실행되는 시스템의 로컬 소켓에 부여된 접근에 적용됩니다.
  • Tor와의 통합(이 DefCon 14 프레젠테이션에 설명됨). Tor는 TCP를 전송 계층으로 사용하므로, Tor 네트워크를 통해 SPA 패킷을 보내려면 각 SPA 패킷이 설정된 TCP 연결을 통해 전송되어야 하므로 기술적으로 "단일 패킷 인증"의 "단일" 측면을 위반합니다. 그러나 Tor는 일부 배포에서 이 고려 사항을 능가할 수 있는 익명성 이점을 제공합니다.
  • SPA 통신을 위한 버전 관리 프로토콜을 구현하므로, 새로운 SPA 메시지 유형을 제공하고 동시에 이전 fwknop 클라이언트와의 역호환성을 유지하면서 프로토콜을 쉽게 확장할 수 있습니다.

라이선스

fwknop 프로젝트는 GNU General Public License (GPL v2) 또는 (선택에 따라) 이후 버전의 조건에 따라 오픈 소스 소프트웨어로 출시됩니다. 최신 릴리스는 다음에서 찾을 수 있습니다: http://www.cipherdyne.org/fwknop/

현재 상태

이 README 파일은 2013년 7월에 이루어진 2.5 릴리스 기준 fwknop 프로젝트의 현재 상태를 설명합니다. 현재 Firewall Knock Operator 라이브러리인 libfko와 fwknop 클라이언트 및 서버 애플리케이션이 구현되어 있습니다. 라이브러리는 다른 fwknop 구성 요소가 사용하는 SPA 데이터를 관리하기 위한 API 및 백엔드 기능을 제공합니다. 또한 SPA 기능이 필요한 다른 프로그램에서도 사용할 수 있습니다(예: perl 디렉토리의 FKO perl 모듈, python 디렉토리의 Python 바인딩 참조).

업그레이드

이전 버전의 fwknop(원래 perl 구현 포함)에서 업그레이드하는 경우, fwknop-2.5 이상으로의 원활한 전환을 위해 다음 링크를 읽어야 합니다:

http://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html#backwards-compatibility

기타

  • fwknop에 대한 질문이나 의견은 fwknop 메일링 리스트로 보내주세요.
  • 정적 분석을 위해 fwknop은 CLANG 정적 분석기와 강력한 Coverity Scan 도구를 사용합니다:

fwknop 빌드하기

이 배포판은 빌드 설정을 위해 GNU autoconf를 사용합니다. autoconf 사용에 대한 일반적인 기본 사항은 INSTALL 파일을 참조하십시오.

fwknop에 특화된 몇 가지 "configure" 옵션이 있습니다. 다음은 (./configure --help에서 발췌)입니다:

root@kitploit:~
  --disable-client        fwknop 클라이언트 구성 요소를 빌드하지 않습니다.
                          기본값은 클라이언트를 빌드하는 것입니다.
  --disable-server        fwknop 서버 구성 요소를 빌드하지 않습니다.
                          기본값은 서버를 빌드하는 것입니다.
  --with-gpgme            libgpgme을 사용한 gpg 암호화 지원
                          [default=check]
  --with-gpgme-prefix=PFX GPGME가 설치된 접두사 (선택 사항)
  --with-gpg=/path/to/gpg gpgme가 사용할 gpg 실행 파일의 경로를 지정합니다
                          [default=check path]
  --with-firewalld=/path/to/firewalld
                          firewalld 실행 파일의 경로를 지정합니다
                          [default=check path]
  --with-iptables=/path/to/iptables
                          iptables 실행 파일의 경로를 지정합니다
                          [default=check path]
  --with-ipfw=/path/to/ipfw
                          ipfw 실행 파일의 경로를 지정합니다 [default=check
                          path]
  --with-pf=/path/to/pfctl
                          pf 실행 파일의 경로를 지정합니다 [default=check
                          path]
  --with-ipf=/path/to/ipf ipf 실행 파일의 경로를 지정합니다 [default=check
                          path]

예시:

./configure --disable-client --with-firewalld=/bin/firewall-cmd
./configure --disable-client --with-iptables=/sbin/iptables --with-firewalld=no

참고 사항

Perl 버전 fwknop에서 마이그레이션

현재 Perl 버전을 사용 중이고 이 버전으로 마이그레이션할 계획이 있다면 몇 가지 알아야 할 사항이 있습니다:

  • Perl 기반 fwknop의 모든 기능과 특성이 이 구현으로 포팅된 것은 아닙니다. 우리는 C 버전을 가능한 한 가볍고 간결하게 유지하는 것이 중요하다고 생각했습니다. 생략된 대부분의 기능(예: 이메일 알림)은 다른 방법(예: 외부 스크립트를 사용하여 로그 파일을 모니터링하고 적절한 로그 메시지를 기반으로 알림)을 통해 수행할 수 있습니다.

  • fwknop 구성 및 액세스 파일 지시문과 값에 몇 가지 차이점이 있습니다. 이 중 일부는 상당히 미묘합니다. 해당 파일의 문서와 주석에 주의를 기울여야 합니다.

fwknop 개발자를 위한 정보

git에서 이 배포판을 가져오는 경우, autogen.sh 스크립트를 실행하여 autoconf 파일을 생성해야 합니다. 디렉토리나 파일이 누락되었다는 오류가 발생하면 autogen.sh를 다시 실행해 보십시오. 그런 다음 구성을 재생성하려면 autoreconf -i를 실행할 수 있습니다. 어떤 이유로 autoreconf가 작동하지 않으면 autogen.sh 스크립트로 충분합니다.

fwknop 및 fwknopd 매뉴얼 페이지 nroff 소스는 각각의 디렉토리(client 및 server)에 포함되어 있습니다. 이러한 nroff 파일은 'docs' 디렉토리의 asciidoc 소스에서 파생되었습니다. 자세한 내용은 docs의 README를 참조하십시오.

도구 다운로드
  • 유효한 SPA 패킷을 대신하여 셸 명령 실행을 지원합니다.
  • fwknop 서버는 암호화 키 및 재전송 공격 감지 이상의 여러 제한을 인바운드 SPA 패킷에 적용하도록 구성할 수 있습니다. 즉, 패킷 수명, 소스 IP 주소, 원격 사용자, 요청된 포트에 대한 접근 등입니다.
  • fwknop에는 클라이언트와 서버 구성 요소가 제대로 작동하는지 확인하기 위해 일련의 테스트를 실행하는 포괄적인 테스트 스위트가 포함되어 있습니다. 이러한 테스트는 로컬 루프백 인터페이스를 통해 SPA 패킷을 스니핑하고, 테스트 구성에 따라 적절한 액세스를 위해 확인되는 임시 방화벽 규칙을 구축하며, 각 테스트에 대해 예상되는 마커에 대해 fwknop 클라이언트 및 fwknopd 서버의 출력을 구문 분석합니다. 테스트 스위트 출력은 분석을 위해 제3자에게 전달할 수 있도록 쉽게 익명화할 수 있습니다.
  • fwknop은 포트 노킹과 수동 OS 지문 인식을 통합한 최초의 프로그램입니다. 그러나 SPA는 포트 노킹 이상의 많은 보안 이점을 제공하므로, 포트 노킹 모드는 일반적으로 사용되지 않습니다.