Software Testing - Security Testing


1. Security Testing và bối cảnh của bảo mật phần mềm

Trong môi trường số hiện nay, phần mềm không còn hoạt động trong phạm vi khép kín. Các hệ thống thường:

  • kết nối Internet,
  • chia sẻ dữ liệu,
  • lưu trữ thông tin người dùng,
  • và tương tác với nhiều dịch vụ khác nhau.

Điều này giúp hệ thống mạnh hơn nhưng đồng thời cũng mở ra rất nhiều rủi ro. Một lỗ hổng nhỏ có thể dẫn đến:

  • mất dữ liệu,
  • mất quyền kiểm soát hệ thống,
  • rò rỉ thông tin người dùng,
  • hoặc thậm chí làm toàn bộ dịch vụ ngừng hoạt động.

Chính vì vậy, Security Testing trở thành một phần quan trọng trong chiến lược kiểm thử hiện đại. Mục tiêu của kỹ thuật này không phải chỉ để “tìm bug”, mà để đánh giá khả năng hệ thống chống lại các hành vi tấn công trong thực tế.

2. Security Testing là gì?

Security Testing là quá trình kiểm thử nhằm xác định:

  • hệ thống có bảo vệ dữ liệu đúng cách không,
  • người dùng có bị vượt quyền hay không,
  • và liệu hệ thống có tồn tại lỗ hổng bảo mật nào có thể bị khai thác hay không.

Khác với nhiều kỹ thuật kiểm thử khác, Security Testing thường yêu cầu tester suy nghĩ theo hướng:

  • “Nếu mình là hacker thì mình sẽ tấn công thế nào?”
  • “Nếu dữ liệu đầu vào bị sửa đổi thì chuyện gì xảy ra?”
  • “Nếu người dùng cố truy cập trái phép thì hệ thống phản ứng ra sao?”

Nói cách khác, Security Testing là quá trình chủ động tìm điểm yếu trước khi kẻ xấu tìm thấy chúng.

3. Mục tiêu của Security Testing

Về bản chất, Security Testing hướng đến việc bảo vệ ba yếu tố quan trọng nhất của hệ thống:

  • Confidentiality (Tính bí mật)
    Đảm bảo dữ liệu chỉ được truy cập bởi người có quyền.
  • Integrity (Tính toàn vẹn)
    Đảm bảo dữ liệu không bị thay đổi trái phép.
  • Availability (Tính sẵn sàng)
    Đảm bảo hệ thống vẫn hoạt động khi cần thiết.

Ba yếu tố này thường được gọi là mô hình CIA trong bảo mật phần mềm.

Thông qua Security Testing, nhóm phát triển có thể:

  • phát hiện lỗ hổng trước khi triển khai,
  • giảm nguy cơ bị tấn công,
  • và nâng cao độ tin cậy của hệ thống.

4. Thời điểm thực hiện Security Testing

Security Testing không phải hoạt động chỉ làm ở cuối dự án. Trong thực tế, bảo mật cần được xem xét xuyên suốt vòng đời phát triển phần mềm. Tuy nhiên, việc kiểm thử bảo mật thường được tăng cường mạnh ở các giai đoạn:

  • System Testing,
  • Integration Testing,
  • hoặc trước khi phát hành sản phẩm.

Đặc biệt với:

  • hệ thống ngân hàng,
  • thương mại điện tử,
  • hệ thống quản lý dữ liệu cá nhân,

Security Testing gần như là yêu cầu bắt buộc trước khi triển khai.

5. Các nội dung thường được kiểm tra trong Security Testing

Khi thực hiện Security Testing, tester thường tập trung vào nhiều khía cạnh khác nhau của hệ thống. Một số nội dung phổ biến bao gồm:

  • Authentication Testing
    Kiểm tra cơ chế xác thực người dùng:
    • đăng nhập,
    • mật khẩu,
    • xác minh tài khoản.
  • Authorization Testing
    Kiểm tra phân quyền:
    • người dùng có thể truy cập vượt quyền hay không,
    • có thể xem dữ liệu của người khác không.
  • Data Protection Testing
    Kiểm tra việc bảo vệ dữ liệu:
    • dữ liệu có được mã hóa không,
    • thông tin nhạy cảm có bị lộ không.
  • Session Management Testing
    Kiểm tra quản lý phiên làm việc:
    • session có bị chiếm đoạt không,
    • logout có thực sự kết thúc phiên không.
  • Input Validation Testing
    Kiểm tra dữ liệu đầu vào:
    • hệ thống có chống được dữ liệu bất thường hay không.

