Skip to content

Bài 1: Tổng quan¤

1. Khảo sát kiến thức nền¤

1.1 Ứng dụng Web¤

Ứng dụng web là các phần mềm chạy trên nền tảng trình duyệt, sử dụng giao thức HTTP/HTTPS để giao tiếp giữa client và server. Các công nghệ phổ biến bao gồm:

Backend (Server-side):

  • Ngôn ngữ lập trình: PHP, Java, Python, Node.js, C#/.NET
  • Cơ sở dữ liệu quan hệ: MySQL, PostgreSQL, Microsoft SQL Server, Oracle, SQLite
  • Cơ sở dữ liệu NoSQL: MongoDB, CouchDB, Cassandra, HBase

Frontend (Client-side):

  • HTML, CSS, JavaScript
  • Framework: React, Angular, Vue.js, jQuery

Định dạng dữ liệu:

  • XML, JSON

1.2 Ứng dụng Di động¤

Ứng dụng di động có thể phát triển theo nhiều hướng:

Native (Thuần nền tảng):

  • Android: Java, Kotlin
  • iOS: Objective-C, Swift

Cross-platform (Đa nền tảng):

  • Flutter (Dart)
  • React Native (JavaScript)

Kiến trúc tổng thể:

Text Only
Mobile App --> REST API --> Backend Services
                         --> Cloud Resources
                         --> Legacy Applications
                         --> Partner Applications

1.3 Một số dạng tấn công phổ biến vào ứng dụng¤

  • Injection: SQL Injection, Command Injection, LDAP Injection
  • XSS (Cross-Site Scripting): Chèn mã JavaScript độc hại vào trang web
  • CSRF (Cross-Site Request Forgery): Giả mạo yêu cầu từ phía người dùng
  • Broken Authentication: Khai thác cơ chế xác thực yếu
  • Path Traversal / LFI: Đọc file hệ thống không được phép
  • XXE (XML External Entity): Khai thác parser XML
  • SSRF (Server-Side Request Forgery): Server bị dùng để truy cập tài nguyên nội bộ

1.4 CTF (Capture The Flag) là gì?¤

CTF là hình thức thi đấu an toàn thông tin, trong đó người chơi phải tìm và khai thác lỗ hổng bảo mật để thu thập các "flag" (chuỗi ký tự đặc biệt). CTF giúp người học:

  • Thực hành kỹ năng tấn công trong môi trường hợp pháp, kiểm soát
  • Rèn luyện tư duy phân tích và giải quyết vấn đề bảo mật
  • Làm quen với các công cụ và kỹ thuật pentest thực tế

Các thể loại CTF phổ biến: Web Exploitation, Reverse Engineering, Forensics, Cryptography, Binary Exploitation (Pwn).


2. OWASP Top 10¤

OWASP (Open Web Application Security Project) là tổ chức phi lợi nhuận công bố danh sách 10 rủi ro bảo mật phổ biến nhất trong ứng dụng web.

Thứ hạng Tên lỗ hổng
A01 Injection
A02 Broken Authentication
A03 Sensitive Data Exposure
A04 XML External Entities (XXE)
A05 Broken Access Control
A06 Security Misconfiguration
A07 Cross-Site Scripting (XSS)
A08 Insecure Deserialization
A09 Using Components with Known Vulnerabilities
A10 Insufficient Logging & Monitoring
Thứ hạng Tên lỗ hổng Ghi chú
A01 Broken Access Control
A02 Cryptographic Failures
A03 Injection
A04 Insecure Design Mới
A05 Security Misconfiguration
A06 Vulnerable and Outdated Components
A07 Identification and Authentication Failures Mới
A08 Software and Data Integrity Failures Mới
A09 Security Logging and Monitoring Failures
A10 Server-Side Request Forgery (SSRF) Từ khảo sát

