scan module의 경우 아래의 github를 참고해주세요. (attack module은 윤리적문제로 private처리 하였습니다.)
https://github.com/junseop619/open_chosztenTool
GitHub - junseop619/open_chosztenTool
Contribute to junseop619/open_chosztenTool development by creating an account on GitHub.
github.com
1. 개요
학습 및 포트폴리오 목적으로 제작된 확장 가능한 모듈형 보안 프레임워크입니다.
사용자는 이 도구를 통해 웹사이트나 서버의 기본적인 공격 표면을 분석하고, 보안 상태를 진단할 수 있습니다.
python을 이용해 만들었으며
modules 폴더에 새 파이썬 파일을 추가하는 것만으로 쉽게 새로운 기능을 확장할 수 있는 모듈형 아키텍쳐입니다.
또한 threading을 활용하여 여러 정찰 모듈을 동시에 실행하여 분석 시간을 단축합니다.
또한 metasploit을 오마주하여 cmd를 기반으로한 interactive shell을 통해 모든 기능을 제어합니다.
2. 모듈 소개
1) dns_scanner_module
- 도메인의 DNS 레코드(A, MX 등)를 조회합니다.
2) http_header_scanner_module
- 웹사이트의 HTTP 보안 헤더 적용 상태를 진단합니다.
3) susbdomain_scanner_module
- 단어 목록을 기반으로 서브도메인을 스캔합니다.
4) whois_scanner_module
- 도메인의 WHOIS 등록 정보를 조회합니다.
5) SYN_Flooding_module
- 타겟 서버를 대상으로 SYN Flooding(DDos) 공격을 수행합니다.
6) Reverse_Shell_Listener_module
- 백도어가 설치된 PC를 대상으로 reverse shell 연결을 기다리는 listener입니다.
3. 프로그램 세부 설명
3-1. 스캔용 모듈
3-1-1. main.py
프로그램 최초 실행 시 화면입니다.

처음에는 사용 가능한 모듈들이 나옵니다.

cmd로 help를 입력하면 사용 가능한 명령어들이 보입니다.
이제 부터는 scan 명령어로 사용할 수 있는 모듈들을 소개하겠습니다.
3-1-2. dns_lookup.py
해당 모듈은 nslookup처럼 도메인 이름에 대한 각종 DNS 레코드를 조회하는, 모든 정찰 활동의 가장 기본적인 도구입니다.
복잡한 조회 과정을 직접 구현하는 대신, dnspython 라이브러리를 사용해 간단하게 구현하였습니다.
해당 모듈의 핵심 코드로는
answers = dns.resolver.resolve(domain, record_type)
해당 코드로 resolve 함수에 도메인과 조회할 레코드 타입을 넘겨주면, 라이브러리가 알아서 DNS 서버에 물어보고 응답을 가져옵니다.
아래는 실행결과 사진입니다.

set_target 명령어를 통해 target으로 할 domain을 지정하고
scan dns 명령어를 통해 scan을 할 모듈인 dns를 선택하여 해당 타겟에 대한 DNS record를 조회하였습니다.
3-1-3. http_header_scanner.py
해당 모듈은 웹 사이트가 브라우저에게 전달하는 HTTP 보안 헤더를 분석하여, XSS나 클릭재킹과 같은 흔한 웹 공격에 대한 방어 설정이 잘 되어 있는지 진단하는 역할을 합니다.
self.security_headers = {
"Strict-Transport-Security": "Attacker may intercept data via unencrypted HTTP (Man-in-the-Middle).",
"Content-Security-Policy": "May be vulnerable to Cross-Site Scripting (XSS) and data injection attacks.",
"X-Content-Type-Options": "Browser may misinterpret file types, leading to XSS attacks (MIME-sniffing).",
"X-Frame-Options": "May be vulnerable to Clickjacking attacks by being embedded in a malicious iframe.",
"Referrer-Policy": "Sensitive information in the URL may be leaked to other sites.",
"Permissions-Policy": "Browser features (camera, mic, etc.) could be used without explicit permission."
}
이와 같이 미리 지정해 놓은 주요 보안 헤더들에 대하여
response = requests.get(url, timeout=10)
headers = response.headers
이와 같은 방식으로 우선 지정한 타겟에게 GET 요청을 보내고 응답 객체에서 헤더 정보만 추출합니다.
아래는 실행 결과 사진입니다.

