[QA-QC] Security Testing

Định nghĩa

  • Kiểm thử bảo mật để tìm ra các lỗ hổng của hệ thống và xác định rằng dữ liệu và tài nguyên được bảo vệ từ các yếu tố có thể bị xâm nhập

  • Có 2 khía cạnh chính trong bảo mật là:

    • Bảo vệ dữ liệu ko bị mất

    • Quyền truy cập các dữ liệu trên

Các loại kiểm thử bảo mật

  • Vulnerability Scanning (Quét lỗ hổng)

    • Việc này được thực hiện thông qua phần mềm tự động để quét 1 hệ thống chống lại các lỗ hổng chữ ký đã biết

  • Security Scanning (Quét bảo mật)

    • Việc này liên quan đến việc xác định nhược điểm của mạng và hệ thống

    • Việc này có thể được thực hiện thủ công hoặc tự động

  • Penetration Testing (Kiểm tra thâm nhập)

    • Loại này liên quan đến sự phân tích một hệ thống cụ thể để kiểm tra các lỗ hổng tiềm ẩn đối với nỗ lực hack từ bên ngoài

  • Risk Assessment (Phân tích rủi ro)

    • Loại này liên quan đếm sự phân tích bảo mật các rủi ro đã quan sát được, các rủi ro này sẽ được phân mức độ: Thấp, Trung bình, Cao

    • Loại kiểm thử này đề nghị các kiểm soát và các biện pháp để xử lý/giảm rủi ro

  • Security Auditing (Kiểm tra bảo mật)

    • Loại kiểm thử là kiểm tra nội bộ về lỗi bảo mật; có thể kiểm tra từng dòng code

  • Posture Assessment (Đánh giá thế trận)

    • Kết hợp với loại Quét bảo mật (Security Scanning), Ethical hacking và Risk Assessment để hiển thị 1 thế trận an ninh tổng thể của tổ chức

  • Ethical hacking (Hack đạo đức)

    • Hack hệ thống phần mềm của tổ chức

    • Mục đích là tìm tất cả các lỗ hổng bảo mật để fix

Security testing trong SDLC

SDLC Phases

Security Processes

SDLC Phases

Security Processes

Requirements

Phân tích bảo mật cho các yêu cầu và kiểm tra các trường hợp bị lạm dụng

Dessign

Phân tích các rủi ro bảo mật của thiết kế.

Lập test plan (bao gồm cả security test)

Coding & Unit Testing

Thực hiện Unit test và kiểm thử bảo mật hộp trắng

Integration Testing

Test hộp đen

System Testing

Test hộp đen kết hợp với Vulnerability Scanning

Implementation/ Acceptance Testing

Penetration Testing, Vulnerability Scanning

Support

Phân tích tác động của các bản vá lỗi

Test Plan nên bao gồm:

  • TC hoặc Kịch bản kiểm thử liên quan đến bảo mật

    • Ví dụ:

      • Mật khẩu phải hiển thị dưới dạng mã hóa

      • Check cookies, session time

      • Với các site liên quan đến tài chính thì back browser không hoạt động

  • Dữ liệu test liên quan đến test bảo mật

    • Ví dụ: Không cho phép truy cập nếu user không hợp lệ

  • Công cụ kiểm tra để test bảo mật

    • Ví dụ: Các công cụ test như: Intruder

  • Phân tích các đầu ra từ các công cụ test khác nhau

Các phương pháp kiểm thử bảo mật

  • Tiger box

    •  Việc hack này thường được thực hiện trên máy tính xách tay có cái đặt các HĐH và công cụ hack. phương pháp này giúp penetration tester và security tester tiến hành đánh giá và tấn công lỗ hổng để phát hiện và ngăn chặn kịp thời

    • Ví dụ: Nikto, AppScan, WebScarab, Wa3f…

  • Black Box

    • Tester được ủy quyền để thử nghiệm mọi thứ về cấu trúc liên kết mạng và công nghệ

    • Là việc kiểm tra khả năng bảo mật của ứng dụng từ bên ngoài. Quan sát các dữ liệu được gửi đến ứng dụng và các dữ liệu từ ứng dụng xuất ra mà không cần hiểu đến hoạt động bên trong của nó

  • Grey Box

    • Thông tin một phần được cung cấp cho người kiểm tra về hệ thống và nó là sự kết hợp của các mô hình hộp trắng và đen.

  • White box: là quá trình kiểm tra trực tiếp mã nguồn của ứng dụng web để tìm ra các lỗi bảo mật.

