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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
TLS-Attacker — TLS 라이브러리의 체계적인 퍼징 및 분석을 위한 Java 기반 프레임워크입니다. 임의의 프로토콜 메시지 조작, 수정 및 TLS 클라이언트/서버 테스트를 통해 취약점 발견을 가능하게 합니다. | Kitploit
도구/GitHubGitHub/tls-attacker/tls-attacker
Vulnerability AnalysisFuzzingNetwork SecurityCryptographyPenetration Testing
GitHubtls-attacker/tls-attacker

TLS-Attacker

TLS 라이브러리의 체계적인 퍼징 및 분석을 위한 Java 기반 프레임워크입니다. 임의의 프로토콜 메시지 조작, 수정 및 TLS 클라이언트/서버 테스트를 통해 취약점 발견을 가능하게 합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

TLS-Attacker

GitHub release (latest by date) licence Build Status

TLS-Attacker는 TLS 라이브러리를 분석하기 위한 Java 기반 프레임워크입니다. 임의의 순서로 TLS 피어에게 임의의 프로토콜 메시지를 보낼 수 있으며, 제공된 인터페이스를 사용하여 수정 사항을 정의할 수 있습니다. 이를 통해 개발자는 사용자 정의 TLS 프로토콜 흐름을 쉽게 정의하고 자신의 TLS 라이브러리로 테스트할 수 있습니다.

참고: TLS-Attacker는 TLS 개발자와 침투 테스터를 위한 연구 도구입니다. GUI나 초록/빨간불 표시는 없습니다.

컴파일 및 실행

TLS-Attacker를 컴파일하고 사용하려면 Java와 Maven이 설치되어 있어야 합니다. Ubuntu에서는 다음 명령어로 Maven을 설치할 수 있습니다:

$ sudo apt-get install maven

TLS-Attacker는 현재 Java JDK 21이 필요합니다.

올바른 Java 버전이 있다면 TLS-Attacker 디렉토리에서 maven 명령어를 실행할 수 있습니다:

$ git clone https://github.com/tls-attacker/TLS-Attacker.git
$ cd TLS-Attacker
$ mvn clean install

또는, 시간이 없다면 다음을 사용하여 테스트를 건너뛸 수 있습니다:

$ mvn clean install -DskipTests=true

결과 jar 파일은 "apps" 폴더에 위치합니다.

이 프로젝트를 의존성으로 사용하려면 직접 컴파일할 필요 없이 pom.xml에 다음과 같이 포함시킬 수 있습니다.

<dependency>
    <groupId>de.rub.nds.tls.attacker</groupId>
    <artifactId>tls-attacker</artifactId>
    <version>7.0.0</version>
    <type>pom</type>
</dependency>

TLS-Attacker에는 TLS-Attacker 기능에 쉽게 접근할 수 있는 데모 애플리케이션이 포함되어 있습니다.

다음 명령어로 TLS-Attacker를 클라이언트로 실행할 수 있습니다:

$ cd apps
$ java -jar TLS-Client.jar -connect [host:port]

또는 서버로 실행하려면:

$ java -jar TLS-Server.jar -port [port]

이 예제 애플리케이션들은 그 자체로도 매우 강력하지만, TLS-Attacker는 프로그래밍 라이브러리로 사용될 때 진정한 잠재력을 발휘합니다.

코드 구조

TLS-Attacker는 여러 (maven) 프로젝트로 구성됩니다:

  • TLS-Client: 클라이언트 예제 애플리케이션
  • TLS-Core: 프로토콜 스택이자 TLS-Attacker의 핵심
  • TLS-Mitm: MitM 워크플로우를 위한 프로토타입
  • TLS-Server: 서버 예제 애플리케이션
  • TLS-Proxy: SSLSocket을 위해 TLS-Attacker 사용
  • TraceTool: TLS-Attacker 워크플로우 추적의 검사 및 수정
  • Transport: 하위 계층을 위한 전송 유틸리티
  • Utils: 유틸리티 클래스 모음