Nhận xét sự thay đổi từ 2017 sang 2021

  • Broken Access Control leo lên vị trí số 1 (trước là A05), cho thấy vấn đề phân quyền ngày càng nghiêm trọng.
  • Injection (bao gồm SQL, Command, LDAP...) vẫn nằm top 3.
  • Insecure Design là khái niệm mới, nhấn mạnh lỗ hổng đến từ thiết kế hệ thống yếu ngay từ đầu, không chỉ từ lập trình.
  • SSRF xuất hiện lần đầu do sự bùng nổ của kiến trúc microservice và cloud.

3. Mục tiêu và Nội dung môn học¤

3.1 Mục tiêu¤

Môn học trang bị kiến thức cơ bản về bảo mật, bảo vệ dữ liệu và an toàn thông tin, hướng đến khả năng:

  • Hiểu và nhận biết các lỗ hổng bảo mật phổ biến
  • Thực hành kiểm thử xâm nhập (penetration testing)
  • Biết cách bảo vệ ứng dụng web và di động

3.2 Nội dung chi tiết¤

  • Công cụ hỗ trợ tìm kiếm lỗ hổng, kiểm thử tự động
  • Đảm bảo an toàn ứng dụng di động (Android/iOS)
  • Kỹ thuật tấn công và thâm nhập ứng dụng web: XSS, CSRF, LFI, SQL Injection
  • Một số giải pháp bảo vệ (WAF và các kỹ thuật tương tự)
  • Checklist kiểm thử
  • Cách viết báo cáo kiểm thử

4. Chuẩn bị môi trường thực hành¤

4.1 Máy ảo cần thiết¤

Máy ảo Mục đích Nguồn tải
Kali Linux Công cụ tấn công, kiểm thử kali.org
OWASP-BWA Môi trường mục tiêu có lỗ hổng sourceforge.net/projects/owaspbwa
Windows 7 Thực hành trên môi trường Windows developer.microsoft.com
bWAPP / Bee-box Ứng dụng dễ bị tấn công thay thế vulnhub.com

Lưu ý quan trọng

Các máy ảo trên chứa nhiều lỗ hổng bảo mật nghiêm trọng. Chỉ chạy chúng trong mạng Host-only hoặc NAT trong phần mềm ảo hóa. Tuyệt đối không kết nối chúng trực tiếp với mạng nội bộ hoặc internet.

4.2 Phần mềm ảo hóa¤

  • VMware Workstation / VMware Player
  • Oracle VirtualBox (miễn phí)
  • KVM (trên Linux)

5. OWASP Broken Web Applications (BWA)¤

5.1 Giới thiệu¤

OWASP-BWA là một máy ảo (VM) được đóng gói sẵn, chứa hàng chục ứng dụng web có lỗ hổng, được thiết kế cho mục đích học tập và kiểm thử. Đây là môi trường lab chuẩn để thực hành các kỹ thuật tấn công và phòng thủ.

5.2 Đối tượng sử dụng¤

  • Người học bảo mật ứng dụng web
  • Kiểm tra kỹ thuật đánh giá thủ công
  • Kiểm tra công cụ scan tự động
  • Kiểm tra công cụ phân tích mã nguồn (SAST)
  • Quan sát và phân tích hành vi tấn công web
  • Kiểm tra WAF (Web Application Firewall)

5.3 Phân loại ứng dụng trong BWA¤

Các ứng dụng hướng dẫn có giải thích từng bước, phù hợp cho người mới bắt đầu:

  • OWASP WebGoat - ứng dụng Java với các bài học tương tác
  • OWASP WebGoat.NET - phiên bản .NET
  • OWASP Mutillidae II - ứng dụng PHP rất nhiều lỗ hổng
  • OWASP Security Shepherd - nền tảng học bảo mật dạng CTF
  • OWASP Bricks - ứng dụng PHP module hóa
  • OWASP RailsGoat - phiên bản Ruby on Rails

Ứng dụng mô phỏng thực tế nhưng được cố ý tạo ra lỗ hổng:

  • bWAPP (Buggy Web Application) - hơn 100 loại lỗ hổng khác nhau
  • Damn Vulnerable Web Application (DVWA) - PHP/MySQL, phổ biến nhất
  • Ghost - ứng dụng blog có lỗ hổng
  • Magical Code Injection Rainbow (MCIR) - tập trung vào injection

