1. Trang chủ
  2. » Giáo án - Bài giảng

Học phần: An toàn mạng Bài báo cáo: Tìm hiểu về DotDotPwn Sử dụng DotDotPwn để rà soát lỗ hổng

34 23 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 34
Dung lượng 851,38 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

DANH SÁCH CÁC THUẬT NGỮ TIẾNG ANH VÀ VIẾT TẮT Từ viết tắt Thuật ngữ tiếng Anh/Giải thích Thuật ngữ tiếng Việt/Giải thích API Application Programming Interface Giao diện lập trình ứng

Trang 1

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

KHOA CÔNG NGHỆ THÔNG TIN

Trang 2

Mục lục

DANH SÁCH CÁC THUẬT NGỮ TIẾNG ANH VÀ VIẾT TẮT 5

DANH MỤC HÌNH ẢNH 7

DANH MỤC BẢNG BIỂU 7

LỜI MỞ ĐẦU 8

Chương 1 Giới thiệu chung 9

1.1 Giới thiệu về kiểm thử xâm nhập 9

1.1.1 Kiểm thử xâm nhập là gì 9

1.1.2 Các giai đoạn kiểm thử xâm nhập 9

1.1.3 Các phương pháp kiểm thử xâm nhập 11

1.1.4 Kiểm thử xâm nhập và tường lửa ứng dụng web 12

1.2 Giới thiệu về lỗ hổng directory traversal 13

1.2.1 Directory traversal là gì 13

1.2.2 Đọc các file tuỳ ý bằng directory traversal 13

1.2.3 Những trở ngại thường gặp khi khai thác lỗ hổng path traversal 14

1.2.4 Cách phòng chống tấn công directory traversal 15

1.3 Giới thiệu về Fuzzing 16

1.3.1 Ví dụ đơn giản 16

1.3.2 Lịch sử 17

1.3.3 Triển khai Fuzzer 17

1.3.4 So sánh với phân tích mật mã 17

1.3.5 Các kiểu tấn công 18

1.3.6 Fuzzing ứng dụng 18

Trang 3

1.3.7 Fuzzing giao thức 19

1.3.8 Fuzzing định dạng file 19

1.3.9 Ưu điểm của fuzzer 19

1.3.10 Hạn chế của fuzzer 19

1.3 Giới thiệu về DotDotPwn 20

1.4 Lịch sử hình thành 20

Chương 2 Hướng dẫn cài đặt và sử dụng 22

2.1 Cài đặt DotDotPwn 22

2.2 Sử dụng DotDotPwn 22

2.2.1 Khởi động và các tuỳ chọn 22

2.2.2 Chế độ HTTP 23

2.2.3 Chế độ HTTP URL 24

2.2.4 Chế độ FTP 24

2.2.5 Chế độ TFTP 25

2.2.6 Chế độ PAYLOAD 25

2.2.7 Chế độ STDOUT 25

Chương 3 Bài lab và kịch bản demo 26

3.1 Dùng DotDotPwn để tạo đường dẫn bằng chế độ stdout 26

3.1.1 Yêu cầu 26

3.1.2 Tiến hành 26

3.2 Dùng DotDotPwn để quét chế độ http-url 28

3.2.1 Yêu cầu 28

3.2.2 Tiến hành 28

Chương 4 So sánh, đánh giá 31

Trang 4

4.1 So sánh 31

4.2 Đánh giá 32

Kết luận 33

Tài liệu tham khảo 34

Trang 5

DANH SÁCH CÁC THUẬT NGỮ TIẾNG ANH VÀ VIẾT TẮT

Từ

viết tắt Thuật ngữ tiếng Anh/Giải thích Thuật ngữ tiếng Việt/Giải thích

API Application Programming Interface Giao diện lập trình ứng dụng

CSRF Cross-site Request Forgery Kỹ thuật tấn công giả mạo chính chủ

thể của nó DNS Domain Name System Hệ thống phân giải tên miền

DoS Denial Of Service Hình thức tấn công từ chối dịch vụ ERP Enterprise Resource Planning Hoạch định nguồn lực doanh nghiệp FTP File Transfer Protocol Giao thức truyền tải tập tin

HTTP Hypertext Transfer Protocol Giao thức truyền tải siêu văn bản

HTTPS Hypertext Transfer Protocol Secure Giao thức truyền tải siêu văn bản

bảo mật

PCI DSS Payment Card Industry Data

