banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận bảo mật có thể hạn chế DDos với hàm sys_getloadavg() không  XML
  [Discussion]   có thể hạn chế DDos với hàm sys_getloadavg() không 13/06/2011 21:41:59 (+0700) | #1 | 240649
Quốc Hưng
Member

[Minus]    0    [Plus]
Joined: 12/06/2011 06:53:36
Messages: 3
Offline
[Profile] [PM] [Yahoo!]
cái tên DDos nghe quá quen thuộc rồi, khỏi giới thiệu thêm. Dạo này mình nghe thấy một số lượng lớn các website của VN bị hack rồi bị tấn công DDos, nghe đau lòng quá, mình cũng hỏi bác google các cách hạn chế bớt
Mình thấy có nhiều cách để gộp lại đi chung với nhau như sau:
+ tối ưu code web để giảm thiểu sự hao tốn tài nguyên server
+ thiết lập bộ lọc (như chặn x-flash chẳng hạn, chặn referer từ bên ngoài), referer có thể bị giả mạo vì có thể đoán đc, nhưng mình có thể thêm 1 chuỗi nào đó thêm để so sánh referer
+ giới hạn truy cập (hạn chế số người truy cập ở mức tối đa mà server có thể xử lý êm dịu để tránh overload, thực hiện chặn 1 IP nào đó khi có dấu hiệu truy cập bất thường dạng như của forum HVA)
+ ...
+ và tiêu cực hơn thì thực hiện off (báo server bận khi có quá nhiều lượt truy cập) để tránh ảnh hưởng server (điều này cũng đã góp phần trong mục đích của attacker ^^)

Mình thấy bên php có hàm sys_getloadavg() trả về mảng 3 giá trị số lượng process đang chờ tương ứng trong 1, 5, 15 phút trước; hàm này chạy trên server Linux http://php.net/manual/en/function.sys-getloadavg.php). Mình làm 1 hàm server_busy() như sau:

function server_busy($numer) {
if(PHP_OS == 'Linux') {
$loadavg = sys_getloadavg();
if($loadavg[0] > $numer) {
echo 'Server busy, plz try again later...';
die();
}
}
}
server_busy(50);

mình sẽ đặt cho hàm này xử lý trước mỗi khi người dùng có yêu cầu truy cập, sau đó mới tới các xử lý bộ lọc, rồi tới phần xử lý chính của trang web

ở phần thông báo server bận, thì mình có thể thay thế bằng dòng lệnh php: header("Location: domain.com"smilie; để chuyển hướng tấn công sang website của đối thủ tình nghi, vậy liệu phương án này có khả thi không các huynh?

Một điều mình phân vân là không biết có khả thi khi bị tấn công DDoS ở quy mô mà các website thường gặp, hay là cũng ngủm luôn? nếu ngủm thì kế hoạch trên bị phá sản rồi

mình đã thử trên host free linux, khi refresh liên tục thì $loadavg[0] ít khi > 1, do chưa có điều kiện giả lập 1 cuộc DDos thực sự, nên mạo muội post lên để hỏi các cao thủ
.:: Quốc Hưng ::.
[Up] [Print Copy]
  [Discussion]   có thể hạn chế DDos với hàm sys_getloadavg() không 14/06/2011 11:46:21 (+0700) | #2 | 240723
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]
khi refresh liên tục thì $loadavg[0] ít khi > 1 


--> refresh liên tục bằng tay trên trình duyệt cũng khó lòng tạo avg load > 1. Ngay cả refresh tự động hàng chục người hoặc hàng trăm người thì hoạ may nhưng cũng khó. Muốn thực sự tạo load để test thì nên vào trang http://httpd.apache.org/test/flood/ để nghiên cứu cách sử dụng tool để test flood.

Riêng khái niệm kiểm tra server load rồi quyết định ngưng dịch vụ nếu như load lên cao hơn một đơn vị nào đó là khái niệm căn bản và thường được nghĩ đến. Chỉ có điều nếu chỉ đơn giản thực hiện một logic:

Code:
if($loadavg[0] > $numer) {
echo 'Server busy, plz try again later...';
die();
}


thì chính bồ tự tạo ra "từ chối dịch vụ" cho chính bồ. Chống DoS (trong trường hợp bồ đang nêu ra ở đây chỉ có thể tạm xem là DoS chớ không thể là DDoS), đòi hỏi hai điểm quan trọng:

1. Vẫn có thể tiếp tục cung cấp dịch vụ trong tình trạng bị DoS.
2. Và có thể bảo tồn tài nguyên để tiếp tục cung cấp dịch vụ.

Logic ở trên của bồ chỉ thoả mãn điểm thứ 2 ở trên bởi vậy, nó không phải là giải pháp vẹn toàn.


