Khái niệm
DoS là tấn công làm Server từ chối các dịch vụ hiện có ví dụ như không tiếp nhận thêm kết nối từ ngoài vào.
Mục đích
- Cố gắng chiếm băng thông mạng và làm hệ thống mạng bị ngập (flood), khi đó hệ thống mạng sẽ không có khả năng đáp ứng những dịch vụ khác cho người dùng bình thường.
- Cố gắng làm ngắt kết nối giữa hai máy, và ngăn chặn quá trình truy cập vào dịch vụ.
- Cố gắng ngăn chặn những người dùng cụ thể vào một dịch vụ nào đó
- Cố gắng ngăn chặn các dịch vụ không cho người khác có khả năng truy cập vào.
- Phá hoại hoặc thay đổi các thông tin cấu hình.
- Phá hoại tầng vật lý hoặc các thiết bị mạng như nguồn điện, điều hoà…
Các phương thức tấn công
1. SYN attack
Trước hết, bạn hãy xem lại tiến trình bắt tay 3 bước của một kết nối TCP/IP. Một client muốn kết nối đến một host khác trên mạng.
- Bước 1: client gởi một SYN packet với số Sequence Number ban đầu(ISN) đến host cần kết nối: client—–SYN packet—– > host
- Bước 2: host sẽ phản hồi lại client bằng một SYN/ACK packet, ACK của packet này có giá trị đúng bằng ISN ban đầu do client gởi đã gởi đến host ở bước 1 và chờ nhận một ACK packet từ client: host—–SYN/ACK packet—– > client
- Bước 3: client phản hồi lại host bằng một ACK packet: client—–ACK packet—– > host
Khi host nhận được ACK packet này thì kết nối được thiết lập, client vào host có thể trao đổi các dữ liệu cho nhau. Trong SYN Attack, hacker sẽ gửi đến hệ thống đích một loạt SYN packets với địa chỉ IP nguồn không có thực. Hệ thống đích khi nhận được các bad SYN packets này sẽ gởi trở lại SYN/ACK packet đến các địa chỉ không có thực này vào chờ nhận được ACK messages từ các địa chỉ IP đó. Vì đây là các địa chỉ IP không có thực, hệ thống đích sẽ chờ đợi vô ích và còn nối đuôi các “request” chờ đợi này nào hàng đợi, gây lãng phí một lượng đáng kể bộ nhớ trên máy chủ mà đúng ra là phải dùng vào việc khác thay cho phải chờ đợi ACK messages. Cách giảm thiểu: Thay đổi cấu hình iptable firewall
- Chỉnh sửa file: /etc/sysctl.conf nano /etc/sysctl.conf
#securing tcp connections
net.ipv4.tcp_syncookies=1
#reducing timed out to 30
net.netfilter.nf_conntrack_tcp_timeout_syn_recv=30
- Chỉnh sửa iptables firewall
# create new chains
iptables -N syn-flood
# limits incoming packets
iptables -A syn-flood -m limit --limit 10/second --limit-burst 50 -j RETURN
# log attacks
iptables -A syn-flood -j LOG --log-prefix "SYN flood: "
# silently drop the rest
iptables -A syn-flood -j DROP
- Lưu lại cấu hình: service iptables save
- Khởi động lại iptables firewall: service iptables restart
Ngoài ra còn một số cách: Tăng kích thước hàng đợi, giảm khoảng thời gian thiết lập kết nối.
2. Ping of Death
Kiểu tấn công này dùng giao thức ICMP. Có 2 phần quan trọng trong ICMP packet là ICMP ECHO_REQUEST và ICMP ECHO_RESPONSE datagrams và thông thường dùng PING command đế thi hành các hoạt động của ICMP. Khi 1 máy tính gửi ICMP ECHO_REQUEST đến 1 máy nào đó, nếu máy đó đang hoạt động thì nó sẽ gữi trả lại ICMP ECHO_RESPONSE. Hacker dùng PING program để tạo nên kích thước lớn cho gói tin ICMP (gói gọn trong 1 IP packet), có nhiều cách để gửi ICMP datagrams mà packet mà chỉ bao gồm 8 bits ICMP header infomation, Hacker thuong dùng PING program để gừi những packet lớn hơn 65536 bytes ( vượt qua sự cho phép của TCP/IP) Khi tấn công bằng Ping of Death một gói tin echo được gửi đi có kích thước lớn hơn kích thước cho phép là 65,536 bytes.Gói tin sẽ bị chia nhỏ ra thành các phần khi máy đích lắp ráp lại thì do gói tin quá lớn với buffer bên nhận nên hệ thống không thể quản lý nổi gây ra bị reboot hoặc bị treo. Dưới đây là thông tin của TCP dump khi bị tấn công: 8:40:14..690000 192.168.123.101 > 192.168.123.100: icmp echo request (frag 11267:1480@0+)
8:40:14.690000 192.168.123.101 > 192.168.123.100: (frag 11267:1480@1480+)
8:40:14.690000 192.168.123.101 > 192.168.123.100 (frag 11267:1480@5920+)
.............................................
8:40:14. 74000 192.168.123.101 > 192.168.123.100 (frag 11267:1480@65527)Các bạn để ý sẽ thấy máy có IP 192.168.123.101 gửi 1 ping packet có size là 65527 đến địa chỉ IP 192.168.123.100. Thông thường các hề điều hành đều cài đặt PING program, trong MS-DOS thì có DOS command, MS-NT có Command Promt và Unix có Terminal vvv..Windows option -l
ping -l 65527 địa chỉ IP của máy nạn nhânUnix option -s
ping -s 65527 địa chỉ IP của máy nạn nhân.Một số công cụ thực hiện tấn công : Jolt, Sping, ICMP Bug, IceNewk Cách phòng chống:
- Cập nhật những bản patch khi những công ty sản xuất về hệ điều hành đưa ra nhắc nhở cho các lỗ hổng mới
- Cài đặt trên router hoặc firewall block để ngặn chặn một số gói tin có kích thước lớn quá mức
3. LAND
Tấn công LAND cũng gần giống như tấn công SYN, nhưng thay vì dùng các địa chỉ IP không có thực, hacker sẽ dùng chính địa chỉ IP của hệ thống nạn nhân. Điều này sẽ tạo nên một vòng lặp vô tận giữa hệ thống nạn nhân với chính hệ thống nạn nhân đó, giữa một bên chờ nhận ACK messages còn một bên thì chẳng bao giờ gửi ACK messages. Tuy nhiên, hầu hết các hệ thống đều dùng filter hoặc firewall để tránh khỏi kiểu tấn công này! Đây là một dạng tấn công cũ trên các hệ điều hành Windows XP SP2 và Windows Server2003 (sử dụng chương trình Hping)
4. Winnuke
Kiểu tấn công này chỉ có thể áp dụng cho các máy tính đang chạy Windows9x . Hacker sẽ gởi các packet với dữ liệu “Out of Band” đến cổng 139 của máy tính đích. Cổng 139 chính là cổng NetBIOS, cổng này chỉ chấp nhận các packet có flag OOB được bật. Khi máy tính đích nhận được packet này, một màn hình xanh báo lỗi sẽ đến với nạn nhân do chương trình của Windows đã nhận được các packet này, tuy nhiên nó lại không biết được cần phải đối xử với các dữ liệu Out Of Band như thế nào nữa dẫn đến hệ thống sẽ bị crash.
5. Smurf
Điều khiển các agent hay client tự gửi message đến một địa chỉ IP broadcast làm cho tất cả các máy trong subnet này gửi message đến hệ thống dịch vụ của mục tiêu làm gia tăng traffic không cần thiết và làm suy giảm băng thông mục tiêu Hai nhân tố chính trong Smuft Attack là là các ICMP echo request packets và chuyển trực tiếp các packets đến các địa chỉ broadcast.
- Giao thức ICMP thường dùng để xác định một máy tính trên mạng Internet có còn hoạt động(alive) hay không. Để xác định một máy có alive không, bạn cần gởi một ICMP echo request đến máy đó. Khi máy nhận được packet này, nó sẽ gởi trả lại bạn một ICMP echo reply packet. Trong trường hợp bạn không nhận được ICMP echo reply packet, điều này có nghĩa là máy đó không còn hoạt động(not alive). Đây cũng chính là cách hoạt động của các chương trình ping.
- Mỗi mạng máy tính đều có địa chỉ địa chỉ broadcast và địa chỉ mạng. Địa chỉ broadcast có các bit host đều bằng 0 và địa chỉ broadcast có các bit host đều bằng 1. Ví dụ địa chỉ IP lớp B 140.179.220.200 sẽ có địa chỉ mạng là 140.179.0.0 và địa chỉ broadcast mặc định là 140.179.0.0. Khi một packet được gởi đến địa chỉ broadcast, lập tức packet này sẽ được chuyển đến tất cả các máy trong mạng.
Trong Smurf Attack, cần có ba thành phần: hacker (người ra lệnh tấn công), mạng khuếch đại (sẽ nghe lệnh của hacker) và nạn nhân. Hacker sẽ gởi các ICMP echo request packets đến địa chỉ broadcast của mạng khuếch đại. Điều đặc biệt là các ICMP echo request packet này có địa chỉ IP nguồn chính là địa chỉ IP của nạn nhân. Khi các packet đó đến được địa chỉ broadcast của mạng khuếch đại, lập tức tất cả các máy tính trong mạng khuếch đại sẽ nhận được các packet này. Các máy này tưởng rằng máy tính nạn nhân đã gởi ICMP echo request packets đến (do hacker đã làm giả địa chỉ IP nguồn), lập tức chúng sẽ đồng loạt gởi trả lại hệ thống nạn nhân các ICMP reply echo request packet. Hệ thống máy nạn nhân sẽ không chịu nổi một khối lượng khổng lồ packet và nhanh chóng bị ngừng hoạt động, crash hoặc reboot. Như vậy, bạn có thể thấy rằng hacker chỉ cần gởi một lượng nhỏ các ICMP echo request packets đi, và hệ thống mạng khuếch đại sẽ khuếch đại lượng ICMP echo request packet này lên gấp bội. Tỉ lệ khuếch đại phụ thuộc vào số mạng tính có trong mạng khuếch đại. Nhiệm vụ của các hacker là cố chiếm được càng nhiều hệ thống mạng hoặc routers cho phép chuyển trực tiếp các packets đến địa chỉ broadcast và không lọc địa chỉ nguồn của các outgoing packets. Có được các hệ thống này, hacker sẽ dễ dàng tiến hành Smurf Attack trên các hệ thống cần tấn công. Cách phòng chống: Đối với cá nhân hay công ty phải biết config máy tính của hệ thống để không biến thành magnj khuếch đại.Khi bị tấn công thì các công ty hoặc cá nhân cần phải phối hợp với ISP nhằm giới hạn lưu lượng của ICMP
- Đối với các bộ định tuyến:
- Cisco: vô hiệu hóa bằng lệnh no ip directed-broadcast
- Đối với thiết bị khác bạn nên tham khảo tài liệu
- Solaris: bổ sung thêm dòng sau vào:/etc/rc2.d/S69inet
ndd -set /dev/ipip_respond_to_echo_broadcast 0
- Linux :Áp dụng bức tường lửa ở cấp độ nhận thông qua ipfw.
ipfwadm -I -a deny -P icmp -D
10.10.10.0 -S 0/0 0 8 ipfwadm -I -a deny -P icmp -D 10.10.10.255
-S 0/0 0 8
6. Teardrop
Tất cả các dữ liệu chuyển đi trên mạng từ hệ thống nguồn đến hệ thống đích đều phải trải qua 2 quá trình sau: dữ liệu sẽ được chia ra thành các mảnh nhỏ ở hệ thống nguồn, mỗi mảnh đều phải có một giá trị offset nhất định để xác định vị trí của mảnh đó trong gói dữ liệu được chuyển đi. Khi các mảnh này đến hệ thống đích, hệ thống đích sẽ dựa vào giá trị offset để sắp xếp các mảnh lại với nhau theo thứ tự đúng như ban đầu. Ví dụ, có một dữ liệu gồm 4000 bytes cần được chuyển đi, giả sử rằng 4000 bytes này được chia thành 3 gói nhỏ(packet):
- packet thứ nhất sẽ mang các 1bytes dữ liệu từ 1 đến 1500
- packet thứ hai sẽ mang các bytes dữ liệu từ 1501 đến 3000
- packet thứ ba sẽ mang các bytes dữ liệu còn lại, từ 3001 đến 4000
Khi các packets này đến đích, hệ thống đích sẽ dựa vào offset của các gói packets để sắp xếp lại cho đúng với thứ tự ban đầu: packet thứ nhất – > packet thứ hai – > packet thứ ba Trong tấn công Teardrop, một loạt gói packets với giá trị offset chồng chéo lên nhau được gởi đến hệ thống đích. Hệ thống đích sẽ không thể nào sắp xếp lại các packets này, nó không điều khiển được và có thể bị crash, reboot hoặc ngừng hoạt động nếu số lượng packets với giá trị offset chồng chéo lên nhau quá lớn! Hãy xem lại ví dụ trên, đúng ra các packet được gởi đến hệ thống đích có dạng như sau: (1- > 1500 bytes đầu tiên) (1501- > 3000 bytes tiếp theo) (3001- > 4000 bytes sau cùng), trong tấn công Teardrop sẽ có dạng khác: (1- > 1500 bytes) (1501- > 3000 bytes) (1001- > 4000 bytes). Gói packet thứ ba có lượng dữ liệu sai!
7. Slowloris
Là kĩ thuật tương tự như SYN flood (tạo nửa kết nối để làm cạn kiệt tài nguyên máy chủ) nhưng diễn ra ở lớp HTTP (lớp ứng dụng). Để tấn công, tin tặc gửi yêu cầu HTTP đến máy chủ, nhưng không gửi toàn bộ yêu cầu, mà chỉ gửi một phần (và bổ sung nhỏ giọt, để khỏi bị ngắt kết nối). Với hàng trăm kết nối như vậy, tin tặc chỉ tốn rất ít tài nguyên, nhưng đủ để làm treo máy chủ, không thể tiếp nhận các kết nối từ người dùng hợp lệ. Cách thức tấn công
- Tạo hoặc tải tệp tin perl: slowloris.pl
- Cấp quyền thực thi cho tệp tin này: perl chmod +x slowloris.pl
- Thực thi tệp tin perl : ./slowloris –dns địa chỉ trang web muốn tấn công –port 80 –timeout 1 –num 1000 cache
Cách phòng chống
- Không dùng Apache nữa! Nếu dùng Apache sau proxy nghịch, thì chỉ cho nghe trên cổng 127.0.0.1 hoặc các IP cục bộ.
- Giảm Timeout cho Apache.
- Giới hạn số kết nối đến Apache cho mỗi IP. Có thể dùng mod_qos chẳng hạn để làm việc này.
- Giải quyết ở lớp dưới: cấu hình firewall để giới hạn số kết nối đến cổng 80 trên mỗi IP.