TLS-Attacker design

이 모듈들에 대한 자세한 정보는 Wiki에서 확인할 수 있습니다.

기능

현재 다음 기능이 지원됩니다:

  • SSL 3, TLS 버전 1.0 (RFC-2246), 1.1 (RFC-4346), 1.2 (RFC-5246), 및 1.3 (RFC-8446)
  • SSL 2 (부분 지원)
  • (EC)DH(E), RSA, PSK, SRP, GOST 및 ANON 키 교환 알고리즘
  • CBC, AEAD 및 스트림 암호 (AES, CAMELLIA, DES, 3DES, IDEA, RC2, ARIA, GOST_28147_CNT_IMIT, RC4, SEED, NULL)
  • ~300개의 암호 스위트, ~30개의 확장
  • 클라이언트 및 서버
  • HTTPS
  • 2자 이상의 워크플로우
  • 다양한 확장
  • 토큰 바인딩 (EC) 및 HTTP를 통한 토큰 바인딩
  • 소켓
  • TLS 1.3 0-RTT
  • STARTTLS
  • ...

사용법

여기에서는 TLS-Attacker 사용에 대한 매우 간단한 예제를 소개합니다.

먼저 TLS 서버를 시작해야 합니다 (공개 서버는 사용하지 마십시오). 아직 실행하지 않았다면 keygen.sh 스크립트를 실행하세요. 예를 들어 OpenSSL 테스트 서버를 사용할 수 있습니다:

$ cd TLS-Attacker/resources
$ openssl s_server -key rsa1024key.pem -cert rsa1024cert.pem

이 명령어는 4433 포트에서 TLS 서버를 시작합니다.

서버에 연결하려면 다음 명령어를 사용할 수 있습니다:

$ cd TLS-Attacker/apps
$ java -jar TLS-Client.jar -connect localhost:4433

참고: 이 핸드셰이크가 실패하면 특정 암호 스위트를 지정하지 않았기 때문일 수 있습니다. TLS-Attacker는 서버가 선택한 암호 스위트를 완전히 따르지 않습니다.

다른 암호 스위트, TLS 버전 또는 다른 포트에 연결하려면 다음 매개변수를 사용하세요:

$ java -jar TLS-Client.jar -connect localhost:4433 -cipher TLS_RSA_WITH_AES_256_CBC_SHA -version TLS11

더 경험이 많은 개발자라면 Java 코드를 작성하여 자신만의 TLS 메시지 흐름을 만들 수 있습니다. 예:

Config config = Config.createConfig();
WorkflowTrace trace = new WorkflowTrace();
trace.addTlsAction(new SendAction(new ClientHelloMessage()));
trace.addTlsAction(new ReceiveAction(new ServerHelloMessage()));
State state = new State(config, trace);
DefaultWorkflowExecutor executor = new DefaultWorkflowExecutor(state);
executor.executeWorkflow();

TLS-Attacker는 WorkflowTrace 개념을 사용하여 "TLS 메시지 흐름"을 정의합니다. WorkflowTrace는 순차적으로 실행되는 동작 목록으로 구성됩니다. 일반적인 "TLS 메시지 흐름"에는 SendAction과 ReceiveAction만 필요하지만, 프레임워크는 여기서 멈추지 않고 훨씬 더 다양한 메시지 흐름을 실행하는 데 사용할 수 있는 다양한 다른 동작들을 구현합니다. 현재 구현된 동작 목록과 설명은 Wiki에서 확인할 수 있습니다.

