본문 바로가기
컴퓨터공학

CTF 및 윤리적 해킹을 위한 Python 라이브러리 총정리

by oobw 2023. 11. 28.

Python은 다재다능하고 다양한 라이브러리 세트를 갖추고 있기 때문에 윤리적인 해커와 보안 전문가들 사이에서 특히 인기를 끌고 있는 언어입니다.  Python은 윤리적 해킹 작업을 지원하는 데 사용할 수 있는 다양한 라이브러리와 도구를 갖추고 있습니다. 이러한 라이브러리에는 패킷 조작, 네트워크 매핑, 암호화, 데이터 분석 등을 위한 도구가 포함되어 있습니다. 이를 통해 취약점을 식별하고 시스템을 보호하는 데 있어 스크립트를 더욱 효율적이고 효과적으로 만들 수 있습니다.

 

윤리적 해킹을 위해 Python을 사용하는 것 외에도 해커와 사이버 보안 전문가가 맬웨어 분석 및 취약점 식별과 같은 작업을 위해 Python을 일반적으로 사용합니다. 일부 해커는 다용성과 사용 편의성으로 인해 Python을 사용하여 익스플로잇 프로그램을 작성하기도 합니다. 이 글에서는 윤리적 해킹, 침투 테스트 및 CTF를 할 때 유용한 아래 Python 라이브러리들을 소개합니다.

Scapy

Scapy는 다양한 프로토콜의 패킷을 전송, 수신, 위조 및 디코딩할 수 있는 완벽한 대화형 도구입니다. 네트워크 스캐닝, 네트워크 발견, 경로 추적, 공격, 탐색 등의 작업에 널리 사용됩니다.

 

Scapy의 주요 이점 중 하나는 낮은 수준의 네트워크 프로그래밍과 높은 수준의 프로토콜 간의 격차를 해소하는 다양한 기능을 제공하여 패킷 조작을 쉽게 한다는 것입니다. 이는 Scapy를 사용하여 패킷 전송 및 수신과 같은 간단한 작업부터 요청과 응답 일치, 패킷 쌍 및 일치하지 않는 패킷 목록 반환과 같은 보다 복잡한 작업까지 광범위한 작업을 수행할 수 있음을 의미합니다.

 

Scapy는 맞춤형 네트워크 패킷을 구축하고 전송하기 위한 고급 인터페이스를 제공합니다. Scapy를 사용하면 사용자는 소스 및 대상 주소, 프로토콜 및 페이로드 데이터와 같은 특성을 설정하여 세밀하게 제어하여 패킷을 생성할 수 있습니다. Scapy에는 실시간으로 네트워크 데이터를 분석하기 위한 강력한 대화형 모드도 있습니다.

 

Scapy는 일단 도구에 익숙해지면 이 도구가 광범위한 패킷 조작 작업에 사용할 수 있는 강력하고 유연한 도구라는 것을 알게 될 것입니다. 초보자이든 숙련된 해커이든 Scapy는 툴킷에 포함할 수 있는 귀중한 도구입니다.

 

다음 명령어로 설치합니다.

pip install scapy

Requests

Requests는 HTTP 및 HTTPS 요청을 만드는 데 사용되는 Python의 인기 있는 라이브러리입니다. Python3에는 기본으로 내장이 되어 있어 설치할 필요 없이 사용 가능합니다. Requests는 요청을 보내고 응답을 처리하기 위한 편리한 인터페이스를 제공하며 API에서 데이터 가져오기, 웹사이트 스크랩, 웹 서비스 상호작용과 같은 작업에 널리 사용됩니다. HTTP 요청 전송을 위한 기본적이고 간단한 인터페이스를 제공하며 웹 애플리케이션 테스트 및 취약성 감지와 같은 다양한 사이버 보안 애플리케이션에 사용될 수 있습니다.

 

요청은 인증, 쿠키 및 SSL/TLS 암호화를 지원하며 HTTP 및 POST 요청을 웹 서버에 보내는 데 사용될 수 있습니다. 또한 요청은 프록시 서버를 통해 요청을 라우팅 하고 웹 애플리케이션 방화벽의 감지를 방지하기 위해 User-Agent 헤더를 변경하는 기능과 같은 몇 가지 필수 사이버 보안 기능을 제공합니다.

 

Requests 라이브러리의 주요 기능 중 하나는 Keep-Alive 및 연결 풀링을 지원하는 것입니다. 이를 통해 연결을 재사용하고 새 연결 설정에 따른 오버헤드를 줄여 스크립트 성능을 향상시킬 수 있습니다. 라이브러리는 국제 도메인 및 URL도 지원하며 쿠키 지속성 및 브라우저 스타일 SSL 확인과 같은 기능을 포함합니다.

 