이와 같이 발견된 헤더에 대해서는 초록색으로 표시하고, 발견되지 않은 헤더에 대해서는 빨간색 및 이로 인한 취약점을 보여줍니다.
3-1-4. subdomain_scanner.py
해당 모듈은 메인도메인에 속한 하위 도메인들을 조회하는 모듈입니다.
예를들어 google.com이라는 메인 도메인에 속한 하위주소 ex) mail.google.com 과 같은 것들을 자동으로 조회해줍니다.
조회 과정에서는 미리 작성한 단어목록파일에서 단어들을 가져와 타겟 도메인과 하나씩 조합하여 실제로 존재하는 주소인지 무차별적으로 접속을 시도합니다.
url = f"http://{sub}.{domain}"
또한 해당 과정에서의 자원손실을 최소화히기 위해 Multi-threading을 적용하여 여러 thread가 작업을 하나씩 가져가 동시에 처리하도록 구현했습니다.
num_threads = int(self.options['THREADS']['value'])
threads = []
for _ in range(num_threads):
t = threading.Thread(target=self._worker, args=(domain,), daemon=True)
threads.append(t)
t.start()
아래는 실행결과 사진입니다.

3-1-5. whois_lookup.py
해당 모듈의 경우 whois와 같은 기능을 수행하며 target domain의 소유권 정보를 확인하는 모듈입니다.
whois는 인터넷 도메인의 등록 정보를 저장하고 조회할 수 있도록 하는 국제적인 규약으로, 누가, 언제, 어떤 기관을 통해 도메인을 등록했는지 등의 정보가 담겨있습니다.
해당 모듈의 구현 역시 whois 라이브러리를 통해 간단하게 구현하였습니다.
domain_info = whois.whois(domain)
아래는 실행결과 사진입니다.