Java를 싫어하는 분들도 많다는 것을 알고 있습니다. 따라서 XML 구조를 사용하여 XML에서 사용자 정의 TLS 프로토콜을 실행할 수도 있습니다:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<workflowTrace>
    <!-- Send ClientHello -->
    <Send>
        <configuredMessages>
            <ClientHello>
                <extensions>
                    <ECPointFormat/>
                    <EllipticCurves/>
                    <SignatureAndHashAlgorithmsExtension/>
                    <RenegotiationInfoExtension/>
                </extensions>
            </ClientHello>
        </configuredMessages>
        <configuredRecords>
            <record/>
        </configuredRecords>
    </Send>
    
    <!-- Receive server response -->
    <Receive>
        <expectedMessages>
            <ServerHello>
                <extensions>
                    <ECPointFormat/>
                    <RenegotiationInfoExtension/>
                </extensions>
            </ServerHello>
            <Certificate/>
            <ServerHelloDone/>
        </expectedMessages>
    </Receive>
    
    <!-- Send client key exchange and finish -->
    <Send>
        <configuredMessages>
            <RSAClientKeyExchange/>
            <ChangeCipherSpec/>
            <Finished/>
        </configuredMessages>
        <configuredRecords>
            <record/>
            <record/>
            <record/>
        </configuredRecords>
    </Send>
    
    <!-- Receive server finish -->
    <Receive>
        <expectedMessages>
            <ChangeCipherSpec/>
            <Finished/>
        </expectedMessages>
    </Receive>
</workflowTrace>

이 XML 구조가 TLS-Attacker/apps/workflow.xml에 있다면, 다음을 실행하기만 하면 됩니다:

$ java -jar TLS-Client.jar -connect [host]:[port] -workflow_input workflow.xml

프로토콜 공격자/계층 시스템

원래 TLS 프로토콜을 공격하기 위해 설계되었지만, TLS-Attacker는 임의의 프로토콜을 지원할 수 있습니다. 이를 위해 TLS-Attacker는 각 연결에 계층 스택을 할당합니다. 이 계층 스택은 사용자가 활용하려는 다양한 프로토콜 계층으로 구성됩니다. 계층 스택을 통해 사용자는 DTLS, HTTP (더 많은 것은 작업 중)와 같은 계층을 임의의 순서로 추가할 수 있습니다.

계층 스택을 사용하여 임의의 메시지를 보내고 받기 위해 사용자는 각 계층에 대한 구성을 정의할 수 있습니다. 이러한 구성은 보내거나 받을 메시지를 지정합니다. 또한 사용자는 각 계층에 대한 계층별 메시지/데이터 컨테이너를 지정할 수 있습니다. 예를 들어 TLS-Attacker가 보내야 할 TLS 메시지와 레코드를 지정할 수 있으며, TLS-Attacker는 주어진 TLS 메시지를 자동으로 레코드에 캡슐화합니다.

수정 가능 변수

TLS-Attacker는 수정 가능 변수(Modifiable Variable) 개념을 사용하여 사전 정의된 워크플로우에 런타임 수정을 허용합니다. 수정 가능 변수를 사용하면 값이 실제로 설정된 후 또는 전에 기본 타입에 대한 수정을 설정할 수 있습니다. 실제 값이 결정되고 getter를 통해 값에 접근하려고 하면 원래 값이 그에 따라 수정된 형태로 반환됩니다. 이 개념에 대한 자세한 내용은 https://github.com/tls-attacker/ModifiableVariable 에서 확인할 수 있습니다.

ModifiableInteger i = new ModifiableInteger();
i.setOriginalValue(30);
i.setModification(new AddModification(20));
System.out.println(i.getValue());  // 50

이 예제에서는 새로운 ModifiableInteger를 정의하고 값을 30으로 설정했습니다. 다음으로 두 정수의 합을 반환하는 AddModification 수정을 정의하고 값을 20으로 설정했습니다. 위 프로그램을 실행하면 결과 50이 출력됩니다.

물론 이 개념을 TLS 워크플로우를 구성하는 데 사용할 수 있습니다. 서버에서 하트블리드 취약점을 테스트한다고 가정해 보겠습니다. 이를 위해 하트비트 요청의 페이로드 길이를 늘려야 합니다. TLS-Attacker를 사용하면 다음과 같이 할 수 있습니다:

도구 다운로드