많은 해킹 활동에는 원격 서버와의 통신과 인터넷을 통한 리소스 가져오기가 포함되므로 Requests 라이브러리는 윤리적 해킹에 필수적인 도구입니다. 다양한 작업에 사용할 수 있는 다재다능하고 편리한 도구이며, 사용하고 이해하기 쉽습니다. 초보자이든 숙련된 해커이든 Requests 라이브러리는 툴킷에 포함되어 있는 귀중한 리소스입니다.

Requests를 설치하려면 터미널에서 다음 명령을 실행하세요.

pip install requests

 

다음은 요청을 사용하여 웹 서버에 GET 요청을 보내고 응답을 처리하는 방법을 보여주는 예제 코드입니다.

import requests 

# www.daum.net으로 GET 요청을 보내기
response = requests.get('https://www.daum.net') 

# 결과 체크
if response.status_code == 200: 
    print('성공') 
else: 
    print('실패') 

# 결과 출력
print('Headers:', response.headers) 
print('Content:', response.text)

BeautifulSoup

BeautifulSoup은 웹 스크래핑과 HTML 및 XML 문서 처리에 널리 사용되는 Python 모듈입니다. HTML 및 XML 파일의 정보를 간단하고 강력하게 탐색하고 검색할 수 있습니다. 이는 사이버 보안의 맥락에서 로그인 비밀번호 또는 공격자에게 도움이 될 수 있는 기타 형태의 데이터와 같은 민감한 정보가 포함된 웹 사이트에서 데이터를 추출하는 데 자주 사용됩니다.

 

HTML 및 XML 텍스트를 해석하고 탐색하는 BeautifulSoup의 능력은 주요 강점 중 하나입니다. 이는 HTML 또는 XML 파일에서 BeautifulSoup 개체를 구성하고, 페이지를 탐색하고, 다양한 방법을 사용하여 필요한 정보를 추출함으로써 수행됩니다. 라이브러리에는 HTML 또는 XML 파일에서 특정 태그나 구성 요소를 검색하고 추출하기 위한 여러 가지 방법이 포함되어 있습니다.

 

다음은 BeautifulSoup을 사용하여 웹페이지에서 링크를 추출하는 방법의 예입니다.

import requests 
from bs4 import BeautifulSoup 

url = 'https://www.test.com'
response = requests.get(url) 

soup = BeautifulSoup(response.text, 'html.parser') 

for link in soup.find_all('a'): 
    print(link.get('href'))

 

Impacket

Impacket은 네트워크 프로토콜 작업을 위한 Python 클래스 모음입니다. 프로그래머가 네트워크 패킷을 쉽게 생성하고 디코딩할 수 있도록 설계되었으며 낮은 수준의 소켓 프로그래밍, TCP/IP 및 여러 높은 수준의 프로토콜에 대한 지원을 제공합니다.

 

Impacket은 해커와 침투 테스터가 중간자 및 세션 하이재킹과 같은 맞춤형 네트워크 기반 침입 공격을 만들기 위해 널리 사용됩니다. 원래는 테스트를 위한 내부 도구로 개발되었지만 이후 네트워크에 사용할 수 있는 강력한 도구로 성장했습니다.

 

Impacket의 목표는 Python에서 네트워크 프로그래밍을 단순화하고 사용자 정의 프로토콜을 구현하기 위한 프레임워크를 제공하는 것입니다. 예를 들어 Impacket을 사용하여 특정 대상 플랫폼에 대한 TCP/IP 스택의 사용자 정의 버전을 생성할 수 있습니다.

 

IMpacket을 설치하려면 다음을 실행하세요.

pip install impacket

RawSocketPy

원시 소켓은 OSI 모델의 계층 2에서 MAC 주소를 사용하여 낮은 수준의 통신을 허용하는 일종의 네트워크 소켓입니다. RawSocketPy 라이브러리는 Python에서 원시 소켓을 사용하여 동기식 및 비동기식으로 사용자 정의 계층 2 통신을 구현하는 데 사용할 수 있습니다.

 

Python의 RawSocketPy 라이브러리는 레이어 2 통신 및 MAC 주소로 작업해야 하는 개발자에게 유용한 도구입니다. 이를 통해 네트워크 수준에서 사용자 정의 통신 프로토콜을 생성할 수 있으며 패킷 캡처 및 분석, 네트워크 검색, 사용자 정의 프로토콜 개발과 같은 작업에 사용할 수 있습니다.

pwntools

pwntools는 Python 기반 CTF(Capture-the-Flag) 프레임워크이자 신속한 프로토타이핑 및 개발을 촉진하도록 설계된 개발 라이브러리입니다. 침투 테스트, 리버스 엔지니어링, 익스플로잇 생성, 퍼징 등의 작업에 유용한 다양한 도구와 기능을 제공합니다.

 

pwntools의 주요 이점 중 하나는 사용자가 CTF 대회에서 도전 과제에 대한 익스플로잇을 신속하게 생성할 수 있다는 것입니다. 이는 64비트 Ubuntu LTS 릴리스와 함께 사용하도록 최적화되어 있으며 악성 코드 작성 시 빠른 익스플로잇 개발 및 유연성을 가능하게 하는 여러 모듈을 포함합니다.