Phiên bản cũ (có lỗ hổng thực sự đã từng tồn tại) của CMS phổ biến:

  • WordPress - phiên bản cũ có nhiều CVE đã biết
  • Joomla - tương tự
  • Ứng dụng phục vụ kiểm thử các công cụ scan tự động (Nikto, ZAP, Burp Suite)
  • OWASP AppSensor - giả lập mạng xã hội, tự động log tất cả các hành vi tấn công

6. Trình duyệt và Công cụ¤

6.1 OWASP Mantra¤

OWASP Mantra là trình duyệt dựa trên Firefox/Chromium, được tích hợp sẵn nhiều add-on bảo mật. Đây là công cụ phổ biến trong giảng dạy bảo mật web.

Các tính năng tích hợp:

  • Tamper Data: bắt và chỉnh sửa HTTP request trước khi gửi đi
  • Live HTTP Headers: xem header HTTP theo thời gian thực
  • HttpFox: phân tích HTTP traffic
  • HackBar: thay đổi input trực tiếp trên thanh công cụ
  • Cookie Manager+: xem và sửa cookie
  • Web Developer: vô hiệu hóa CSS, JS, xem source
  • Proxy settings tích hợp

6.2 So sánh tính năng giữa các trình duyệt¤

Tính năng Chrome Firefox Edge/IE Safari
Switching User Agents
Edit and Replay Requests Không
Editing Cookies
Editing Local Storage
Disable CSS Không Không
Disable Javascript
View Headers
Native Screenshot
Offline Mode Không
Encode/Decode Không Không

6.3 Các Add-on Firefox hữu ích khác¤

  • XSS Me: tự động kiểm tra lỗ hổng XSS
  • SQL Inject Me: tự động kiểm tra SQL Injection
  • FoxyProxy: quản lý proxy nhanh (tích hợp với Burp Suite/ZAP)
  • iMacros: tự động hóa thao tác trên trình duyệt
  • FirePHP: debug PHP qua HTTP header
  • RESTClient: kiểm tra REST API (GET, POST, PUT, DELETE)
  • Wappalyzer: nhận diện công nghệ sử dụng của website (CMS, framework, server...)
  • Passive Recon: thu thập thông tin public (DNS, Whois)

7. Kiến thức nền cần ôn tập¤

7.1 HTML cơ bản¤

Hiểu cấu trúc HTML là nền tảng để phân tích và tấn công ứng dụng web.

Các khái niệm cần nắm:

  • Thẻ Tag: cấu trúc <tag attribute="value">nội dung</tag>
  • Attribute: thuộc tính của thẻ, ví dụ id, class, name, action, method
  • Form: cơ chế gửi dữ liệu từ người dùng lên server
HTML
<!DOCTYPE html>
<html>
<head>
    <title>Login Form</title>
</head>
<body>
    <form id="loginForm" method="POST" action="/login">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required>

        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required>

        <button type="submit">Đăng nhập</button>
    </form>
</body>
</html>

7.2 JavaScript và jQuery cơ bản¤

JavaScript được dùng để xử lý logic phía client, kiểm tra input người dùng trước khi gửi lên server.

Lưu ý bảo mật quan trọng

Kiểm tra dữ liệu bằng JavaScript chỉ là kiểm tra phía client. Người dùng có thể dễ dàng vô hiệu hóa JavaScript hoặc dùng công cụ như Burp Suite để gửi dữ liệu tùy ý. Luôn phải validate lại phía server.

Ví dụ kiểm tra form với JavaScript thuần:

JavaScript
document.getElementById("loginForm").addEventListener("submit", function(e) {
    var username = document.getElementById("username").value.trim();
    var password = document.getElementById("password").value;

    if (username === "") {
        alert("Username không được để trống!");
        e.preventDefault(); // Ngăn form gửi đi
        return;
    }

    if (password.length < 6) {
        alert("Password phải có ít nhất 6 ký tự!");
        e.preventDefault();
        return;
    }
});