Bồ cũng nên nghiên cứu thêm php trong một mô hình dịch vụ web nó nằm ở đâu để có thể hiểu rằng, nếu phải dựa đến tầng php để kiểm tra server load thì có lẽ quá nặng nhọc. Chống DoS (hoặc DDoS) không thể dựa vào một khía cạnh đơn lẻ nào đó mà đó là sự kiện toàn trải dài từ tầng thấp nhất (băng thông mạng) đến tầng cao nhất (apache + php). Càng hiểu rộng và ứng dụng rộng các biện pháp ở nhiều tầng thì khả năng kháng cự DoS càng cao. Càng thu hẹp trong một biên độ nhỏ nào đó thì khả năng kháng cự DoS càng thấp.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Discussion]   có thể hạn chế DDos với hàm sys_getloadavg() không 14/06/2011 12:02:50 (+0700) | #3 | 240727
[Avatar]
chiro8x
Member

[Minus]    0    [Plus]
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
[Profile] [PM] [Yahoo!]
Code:
if($loadavg[0] > $numer) {
 echo 'Server busy, plz try again later...';
 die();
 }


Cái này gọi là ngưng cung cấp dịch vụ một cách chủ động, với phương pháp này không gọi là bị tấn công mà được tấn công :">. Như anh conmale nói đấy việc chống DDOS cần dựa trên nhiều tầng, và các tầng càng cao thì hiệu quả chống DDOS lại thấp xuống và cho hiệu suất không cao. Bạn đọc kỹ phần ký sự DDOS hva sẽ thấy những điều sau.

1. Việc chống DDOS dựa trên việc hiểu chúng ta có những cái gì.
2. Việc chống DDOS dựa trên việc hiểu phương thức tấn công của đối thủ.
3. Lập biện pháp ứng phó tạm thời để đưa website vào vận hành.
4. Tính toán kỹ lưởng dựa trên mức độ tấn công và phương thức tấn công để lựa chọn phương ánh khả thi nhất và có thể mang lại hiệu quả.

Nói thêm là phần wwwect bằng cách thay đổi header của bạn là vô dụng smilie.
while(1){}
[Up] [Print Copy]
  [Discussion]   có thể hạn chế DDos với hàm sys_getloadavg() không 14/06/2011 13:32:09 (+0700) | #4 | 240738
Quốc Hưng
Member

[Minus]    0    [Plus]
Joined: 12/06/2011 06:53:36
Messages: 3
Offline
[Profile] [PM] [Yahoo!]
cám ơn 2 anh đã hướng dẫn, em sẽ cố học hỏi nhiều thêm, vì từ lúc nghe tin các website VN bị bọn TQ tấn công thì em bắt đầu quan tâm đến bảo mật web nhiều hơn

ý của em nêu ra trong thảo luận này không phải là hỏi đây có phải là giải pháp hoàn hảo hay không, em cũng đã có đọc qua ký sự DDos của HVA, và cũng hiểu được DoS và DDoS. Cần có nhiều thành phần kết hợp lại mới tạo được hệ thống phòng thủ tốt. Em cũng có thấy tin forum HVA hôm qua bị DDoS, với khả năng bảo mật & chống chọi cao của forum mà vẫn bị DDoS thì em đủ hiểu khả năng "ôm đầu chịu đòn" của cái hàm server_busy rồi ^^

Em không có ý hỏi đây có phải là giải pháp toàn diện hay không, mà em muốn biết cách thức để chống đỡ được phần nào hay phần đó thôi. Do em đang dùng share host nên chỉ mới có thể can thiệp ở cấp xử lý php, và kết hợp bảo mật với .htaccess, nên em đưa ra câu hỏi này để hỏi các anh liệu cái hàm trên có thể giúp website chống chọi lại một phần sức mạnh của cuộc tấn công hay không thôi, hay là xử lý không nỗi rồi ngủm luôn smilie (thà mình chủ động tự deny để rồi sau đó hoạt động tiếp, còn hơn bị nó đánh tới tấp)
Vì giả sử website bị đánh tới tấp (hy vọng là bị DoS) thì nếu hàm trên có thể hạn chế bớt nhằm tránh overload server (chí ít là đỡ bị suspend)

hy vọng được mấy anh mở mang thêm
.:: Quốc Hưng ::.
[Up] [Print Copy]
  [Discussion]   có thể hạn chế DDos với hàm sys_getloadavg() không 14/06/2011 13:58:31 (+0700) | #5 | 240742
mapthulu
Member

[Minus]    0    [Plus]
Joined: 10/06/2011 12:16:42
Messages: 28
Offline
[Profile] [PM]
Việc sử dụng hàm getloadavg của php không phải lúc nào cũng hoạt động. Nhất là với hosting, có thể nhà cung cấp sẽ chặn những hàm liên quan mật thiết đến hệ thống.

Còn khi bạn dùng máy chủ riêng thì 'chết'
[Up] [Print Copy]
  [Discussion]   có thể hạn chế DDos với hàm sys_getloadavg() không 14/06/2011 15:23:33 (+0700) | #6 | 240750
[Avatar]
chiro8x
Member

[Minus]    0    [Plus]
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
[Profile] [PM] [Yahoo!]

Quốc Hưng wrote:
cám ơn 2 anh đã hướng dẫn, em sẽ cố học hỏi nhiều thêm, vì từ lúc nghe tin các website VN bị bọn TQ tấn công thì em bắt đầu quan tâm đến bảo mật web nhiều hơn

ý của em nêu ra trong thảo luận này không phải là hỏi đây có phải là giải pháp hoàn hảo hay không, em cũng đã có đọc qua ký sự DDos của HVA, và cũng hiểu được DoS và DDoS. Cần có nhiều thành phần kết hợp lại mới tạo được hệ thống phòng thủ tốt. Em cũng có thấy tin forum HVA hôm qua bị DDoS, với khả năng bảo mật & chống chọi cao của forum mà vẫn bị DDoS thì em đủ hiểu khả năng "ôm đầu chịu đòn" của cái hàm server_busy rồi ^^

Em không có ý hỏi đây có phải là giải pháp toàn diện hay không, mà em muốn biết cách thức để chống đỡ được phần nào hay phần đó thôi. Do em đang dùng share host nên chỉ mới có thể can thiệp ở cấp xử lý php, và kết hợp bảo mật với .htaccess, nên em đưa ra câu hỏi này để hỏi các anh liệu cái hàm trên có thể giúp website chống chọi lại một phần sức mạnh của cuộc tấn công hay không thôi, hay là xử lý không nỗi rồi ngủm luôn smilie (thà mình chủ động tự deny để rồi sau đó hoạt động tiếp, còn hơn bị nó đánh tới tấp)
Vì giả sử website bị đánh tới tấp (hy vọng là bị DoS) thì nếu hàm trên có thể hạn chế bớt nhằm tránh overload server (chí ít là đỡ bị suspend)

hy vọng được mấy anh mở mang thêm 


Tớ có viết một tool để giả lập một quá trình DDOS rồi. Qua quá trình test ở một số server thì thấy nguyên nhân dẫn tới máy chủ không thể cung cấp dịch vụ là do có quá nhiều truy vấn tới dabtabase hoặc các truy vấn có độ phức tạp cao làm MySQL server bị quá tải dẫn tới crash, trong khi đó Apache và PHP vẫn không ở trong trình trạng quá tải.

Nếu như server bạn bị dính một số lỗi truyền thống như file file inclusion hoặc sql injection. Mình có thể kết hợp để tạo ra những truy vấn kiến server của bạn chết rất nhanh. Còn chuyện dùng đoạn mã trên bạn chỉ giúp người dùng không tiếp cận tới dịch vụ. Đây không phải là chống, mà là giúp người DDOS bạn.

Nếu bạn chỉ có thể tương tác với server thông qua các script thì có thể PM mình chúng mình thảo luận riêng :"<.
while(1){}
[Up] [Print Copy]
  [Discussion]   có thể hạn chế DDos với hàm sys_getloadavg() không 14/06/2011 15:27:51 (+0700) | #7 | 240752
[Avatar]
chiro8x
Member

[Minus]    0    [Plus]
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
[Profile] [PM] [Yahoo!]
Mục đích của tấn công từ chối dịch vụ là không để người sử dụng cuối tiếp cận với dịch vụ do nhà cung cấp đưa ra. Còn việc bạn làm là ngừng cung cấp dịch vụ với người dùng. Có lẽ bạn cố ý không hiểu rõ những gì anh conmale nói.


thì chính bồ tự tạo ra "từ chối dịch vụ" cho chính bồ. Chống DoS (trong trường hợp bồ đang nêu ra ở đây chỉ có thể tạm xem là DoS chớ không thể là DDoS), đòi hỏi hai điểm quan trọng:

1. Vẫn có thể tiếp tục cung cấp dịch vụ trong tình trạng bị DoS.
2. Và có thể bảo tồn tài nguyên để tiếp tục cung cấp dịch vụ.

Logic ở trên của bồ chỉ thoả mãn điểm thứ 2 ở trên bởi vậy, nó không phải là giải pháp vẹn toàn.
 


Giờ bạn hãy đọc ý của anh conmale thật chậm và cẩn thận nhé.
while(1){}
[Up] [Print Copy]
  [Discussion]   có thể hạn chế DDos với hàm sys_getloadavg() không 15/06/2011 00:00:43 (+0700) | #8 | 240800
Quốc Hưng
Member

[Minus]    0    [Plus]
Joined: 12/06/2011 06:53:36
Messages: 3
Offline
[Profile] [PM] [Yahoo!]
xác nhận là mình đã có nhầm lẫn trong vấn đề này. đóng topic ^^
.:: Quốc Hưng ::.
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|