Các lỗ hổng bảo mật thường gặp

  1. Missing function level access control (lỗi phân quyền)

    • Với lỗ hổng này, tester cần test xem tất cả các phân quyền đã được thực hiện đúng. Đưa ra 2 câu hỏi để thực hiện test:

      • Authentication: Gồm những roles nào? (who you are?)

      • Authorization: Các hành động mà role được thực hiện (What you can do?)

    • Ngoài 2 ý trên, thì lỗ hổng này cũng bao gồm:

      • Authentication

        • Test rule password

        • Test Default login

        • Test password recovery

        • Test capcha

        • Test Logout

        • Test Change password

        • Test security question/answer

      • Authorization

        • Test case kiểm soát truy cập dọc và truy cập ngang, trong đó:

          • Truy cập ngang là cơ chế ngăn chặn truy cập vào tài nguyên không được cho phép

            • Ví dụ: chỉ xem được những doc do mình tạo, sửa thông trên đường link để truy cập của người khác (1 số thông tin có thể đổi như: ID)

          • Truy cập dọc là cơ chế quản lý truy cập tới các chức năng (nhóm người dùng khác nhau thì chức năng sẽ khác nhau)

            • Ví dụ: Truy cập đường link không thuộc phân quyền

        • Test các case mà acc không có phân quyền

        • Test các case quản lý truy cập dựa vào trạng thái của đối tượng tương tác

          • Ví dụ: Đơn hàng đã hủy chỉ “Admin” mới được đưa về Đơn chờ duyệt

  2. Data Protection (Rò rỉ dữ liệu)

    • Khía cạnh trong Data Protection

      • User truy cập đúng các tài nguyên mà họ được phép truy cập (như truy cập trên ngang ở loại Lỗi phân quyền)

      • Dữ liệu dưới DB được lưu trữ như thế nào? Các thông tin quan trọng có được mã hóa không?

        • Mật khẩu, Tài khoản ngân hàng… có được mã hóa?

        • Tấn công bằng SQL Injection có xảy ra vấn đề gì không?

        • Các thay đổi về dữ liệu có được lưu vết (audit log)?

        • Bản backup dữ liệu có bị lộ? => Mã hóa và kiểm tra dữ liệu của production, sao lưu dữ liệu để bảo mật dữ liệu

        • Cấu hình DB có đúng không? => Chú ý việc cài đặt tài khoản giống như tài khoản mặc định

        • Tấn công bằng DoS xảy ra vấn đề gì?

        • => Tester cần thực hiện test ở các tầng: Business Layer, Access layer, UI layer

        • Các kỹ thuật kiểm tra bảo mật DB

          • Penetration Testing (Kiểm tra xâm nhập)

            • Dựa vào các lỗ hổng tìm được để tấn công → Dữ liệu có bị mất hay thay đổi?

          • Risk Assessment (Đánh giá rủi ro)

            • Đánh giá và phân tích các rủi ro liên quan đến kiểu cấu hình bảo mật dữ liệu được triển khai → Chuyên gia thực hiện các đánh giá này

          • SQL Injection Validation

            • Sử dụng các câu lệnh SQL để kiểm tra sự toàn vẹn của dữ liệu

          • Password Cracking

            • Kiểm tra các chính sách validate mật khẩu

          • Security Audit

            • Chính sách thực hiện bảo mật dữ liệu

      • Áp dụng các biện pháp bảo mật thích hợp: mã hóa pass khi lưu, các chính sách đặt pass, …

    • Tester cần thực hiện:

      • Query các thông tin đã được mã hóa dưới DB xem hiển thị như thế nào (Ví dụ: query Mật khẩu, Số tài khoản, …)

      • Verify dữ liệu đã được transmitted chưa?

        • Ví dụ: copy mật khẩu của ứng dụng, mở ứng dụng trên trình duyệt khác và copy xem có thể login thành công hay không

        • Verify nếu thêm các ký tự space vào đầu/cuối password

      • Sử dụng các kỹ thuật để tìm lỗ hổng

  3. Brute Force Attack

    • Kỹ thuật tấn công sử dụng phần mềm để crack mật khẩu nếu mật khẩu không đủ mạnh bằng cách xoay vòng các ký tự kết hợp với nhau để tạo ra được 1 mật khẩu đúng

    • Tester cần thực hiện:

      • Check cơ chế tạm ngưng tài khoản khi nhập sai quá x lần

      • Để test loại này, bạn có thể sử dụng tool auto test, random password có thể nhập

  4. SQL Injection and XSS (Cross Site Scripting)

    • XSS: Kỹ thuật tấn công vào các trường dạng input, sử dụng các thẻ như: HTML, script để lấy được cookies của người dùng

    • SQL Injection: Kỹ thuật tấn công vào các trường dạng input, sử dụng các câu lệnh SQL để Thêm/Sửa/Xóa dữ liệu

    • Tester cần thực hiện:

      • Check maxlength all input field, đảm bảo max length được validate với mọi loại định dạng nhập vào (bao gồm html và script)

      • Nhập các thẻ HTML, các đoạn script, câu lệnh SQL → kiểm tra dữ liệu được submit và hiển thị

  5. Service Access Points (Sealed And Secure Open)

    • Lỗ hổng khi cần truy cập vào dữ liệu 1 cách tự do và có thể có nhiều người truy cập ở nhiều nơi

      • Lỗ hổng khi không giới hạn mạng truy cập (inter network và intra network)

    • Tester cần test sự truy cập với mạng nội bộ và mạng public (dựa vào IPs)

      • Với ứng dụng chỉ cho phép truy cập mạng nội bộ:

        • Check truy cập từ mạng ngoài → Đảm bảo ứng dụng chỉ cho phép truy cập trong dải IPs an toàn

      • Với ứng dụng mở

        • Check giới hạn file, loại file và kiểm tra khi upload dữ liệu

  6. Session Management/Broken Authentication

    • Lỗ hổng này dựa vào quá trình xác thực, định danh người dùng để tấn công nhằm lấy được các thông tin như: Session ID để mạo danh và truy cập trái phép

      • Lợi dụng việc server không thay đổi giá trị của Session ID mỗi khi người dùng đăng nhập

    • Tester cần thực hiện:

      • Check thời gian chờ tối đa trong 1 phiên làm việc

      • Check Session ID có được thay đổi khi logout và login lại không

7. Security Misconfiguration (Sai sót cấu hình an ninh)

  • Lỗ hổng điển hình:

    • Error handling: Lỗi lập trình

    • Insecure Configuration Management: Cấu hình không an toàn

  • Tester cần thực hiện:

    • Check error code: xác định các error code được trả về

    • Check stacktrace: Check các dấu vết ngăn xếp (ví dụ: các Lỗi error server trên con CRM hiện tại, detail bug chính là các dấu vết ngăn xếp)

8. Specific Risky Functionalities

  • 2 rủi ro thường gặp nhất là liên quan đến: paymentsfile uploads

  • Tester cần thực hiện:

    • Đối với rủi ro liên quan đến payment thì cần thực hiện các kiểm tra:

      • Injection

      • Mã hóa dữ liệu: Password, số tài khoản,…

      • Buffer overflows: tràn bộ đệm bằng cách kiểm tra các giá trị biên giá trị của bộ nhớ đệm

Các kỹ thuật tấn công

  • Tấn công Web-Servers

    • SQL Injection

      • SQL Injection dựa vào các câu lệnh luôn đùng sau để truy vấn thông tin trong DB, ví dụ:

        • Dựa vào “1=1 luôn đúng”: câu lệnh SQL khi sử dụng loại này như: SELECT * FROM users WHERE userID = 123 OR 1 = 1; (Nhập giá trị userID = 123 OR 1 = 1)

        • Dựa vào “=” luôn đúng: câu lệnh SQL khi sử dụng loại này: SELECT * FROM users WHERE userName =” or “”=” AND userPass =” or “”=” (=> Nhập Username =”OR””=”, Pass = ”OR””=”)

        • Dựa vào Batched SQL Statement: câu lệnh SQL sử dụng: SELECT * FROM users WHERE userID = 105; DROP TABLE Users; (Nhập giá trị = 105;DROP TABLE users)

    • Cross Site Scripting (XSS)

      • Tấn công XSS là lợi dụng việc ứng dụng lấy dữ liệu không tin cậy và gửi tới browser mà không được xác nhận, kiểm tra, giả sử thay các tham số có trên đường link truy cập

    • Code Injecttion

    • Session Hijacking

    • Directory Traversal

  • Tấn công Networks

    • Man in the Miđle Attack

    • Spoofing

    • Firewall Traversal

    • WLAN

    • ARP Poisoining

  • Tấn công Services

    • Buffer Overflows

    • Foramt Strings

    • Dos

    • Authentication flaws