Security Standard

Tiêu chuẩn an ninh thông tin bắt buộc dành cho các doanh nghiệp lưu trữ, truyền tải và xử lý thẻ thanh toán

REST Representational State Transfer

Kiến trúc sử dụng trong việc giao tiếp giữa máy khách và máy chủ web

RPC Remote Procedure Call Cuộc gọi thủ tục từ xa

SOC 2 System and Organization Controls 2

Bộ tiêu chí được phát triển bởi Viện

Kế toán Công chứng Hoa Kỳ (AICPA)

SQL Structured Query Language Ngôn ngữ truy vấn dữ liệu

Trang 6

SSL Secure Sockets Layer

Tiêu chuẩn của công nghệ bảo mật, truyền thông mã hoá giữa máy chủ Web server và trình duyệt

SSRF Server Side Request Forgery Kỹ thuật tấn công yêu cầu giả mạo

từ phía máy chủ

TCP Transmission Control Protocol Giao thức điều khiển truyền vận

TFTP Trivial File Transfer Protocol Giao thức truyền tải tập tin tầm

thường UDP User Datagram Protocol Giao thức dữ liệu người dùng

URL Uniform Resource Locator Định vị tài nguyên thống nhất

WAF Web Application Firewall Tường lửa ứng dụng web

XSS Cross Site Scripting

Lỗi bảo mật cho phép người tấn công chèn các đoạn script nguy hiểm vào trong source code ứng dụng web

Trang 7

DANH MỤC HÌNH ẢNH

Hình 1 Quy trình kiểm thử xâm nhập 9

Hình 2 Minh hoạ lỗ hổng Directory Traversal 13

Hình 4 Trang web bWAPP 26

Hình 5 Thực thi câu lệnh 27

Hình 6 Nội dung file passwd 28

Hình 7 DotDotPwn ngay lập tức tìm ra được lỗ hổng 29

Hình 8 File passwd 30

DANH MỤC BẢNG BIỂU Bảng 1 Lịch sử hình thành 21

Bảng 2 Danh sách tuỳ chọn 23

Bảng 3 So sánh DotDotPwn với một vài công cụ khác 32

Trang 8

Để đảm bảo hệ thống hay trang web là an toàn, người ta đã tạo ra các kỹ thuật kiểm thử xâm nhập (Penetration Testing) Các kỹ thuật này dùng để phát hiện ra các lỗ hổng, rủi

ro hay mối đe doạ bảo mật mà các hacker có thể khai thác trong ứng dụng phần mềm, mạng hay ứng dụng web Mục đích của kiểm thử xâm nhập là xác định và kiểm tra tất cả lỗ hổng bảo mật có thể có trong phần mềm

Một trong số các công cụ dùng để kiểm thử xâm nhập là DotDotPwn, có khả năng tìm kiếm lỗ hổng Traversal Directory

Trang 9

Chương 1 Giới thiệu chung

1.1 Giới thiệu về kiểm thử xâm nhập

1.1.1 Kiểm thử xâm nhập là gì

Kiểm thử xâm nhập (Penetration Testing hay Pentest) là một quá trình mô phỏng

các cuộc tấn công tới hệ thống máy tính để tìm lỗ hổng có thể khai thác được Trong bảo mật ứng dụng web, kiểm thử xâm nhập web thường được dùng để tăng cường bảo mật cho tường lửa ứng dụng web (Web Application Firewall, WAF)

Kiểm thử xâm nhập liên quan đến việc cố gắng xâm nhập các hệ thống ứng dụng (ví dụ như các giao diện lập trình ứng dụng (API), các server frontend/backend) để tìm ra

lỗ hổng bảo mật

Thông tin thu được sau khi kiểm thử có thể dùng để tinh chỉnh các chính sách bảo mật và vá các lỗ hổng

1.1.2 Các giai đoạn kiểm thử xâm nhập

Quy trình kiểm thử xâm nhập gồm 5 giai đoạn

Hình 1 Quy trình kiểm thử xâm nhập

Trang 10

Giai đoạn 1: Lập kế hoạch và trinh sát

Giai đoạn 1 bao gồm:

• Xác định mục tiêu và phạm vi của thử nghiệm, bao gồm hệ thống đích và các phương pháp sẽ được sử dụng

• Thu thập thông tin (ví dụ như mạng và tên miền, mail server) để hiểu rõ cách thức hoạt động của đối tượng và các lỗ hổng tiềm ẩn của nó