Những nội dung này tạo thành nền tảng của hầu hết các hoạt động kiểm thử bảo mật.

6. Các lỗ hổng bảo mật phổ biến

Một phần quan trọng của Security Testing là nhận diện các lỗ hổng thường gặp trong thực tế. Một số dạng phổ biến gồm:

SQL Injection

Kẻ tấn công chèn câu lệnh SQL độc hại vào dữ liệu đầu vào nhằm truy cập hoặc thay đổi cơ sở dữ liệu.

Cross-Site Scripting (XSS)

Kẻ tấn công chèn mã JavaScript độc hại vào trang web để đánh cắp thông tin người dùng.

Broken Authentication

Hệ thống xác thực yếu, cho phép:

  • đoán mật khẩu,
  • đánh cắp session,
  • hoặc đăng nhập trái phép.

Sensitive Data Exposure

Thông tin nhạy cảm như:

  • mật khẩu,
  • token,
  • dữ liệu cá nhân
    bị lưu hoặc truyền không an toàn.

Security Misconfiguration

Cấu hình hệ thống sai, ví dụ:

  • mở cổng không cần thiết,
  • dùng mật khẩu mặc định,
  • bật chế độ debug trong production.

Những lỗ hổng này xuất hiện rất nhiều trong các hệ thống thực tế và thường là nguyên nhân của các vụ tấn công lớn.

7. Cách tiếp cận trong Security Testing

Không giống kiểm thử chức năng, Security Testing yêu cầu tester phải có tư duy “phá hệ thống”. Điều này có nghĩa tester không chỉ làm theo các luồng sử dụng hợp lệ, mà còn thử:

  • nhập dữ liệu bất thường,
  • vượt quyền truy cập,
  • sửa request gửi lên server,
  • hoặc thực hiện các hành vi mà người dùng bình thường không làm.

Một số cách tiếp cận phổ biến bao gồm:

  • kiểm thử thủ công,
  • sử dụng công cụ quét lỗ hổng,
  • penetration testing,
  • fuzz testing.

Trong nhiều trường hợp, việc kết hợp giữa tư duy con người và công cụ tự động mang lại hiệu quả cao nhất.

8. Security Testing và yếu tố con người

Một điểm thú vị là rất nhiều sự cố bảo mật không xuất phát hoàn toàn từ công nghệ, mà từ con người:

  • dùng mật khẩu yếu,
  • chia sẻ tài khoản,
  • cấu hình sai hệ thống,
  • hoặc vô tình để lộ dữ liệu.

Do đó, Security Testing không chỉ là kiểm thử phần mềm, mà còn liên quan đến:

  • quy trình vận hành,
  • chính sách bảo mật,
  • và nhận thức của người dùng.

9. Tổng kết phần Security Testing

Security Testing giúp đảm bảo rằng hệ thống không chỉ hoạt động đúng mà còn có khả năng chống chịu trước các nguy cơ tấn công và truy cập trái phép. Trong bối cảnh các hệ thống ngày càng kết nối rộng rãi và phụ thuộc vào dữ liệu, kiểm thử bảo mật trở thành một phần không thể thiếu trong phát triển phần mềm hiện đại.

Nếu Usability Testing giúp phần mềm “thân thiện” hơn với người dùng, thì Security Testing giúp phần mềm “cứng cáp” hơn trước các mối đe dọa từ bên ngoài.

Tổng kết bài học

Usability Testing và Security Testing đại diện cho hai góc nhìn rất khác nhau trong kiểm thử phần mềm:

  • Usability Testing tập trung vào trải nghiệm và khả năng sử dụng của người dùng cuối.
  • Security Testing tập trung vào việc bảo vệ hệ thống trước các nguy cơ và hành vi tấn công.

Một phần mềm chất lượng không chỉ cần đúng chức năng, mà còn phải:

  • dễ sử dụng,
  • đáng tin cậy,
  • và đủ an toàn trong môi trường thực tế.