Khái niệm DOS (Denial of Service Attack) và DDOS (Distributed Denial of Service Attack)

a) DOS (Denial of Service Attack) là gì?

  • DOS hay tấn công từ chối dịch vụ là một loại hình tấn công từ một kẻ tấn công đến một nạn nhân (có thể là một máy, một website, thiết bị định tuyến router hay một hệ thống), bằng cách làm quá tải tài nguyên của hệ thống, nhằm làm cho hệ thống chậm đi một cách đáng kể hoặc không thể truy cập sử dụng bất kì dịch vụ mạng nào.
  • Tấn công DOS không có khả năng truy cập vài dữ liệu thực của hệ thống nhưng nó có thể làm cho hệ thống sụp đổ, hoặc gián đoạn các dịch vụ mà hệ thống cung cấp.

b) DDOS (Distributed Denial of Service Attack)?

  • DDOS là hình thức tấn công với cách thức và mục đích tương tự như DOS.
  • Tuy nhiên, tấn công DDOS sử dụng rất nhiều thiết bị và kết nối Internet, thường phân tán toàn cầu với hệ thống botnet. Nạn nhân sẽ bị tấn công bởi request từ hàng trăm đến hàng ngàn nguồn khác nhau.

c) Tìm hiểu ba loại tấn công DdoS thông dụng:

  • c1) Volume Based Attacks: UDP floods, ICMP floods …
    • UDP flood:
      • Là một cuộc tấn công DOS sử dụng User Datagram Protocol (UDP)
      • Bắt đầu bằng cách gửi một số lượng lớn các gói tin UDP đến các port ngẫu nhiên trên một máy chủ từ xa.
    • ICMP flood:
      • Tương tự như UDP flood nhưng sử dụng gói tin ICMP.
  • c2) Protocol Attacks: SYN floods, fragmented packet attacks, Ping of Death, Smurf DdoS…
    • SYN flood:
      • Lợi dụng cách thức hoạt động của kết nối TCP/IP, kẻ tấn công gửi đến máy đích một loạt gói SYN với địa chỉ IP nguồn không có thực. Máy đích sau khi nhận gói SYN sẽ gởi trở lại các IP không có thực đó gói SYN/ACK và chờ gói ACK phản hồi từ các IP giả này.
      • Hệ thống cứ “chờ đợi mòn mỏi” làm tốn một lượng đáng kể tài nguyên, dẫn đến quá tải làm máy bị treo, không có khả năng đáp ứng hoặc reboot.
    • Fragmented packet attack:
      • Phân mảnh IP là quá trình chia nhỏ một gói Internet Protocol (IP) thành nhiều gói có kích thước nhỏ hơn. Mỗi message trên mạng có quy định kích thước có thể được truyền đi, gọi là các đơn vị truyền tải tối đa (MTU). Fragmented packet attacks sử dụng giao thức phân mảnh trong IP như là một vector tấn công. Điều này có thể được thực hiện theo nhiều phương pháp:
        • IP fragment overlapped: xảy ra khi hai mảnh trong gói tin IP cùng có trường offset chỉ ra rằng chúng chồng lên nhau trong định vị trong gói tin. Một phần của một cuộc tấn công được gửi trong các mảnh vỡ cùng với dữ liệu ngẫu nhiên bổ sung; mảnh vỡ trong tương lai có thể ghi đè lên các dữ liệu ngẫu nhiên với phần còn lại của cuộc tấn công. Nếu gói tin hoàn thành không được tập hợp lại đúng lúc IDS, cuộc tấn công sẽ không bị phát hiện.
        • IP fragment overrun: khi một gói tin bị phân mảnh tập hợp lại vượt quá độ dài dữ liệu IP có tuyên bố hay chiều dài gói tin tối đa. Vì không có gói tin IP được lớn hơn 65.535 bytes nên hệ thống cố gắng để xử lý các gói dữ liệu lớn có thể sụp đổ.
        • IP Fragment Too Small: Nếu một mảnh IP là quá nhỏ, nó chỉ ra rằng các mảnh vỡ có khả năng cốý crafted. Bất kỳ đoạn khác với đoạn cuối cùng đó là ít hơn 400 byte có thể được coi là quá nhỏ và có thể được sử dụng trong tấn công từ chối dịch vụ hoặc trong một nỗ lực để vượt qua các biện pháp an ninh.
        • IP fragment incomplete datagram: Khai thác này xảy ra khi một gói tin không thể được tập hợp lại đầy đủ do dữ liệu bị mất. Điều này có thể là một tấn công từ chối dịch vụ hoặc một nỗ lực để đánh bại chính sách an ninh bộ lọc gói tin.
    • Ping of Death:
      • Kẻ tấn công gửi những gói tin IP lớn hơn kích thước cho phép của gói tin IP thông thường là 65536 bytes.
      • Trong quá trình truyền nhận, gói tin sẽ được chia nhỏ và gửi đến máy đích, nhưng ở máy đích, hệ điều hành không thể nhận biết được độ lớn của gói tin.
      • Kết quả: máy nạn nhân có thể ngưng hoạt động, reboot hoặc bị treo.
    • Smurf attack:
      • Kẻ tấn công gửi gói tin ICMP echo tới địa chỉ Broadcast của nhiều mạng với địa chỉ nguồn là địa chỉ của mục tiêu cần tấn công.
      • Khi ping tới địa chỉ Broadcast của một mạng nào đó thì toàn bộ các máy trong mạng đó sẽ đồng loạt gửi lại gửi gói ICMP reply lại địa chỉ nguồn, tức là reply lại máy cần tấn công.
      • Kết quả là máy bị tấn công sẽ chịu một đợt reply gói ICMP cực lớn, làm cho mạng bị chậm hoặc không có khả năng đáp ứng các dịch vụ khác do máy không thể xử lý kịp thời một lượng lớn thông tin.
  • c3) Application Layer Attacks: low-and-slow attacks, GET/POST floods…
    • Low and slow attack:
      • Không giống như những loại tấn công từ chối dịch vụ khác, nó đòi hỏi rất ít tài nguyên từ phía những kẻ tấn công.
      • Trong khi việc tấn công làm ngừng hoạt động mạng lưới đòi hỏi phải có từ hàng trăm máy tính ma gửi lưu lượng cùng một lúc để làm nghẽn tài nguyên mạng thì tấn công Low & Slow chỉ cần duy nhất một máy tính. Nổi tiếng nhất trong kỹ thuật tấn công này là Slowloris.
      • Kẻ tấn công 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ệ.
      • Về bản chất, chúng rất khó bị phát hiện vì chúng liên quan đến kết nối và truyền dữ liệu có vẻ như xảy ra ở mức bình thường. Trong suốt quá trình tấn công, do kết nối chưa hoàn chỉnh, sẽ không có thông tin gì trong log. Chỉ đến khi ngưng kết nối, sẽ có hàng loạt lỗi 404 trong log do truy vấn sai.
    • GET/POST flood:
      • Khi một client HTTP giao tiếp với một máy chủ HTTP, nó sẽ gửi yêu cầu mà có hai phần chính GET và POST. Một GET request là những gì được sử dụng cho “liên kết bình thường”, bao gồm cả hình ảnh; yêu cầu như vậy có nghĩa là để lấy một mảnh tĩnh của dữ liệu, các URL trỏ đến mảnh dữ liệu. Khi bạn nhập một URL trong thanh địa chỉ URL, một GETcũng được thực hiện.
      • POST request được sử dụng với form. Một POST request bao gồm các thông số thường được lấy từ các trường nhập liệu trên cùng một trang.
      • Kẻ tấn công gửi nhiều request làm quá tải khả năng phản hồi của máy chủ web.