Giai đoạn 2: Rà quét

Giai đoạn tiếp theo để hiểu cách ứng dụng sẽ phản hồi lại với các hành động xâm nhập khác nhau Việc này thường làm bằng cách:

• Phân tích tĩnh: Kiểm tra code của ứng dụng để ước tính cách thức hoạt động của nó Các công cụ có thể quét toàn bộ code trong 1 lần chạy

• Phân tích động: Kiểm tra code của ứng dụng khi nó đang chạy Đây là cách quét thực tế hơn, vì nó cung cấp cái nhìn thực tế về hiệu suất của ứng dụng

Giai đoạn 3: Có được quyền truy cập

Giai đoạn này sử dụng các kỹ thuật tấn công ứng dụng web, ví dụ như cross-site scripting, SQL injection hay backdoor, để tìm ra lỗ hổng bảo mật của mục tiêu Sau đó người kiểm tra sẽ thử khai thác các lỗ hổng đó, thường bằng cách leo thang đặc quyền, đánh cắp dữ liệu, chặn lưu lượng truy cập, v.v., để hiểu được những thiệt hại có thể gây ra

Giai đoạn 4: Duy trì quyền truy cập

Mục tiêu của giai đoạn này là để xem liệu lỗ hổng có thể được sử dụng để khai thác lâu dài trong hệ thống hay không – đủ lâu để kẻ tấn công có thể truy cập sâu hơn Ý tưởng

là bắt chước các mối đe doạ nâng cao, thường tồn tại trong hệ thống hàng tháng để đánh cắp các dữ liệu nhạy cảm của tổ chức

Giai đoạn 5: Phân tích

Trang 11

Kết quả của quá trình kiểm thử xâm nhập sẽ được tổng hợp thành một báo cáo chi tiết:

• Các lỗ hổng cụ thể đã được khai thác

• Các thông tin nhạy cảm bị truy cập

• Thời gian người kiểm tra tồn tại trong hệ thống mà không bị phát hiện

Những thông tin này sẽ được nhân viên bảo mật phân tích để giúp cấu hình WAF của doanh nghiệp và các ứng dụng khác, giúp vá lỗ hổng và chống các cuộc tấn công trong tương lai

1.1.3 Các phương pháp kiểm thử xâm nhập

a Kiểm tra bên ngoài

Các bài kiểm tra xâm nhập bên ngoài nhắm vào các tài sản của một công ty trên internet, ví dụ như ứng dụng web, trang web của công ty, email và DNS server Mục đích

là có được quyền truy cập và trích xuất dữ liệu có giá trị

b Kiểm tra nội bộ

Trong kiểm tra nội bộ, người kiểm tra có quyền truy cập vào một ứng dụng đằng sau tường lửa sẽ mô phỏng một cuộc tấn công của một kẻ nội gián Điều này không nhất thiết là phải mô phỏng một nhân viên có ý đồ xấu Một tình huống phổ biến là một nhân viên bị đánh cắp thông tin do cuộc tấn công lừa đảo

c Kiểm tra không thông tin

Trong kiểm tra không thông tin, người kiểm tra chỉ được cung cấp tên của doanh nghiệp mục tiêu Điều này giúp nhân viên bảo mật có một cái nhìn thực tế về cách một cuộc tấn công sẽ diễn ra

d Kiểm tra không thông tin song phương

Trang 12

Trong kiểm tra không thông tin song phương, nhân viên bảo mật sẽ không được biết trước về cuộc tấn công giả Giống như trong thực tế, họ sẽ không có thời gian để tăng cường bảo mật trước khi một cuộc tấn công diễn ra

e Kiểm tra có chủ đích

Trong tình huống này, cả 2 bên người kiểm tra và nhân viên bảo vệ sẽ làm việc với nhau và đánh giá hành động của nhau Đây là bài huấn luyện có giá trị, cung cấp cho nhóm bảo mật thông tin phản hồi thực tế theo quan điểm của một kẻ tấn công

1.1.4 Kiểm thử xâm nhập và tường lửa ứng dụng web

Kiểm thử xâm nhập và WAF là các biện pháp bảo mật khác nhau nhưng có chung lợi ích

Đa số trong các phương pháp kiểm thử xâm nhập, người kiểm tra thường dùng dữ liệu của WAF (như log) để xác định và khai thác lỗ hổng của ứng dụng