3-2. 공격용 모듈
이 프로젝트는 보안 연구 및 학습 목적으로 개발된 도구이며, 실제 환경에서의 사용을 절대 금지합니다.
SYN Flooding, reverse shell, Backdoor 등은 실제 서비스에 심각한 피해를 초래할 수 있으므로, 법적 문제와 형사 처벌의 대상이 될 수 있습니다.
따라서 본 프로젝트는 포트폴리오 및 연구 과제 제출용 외 다른 목적으로 사용하지 않길 바랍니다.
모든 테스트는 본인이 소유하거나 허가받은 환경에서만 진행해야 하며, 무단 사용으로 발생하는 문제에 대해 개발자는 책임지지 않습니다.
3-2-1. syn_flooding.py
이 글은 DoS(서비스 거부) 공격의 일종인 SYN Flooding의 기술적 원리를 학습하고, 그에 대한 효과적인 방어 전략을 논의하기 위해 작성되었습니다.
모든 서비스는 '가용성(Availability)'을 보장해야 합니다. SYN Flooding은 TCP 통신의 근본적인 허점을 악용하여 서버의 가용성을 파괴하는 고전적이면서도 여전히 강력한 DoS 공격입니다.
우선적으로 SYN Flooding공격을 가능하게 하는 TCP 3-Way Handshake에 대해 알아보겠습니다.
TCP 통신은 데이터를 주고받기 전에, 클라이언트와 서버가 세 번의 '악수'를 통해 연결을 확립합니다.
1. Client -> Server(SYN) : 연결 요청
2. Server -> Client (SYN-ACK) : 연결 수락 및 요청
3. Client -> Server (ACK) : 요청 수락
다음에는 SYN Flooding의 공격 과정입니다.
SYN Flooding 공격자는 수만, 수백만 개의 1단계(SYN) 패킷을 서버로 보냅니다. 이때 출발지 IP 주소는 대부분 위조됩니다.
서버는 각각의 SYN 요청에 대해 2단계(SYN-ACK)로 응답하고, 시스템 자원을 소모하며 SYN-RECV 대기 상태에 빠집니다. 하지만 위조된 공격자는 마지막 3단계(ACK) 응답을 절대 보내지 않습니다.
이로인해 server는 client로 부터의 ACK를 무한정 대기하게 되며 자원을 낭비하게되고, 이로인해 서비스 마비 상태에 이르게 됩니다.
이를 구현하기 위해 scapy 라이브러리를 사용하였습니다. 해당 라이브러리를 이용해 네트워크 패킷을 제어할 수 있습니다.
또한 SYN Flooding의 특징인 공격자의 IP위조를 위해
ip_layer = IP(dst="TARGET_IP", src=RandIP())
공격자의 IP를 random으로 지정하였습니다.
tcp_layer = TCP(sport=RandShort(), dport=80, flags="S")
다음으로는 출발지 포트역시 무작위로 지정하고, 플래그는 SYN을 지정하는 S로 설정하였습니다.
(더 자세한 코드는 Github에도 비공개 되어 있습니다)
다음으로는 SYN Flooding에 대한 방어 전략입니다.
방어 전략으로는 크게 두 가지 방법이 있습니다.
1. SYN Cookies
가장 대표적인 방어 기법입니다. SYN 요청을 받아도 바로 자원을 할당하는 대신, 서버는 암호화된 정보가 담긴 특별한 SYN-ACK 패킷을 클라이언트에게 보냅니다. 클라이언트가 이 패킷이 포함된 정상적인 ACK 응답을 보내올 때 비로소 서버가 자원을 할당하는 방식입니다. 이를 통해 자원을 전혀 낭비하지 않게 됩니다.
2. 방화벽/IPS 설정
방화벽에서 특정 시간 동안 들어오는 SYN 패킷의 수를 제한하거나, 비정상적인 트래픽 패턴을 보이는 IP를 자동으로 차단하도록 설정하여 공격을 완화할 수 있습니다.
* IPS(Intrusion Prevention System) : 네트워크를 실시간으로 감시하여 악성 트래픽이나 의심스러운 활동이 발견되면, 이를 탐지하는 것을 넘어 능동적으로 차단하는 보안 솔루션
아래는 실행결과(가짜 타겟) 사진입니다.

그런데 어차피 이게 또 봇넷을 이용해서 수십 수백대의 PC가 한꺼번에 공격해야해서 솔로 공격으로는 미미한 속도 저하정도 유발할겁니다.
3-2-2. rs_listener.py
이 글은 reverse shell의 기술적 원리를 학습하고, 그에 대한 효과적인 방어 전략을 논의하기 위해 작성되었습니다.
해당 모듈은 Reverse Shell 연결을 수신하여 원격에서 들어오는 쉘 세션을 처리할 수 있도록 설계되어 있습니다.
그리고 이러한 Reverse Shell 연결을 보내주는 프로그램은 3-2-3에서 다루겠습니다.
일단 rs_listener.py 의 코드에 대해 간단하게 다뤄보겠습니다.
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
reverse shell 연결을 위한 listening socket을 생성합니다.
이에 대하여 host와 port 정보를 추후에 binding해줍니다.
server_socket.listen(1)
그리고 해당 코드를 통해 클라이언트가 접속하면 세션을 시작하게 됩니다.
마지막으로
client_socket.sendall((command + '\n').encode('utf-8'))
response = client_socket.recv(4096).decode('euc-kr', 'ignore')
이 코드를 통해 연결된 클라이언트와 쉘 상호작용을 하게 됩니다.
악용가능성이 있는 코드라 정말 간단하게 소개시켜봤습니다.
실행결과의 경우 아래 3-2-3에서 같이 다루겠습니다.
3-2-3. chosztenBdr.py(exe)
* 이 글은 보안 연구 및 학습 목적으로 작성된 것이며,
실제 공격에 사용되는 행위는 포함하지 않습니다.
악용은 불법이며 모든 책임은 행위자 본인에게 있습니다.
우선 해당 파일은 모듈이 아닙니다. 흔히 말하는 악성코드에 가깝습니다.
해당 실행 파일의 경우 python으로 개발하였습니다.
일단 해당 악성코드의 구조는 python 파일에 reverse shell의 payload가 될 poswershell scipt와 해당 payload를 registry에 저장해줄 코드, 그리고 윈도우의 방화벽을 우회 해줄 코드들을 담고 있습니다.
해당 코드 개발의 경우 registry를 활용한 filess & persistence 방식을 활용하였습니다.
PowerShell script를 파일로 남기지 않고, registry에 직접 문자열 형태로 저장합니다
key_payload = reg.CreateKeyEx(reg.HKEY_CURRENT_USER, payload_key_path, 0, access=reg.KEY_ALL_ACCESS)
reg.SetValueEx(key_payload, payload_value_name, 0, reg.REG_SZ, payload_script)
reg.CloseKey(key_payload)
이후에는 해당 key를 컴퓨터\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 해당 경로에 저장시키면
사용자가 로그인할 때 프로그램이 자동(강제)으로 실행됩니다.
key_executor = reg.CreateKeyEx(reg.HKEY_CURRENT_USER, executor_key_path, 0, access=reg.KEY_ALL_ACCESS)
reg.SetValueEx(key_executor, executor_value_name, 0, reg.REG_SZ, executor_command)
reg.CloseKey(key_executor)
그렇게 프로그램이 자동 실행되며 backdoor가 작동하며 공격자(보안프레임워크)의 reverse shell listener socket에 접근하게 되며
쉘 상호작용이 사작하게 됩니다.
-WindowStyle Hidden를 통해 실행창을 숨기고, 또한 방화벽 우회를 위해 ASMI 무력화 기법을 사용하였습니다.
* ASMI(Anti-Marware Scan Interface) : Window 10부터 도입된 기능으로 PowerShell, VBScript, Office 매크로 등에서 실행되는 스크립트 내용을 실시간으로 보안솔루션(Defender)에 전달하고, 악성 패턴이 탐지되면 실행 차단합니다.
조금 더 자세히 설명하자면 .NET Reflection을 이용해 ASMI 내부 flag를 조작하고, 이를 통해 PowerShell이 ASMI 초기화가 실패했다고 판단하게 하여 script를 defender에 넘기지 않게 무력화 하는 기법을 사용했습니다.
아래는 실행결과 사진입니다.

이와 같이 window PC가 실행되며 registry에 등록된 backdoor가 자동으로 실행됩니다.

이렇게 나만의 보안도구 만들기 프로젝트 게시물은 마무리 하겠습니다.
참고로 choszten은 제 kali 이름입니다.
이 글은 보안 연구 및 학습 목적으로 작성된 것이며,
실제 공격에 사용되는 행위는 포함하지 않습니다.
악용은 불법이며 모든 책임은 행위자 본인에게 있습니다.
'보안 프로젝트' 카테고리의 다른 글
| 모바일 해킹을 위한 JADX & Frida with FridaLab (0) | 2025.09.21 |
|---|---|
| React & Spring Project 취약점 분석 및 시큐어 코딩 (1) | 2025.08.24 |
| [TryHackMe] Anonymous 문제풀이 (2) | 2025.08.01 |
| [TryHackMe] Mr Robot CTF 문제풀이 (0) | 2025.02.26 |
| [TryHackMe] Relevant 문제풀이 (0) | 2025.02.15 |