Xây dựng kịch bản tấn công DOS và DDOS

  • Chọn một loại tấn công DOS hoặc DDOS, từ đó xây dựng mô hình và kịch bản tấn công, đưa ra giải pháp để phát hiện kiểu tấn công?
  • Snort hoặc Bro có sử dụng trong trường hợp tấn công DOS/DDOS này được không?

–> Lựa chọn kiểu tấn công Smurf (chi tiết về kiểu tấn công đã được trình bày ở trên).

Trong Smurf Attack, cần có ba thành phần: hacker (kẻ tấn công), mạng khuếch đại và hệ thống của nạn nhân. Kẻ tấn công sẽ gởi các gói tin ICMP đến địa chỉ broadcast của mạng khuếch đại. Điều đặc biệt là các gói tin ICMP packets này có địa chỉ ip nguồn chính là địa chỉ ip của nạn nhân . Khi các packets đó đến được địa chỉ broadcast của mạng khuếch đại, các máy tính trong mạng khuếch đại sẽ tưởng rằng máy tính nạn nhân đã gởi gói tin ICMP packets đến và chúng sẽ đồng loạt gởi trả lại hệ thống nạn nhân các gói tin ICMP reply. 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ồ các gói tin này và nhanh chóng bị ngừng hoạt động, crash hoặc reboot. Như vậy, chỉ cần gởi một lượng nhỏ các gói tin ICMP packets đi thì hệ thống mạng khuếch đại sẽ khuếch đại lượng gói tin ICMP packets này lên gấp bội .