Đổi lại, người quản trị WAF có thể hưởng lợi từ kiểm thử xâm nhập Sau khi kiểm tra xong, có thể cấu hình lại WAF để chống lại các điểm yếu đã được phát hiện

Cuối cùng, kiểm thử xâm nhập cũng thoả mãn một số quy trình kiểm tra bảo mật, trong đó có PCI DSS và SOC 2 Một vài tiêu chuẩn như PCI-DSS 6.6 chỉ có thể được đáp ứng thông qua việc sử dụng WAF được chứng nhận Tuy nhiên việc này cũng không khiến kiểm thử xâm nhập kém hữu ích hơn do những lợi ích và khả năng cải thiện WAF như đã nói ở trên [1]

Trang 13

1.2 Giới thiệu về lỗ hổng directory traversal

Hình 2 Minh hoạ lỗ hổng Directory Traversal

1.2.1 Directory traversal là gì

Directory traversal (hay còn được biết đến là path traversal) là một lỗ hổng bảo mật web cho phép kẻ tấn công đọc file bất kỳ trên server chạy ứng dụng đó Nó có thể là code ứng dụng và dữ liệu, thông tin xác thực cho hệ thống back-end, các file nhạy cảm của hệ điều hành Trong một vài trường hợp, kẻ tấn công cũng có thể ghi lên file bất kỳ, cho phép

họ chỉnh sửa ứng dụng hoặc hành vi, và cuối cùng chiếm toàn bộ quyền điều khiển server

1.2.2 Đọc các file tuỳ ý bằng directory traversal

Giả sử một ứng dụng mua sắm hiện các hình ảnh hàng hoá Hình ảnh được gọi qua HTML như sau:

<img src="/loadImage?filename=218.png">

URL loadImage nhận một tham số filename và trả về nội dung của file đó File hình ảnh được lưu trên ổ cứng ở địa chỉ /var/www/images Để trả về hình ảnh, ứng dụng đưa

Trang 14

phần tên file được yêu cầu về thư mục gốc và dùng API của hệ thống file để đọc nội dung của file Trong trường hợp trên, ứng dụng đọc theo đường dẫn sau:

1.2.3 Những trở ngại thường gặp khi khai thác lỗ hổng path traversal

Nhiều ứng dụng đặt input của người dùng vào đường dẫn thực hiện một vài kiểu phòng thủ để chống lại tấn công path traversal, và chúng thường có thể bị bỏ qua

Nếu một ứng dụng tách hoặc chặn các chuỗi directory traversal từ tên file do người dùng cung cấp, thì có thể bỏ qua sự bảo vệ bằng nhiều kỹ thuật khác nhau

Trang 15

Chúng ta có thể sử dụng đường dẫn tuyệt đối từ thư mục gốc của hệ thống, chẳng

hạn như filename=/etc/passwd, để trực tiếp tham chiếu file mà không cần dùng bất cứ chuỗi

truyền tải nào

Chúng ta cũng có thể dùng các chuỗi lồng nhau như ….// hay ….\/, mà sẽ trở về

thành các chuỗi thông thường khi phần chuỗi bên trong bị loại bỏ

Trong một số ngữ cảnh, ví dụ như đường dẫn URL hoặc tham số filename của một yêu cầu multipart/form-data, web server sẽ loại bỏ bất kỳ chuỗi duyệt thư mục trước khi

đưa input đến ứng dụng Chúng ta đôi khi có thể bỏ qua bước lọc này bằng cách mã hoá

URL, hoặc thậm chí mã hoá URL hai lần, chuỗi ký tự / trở thành %2e%2e%2f hoặc

%252e%252e%252f Các mã hoá không chuẩn khác, chẳng hạn như %c0%af hay %ef%bc%8f cũng có thể làm được điều này

Nếu một ứng dụng yêu cầu tên file do người dùng cấp phải bắt đầu tại thư mục ban

đầu, ví dụ như /var/www/images, thì ta có thể bao gồm cả phần thư mục được yêu cầu, theo

sau đó là chuỗi duyệt thư mục phù hợp Ví dụ:

filename=/var/www/images/ / / /etc/passwd

Nếu một ứng dụng yêu cầu tên file do người dung cung cấp phải kết thúc bằng một

đuôi mở rộng nào đó, ví dụ như png, thì ta có thể dùng null byte để loại bỏ phần đuôi mở

rộng bắt buộc Ví dụ:

filename= / / /etc/passwd%00.png

1.2.4 Cách phòng chống tấn công directory traversal

Cách hiệu quả nhất để phòng tránh lỗ hổng file path traversal đó là tránh đưa các input của người dùng vào API của hệ thống file Nhiều ứng dụng có chức năng này có thể được viết lại để mang lại hành vi tương đương nhưng an toàn hơn

Nếu như không thể tránh không đưa input của người dùng vào API của hệ thống file, thì 2 lớp bảo mật nên được dùng với nhau để tránh các cuộc tấn công:

• Ứng dụng nên xác nhận input của người dùng trước khi thực hiện nó Lý tưởng nhất là nên xác nhận bằng cách đối chiếu với một danh sách các giá trị

Trang 16

được cho phép Nếu như chức năng này không thể thực hiện được, thì phần xác nhận nên xác thực được rằng input chỉ chứa những nội dung được cho phép, ví dụ như chỉ thuần ký tự chữ số

• Sau khi xác thực input được cấp, ứng dụng nên thêm phần input vào thư mục ban đầu và dùng API của hệ thống file và chuẩn hoá đường dẫn Cần phải xác thực được đường dẫn được chuẩn hoá xuất phát từ thư mục ban đầu như

1.3 Giới thiệu về Fuzzing

Fuzz testing hay Fuzzing là một kỹ thuật kiểm thử phần mềm hộp đen, về cơ bản bao gồm việc tìm ra các lỗi triển khai bằng cách chèn dữ liệu sai định dạng theo cách tự động

Fuzzing là nghệ thuật tìm lỗi tự động, và vai trò của nó là tìm lỗi lập trình phần

Trang 17

1.3.2 Lịch sử

Fuzz testing được phát triển tại Đại học Wisconsin Madison vào năm 1989 bởi Giáo

sư Barton Miller và sinh viên Công trình của họ có thể xem được tại

rằng các hệ điều hành hiện nay có thể bị tấn công bởi fuzzing đơn giản

1.3.3 Triển khai Fuzzer

Một fuzzer là một chương trình chèn tự động các dữ liệu bán ngẫu nhiên vào một chương trình/hệ thống khác và phát hiện lỗi

Phần sinh dữ liệu bao gồm các bộ sinh dữ liệu, và phát hiện lỗ hổng dựa vào các công cụ sửa chữa lỗi Bộ sinh dữ liệu thường sử dụng kết hợp các giá trị fuzzing tĩnh (các giá trị được biết là nguy hiểm), hoặc dữ liệu hoàn toàn ngẫu nhiên Các fuzzer thế hệ mới

sử dụng thuật toán di truyền để nối dữ liệu được chèn và quan sát kết quả Những công cụ như vậy chưa được công khai

1.3.4 So sánh với phân tích mật mã

Số lượng các giải pháp có thể thử là không gian các giải pháp có thể khám phá Mục đích của phân tích mật mã là giảm không gian này, có nghĩa là tìm ra cách có ít khoá để thử hơn là bruteforce thuần tuý để giải mã thứ gì đó

Trang 18

được cấu trúc như GET (hoặc có thể crash luôn) Sẽ có thể tốn ít thời gian hơn nếu bắt đầu chuỗi với “GET”, và fuzz phần còn lại, nhưng hạn chế là sẽ

bỏ qua tất cả các kiểm tra với từ đầu tiên

Về vấn đề này, fuzzer thường cố gắng giảm số lượng các kiểm tra vô dụng, ví dụ như là các giá trị mà chúng ta đã biết rằng sẽ có ít khả năng hoạt động Chúng ta giảm tính không thể đoán trước và có lợi hơn về tốc độ

1.3.5 Các kiểu tấn công

Một fuzzer sẽ thử tấn công kết hợp theo kiểu:

• number (signed/unsigned integers/float…)

• chars (url, input dòng lệnh)

• metadata: văn bản do người dùng nhập (id3 tag)

• chuỗi nhị phân thuần tuý

Một cách tiếp cận chung tới fuzzing đó là định nghĩa các danh sách “giá trị nguy hiểm” (fuzz vector) cho mỗi loại, và chèn chúng hoặc tái hợp

• đối với số nguyên: số không, số âm hoặc số cực lớn

• đối với chữ cái: các ký tự/chỉ dẫn có thể giải thích được

• đối với nhị phân: ngẫu nhiên

Ngày đăng: 09/02/2022, 09:22

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm