Chuyển đến nội dung chính (Skip to content)
Mục lục bài viết
Security Essentials

Security Essentials 023.2: Bảo mật Ứng dụng

Security Essentials 023.2: Bảo mật Ứng dụng

Học bảo mật ứng dụng từ nguồn cài đặt, chữ ký và cập nhật đến tường lửa; thực hành SQLite để tách giá trị đầu vào khỏi câu lệnh và xác minh kết quả.

Người dùng gửi một bộ cài kèm lời nhắn “có chữ ký số nên chắc an toàn”. Một đồng nghiệp khác đề nghị tắt tường lửa vì ứng dụng không kết nối được. Cả hai nhận định đều thiếu bối cảnh. Help Desk cần xác định phần mềm đến từ đâu, cần quyền gì, đang chạy phiên bản nào và kết nối nào thực sự cần cho công việc.

Kết quả học tập và môi trường

Bạn sẽ phân biệt firmware, hệ điều hành và ứng dụng; chọn nguồn cài đặt phù hợp; giải thích cập nhật và các lớp lọc mạng; nhận biết tràn bộ đệm và SQL injection ở mức nhập môn. Cần biết tệp, tiến trình, cổng mạng và mục tiêu bảo mật từ các bài trước.

Bài độc lập tham chiếu mục 023.2, giáo trình Security Essentials 1.0 tiếng Việt ngày 15/04/2026, trang in 149–161. Đối chiếu nguồn chính thức đến 23/10/2026. Lab chạy Python 3.14.4 với SQLite 3.46.1 trên Ubuntu 26.04.1 ARM64, nonroot trong container không mạng ngoài. Chưa kiểm thử cài đặt, cập nhật firmware, tường lửa hoặc ứng dụng web thật trong bài này.

Ba loại phần mềm cần ba cách kiểm tra

Firmware điều khiển chức năng cấp thấp của thiết bị, thường được lưu trong bộ nhớ không mất dữ liệu khi tắt nguồn. Hệ điều hành quản lý tài nguyên và môi trường thực thi. Ứng dụng thực hiện tác vụ người dùng, nhưng có thể phụ thuộc thư viện, runtime, plugin hoặc dịch vụ nền. Vì vậy, cập nhật một ứng dụng chưa có nghĩa mọi thành phần liên quan đều được cập nhật.

Với firmware, cần model và revision phần cứng, gói đúng hãng, hướng dẫn nguồn điện và phương án phục hồi. Không lấy gói cho thiết bị có tên gần giống. Với hệ điều hành, cần edition, phiên bản, kiến trúc và vòng đời hỗ trợ. Với ứng dụng, kiểm tra phiên bản thực sự chạy, không chỉ tên bộ cài đã tải.

Ví dụ giả: máy có hai bản công cụ xem PDF ở hai vị trí. Cập nhật một bản nhưng shortcut vẫn mở bản còn lại khiến rủi ro chưa được xử lý như dự kiến. Phiếu hỗ trợ nên ghi đường dẫn hoặc nguồn quản lý ứng dụng cần thiết cho việc xác minh, tránh thu cả danh sách phần mềm cá nhân không liên quan.

Nguồn chính thức và chữ ký nói được điều gì?

Bắt đầu từ danh mục phần mềm được tổ chức phê duyệt, cửa hàng hoặc kênh phân phối của nhà phát triển đã xác nhận. Đừng dựa vào vị trí quảng cáo trên kết quả tìm kiếm hoặc một liên kết trong chat để kết luận đã đến đúng nguồn. HTTPS bảo vệ kết nối tới tên miền, không tự bảo chứng bộ cài phù hợp với công việc.

Chữ ký hợp lệ giúp kiểm tra dữ liệu theo khóa hoặc chứng thư và chuỗi tin cậy tương ứng. Nó không chứng minh phần mềm không có lỗi, không thu thập dữ liệu ngoài mong đợi hoặc luôn phù hợp với chính sách. Hash cũng cần giá trị tham chiếu từ nguồn được tin; một tệp và checksum cùng bị thay có thể vẫn khớp nhau.

Tài liệu apt-secure mô tả xác thực Release và chuỗi tin cậy của archive; đây không phải kiểm chữ ký riêng từng gói hoặc đánh giá gói không có mã độc. Khi thêm kho bên thứ ba, việc chấp nhận khóa cũng là quyết định tin nhà duy trì kho. Không bỏ xác minh chỉ để hết lỗi cập nhật. Nguồn này là manual upstream, không phải khuyến nghị chuyển máy sang Debian testing.

Apple mô tả Gatekeeper, Developer ID và notarization cho phần mềm Mac. Chúng là các kiểm soát bổ sung, không phải lời hứa không bao giờ có mã độc. Khi gặp cảnh báo nhà phát triển hoặc ứng dụng, kiểm tra nguồn và yêu cầu nghiệp vụ với IT trước; không coi việc vượt cảnh báo là bước cài đặt thông thường.