Ví dụ với jQuery:

JavaScript
$(document).ready(function() {
    $("#loginForm").on("submit", function(e) {
        var username = $("#username").val().trim();
        var password = $("#password").val();

        if (!username || !password) {
            alert("Vui lòng điền đầy đủ thông tin!");
            e.preventDefault();
            return false;
        }

        if (password.length < 6) {
            alert("Password quá ngắn!");
            e.preventDefault();
            return false;
        }
    });
});

7.3 AJAX cơ bản¤

AJAX (Asynchronous JavaScript and XML) cho phép gửi request lên server mà không reload trang. Hiểu AJAX là quan trọng vì nhiều ứng dụng hiện đại dùng AJAX để giao tiếp với API.

JavaScript
// Ví dụ gửi login bằng AJAX (fetch API hiện đại)
document.getElementById("loginForm").addEventListener("submit", function(e) {
    e.preventDefault();

    var data = {
        username: document.getElementById("username").value,
        password: document.getElementById("password").value
    };

    fetch("/api/login", {
        method: "POST",
        headers: {
            "Content-Type": "application/json"
        },
        body: JSON.stringify(data)
    })
    .then(response => response.json())
    .then(result => {
        if (result.success) {
            window.location.href = "/dashboard";
        } else {
            alert("Sai tên đăng nhập hoặc mật khẩu!");
        }
    })
    .catch(error => console.error("Lỗi:", error));
});

Tại sao AJAX quan trọng trong bảo mật?

Khi ứng dụng dùng AJAX, dữ liệu gửi/nhận thường ở dạng JSON. Attacker có thể dùng Burp Suite để intercept và modify các request AJAX này, tương tự như với form thông thường. Đây là lý do tại sao mọi API endpoint đều cần được bảo vệ và validate input.


8. Luật An Toàn Thông Tin Mạng¤

Điều 7 - Các hành vi bị nghiêm cấm (Luật số 86/2015/QH13, hiệu lực 01/07/2016)¤

Nghiêm cấm các hành vi sau

  1. Ngăn chặn việc truyền tải thông tin trên mạng; can thiệp, truy nhập, gây nguy hại, xóa, thay đổi, sao chép và làm sai lệch thông tin trên mạng trái pháp luật.

  2. Gây ảnh hưởng, cản trở trái pháp luật tới hoạt động bình thường của hệ thống thông tin hoặc tới khả năng truy nhập hệ thống thông tin của người sử dụng.

  3. Tấn công, vô hiệu hóa trái pháp luật làm mất tác dụng của biện pháp bảo vệ an toàn thông tin mạng; tấn công, chiếm quyền điều khiển, phá hoại hệ thống thông tin.

  4. Phát tán thư rác, phần mềm độc hại, thiết lập hệ thống thông tin giả mạo, lừa đảo.

  5. Thu thập, sử dụng, phát tán, kinh doanh trái pháp luật thông tin cá nhân của người khác; lợi dụng sơ hở, điểm yếu của hệ thống thông tin để thu thập, khai thác thông tin cá nhân.

  6. Xâm nhập trái pháp luật bí mật mật mã và thông tin đã mã hóa hợp pháp; tiết lộ thông tin về sản phẩm mật mã dân sự; sử dụng, kinh doanh sản phẩm mật mã dân sự không rõ nguồn gốc.

Điều 8 - Xử lý vi phạm¤

Người vi phạm có thể bị: - Xử lý kỷ luật - Xử phạt vi phạm hành chính - Truy cứu trách nhiệm hình sự - Bồi thường thiệt hại theo quy định pháp luật

Ý nghĩa thực tiễn cho người học

Tất cả các kỹ thuật tấn công trong môn học này chỉ được phép thực hành trong môi trường lab được kiểm soát (OWASP-BWA, DVWA...) hoặc khi có sự cho phép rõ ràng bằng văn bản từ chủ sở hữu hệ thống (hợp đồng pentest). Áp dụng lên hệ thống thực mà không có phép là vi phạm pháp luật.