winpwn

pwntools은 윈도우를 지원하지 않는데, windows에서 CTF를 할 때 pwntools의 부재를 채워주는 오픈 소스입니다. 

pip install winpwn

 

Cryptography

암호화는 개발자에게 암호화 방법과 기본 요소를 제공하는 Python 패키지입니다. 여기에는 암호화, 해싱, 난수 생성, 서명, 블록 및 스트림 암호용 암호 사용과 같은 작업을 위한 다양한 기능이 포함되어 있습니다.

암호화 패키지는 디지털 서명과 같은 강력한 암호화 알고리즘과 성능을 위해 설계된 낮은 수준의 암호화 빌딩 블록에 액세스 하기 위한 높은 수준의 API를 제공합니다. 인터넷을 통해 공유되는 민감한 정보를 암호화하고 해독하기 위해 윤리적 해킹에 널리 사용됩니다.

pip install cryptography

Python-nmap

Python-nmap은 Nmap 포트 스캐너와 상호 작용하기 위한 인터페이스를 제공하는 Python 라이브러리입니다. Nmap은 네트워크에서 호스트와 서비스를 검색하거나 단일 호스트를 검사하는 데 사용되는 널리 사용되는 네트워크 관리 및 보안 감사 도구입니다.

 

python-nmap 라이브러리는 Nmap 도구의 래퍼 역할을 하여 Python 내에서 해당 기능에 액세스하고 조작할 수 있도록 해줍니다. 이는 Nmap 도구를 대체하는 것이 아니라 Nmap 도구와 상호 작용하기 위한 인터페이스를 제공합니다.

Python-nmap은 포트 스캐닝, 호스트 검색, TCP/IP 지문 채취와 같은 작업을 위한 다양한 기능을 제공합니다. 네트워크 검색 작업을 자동화하고 보고서를 생성하려는 해커와 시스템 관리자에게 유용한 도구입니다. 라이브러리는 nmap 스크립트 출력도 지원합니다.

 

python-nmap을 설치하려면 다음을 실행하세요.

pip install python-nmap

Faker

Faker는 가짜 데이터를 생성하는 Python 패키지입니다. 이름, 전화번호, 주소부터 가짜 텍스트, 참고문헌 항목, XML 문서 등에 이르기까지 무엇이든 생성할 수 있습니다. Faker는 사용이 매우 쉽습니다. faker.name() 함수를 호출하면 임의의 이름을 얻을 수 있고, faker.address() 함수를 호출하면 가짜 주소를 얻을 수 있습니다.

 

가짜 데이터를 생성하기 위한 다른 많은 기능도 함께 제공됩니다. Faker를 사용하고 싶은 데는 여러 가지 이유가 있습니다. 프로토타입에 대한 가짜 정보로 데이터베이스를 채워야 하거나 온라인에서 가짜 자격 증명이나 주소를 사용하여 온라인에서 익명을 유지해야 할 수도 있습니다.

 

다음 명령을 실행하여 faker 라이브러리를 설치할 수 있습니다.

pip install Faker

Twisted

Twisted는 Python으로 작성된 이벤트 중심 네트워킹 엔진입니다. 이는 네트워크 클라이언트와 서버를 쉽게 작성할 수 있도록 TCP 프로토콜의 추상화를 제공합니다. SSL, IPv6 및 HTTP, IRC, NNTP, SMTP, POP3, IMAP, SSHv2 및 DNS를 포함한 수많은 프로토콜을 광범위하게 지원한다는 점에서 특히 주목할 만합니다.

 

Twisted는 동기식 및 비동기식 네트워킹 패러다임을 모두 지원합니다. Twisted를 설치하려면 다음 명령을 수행하세요.

pip install Twisted

Paramiko

Paramiko는 보안 SSH 및 SCP 연결에 사용되는 Python의 강력한 라이브러리입니다. SSH(Secure Shell)는 인터넷을 통해 원격 서버 및 장치에 안전하게 연결하는 데 사용되는 프로토콜입니다.

 

Paramiko는 Python에서 SSH와 SCP를 쉽게 사용할 수 있도록 다양한 도구와 기능을 제공합니다. Paramiko를 사용하면 SSH를 사용하여 원격 서버에 대한 보안 연결을 쉽게 설정할 수 있으며 SCP를 사용하여 SSH를 통해 안전하게 파일을 전송할 수 있습니다. 또한 비밀번호 인증, 공개 키 인증, Kerberos 인증 등 다양한 인증 방법을 지원합니다. Paramiko에는 SSH 및 SCP 지원 외에도 SFTP(Secure File Transfer Protocol) 지원, 다양한 암호화 및 MAC 알고리즘 지원, 터널링 및 포트 전달 지원과 같은 여러 가지 유용한 기능도 포함되어 있습니다.