Kiểm tra nhu cầu, nguồn, điều kiện thay đổi và kết quả thực tế trước khi hoàn tất yêu cầu.
Hình 1. Kiểm tra nhu cầu, nguồn, điều kiện thay đổi và kết quả thực tế trước khi hoàn tất yêu cầu. Mở hình để xem chi tiết.

Ứng dụng di động và quyền truy cập

Cửa hàng có cơ chế rà soát và quản lý vòng đời ứng dụng, nhưng người dùng vẫn cần xem đúng nhà phát triển và quyền được yêu cầu. Một ứng dụng quét tài liệu đòi quyền truy cập không liên quan cần được hỏi lại theo chức năng thực tế, thay vì chấp nhận mọi quyền vì ứng dụng có nhiều lượt tải.

Google Play Protect kiểm tra hành vi có hại, cảnh báo và có thể vô hiệu hóa hoặc gỡ ứng dụng bị phát hiện. Không diễn giải trạng thái chưa phát hiện thành bảo đảm tuyệt đối. Thiết bị do tổ chức quản lý có thể còn chịu chính sách riêng về cửa hàng, nguồn ngoài và quyền cài đặt.

Trên điện thoại công việc, xác nhận nguồn phân phối và người phê duyệt trước khi nhập dữ liệu nghiệp vụ vào ứng dụng mới. Một bản ứng dụng được phân phối nội bộ cũng cần chủ sở hữu, quy trình cập nhật và cách gỡ bỏ khi ngừng dùng. Không tự tắt lớp bảo vệ của nền tảng để cài gói được chuyển tiếp không rõ nguồn.

Cập nhật là một quy trình có xác minh

NIST SP 800-40 Rev.4 mô tả quản lý bản vá gồm xác định, ưu tiên, lấy, cài và xác minh. Đây là hướng dẫn lập kế hoạch năm 2022, không phải thông báo rằng mọi sản phẩm hôm nay đều dùng một lịch vá chung. Mức ưu tiên còn cần bối cảnh rủi ro, khả năng bị ảnh hưởng và yêu cầu vận hành.

Trước thay đổi, ghi phiên bản hiện tại, điều kiện áp dụng, bản sao lưu cần thiết và cách xử lý nếu tác vụ không phục hồi. Firmware hoặc thay đổi khởi động có thể liên quan thông tin khôi phục mã hóa; phối hợp người quản trị trước. Không thử cập nhật hàng loạt trên thiết bị đang phục vụ chỉ vì bản mới vừa xuất hiện.

Sau cài đặt, kiểm tra yêu cầu restart, phiên bản đang chạy và tác vụ người dùng cần làm. Thông báo tải xuống xong hoặc bộ cài báo thành công chưa chứng minh tiến trình cũ đã được thay. Nếu phải quay lại bản trước, cân nhắc rủi ro bảo mật còn lại và phương án giảm thiểu được duyệt; không coi rollback là trạng thái an toàn mặc định.

Hai nhóm lỗi: bộ nhớ và câu lệnh

Tràn bộ đệm xảy ra khi thao tác bộ nhớ vượt vùng được cấp trong bối cảnh chương trình tương ứng. Hậu quả có thể là lỗi ứng dụng, hỏng dữ liệu hoặc ảnh hưởng luồng thực thi; không phải mọi crash đều chứng minh đã bị khai thác. OWASP giải thích cơ chế nền tảng; các ví dụ C/x86 cũ trên trang không phải hướng dẫn triển khai hoặc phép thử của bài này.

Nhóm phát triển cần quản lý giới hạn và an toàn bộ nhớ cùng các lớp bảo vệ phù hợp. Người hỗ trợ nên ghi phiên bản, tác vụ và thông báo lỗi, giảm dữ liệu nhạy cảm trong bản bàn giao. Đừng gửi tài liệu có thể gây lỗi cho đồng nghiệp để nhờ mở thử trên máy làm việc.

SQL injection liên quan việc dữ liệu đầu vào bị diễn giải thành cấu trúc truy vấn ngoài dự kiến. Chặn một số dấu nháy không thay cho cách xây truy vấn đúng. Python sqlite3 hướng dẫn dùng placeholder để truyền giá trị tách khỏi câu lệnh. Kiểm tra kiểu, giới hạn đầu vào và quyền cơ sở dữ liệu vẫn là các phần bổ sung; placeholder cho giá trị không tự biến tên bảng động thành an toàn.

Lab: dấu nháy là dữ liệu hợp lệ

Fixture chỉ có hai dòng dữ liệu giả trong cơ sở dữ liệu bộ nhớ. Không chạy chuỗi thử trên website hoặc cơ sở dữ liệu của tổ chức. Sao chép đoạn sau vào lab33.py trong thư mục thực hành riêng rồi chạy bằng Python 3 có module sqlite3:

import sqlite3