9. Câu hỏi ôn tập và trả lời¤

Câu hỏi 1: Viết một trang HTML đơn giản có form username/password và dùng JavaScript/jQuery kiểm tra input

Đây là bài tập thực hành quan trọng. Dưới đây là ví dụ đầy đủ:

HTML
<!DOCTYPE html>
<html lang="vi">
<head>
    <meta charset="UTF-8">
    <title>Login Page</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <style>
        body { font-family: Arial, sans-serif; max-width: 400px; margin: 50px auto; }
        .error { color: red; font-size: 0.9em; }
        input { display: block; width: 100%; margin: 8px 0; padding: 8px; }
        button { padding: 10px 20px; background: #007bff; color: white; border: none; cursor: pointer; }
    </style>
</head>
<body>
    <h2>Đăng nhập</h2>
    <form id="loginForm">
        <label>Username:</label>
        <input type="text" id="username" name="username" placeholder="Nhập username">
        <span class="error" id="usernameError"></span>

        <label>Password:</label>
        <input type="password" id="password" name="password" placeholder="Nhập password">
        <span class="error" id="passwordError"></span>

        <button type="submit">Đăng nhập</button>
    </form>

    <script>
    $(document).ready(function() {
        $("#loginForm").on("submit", function(e) {
            e.preventDefault();
            var isValid = true;

            // Clear lỗi cũ
            $(".error").text("");

            var username = $("#username").val().trim();
            var password = $("#password").val();

            // Kiểm tra username
            if (username === "") {
                $("#usernameError").text("Username không được để trống.");
                isValid = false;
            } else if (username.length < 3) {
                $("#usernameError").text("Username phải có ít nhất 3 ký tự.");
                isValid = false;
            }

            // Kiểm tra password
            if (password === "") {
                $("#passwordError").text("Password không được để trống.");
                isValid = false;
            } else if (password.length < 6) {
                $("#passwordError").text("Password phải có ít nhất 6 ký tự.");
                isValid = false;
            }

            if (isValid) {
                alert("Dữ liệu hợp lệ! Đang gửi lên server...");
                // Trong thực tế: gửi AJAX hoặc this.submit()
            }
        });
    });
    </script>
</body>
</html>

Lưu ý bảo mật: Đây chỉ là kiểm tra phía client. Server-side validation là bắt buộc.

Câu hỏi 2: OWASP Top 10 2021 có gì mới so với 2017?

Ba điểm thay đổi đáng chú ý nhất:

  1. Broken Access Control lên #1: Trước đây là #5. Phản ánh thực tế rằng phân quyền sai là lỗi rất phổ biến và nguy hiểm.

  2. Insecure Design (A04) - hoàn toàn mới: Không chỉ là lỗi code, mà là lỗi ngay trong thiết kế kiến trúc/quy trình nghiệp vụ. Ví dụ: thiếu rate limiting ngay từ thiết kế, không có cơ chế xác thực đa yếu tố.

  3. SSRF (A10) - mới hoàn toàn: Do sự bùng nổ của kiến trúc microservice và cloud, lỗ hổng Server-Side Request Forgery ngày càng phổ biến.

Câu hỏi 3: CTF là gì và có liên quan gì đến học bảo mật?

CTF (Capture The Flag) là cuộc thi bảo mật thực hành, nơi người chơi phải tìm và khai thác lỗ hổng để lấy "flag" - một chuỗi văn bản dạng FLAG{...}.

Liên quan đến môn học: - Thực hành trực tiếp các kỹ thuật XSS, SQLi, LFI trong môi trường hợp pháp - Rèn tư duy tấn công có kiểm soát - Nhiều bài lab trên OWASP-BWA có thể coi là dạng CTF mini

Nền tảng CTF phổ biến để tự luyện: HackTheBox, TryHackMe, PicoCTF, VulnHub.