Mở đầu
Tiếp tục với giới thiệu về kiểm thử xâm nhập: Scanning
, trong bài trước chúng ta đã tìm hiểu đến các vấn đề như: ping sweeping, port scan và OS fingerprinting. Trong phần này, chúng ta cần tìm hiểu về hai khái niệm quan trọng khác: Version scan và Vulnerability scan.
III. Version Scan
Version scanning là quá trình xác định phiên bản của các dịch vụ và ứng dụng đang chạy trên các máy chủ mục tiêu. Thông qua việc xác định phiên bản, ta có thể biết được các lỗ hổng đã được vá và các lỗ hổng mà phiên bản đó có thể tồn tại. Sự khác biệt của việc quét phiên bản so với quét dựa trên giao thức là nó kiểm tra tất cả các cổng mở cho nhiều dịch vụ đã biết, trong khi quét dựa trên giao thức chỉ kiểm tra các cổng có thể có cho dịch vụ mặc định của nó.
Ví dụ, bạn biết rằng HTTP lắng nghe trên cổng TCP 80 mặc định. Tuy nhiên, nếu bạn thực hiện version scanning mục tiêu và tìm thấy các cổng TCP 22, 80, 8080 và 4444 mở, nmap sẽ cố gắng xác định phiên bản của các dịch vụ đang lắng nghe trên tất cả các cổng này.
Quét phiên bản không chỉ giúp bạn xác định xem một cổng thực sự mở hay đang ở trạng thái open|filtered
, mà còn giúp vượt qua một số hạn chế của tường lửa. Trong một số trường hợp, nếu có một tường lửa nằm giữa pentester và mục tiêu, người kiểm tra có thể nhận được một thông báo "mở" từ tường lửa thay vì từ máy chủ đích. Điều này chỉ thể hiện tường lửa cho phép lưu lượng đi qua cổng này, không có nghĩa là dịch vụ mặc định của mục tiêu đang lắng nghe trên cổng đó.
Nhược điểm của version scanning là quá trình quét mất thời gian hơn và còn để lại nhiều dấu vết trong quá trình quét hơn do số lượng gói tin bạn gửi đến mục tiêu tăng lên đáng kể.
Nmap
Nmap cung cấp chức năng quét phiên bản thông qua tùy chọn -sV. Khi đó nmap cố gắng xác định dịch vụ và phiên bản bằng cách gửi các gói tin đặc biệt đến các cổng mở và so sánh các phản hồi với một cơ sở dữ liệu mẫu đã biết. Điều này đặc biệt hữu ích trong quá trình pentesting vì nó có thể giúp bạn thu hẹp một số lượng lớn lỗ hổng và khai thác có thể có.
Việc thực hiện quét phiên bản cũng giúp bạn xác định những dịch vụ mà các quản trị viên hệ thống có thể đang cố gắng che giấu. Ví dụ trong hình dưới đây cho thấy kết quả của hai lần quét được thực hiện đối với một mục tiêu nơi SSH đã được cấu hình để chạy trên cổng TCP 23. Trong quét đầu tiên, bạn sẽ thấy rằng nmap xác định cổng TCP 23 là mở, nhưng ghi nhãn sai là dịch vụ telnet. Trong quét thứ hai với tính năng quét phiên bản được kích hoạt, bạn có thể thấy rằng nmap đã chính xác xác định cổng TCP 23 là mở và đang chạy SSH.
Netcat
Netcat là một công cụ rất linh hoạt và dễ sử dụng có thể được cài đặt trên cả các máy chủ Linux và Windows. Nó có thể hoạt động trong cấu hình client-server thông thường trong đó một đầu được cấu hình như một máy chủ hoặc "listener", đồng thời nó cũng có thể hoạt động như một client mạng. Một trong những công dụng của netcat là làm công cụ quét cổng và quét phiên bản. Sau đây là bảng liệt kê một số tùy chọn netcat hữu ích cho bạn:
Khi sử dụng netcat làm công cụ quét cổng, điều quan trọng nhất cần nhớ là sử dụng cả hai chế độ Zero I/O và chế độ verbose. Đặt netcat ở chế độ Zero I/O cho phép tự động hóa quá trình quét cổng, và sử dụng tùy chọn verbose để netcat trả về các thông báo thành công và lỗi. Dưới đây là một ví dụ về việc thực hiện quét cổng trên một mục tiêu duy nhất bằng cách sử dụng các tùy chọn Zero I/O, verbose và không tìm kiếm DNS. Khi chỉ định các cổng, bạn có thể chỉ định một cổng duy nhất (22), một phạm vi cổng (1-1023) hoặc một danh sách các cổng, được phân tách bằng dấu cách (22 80 443 445). Bạn sẽ thấy rằng khi một cổng mở, bạn sẽ nhận được một phản hồi open, và nếu một cổng đóng, bạn sẽ nhận được một thông báo lỗi.
IV. Vulnerability Scan
Quét lỗ hổng (Vulnerability Scan) là quá trình kiểm tra và phân tích các lỗ hổng bảo mật có thể tồn tại trong hệ thống, ứng dụng hoặc mạng máy tính. Mục tiêu của việc quét lỗ hổng là xác định các điểm yếu trong cấu trúc bảo mật để đưa ra các biện pháp phòng ngừa và cải thiện mức độ an toàn.
Trong quá trình quét lỗ hổng, các công cụ sẽ tự động tìm kiếm các lỗ hổng đã biết trong hệ thống hoặc ứng dụng dựa trên cơ sở dữ liệu có sẵn. Các lỗ hổng này có thể là các lỗi phần mềm, cấu hình không an toàn, các thiếu sót trong quản lý hệ thống và các vấn đề bảo mật khác. Các công cụ quét lỗ hổng thường sử dụng các kỹ thuật như quét cổng, quét phiên bản phần mềm, phân tích mã độc, kiểm tra cấu hình và kiểm tra tính bảo mật của hệ điều hành và ứng dụng.
Sau khi quét lỗ hổng hoàn thành, công cụ sẽ tạo ra một báo cáo chi tiết về các lỗ hổng đã tìm thấy, bao gồm mô tả, mức độ nghiêm trọng và các biện pháp khắc phục. Thông qua báo cáo này, người quản trị hệ thống hoặc nhóm bảo mật có thể hiểu được các rủi ro bảo mật hiện tại và đưa ra các biện pháp khắc phục để giảm thiểu nguy cơ.
Phân loại và xác định lỗ hổng
Phân loại và xác định các lỗ hổng (vulnerabilities) là quá trình nhận biết và phân loại các điểm yếu trong hệ thống, ứng dụng hoặc mạng máy tính mà có thể bị khai thác để tấn công hoặc gây tổn hại đến tính bảo mật của hệ thống.
Các lỗ hổng có thể được phân loại thành hai nhóm chính:
-
Bugs/Flaws (Lỗi/Thiếu sót): Đây là các lỗ hổng phát sinh do lỗi trong phần cứng hoặc phần mềm. Điều này có thể bao gồm các lỗi lập trình, lỗ hổng bảo mật, lỗ hổng xác thực, lỗ hổng quyền truy cập, lỗ hổng mã độc và các lỗ hổng khác liên quan đến quá trình phát triển và triển khai phần mềm.
-
Insecure/Legacy Configurations (Cấu hình không an toàn/Legacy): Đây là các lỗ hổng phát sinh do cấu hình không an toàn hoặc các thiết lập cũ và lỗi thời. Điều này có thể bao gồm các mặc định không an toàn, cấu hình mạng yếu, chứng chỉ hết hạn, mật khẩu yếu, sử dụng các giao thức không an toàn và các cài đặt cũ không được hỗ trợ bởi nhà sản xuất.
Để xác định các lỗ hổng, các công cụ quét lỗ hổng thường sử dụng các phương pháp sau:
-
So sánh phiên bản: Các công cụ này thực hiện quét phiên bản của phần mềm và so sánh phiên bản đã tìm thấy với cơ sở dữ liệu các phiên bản đã biết có lỗ hổng. Điều này giúp xác định xem phiên bản đang được sử dụng có phải là phiên bản đã biết có lỗ hổng hay không.
-
Kiểm tra cấu hình: Các công cụ này có thể xem hoặc kiểm tra thông tin cấu hình của các dịch vụ cụ thể và so sánh nó với các tùy chọn cấu hình không an toàn đã biết. Điều này giúp xác định xem cấu hình hiện tại có mối nguy hại cho tính bảo mật hay không.
-
Thử khai thác lỗ hổng: Một số công cụ quét lỗ hổng còn đi xa hơn bằng cách thử khai thác các lỗ hổng đã tìm thấy để xem liệu chúng có thể được khai thác thành công hay không. Điều này giúp đánh giá mức độ nghiêm trọng của lỗ hổng và mô phỏng các cuộc tấn công thực tế.
Trong quá trình phân loại và xác định lỗ hổng, các công cụ quét lỗ hổng thường sử dụng cơ sở dữ liệu lỗ hổng đã biết để so sánh kết quả. Cơ sở dữ liệu này có thể được nhập từ các nguồn bên ngoài như Trung tâm An ninh Internet (Center for Internet Security) hoặc từ cấu hình cơ bản của hệ thống mục tiêu. Bài viết này mình sẽ giới thiệu hai kiểu công cụ quét lỗ hổng tương ứng với hai loại bao gồm:
- Công cụ quét lỗ hổng mã nguồn mở: NSE
- Công cụ quét lỗ hổng mã nguồn đóng: Nessus
NSE
NSE (Nmap Scripting Engine) là một công cụ quét lỗ hổng và khai thác được tích hợp sẵn trong Nmap. NSE cho phép người dùng thực hiện các tác vụ tự động hóa trong quá trình quét mạng, bao gồm thu thập thông tin từ banner, phát hiện lỗ hổng bảo mật và thực hiện khai thác.
Tính năng chính của NSE là khả năng chạy các tập lệnh (scripts) được viết bằng Lua, một ngôn ngữ lập trình linh hoạt và dễ học. Các tập lệnh này cung cấp các chức năng mở rộng cho Nmap, cho phép thực hiện việc quét nhanh chóng và tự động hơn. NSE hỗ trợ thực thi đa luồng, giúp tiết kiệm thời gian quét mạng, đặc biệt khi quét trên nhiều máy chủ cùng một lúc.
Nmap được cung cấp "sẵn sàng sử dụng" với hàng chục tập lệnh NSE, bao gồm các tập lệnh tiêu biểu như quét lỗ hổng, xác định phiên bản phần mềm, thu thập thông tin hệ thống và nhiều chức năng khác. Người dùng cũng có thể viết và chia sẻ tập lệnh NSE của riêng mình với cộng đồng, mở rộng khả năng tùy chỉnh và mở rộng của Nmap.
Tổng quan, NSE là một công cụ mạnh mẽ và linh hoạt trong quá trình quét lỗ hổng và khai thác, cung cấp cho người dùng khả năng tự động hóa và mở rộng khả năng của Nmap trong việc phát hiện và đánh giá bảo mật hệ thống. Dưới đây là một ví dụ việc sử dụng NSE để khai thác các CVE đã có.
Ta có thể xem các script sẵn có trong: thư mục /usr/share/nmap/scripts
:
Ngoài ra ta có thể thực hiện tải các script khác được cung cấp trên github. Ví dụ
Sử dụng NSE với script vừa tải được để quét lỗ hổng trên cổng ssh. Chạy lệnh:
nmap --script=vulscan/vulscan.nse -sV -p22
Nmap sau khi quét sẽ trả về danh sách các CVE có thể bị khai thác trên hệ thống mục tiêu. Tiếp tục quét với cổng 5432 (thường được sử dụng cho dịch vụ cơ sở dữ liệu PostgreSQL)
nmap --script=vulscan/vulscan.nse -sV –p5432
Sau khi đã có thông tin về các lỗ hổng, bạn có thể khai thác thủ công hoặc sử dụng các công cụ tạo mã khai thác có sẵn như metasploit, vv..
Nessus
Nessus là một công cụ quét lỗ hổng mạnh mẽ và phổ biến được sử dụng trong lĩnh vực bảo mật thông tin. Được phát triển bởi Tenable, Nessus cung cấp khả năng quét và phân tích bảo mật toàn diện cho các hệ thống và ứng dụng.
Nessus có hai phiên bản chính:
- Nessus Essentials (trước đây được gọi là Nessus Home Feed) đăng ký miễn phí và có thể quét lên đến 16 địa chỉ IP, mặc dù phiên bản này bị giới hạn một số tính năng nhất định.
- Nessus Professional (mất phí ) có thể quét địa chỉ IP không giới hạn và có thêm một vài tính năng hữu ích khác.
Bạn có thể đăng ký mã kích hoạt cho Nessus Essentials tại đây. Sau khi tải xuống và cài đặt Nessus Essentials, chạy lệnh kích hoạt dịch vụ nessus:
systemctl enable nessusd && systemctl start nessusd
Sau khi khởi động, mở trình duyệt web và truy cập vào địa chỉ https://localhost:8834. Thực hiện quét với địa chỉ ip: 192.168.71.167
.
Sau khi quét hoàn thành, bạn có thể nhấp vào một máy chủ để xem thêm thông tin về các lỗ hổng được tìm thấy trên máy chủ đó. Các lỗ hổng sẽ được xếp vào các nhóm và phân loại theo từng mức độ nguy hiểm khác nhau bao gồm:
- Critical
- High
- Medium
- Low
- Info
Bạn có thể nhấp vào từng lỗ hổng để xem thông tin chi tiết hơn:
Phần chi tiết cung cấp một số lượng thông tin đáng kể, bao gồm:
- Description: Mô tả về lỗ hổng và danh sách các số CVE (Common Vulnerabilities and Exposures) liên quan đến lỗ hổng đó.
- Solution : Các giải pháp khả thi để giảm thiểu hoặc vá lỗ hổng.
- Plugin Details: Thông tin về plugin của Nessus đã phát hiện ra lỗ hổng, loại lỗ hổng và mức độ nghiêm trọng được phân loại bởi Nessus.
- Risk Information: Đánh giá rủi ro dựa trên điểm số CVSS (Common Vulnerability Scoring System).
- Vulnerability Information: Thông tin về thời điểm phát hiện lỗ hổng và thông tin về việc có sẵn các exploit đã biết, độ khó khai thác lỗ hổng và các công cụ (nếu có) bạn có thể sử dụng để xác minh hoặc khai thác lỗ hổng.
Thực hiện khai thác lỗi bằng metasploit trên linux. Tìm kiếm module
Sử dụng module để khai thác. Xác nhận RCE thành công:
Kết
Trong hai phần của bài viết này chúng ta đã tìm hiểu về quá trình quét mạng trong kiểm thử bảo mật. Scanning là một hoạt động quan trọng giúp chúng ta hiểu rõ hơn về hệ thống mục tiêu, xác định các lỗ hổng bảo mật và đưa ra các biện pháp phòng chống hiệu quả. Tuy nhiên, quá trình quét mạng chỉ là một phần trong quá trình kiểm thử bảo mật toàn diện. Chúng ta sẽ tiếp tục tìm hiểu về các quá trình khác trong phần tiếp theo.