db = sqlite3.connect(':memory:')
db.execute('CREATE TABLE catalog (code TEXT PRIMARY KEY, name TEXT NOT NULL)')
db.executemany('INSERT INTO catalog VALUES (?, ?)', [
    ('DEMO-A', "O'Reilly demo guide"),
    ('DEMO-B', 'Local demo manual'),
])

def lookup(name):
    return db.execute(
        'SELECT code FROM catalog WHERE name = ?', (name,)
    ).fetchall()

print(lookup("O'Reilly demo guide"))
print(lookup('Local demo manual'))
print(lookup("' OR 1=1 --"))
print(db.execute('SELECT COUNT(*) FROM catalog').fetchone())
db.close()

Kết quả mong đợi theo thứ tự:

[('DEMO-A',)]
[('DEMO-B',)]
[]
(2,)

Tên có dấu nháy đơn vẫn tìm đúng bản ghi. Chuỗi trông giống SQL được so như một giá trị, không làm điều kiện truy vấn đổi nghĩa trong fixture này. Hai dòng dữ liệu vẫn tồn tại. Dấu phẩy trong (name,) tạo tuple một phần tử để truyền tham số; quên nó có thể khiến API hiểu đối số khác dự kiến.

Lab bổ sung đã kiểm tra cách nối chuỗi ngây thơ bị lỗi cú pháp với chính tên hợp lệ có dấu nháy. Không cần triển khai một truy vấn dễ lỗi trong ứng dụng thật để học kết luận này. Chúng tôi chưa kiểm thử framework web, quyền truy cập người dùng hoặc mọi dạng SQL injection; thành công của đoạn mã không chứng minh toàn ứng dụng đã an toàn.

Placeholder truyền giá trị riêng với câu lệnh; fixture kiểm tra dữ liệu có dấu nháy và chuỗi giống SQL.
Hình 2. Placeholder truyền giá trị riêng với câu lệnh; fixture kiểm tra dữ liệu có dấu nháy và chuỗi giống SQL. Mở hình để xem chi tiết.

Tường lửa bổ sung cho ứng dụng, không sửa mã thay nó

Bộ lọc gói xét các thuộc tính như IP, giao thức và cổng. Tường lửa trên endpoint có thể kết hợp quy tắc theo ứng dụng hoặc dịch vụ tùy sản phẩm. Không coi “endpoint” tự động đồng nghĩa luôn kiểm tra toàn bộ nội dung hoặc luôn chặn mọi kết nối ra ngoài.

Windows Firewall có profile và quy tắc; hành vi mặc định là chặn kết nối vào ngoài ngoại lệ phù hợp, cho kết nối ra nếu không khớp quy tắc chặn. Vì vậy, thấy tường lửa bật chưa đủ kết luận một ứng dụng không thể gửi dữ liệu. Khi xử lý lỗi kết nối, cần đúng ứng dụng, hướng, cổng, profile và bằng chứng, không tắt toàn bộ tường lửa.

WAF bảo vệ các tài nguyên web trong phạm vi nó xử lý. AWS WAF là ví dụ kiểm tra yêu cầu HTTP/HTTPS theo quy tắc; có chế độ đếm để quan sát trước khi chặn. WAF không tự sửa truy vấn SQL trong mã nguồn, không bảo vệ mọi đường truy cập ngoài phạm vi triển khai và cần đánh giá báo nhầm. Bài này không tạo quy tắc hoặc thử dịch vụ cloud.

Kiểm soát quyền tiến trình như SELinux/AppArmor cũng khác với lọc gói. Hãy xác định lớp nào đang đưa ra quyết định trước khi thay cấu hình. Các cơ chế bổ sung nhau nhưng không tạo bảo đảm rằng ứng dụng hợp lệ sẽ không bao giờ có hành vi ngoài mong đợi.

Tự kiểm tra và tiêu chí đóng yêu cầu

  1. Bộ cài có chữ ký hợp lệ đã đủ để duyệt cài chưa? Chưa, cần nguồn, chủ thể ký, nhu cầu, quyền và chính sách phù hợp.
  2. Bản vá tải xong đã đóng ticket được chưa? Chưa, cần kiểm tra cài đặt, restart nếu yêu cầu và tác vụ thực tế.
  3. Placeholder có thay thế mọi kiểm soát ứng dụng không? Không; lab chỉ kiểm tra truyền giá trị vào một truy vấn cố định.
  4. Tường lửa bật mà ứng dụng vẫn gửi dữ liệu có chắc là lỗi tường lửa? Không, phải đối chiếu quy tắc và hướng lưu lượng đang áp dụng.

Khi bàn giao, gửi dữ kiện đủ để người phụ trách xác minh: phiên bản thực chạy, nguồn phân phối, triệu chứng và kết quả kiểm tra ít tác động. Giữ bí mật, token và nội dung nghiệp vụ ngoài bản ghi hỗ trợ thông thường.

Bài liên quan trong bộ LPI

Tìm hiểu thêm