Tỉ lệ khuếch đại phụ thuộc vào số mạng máy tính có trong mạng khuếch đại. Nhiệm vụ của kẻ tấn công 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 gói tin đến địa chỉ broadcast không qua chỗ lọc địa chỉ nguồn ở các đầu ra của gói tin (gọi là một mạng botnet). 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.

Trong phần xây dựng mô hình và kịch bản tấn công, nhóm thực hiện mô phỏng ở mức sử dụng công cụ hping3 để thể hiện rằng, kẻ tấn công chỉ cần sử dụng một máy, gửi một gói ICMP echo đến mạng broadcast nhưng ở máy nạn nhân sẽ nhận đồng thời rất nhiều gói ICMP reply tương ứng với số lượng máy trong mạng khuếch đại. Cụ thể mô hình tấn công sẽ có 2 máy gồm:

  • 01 máy Ubuntu 16.04: kẻ tấn công có cài hping3
  • 01 máy Ubuntu server: victim

Theo dõi cuộc tấn công như kiểu này là rất khó nhưng không phải là không được. Vì kiểu tấn công này chủ yếu dựa vào độ lớn của mạng khuếch đại nên để phòng chống kiểu tấn công này cần có sự phối hợp giữ các cơ quan, tổ chức cũng như các nhân. Giải pháp sử dụng để ngăn ngừa, phát hiện kiểu tấn công Smurf:

  • Từng cá nhân, công ty, tổ chức phải biết config máy tính, hệ thống của mình để không bị biến thành mạng khuếch đại. Để không bị biến thành mang khuếch đại bạn nên vô hiệu hóa chức năng directed broadcast tại bộ định tuyến.
  • Các hệ thống IDS/IPS hỗ trợ phát hiện và ngăn chặn tấn công loại này.
  • Khi bị tấn công các công ty, cá nhân cần phải phối hợp với ISP nhằm giới hạn lưu lượng ICMP, tăng cường biện pháp đối phó.

Trong quá trình demo, nhóm sử dụng Snort để phát hiện kiểu tấn công này. Các bước làm:

Bước 1: Chuẩn bị 2 máy gồm:

  • 01 máy Ubuntu 16.04: kẻ tấn công
  • 01 máy Ubuntu server: victim

Tiến hành cài hping3 trên máy đóng vai trò kẻ tấn công bằng cách dùng lệnh sau:

Bước 2: Chọn mục tiêu tấn công

Ở bước này, ta xem thử địa chỉ IP của máy cần tấn công, tức là máy nạn nhân:

Dễ dàng nhìn thấy, máy cần tấn công có địa chỉ IP 192.168.139.140 và địa chỉ broadcast: 192.168.139.255

Bước 3: Thực hiện tấn công

  • Dùng công cụ hping3 để thực hiện tấn công. Trước khi thực hiện lệnh tấn công, trên máy nạn nhân, thực hiện lệnh $sudo tcpdump –i ens33 để bắt tất cả các gói tin trong interface ens33.
  • Trên máy kẻ tấn công, thực thi lệnh sau:

Trong đó:

  • –icmp : loại gói tin gửi, ở đây là gói ICMP
  • -c : option này cho phép lựa chọn số lượng gói tin có thể được gửi. Ở đây, số lượng gói tin ICMP được gửi là 1
  • –spoof : cho phép một địa chỉ nguồn giả mạo

192.168.139.140 và 192.168.139.255: là địa chỉ nguồn của gói tin ICMP cũng tức là địa chỉ của máy cần tấn công và địa chỉ broadcast sẽ nhận gói tin ICMP request này để reply gói ICMP reply về máy cần tấn công.

Khi đó, trên máy nạn nhân thu được 47 gói đã nhận được bởi filter:

Bước 4: Viết rule trên Snort để detect tấn công loại Smurf

Các dấu hiệu của một cuộc tấn công Smurf được thể hiện như trong hình sau:

Ta có thể viết rule sau trong local.rules để phát hiện và đưa ra các cảnh báo về kiểu tấn công Smurf:

Chú ý, itype – Kiểm tra giá trị ICMP type.

Kết quả là khi thực hiện một lệnh tấn công sử dụng công cụ hping3 trên máy kẻ tấn công, Snort của máy cần bảo vệ sẽ hiển thị cảnh báo: