Hướng dẫn test thâm nhập (Penetration Testing) hoàn chỉnh với ví dụ cơ bản
Bài đăng này đã không được cập nhật trong 5 năm
Penetration Testing là gì?
Penetration Testing là quy trình xác định các lổ hổng bảo mật trong một ứng dụng bằng việc đánh giá hệ thống hoặc network với các kỹ thuật độc hại khác nhau. Những điểm yếu của hệ thống được khai thác trong quá trình này thông qua một cuộc tấn công mô phỏng bản quyền.
Mục đích của việc test này là để đảm bảo các dữ liệu quan trọng khỏi người ngoài, ví dụ như hacker - người có thể truy cập trái phép vào hệ thống. Khi một lỗ hổng được xác định, nó được sử dụng để khai thác hệ thống, từ đó có thể truy cập vào những thông tin nhạy cảm.
Một penetration test còn được gọi là pen testing, và một penetration tester được giới thiệu như một hacker có đạo đức.
Chúng ta có thể tìm ra những lỗ hổng của một hệ thống máy tính, một ứng dụng web, hoặc một network thông qua penetration testing.
Một penetration test chỉ ra rằng các biện pháp bảo mật hiện có trong hệ thống có đủ mạnh để phòng ngừa bất kỳ vi phạm an ninh nào hay không. Penetration test report cũng đề xuất các biện pháp đối phó có thể làm giảm rủi ro hệ thống bị hack.
Nguyên nhân của những lỗ hổng
- Lỗi thiết kế và phát triển: Có những sai sót trong việc thiết kế phần cứng và phần mềm. Những bug này có thể khiến những dữ liệu kinh doanh quan trọng của bạn có rủi ro bị lộ.
- Cấu hình hệ thống nghèo nàn: Nó là một nguyên nhân khác của lỗ hổng. Nếu hệ thống có cấu hình nghèo nàn, lạc hậu, nó có thể có những sơ hở mà kẻ tấn công sẽ dựa vào đó để thâm nhập vào hệ thống và lấy trộm thông tin.
- Lỗi con người: Nhân tố con người như xử lý tài liệu không đúng cách, để lại các tài liệu không giám sát, code lỗi, các mối đe dọa từ người trong cuộc, chia sẻ mật khẩu trên các trang web lừa đảo, ... có thể dẫn đến vi phạm an ninh.
- Kết nối: Nếu hệ thống được kết nối với mạng không được bảo mật (kết nối mở) thì nó sẽ nằm trong tầm tay của hacker.
- Độ phức tạp: Lỗ hổng bảo mật tăng lên trong một phần mềm phức tạp. Càng nhiều tính năng, càng có nhiều nguy cơ hệ thống bị tấn công.
- Password: Password được sử dụng để ngăn chặn việc truy cập bất hợp pháp. Chúng phải đủ mạnh để không ai có thể đoán được. Password không được chia sẻ với bất kỳ ai bằng bất cứ giá nào, và nên được thay đổi định kỳ. Mặc dù đã có hướng dẫn, nhiều lúc có người vẫn tiết lộ password với người khác, viết chúng lên đâu đó và thiết lập mật khẩu dễ dàng đoán được.
- User Input: Bạn hẳn đã nghe về SQL Injection, buffer overflows, ... Dữ liệu nhận về qua các phương thức này có thể được sử dụng để tấn công hệ thống tiếp nhận.
- Quản lý: Bảo mật rất khó và đắt để quản lý. Thỉnh thoảng các tổ chức thiếu quản lý rủi ro và do đó xuất hiện lỗ hổng trong hệ thống.
- Thiếu training nhân viên: Điều này dẫn tới lỗi con người và những lỗ hổng khác
- Giao tiếp: Các kênh như mạng di động, internet, điện thoại mở ra phạm vi trộm cắp an ninh.
Tại sao cần Penetration Testing?
Bạn hẳn đã nghe về cuộc tấn công WannaCry ransomware tháng 5/2017. Nó đã khóa hơn 2 lakh máy tính (tương đương với 200.000 máy tính) trên toàn thế giới và yêu cầu thanh toán tiền chuộc bằng tiền điện tử Bitcoin. Cuộc tấn công này có ảnh hưởng đến nhiều tổ chức lớn trên toàn cầu.
Với các cuộc tấn công mạng lớn và nguy hiểm như vậy, việc test thâm nhập là điều không thể tránh khỏi để bảo vệ hệ thống thông tin khỏi vi phạm an ninh.
Vì vậy, Penetration Testing chủ yếu cần thiết để:
- Bảo mật dữ liệu tài chính và quan trọng trong quán trình chuyển giao giữa các hệ thống hoặc các mạng khác nhau.
- Nhiều client yêu cầu pen testing như một phần của chu kỳ release phần mềm.
- Bảo mật dữ liệu người dùng
- Để tìm kiếm những lỗ hổng trong một ứng dụng.
- Phát hiện sơ hở trong hệ thống.
- Đánh giá mức độ ảnh hưởng kinh doanh của cuộc tấn công thành công.
- Để đáp ứng việc tuân thủ bảo mật thông tin trong tổ chức.
- Để thực hiện chiến lược bảo mật hiệu quả trong tổ chức.
Các tổ chức cần xác định các vấn đề bảo mật hiện tại trong mạng nội bộ và máy tính. Sử dụng những thông tin này, tổ chức có thể lên kế hoạch phòng thủ chống lại mọi nỗ lực hack. Quyền riêng tư người dùng và bảo mật dữ liệu là mối quan tâm lớn nhất ngày nay. Thử tưởng tượng nếu bất kỳ hacker nào quản lý để lấy được chi tiết người dùng của mạng xã hội, ví dụ như Facebook. Thì tổ chức có thể phải đối mặt với các vấn đề về pháp lý do một kẽ hở nhỏ trong phần mềm. Vì vậy, các tổ chức lớn đang tìm kiếm các chứng nhận tuân thủ PCI (Payment Card Industry) trước khi thực hiện kinh doanh với bên thứ ba.
Cần test những gì?
- Phần mềm (Hệ điều hành, dịch vụ, ứng dụng)
- Phần cứng
- Mạng
- Quy trình
- Hành vi người dùng cuối
Các công cụ Penetration Testing và các công ty
Các công cụ tự động có thể sử dụng để xác định một số lỗ hổng chuẩn hiện nay trong ứng dụng. Công cụ quét mã Pentest để kiểm tra nếu có mã độc có thể dẫn đến vi phạm an ninh tiềm năng. Pentest tool có thể xác định những sơ hở bảo mật hiện nay trong hệ thống bằng kỹ thuật kiểm tra mã hóa dữ liệu và tìm ra các dữ liệu được hard-code, ví dụ như username và password.
Tiêu chí để lựa chọn công cụ test thâm nhập tốt nhất:
- Dễ dàng deploy, cấu hình và sử dụng
- Quét hệ thống dễ dàng
- Nó sẽ phân loại lỗ hổng dựa theo mức độ nghiêm trọng cần fix ngay lập tức
- Có khả năng tự động xác minh các lỗ hổng
- Nó sẽ xác minh lại lỗi đã tìm thấy trước đó
- Nó sẽ tạo ra các report và log lỗ hổng chi tiết
Khi bạn biết những gì cần thực hiện, bạn có thể đào tạo nguồn nhân lực nội bộ hoặc thuê chuyên gia tư vấn để thực hiện các task penetration cho bạn.
Công cụ test thâm nhập được đề xuất:
1. Acunetix
Acunetix WVS cung cấp cho các chuyên gia bảo mật và kỹ sư phần mềm một loạt các tính năng tuyệt đẹp một cách dễ dàng, minh bạch và mạnh mẽ.
=> Thử nghiệm công cụ này tại đây
Các công ty test thâm nhập được đề xuất:
1. ScienceSoft
ScienceSoft là một công ty phát triển phần mềm và tư vấn IT được công nhận với những lợi ích cốt lõi trong các dịch vụ an ninh mạng. Công ty có 16 năm kinh nghiệm trong việc tiến hành test thâm nhập black box, white box và grey box của tất cả các thành phần của cơ sở hạ tầng có quy mô và độ phức tạp khác nhau.
Bạn có thể liên hệ với nhóm chuyên gia của các hacker đạo đức được chứng nhận của ScienceSoft để nhận được hỗ trợ với bất kỳ thông tin hoặc mối quan tâm nào liên quan đến bảo mật.
=> Ghé thăm ScienceSoft website
2. ImmuniWeb®
ImmuniWeb® là một công ty test thâm nhập có trụ sở tại Geneva, Switzerland. Nền tảng thử nghiệm thâm nhập ứng dụng hỗ trợ DevSecOps của nó kết hợp con người với trí tuệ nhân tạo và đi kèm với không false-positive (lỗi sai xác thực) SLA, phát hiện lỗ hổng cao nhất và báo cáo hành động.
ImmuniWeb cung cấp test thâm nhập ứng dụng toàn diện cho các ứng dụng web nội bộ và bên ngoài, ứng dụng mobile, API và web service, mail server, thiết bị IoT, và nhiều thứ khác.
Những đặc điểm chính:
- Liên tục phát hiện code mới
- Kiểm tra thủ công nhanh chóng và hiệu quả
- Khả năng vá ảo chỉ bằng một cú click chuột
- Truy cập 24/7 để phân tích bảo mật
- Tích hợp DevSecOps và CI/CD
- Đặt hàng ngay lập tức và giao hàng nhanh chóng
- Bảng điều khiển đa năng
=> Ghé thăm ImmuniWeb® Official Website
Các công cụ miễn phí khác:
- Nmap
- Nessus
- Metasploit
- Wireshark
- OpenSSL
Các dịch vụ thương mại:
- Pure Hacking
- Torrid Networks
- SecPoint
- Veracode
Các loại test thâm nhập
1. Social engineering test
Trong loại test này, những nỗ lực đang được thực hiện sẽ làm cho một người tiết lộ thông tin nhạy cảm như password, dữ liệu kinh doanh quan trọng, ... Các test hầu hết được thực hiện thông qua điện thoại, hoặc internet và mục tiêu của nó là các bộ phận hỗ trợ, nhân viên và quy trình.
Lỗi con người là nguyên nhân chính dẫn đến lỗ hổng bảo mật. Các tiêu chuẩn và chính sách bảo mật cần được theo dõi bởi tất cả các nhân viên, nhằm tránh những nỗ lực thâm nhập social engineering. Ví dụ về các tiêu chuẩn: không đề cập đến các thông tin nhạy cảm trong email hoặc trao đổi qua điện thoại. Các audit bảo mật có thể tiến hành để xác định và sửa lỗi sai quy trình.
2. Test ứng dụng web
Sử dụng các phương thức phần mềm, người ta có thể xác nhận rằng ứng dụng có lỗ hổng bảo mật hay không. Nó kiểm tra lỗ hổng bảo mật của web app và chương trình phần mềm được định vị trong môi trường đích.
3. Test thâm nhập vật lý
Các phương thức bảo mật vật lý mạnh được áp dụng để bảo vệ các dữ liệu nhạy cảm. Nó thường được sử dụng trong cơ sở quân sự và chính phủ. Tất cả các thiết bị mạng và các điểm truy cập vật lý đều được kiểm tra vi phạm an ninh. Loại test này không liên quan nhiều đến phạm vi kiểm thử phần mềm.
4. Test dịch vụ mạng
Đây là một trong những loại test thâm nhập phổ biến nhất nơi các lỗ hổng trong mạng được xác định bởi các trường nhập trong hệ thống trên mạng, để check xem có lỗ hổng nào ở đó. Nó có thể thực hiện local hoặc từ xa.
5. Test phía khách hàng
Loại test này nhằm mục đích tìm kiếm và khai thác những lỗ hổng trong chương trình phần mềm phía khách hàng.
6. Quay số từ xa
Loại test này tìm kiếm các modem trong môi trường và cố gắng login vào hệ thống kết nối với những modem này bằng cách đoán password hoặc brute-forcing.
7. Test bảo mật wireless
Nó phát hiện ra các điểm truy cập hoặc mạng Wi-Fi mở, trái phép và ít bảo mật hơn và kết nối thông qua chúng.
Phía trên là 7 loại pen test. Chúng ta có thể tổ chức các loại test thâm nhập trong 3 phần như sơ đồ dưới đây:
Hãy cùng thảo luận về từng phương pháp test:
- Back Box Penetration Testing: Với phương pháp này, tester đánh giá hệ thống, network, quy trình đích mà không biết chi tiết của nó. Họ chỉ có những input ở mức level rất cao như URL, hoặc tên công ty và sử dụng chúng để thâm nhập vào môi trường đích. Không kiểm tra code với phương thức này.
- White Box Penetration Testing: Với phương pháp này, tester được trang bị đầy đủ chi tiết về môi trường đích - Hệ thống, network, OS, IP address, source code, schema, ... Kiểm tra code và tìm lỗi của việc thiết kế và phát triển. Nó là một mô phỏng của cuộc tấn công an ninh nội bộ.
- Grey Box Penetration Testing: Với phương pháp này, tester biết biết về chi tiết của môi trường đích một cách hạn chế. Nó là mô phỏng của cuộc tấn công an ninh từ bên ngoài.
Các kỹ thuật Test thâm nhập:
- Test thâm nhập thủ công
- Sử dụng công cụ test thâm nhập tự động
- Kết hợp cả test thủ công và test tự động
Phương pháp thứ 3 là phổ biến hơn để xác định tất cả các loại lỗ hổng.
Test thâm nhập thủ công
Thật khó để tìm thấy tất cả các lỗ hổng bằng các công cụ tự động. Có những lỗ hổng chỉ có thể tìm thấy bằng test thủ công. Tester test thâm nhập thực hiện các cuộc tấn công tốt nhất trên ứng dụng dựa vào kỹ năng và kinh nghiệm về hệ thống được test thâm nhập. Và các phương thức như social engineering chỉ có thể thực hiện bởi con người.
Kiểm tra thủ công bao gồm: design, logic kinh doanh cũng như xác minh code.
Quy trình test thâm nhập:
Xác định những lỗ hổng hiện tại trong hệ thống là bước quan trọng đầu tiên của quy trình này. Hành động khắc phục được thực hiện với những lỗ hổng này, và các cuộc test thâm nhập được thực hiện lặp lại cho đến khi hệ thống âm tính với những cuộc thử nghiệm đó.
Phương thức test thâm nhập:
1. Thu thập dữ liệu: Người ta sử dụng các phương pháp khác nhau bao gồm Goolge Search để get dữ liệu hệ thống đích. Họ cũng có thể sử dụng kỹ thuật phân tích source code trang web để lấy về nhiều thông tin hơn về hệ thống, phần mềm, và phiên bản plugin. Có nhiều tool và dịch vụ miễn phí có sẵn trên thị trường. Chúng có thể cung cấp cho bạn thông tin như cơ sở dữ liệu, hoặc tên bảng, phiên bản DB, phiên bản phần mềm, phần cứng được sử dụng, và các plugin của bên thứ ba được sử dụng trong hệ thống đích.
2. Đánh giá lỗ hổng: Dựa trên dữ liệu đã thu thập được ở bước trên, người ta có thể tìm thấy điểm yếu trong bảo mật của hệ thống đích. Nó giúp tester test thâm nhập thực hiện các cuộc tấn công bằng cách sử dụng các điểm truy cập được xác định trong hệ thống.
3. Khai thác thực tế: Đây là bước quan trọng. Nó yêu cầu kỹ năng và kỹ thuật đặc biệt để thực hiện một cuộc tấn công hệ thống đích. Tester test thâm nhập có kinh nghiệm có thể sử dụng kinh nghiệm của họ để thực hiện một cuộc tấn công vào hệ thống.
4. Phân tích kết quả và báo cáo test thâm nhập: Sau khi kết thúc việc test thâm nhập, báo cáo chi tiết được chuẩn bị để có những hành động khắc phục. Tất cả những lỗ hổng được tìm thấy và những phương pháp khắc phục được đề cập được liệt kê trong báo cáo. Bạn có thể tùy chỉnh format của báo cáo dựa trên nhu cầu của công ty bạn: HTML, XML, MS Word hoặc PDF.
Một số ví dụ về Test case (Test Scenario):
Test thâm nhập không phải là test chức năng. Mục đích của bạn là tìm thấy các lỗ hổng bảo mật trong hệ thống. Dưới đây là một số test case chung và không nhất thiết phải áp dụng cho tất cả các ứng dụng.
-
Kiểm tra xem ứng dụng web có khả năng xác định các cuộc tấn công spam trên các form liên hệ được sử dụng trên hệ thống hay không.
-
Proxy server - Kiểm tra xem lưu lượng network có được giám sát bởi các thiết bị proxy không. Proxy server gây khó khăn cho các hacker trong việc lấy về các thông tin chi tiết nội bộ của các network, từ đó bảo vệ hệ thống khỏi các cuộc tấn công từ bên ngoài.
-
Bộ lọc email spam - Xác minh lưu lượng email đến và đi có được lọc không, và các email không mong muốn có bị block không.
-
Nhiều ứng dụng email đi kèm với các bộ lọc spam sẵn có cần phải được cấu hình theo yêu cầu của bạn. Các cấu hình này có thể được wop dụng cho mail header, subject hoặc body.
-
Firewall - Đảm bảo toàn bộ mạng và máy tính đều được bảo vệ bởi Firewall. Firewall có thể là phần mềm hoặc phần cứng ngăn chặn sự truy cập trái phép vào hệ thống. Firewall có thể ngăn chặn việc gửi dữ liệu ra bên ngoài mạng mà không có sự cho phép của bạn.
-
Cố gắng khai thác tất cả server, hệ thống desktop, printer và thiết bị mạng.
-
Xác minh xem username và password được mã hóa và chuyển sang kết nối bảo mật như https hay chưa.
-
Xác minh xem thông tin được lưu trữ trong website cookies không. Nó không nên được lưu dưới định dạng có thể đọc được.
-
Xác minh xem các lỗ hổng được tìm thấy trước đó sau khi được fix có hoạt động tốt không.
-
Xác minh rằng không có cổng mở trong network.
-
Xác minh tất cả các thiết bị telephone.
-
Xác minh bảo mật WIFI network.
-
Xác minh tất cả các phương thức HTTP. Các phương thức PUT và DELETE không nên đợc enable trên web server.
-
Xác minh xem password đúng chuẩn yêu cầu chưa. Password nên có ít nhất 8 ký tự, có chưá ít nhất một ký tự số và một ký tự đặc biệt.
-
Username không nên là "admin" hoặc "administrator".
-
Trang login nên được khóa sau vài lần đăng nhập không thành công.
-
Các message lỗi nên được mô tả chung chung, không nên đề cập đến lỗi cụ thể như "Invalid username" hoặc "Invalid password".
-
Xác minh các ký tự đặc biệt, các thẻ HTML và các script được xử lý đúng như một input.
-
Chi tiết hệ thống nội bộ không nên được tiết lộ trong bất kỳ một thông báo lỗi hay cảnh báo nào.
-
Thông báo lỗi tùy chỉnh nên được hiển thị cho end user trong trường hợp web bị crash.
-
Xác minh sử dụng các mục đăng ký. Các thông tin nhạy cảm không được giữ trong cửa sổ đăng ký.
-
Các dữ liệu nhạy cảm không nên được truyền vào URL trong khi giao tiếp với các module nội bộ khác của ứng dụng web.
-
Không nên hard code username hoặc password.
-
Tất cả các file phải được scan trước khi upload lên server.
-
Xác minh tất cả các trường input với chuỗi input dài có và không có khoảng trống.
-
Xác minh chức năng reset password là bảo mật.
-
Xác minh ứng dụng với SQL Injection.
-
Xác minh ứng dụng với Cross Site Scripting
-
Những validate đầu vào quan trọng nên được thực hiện ở server thay vì check bằng Javascript ở phía client.
-
Những resource quan trọng trong hệ thống chỉ nên có sẵn cho những người và dịch vụ được ủy quyền.
-
Tất cả các log truy cập nên được lưu trữ với quyền truy cập thích hợp.
-
Xác nhận phiên người dùng kết thúc khi đăng xuất.
-
Xác minh rằng các thư mục duyệt bị disbale trên server.
-
Xác minh rằng phiên bản của ứng dụng và database được cập nhật.
-
Xác minh việc xử lý URL để check xem ứng dụng web có hiển thị bất kỳ thông tin không mong muốn nào không.
-
Xác minh xem bộ nhớ có bị rò rỉ và có bị tràn bộ đệm không.
-
Xác minh lưu lượng network đến đã được scan để tìm các tấn công Trojan hay chưa.
-
Xác minh hệ thống đã an toàn khỏi các các cuộc tấn công Brute Force chưa. Brute Force là một phương pháp thử và sai để tìm các thông tin nhạy cảm như password.
-
Xác minh xem hệ thống hoặc network đã được bảo vệ khỏi cuộc tấn công DoS (denial-of-service) chưa. Hacker có thể thực hiện request liên tục đến mạng đích hoặc một máy tính khiến tài nguyên trên hệ thống đích bị quá tải dẫn đến việc từ chối dịch vụ đối với các yêu cầu hợp pháp.
-
Xác minh ứng dụng với các cuộc tấn công HTML script injection.
-
Xác minh việc chống lại các cuộc tấn công COM & ActiveX.
-
Xác minh việc chống lại các cuộc tấn công giả mạo (spoofing). Có thể giả mạo nhiều loại - giả mạo IP address, Email ID, ARP, Người giới thiệu, ID người gọi, điểm network chia sẻ file, GPS,...
-
Kiểm tra cuộc tấn công chuỗi định dạng không kiểm soát - cuộc tấn công bảo mật có thể làm cho ứng dụng bị crash hoặc thực thi script gây có hại.
-
Xác minh cuộc tấn công XML injection - được sử dụng để thay đổi logic dự định của ứng dụng.
-
Xác minh sự chống lại các cuộc tấn công chuẩn hóa.
-
Xác minh xem các trang lỗi có đang hiển thị bất kỳ thông tin nào có thể giúp hacker truy cập hệ thống không.
-
Xác minh xem có bất kỳ dữ liệu quan trọng như password được lưu trữ trong file bí mật trên hệ thống không.
-
Xác minh ứng dụng có trả ra nhiều dữ liệu hơn yêu cầu không.
Đây là những test scenario cơ bản để bắt đầu với Pen test. Có hàng trăm phương pháp test thâm nhập nâng cao có thể thực hiện thủ công hoặc dùng các công cụ tự động.
Tham khảo: https://www.softwaretestinghelp.com/penetration-testing-guide/
All rights reserved