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

An toàn ứng dụng web và cơ sở dữ liệu bài tập lớn Đề tài tìm hiểu lỗ hổng insecure deserialization trên ngôn ngữ php và java

34 2 0
Tài liệu được quét OCR, nội dung có thể không chính xác
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 đề An toàn ứng dụng web và cơ sở dữ liệu bài tập lớn đề tài tìm hiểu lỗ hổng insecure deserialization trên ngôn ngữ php và java
Tác giả Nguyễn Hồng Minh, Mai Xuan Nhat, Tran Minh Tu, Đỗ Quang Tựng
Người hướng dẫn Ninh Thị Thu Trang
Trường học Học Viện Công Nghệ Bưu Chính Viễn Thông
Chuyên ngành An toàn thông tin
Thể loại Bài tập lớn
Năm xuất bản 2024
Thành phố Hà Nội
Định dạng
Số trang 34
Dung lượng 6,89 MB

Nội dung

Bai tap lon CHUGONG 1: TONG QUAN L6 hong Insecure deserialization xảy ra khi kẻ tấn công có thê chỉnh sửa, thay đổi các đối tượng, dữ liệu sẽ được thực hiện Deserialize bởi ứng dụng.. Kh

Trang 1

wn

HOC VIEN CONG NGHE BUU CHINH VIEN THONG

KHOA AN TOAN THONG TIN wane _————S—————e

Tim hiéu 16 héng Insecure Deserialization

trên ngôn ngữ PHP và JAVA

Giảng viên : Ninh Thị Thu Trang Lớp môn học :02

Nhóm bài tập 0I

Hệ đào tạo : Đại học chính quy

Hà Nội, ngày 06 tháng 10 năm 2024

Trang 2

DANH SACH THANH VIEN

Trang 3

MUC LUC

LOI NOI DAU 5

1.1 Khai niém vé Serialization va Deserialization .cccccccccccscscscssscecscscessssveseeseeees 6 1.2 Mét sé phuong thre thye hién Serialize — Deserialize 0 0.0000cccccsccseceseeseseseees 6 1.2.1 Binary Sertalization nh 6 1.2.2 SOAP (Simple ObJect Access Protocol) Serialization - - 7 1.2.3 XML SerlaÌization - L1 c1 201120 1121112111111 1211111111111 1 1111111 111k ko 7 1.3 Lỗ hồng Insecure đeserialization - - + 52s 1 1 1EE1E712212111111117111171121 11 xe 7 1.4 Tác động - L 0200022011211 1111 1111111111111 5111 11111111 H11 KH TH k HH HH ng 8

CHUONG 2: LO HONG INSECURE DESERIALIZATION TREN PHP 9

2.1 Khai thác lỗ hơng lợi dụng hàm serialize(), unserialize() trong PHP 9 2.1.1 Hàm serlallze() L0 0 020112011211 1211121111111 1111 111111111111 1111 kg Ha 9 2.1.2 Hàm unser1aÏ1Ze - Q2 020112011101 1101 11111111 11111111 111111111111 111 111111 La 9 2.1.3 Khai thác lỗ hồng Deserialization thay đơi serialized objects 10 2.2 Một số CVE khai thác lỗ hơng deserialization trong PHP ¿s52 11 2.2.1 CVE-2023-30534 L1 L1 1112121111 121211111112112111111 2112111111181 1 1e 11 2.2.2 CVE-2023-28667 2 201211111121 111 112111111 11112 1111121111111 8111 1 re 11 2.3 Magic methods trong PHP uu c cece cece 22111111211 112111211 1111111011101 1181k 12 PA 0“ “1 12 PIN 0n a5 13

VI ca 13

"ma adđdđddđdđddiddddddd⟟Ả 14 P“hnưngillaiiia 15 2.4 Deserialization trong S€SSIOI 2 2.0 10111211121 111211101 1121110111011 111kg 15 2.5 Phong chéng insecure deserialization trén PHP o c.ccccccccsccesseseeseseesessessesseees 15

CHUONG 3: LO HONG INSECURE DESERIALIZATION TREN JAVA L7

3.1 ca on na 17 3.1.1 Triển khai interface Externalizable - - scSt2111111211271221111 1211 te 18

3.1.2 Tuần tự hĩa XML -©22222222222222312223122211227112271121127112711 271.2 18

3.1.3 Trién khai phuong phap Customized Serialization 5: s+cs2zczze2 18 3.1.4 Lưu ý khi str dung serialization cac đối tượng kế thừa trong Java 18 KP) 090 .) ion a 19 3.2.1 Phương thức defaultReadObJect - - 2 11212111211 1211 12111211112 20 3.2.2 Phương thức regIsterValIidation - 5 2c 2222112211121 112111211 12112 20 3.3 Lỗ hơng Java Deserialization - s21 211111111111112111111 10121121 ru 20

3

Trang 4

3.4 Khai thac 16 héng bang readObject

3.5 Java Deserialization Gadget Chain

3.6 Mét s6 CVE khai thac 16 héng deserialization trong PHP

Trang 5

LOI NOI DAU

Sự phát triển vượt bậc của công nghệ thông tin đã đem lại nhiều cải tiễn và tiện ích cho cuộc sống, từ việc kết nối thế ĐIỚI đến việc tối ưu hóa hoạt động của các hệ thống mạng và phần mềm Tuy nhiên, song song với những tiến bộ này, các nguy cơ bảo mật ngày càng gia tăng, đặc biệt là khi các lỗ hồng trong lập trình và hệ thống mạng

bị khai thác Một trong những lỗ hông bảo mật nghiêm trọng được quan tâm là Insecure Deserialization

Insecure Deserialization la 16 héng bao mat lién quan đến việc dữ liệu đã được tuần tự hóa và giải tuần tự được xử lý không an toàn Lỗ hồng này có thể đẫn đến nhiều loại tấn công, từ việc thực thi mã từ xa cho đến các hành động leo thang đặc quyên Với sự phổ biến của hai ngôn ngữ lập trình PHP và Java trong phát triển web và ứng dụng doanh nghiệp, việc nghiên cứu lỗ hồng trên hai ngôn ngữ này là vô cùng quan trọng, cấp thiết

Trong bối cảnh Việt Nam không ngừng nâng cao mức độ an toàn thông tin trong quá trình phát triển và hội nhập quốc tế, việc nhận diện và phòng tránh các lỗ hồng bảo mat nhu Insecure Deserialization trở nên đặc biệt quan trọng Do đó, nhóm chúng em

đã lựa chọn đề tài “Tìm hiểu lỗ hỗng Insecure Deserialization trên ngôn ngữ PHP

và Java” với mục tiêu hiểu rõ về bản chất của lỗ hồng, cơ chế hoạt động và các biện pháp phòng tránh, từ đó nâng cao ý thức về bảo mật hệ thống Bồ cục báo cáo gồm các phần chính:

Chuong 1: TONG QUAN

Chuong 2: LO HONG INSECURE DESERIALIZATION TREN PHP

Chuong 3: LO HONG INSECURE DESERIALIZATION TREN JAVA

Chuong 4: DEMO

Hy vọng răng qua nghiên cứu về chủ đề này, mọi người sẽ có thêm cái nhìn sâu sắc về lỗ hồng Insecure Deserialization, góp phần nâng cao chất lượng và an toàn cho các hệ thống phần mềm

Trong quá trình thực hiện không tránh khỏi những thiếu sót, nhóm chúng em mong nhận được những ý kiến đóng góp quý báu từ quý thầy cô và các bạn Chúng em xin chân thành cảm ơn!

Trang 6

Bai tap lon CHUGONG 1: TONG QUAN

CHUONG 1: TONG QUAN

1.1 Khai niém ve Serialization va Deserialization

- Deserialization: là quá trình ngược với Serialization Nó liên quan đến việc lấy một biểu diễn dữ liệu tuần tự và tái cấu trúc nó trở lại đỗi tượng ban đầu hoặc dang cau trúc dữ liệu trong ngôn ngữ lập trình

1.2 Một số phương thức thực hiện Serialize — Deserialize

1.2.1 Binary Serialization

- Binary Serialization 1a qua trình chuyên đôi các đối tượng trong bộ nhớ thành một chuỗi các byte Chuỗi nảy có thê được sử dụng đề lưu trữ hoặc truyền qua mạng GV: Ninh Thị Thu Trang 6 Nhóm 01

Trang 7

Bai tap lon CHUGONG 1: TONG QUAN

- Binary Serialization là định dạng hiệu quả và nhanh nhất trong số các phương pháp serialization, vì nó chỉ tạo ra một chuỗi byte duy nhất

- Nhưng, định dạng này có thê không tương thích giữa các nền tảng ngôn ngữ, công nghệ khác nhau hoặc các phiên bản khác nhau của chương trình

1.2.2 SOAP (Simple Object Access Protocol) Serialization

- SOAP (Simple Object Access Protocol) Serialization la m6ét phuong thirc serialization dugc str dung trong web service dé truyén tải các thông tin giữa các ứng dung khac nhau

- SOAP Serialization su dung dinh dang XML dé tạo ra các tin nhắn trao đồi giữa các ứng dụng

- SOAP Serialization có thế được sử dụng để gửi các yêu cầu (requests) và nhận các phản hồi (responses) từ các dịch vụ web

- Tuy nhiên, định dạng này thường có độ phức tạp cao hơn và chậm hơn so với Binary Serialization

UO; SS

Trang 8

Bai tap lon CHUGONG 1: TONG QUAN

L6 hong Insecure deserialization xảy ra khi kẻ tấn công có thê chỉnh sửa, thay đổi các đối tượng, dữ liệu sẽ được thực hiện Deserialize bởi ứng dụng Kẻ tấn công có thé tận dụng các object sẵn có của ứng dụng, tạo ra các quá trình đeserialization theo mục đích riêng Tấn công deserialization cũng được gọi với cái tên khác là Object injection

- Giảm tính toàn vẹn: Kẻ tấn công có thể thay đổi đữ liệu trong hệ thống, ảnh

hưởng đến tính chính xác và độ tin cậy của ứng dụng

- Thực thi mã từ xa (RCE): Nếu kẻ tấn công có thê kiêm soát đối tượng serialized, chúng có thê thực thi mã tủy ý trên máy chủ khi được deserialized

- Tấn công từ chối dịch vụ (DoS): Deserialization rất kém hiệu quả về mặt tính toán Những kẻ tấn công có thể gửi các dữ liệu lớn, phức tạp, được tuần tự hóa để làm cạn kiệt tài nguyên máy chủ

- Leo thang đặc quyền: Kẻ tấn công có thể leo thang đặc quyền nếu đối tượng deserialized có nhiều quyền hơn mình

GV: Ninh Thị Thu Trang 8 Nhom 01

Trang 9

Bai tap lon CHƯƠNG 2: LO HONG INSECURE DESERIALIZATION TREN PHP

CHUONG 2: LO HONG INSECURE

s:4:“name” - Khóa name là một chuỗi có 4 ký tự

s:5:“Alice” - Giá trị của name là một chuỗi có 5 ky ty la “Alice”

s:3:“age” - Khóa age là một chuỗi có 3 ký tự

1:30 - Gia tri cua age la 30 (integer)

s:5:“email” - Khóa email là một chuỗi 5 ký tự

s:17:“alice@exaple.com” - Gia tri của email la chudi 17 ky tu

Array ( [name] => Alice [age] => 30 [email] => alice@example.com )

GV: Ninh Thi Thu Trang 9 Nhom 01

Trang 10

Bai tap lon CHƯƠNG 2: LO HONG INSECURE DESERIALIZATION TREN PHP

2.1.3 Khai thac 16 héng Deserialization thay déi serialized objects

- Các ứng dụng web thường xác thực vai trò người dùng dựa trên session Khi một đối tượng được serIalize, toàn bộ trạng thái của nó sẽ được lưu trữ dưới dạng chuỗi

- Lỗ hồng xảy ra khi dữ liệu serialized được gửi qua các cơ chế như session, cookie hoac input từ người dùng và sau đó được unserialize mà không được

xác thực

- Nếu server nhận dữ liệu serialized từ phía người dùng và trực tiếp sử dụng

unserialize() mà không kiểm tra tính hợp lệ của dữ liệu, có thể chính sửa chuỗi

này để thực hiện các cuộc tấn công

Ví dụ cơ bản về tấn công

<?php

class User { public $role = ‘user';

public function construct($role) {

Ket qua cua doan code trén sé la mét chudi serialized

0:4:"User":1:{8:4:"role";s:5:"admin";} You have admin privileges!

Nếu kẻ tấn công truy cập vào chuỗi serialized và sửa đôi, có thê thay đôi

giá trị của thuộc tính role từ “user” thành “admin” và gửi lại cho server Khi

server unserialize chuỗi này, đối tượng với giá trị role là “admin” sẽ được

khởi tạo, và có thể thực hiện các quyền của admin

GV: Ninh Thị Thu Trang 10 Nhóm 01

Trang 11

Bai tap lon CHƯƠNG 2: LO HONG INSECURE DESERIALIZATION TREN PHP

- CVE-2023-30534 là một lỗ hồng bảo mật liên quan đến insecure deserialization

được phát hiện trong phần mềm giám sát mạng mã nguồn mở Cacti phiên bản 1.2.24

- Trong một số trường hợp việc sử dụng hàm unserialize() không thực hiện kiểm tra và lọc dữ liệu đầu vào từ người dùng, như trong ñle graphs_new.php (ham hos( new _øraphs save()), cơ chế đảm bảo kiểm tra đữ liệu trước khi gọi unserialize() không được áp dụng

- Trong Cacti, mặc dù tồn tại chuỗi gadget có thế bị khai thác trong thư mục vendor (phpseclib), nhưng các gadgets cần thiết không thê truy cập, dẫn đến lỗ hông không

có khả năng khai thác trực tiếp Vấn đề đã được khắc phục trong phiên bản 1.2.25 2.2.2 CVE-2023-28667

GV: Ninh Thị Thu Trang 11 Nhom 01

Trang 12

Bai tap lon CHƯƠNG 2: LO HONG INSECURE DESERIALIZATION TREN PHP

Lead Generation WordPress

- Nếu có gadget chains phù hợp có thê dẫn đến các hành động như tạo shell để thực thi mã độc từ xa, hoặc tan công thông qua các phương thức của đối tượng PHP, thực thi các hành động độc hại ảnh hưởng đến dữ liệu cá nhân

2.3 Magic methods trong PHP

Magic methods la phương thức đặc biệt sử dụng với mục đích ghi đè các hành động thực hiện trên một đối tượng Một số magic methods thường gặp với lỗ hông Deserialization:

2.3.1 — wakeup()

- Khi mét déi tượng được unserIalize từ một chuỗi, tất cả các thuộc tính của đối tượng sẽ được khôi phục Nếu chúng ta muốn kiểm soát quá trình khôi phục các thuộc tính của đối tượng đề đảm bảo tính toàn vẹn, có thể sử dụng phương thức _ wakeup0)

- Phương thức wakeup() sẽ được gọi trước khi thực hiện quá trình deserialization

GV: Ninh Thị Thu Trang 12 Nhóm 01

Trang 13

Bai tap lon CHƯƠNG 2: LO HONG INSECURE DESERIALIZATION TREN PHP

public function _wakeup() {

// Khởi tạo Lại kêt nỗi cơ sở dữ Liệu hoặc các tài nguyên khác

echo "Object has been unserialized!";

<?php

class MyClass { public function construct() { } echo "Object created.\n";

public function destruct() { echo "Object destroyed.\n";

}

$obj = new MyClass();

unset($obj); // Xóa đối tượng và gọi hàm _ destruct()

?>

2.3.3 — sleepQ0

- Khi một đối tượng được serialize thành một chuỗi, tất cả các thuộc tính của đối tượng sẽ được lưu trữ Chúng ta muốn giảm kích thước output hoặc bảo vệ thông tin private của đối tượng phương thức _ sleep() sẽ được sử dụng đề loại bỏ một số thuộc

tính

- Phương thức sleep() sẽ được gọi trước khi thực hiện quá trinh serialization

GV: Ninh Thị Thu Trang 13 Nhóm 01

Trang 14

Bai tap lon CHƯƠNG 2: LO HONG INSECURE DESERIALIZATION TREN PHP

public function _sleep() {

// Chi luu thuộc tính name và emaiL

return ['name', ‘email'];

} }

$user = new User();

public $name;

public function construct($name) {

$this->name = $name;

}

public function toString() {

return "Name: " $this-—>name;

}

}

$obj = new MyClass("Alice");

echo $obj; // In ra: Name: Alice

?>

GV: Ninh Thi Thu Trang 14 Nhom 01

Trang 15

Bai tap lon CHƯƠNG 2: LO HONG INSECURE DESERIALIZATION TREN PHP

// Magic method construct()

public function construct($name, $age) {

$this—>name = $name;

$this->age = $age;

} public function introduce() {

echo "Hi, I'm $this->name and I'm $this-—>age years old.";

}

}

// Tạo đối tượng và gọi ham construct()

$person1 = new Person("Alice", 25);

$person1->introduce() ;

?>

Tóm lại: Trong PHP, các maglc methods như _ wakeupQ, _ destructQ, _—_ sleepQ có thé bị lợi dụng đề khai thác khi unserialize đữ liệu Đặc biệt là phương thức destructf() có thé bi gọi khi đối tượng bị hủy, và hacker có thê tạo ra payload chứa mã độc thy thi trong cac magic methods nay

2.4 Deserialization trong session

- Khi người dùng truy cập một ứng dụng sẽ được coI là một phiên và tạo ra một giá tri session Tại server, dữ liệu session nay duoc lưu trữ trong một biến toản cục

$ SESSION Khi nhận các request liên tiếp từ cùng một khách hàng, thì server cần

cơ chế lưu trữ session để xác thực người dùng

- Trong PHP, session.serialize_handler là một tùy chọn cấu hình cho phép ứng dụng quy định cụ thê loại trình xử lý nào sẽ được sử dụng đề lưu trữ và quản lý session (thong qua serialize va deserialize) Các định dạng được sử dụng là: php_serialize, php va php_ binary, wddx

- Bán thân các trình xử lý session của PHP không chứa lỗ hồng Nhưng do PHP mặc định sử dụng định dạng php cho tùy chọn session.serialize handler, nên trong quá trình xây đựng phần mềm, có thể xảy ra sự khác nhau của trường session.serialize_handler, dẫn đến đữ liệu không được xử lý deserialize đúng hướng, tạo ra 16 héng deserialization trong session

2.5 Phòng chống Immsecure deserialization trên PHP

- Trong một số trường hợp có thé thay thé serialize() va unserialize() bằng các định dang an toan hon nhu JSON (json_encode(), json_decode())

GV: Ninh Thi Thu Trang 15 Nhom 01

Trang 16

Bai tap lon CHƯƠNG 2: LO HONG INSECURE DESERIALIZATION TREN PHP

- Đảm bảo xác thực dữ liệu trước khi unser1alize nó

- Hạn chế các lớp có thê được unserialize bằng cách sử dụng tham số thứ hai của ham unserialize() (trong PHP >= 7.0)

- Sử dụng ký điện tử hoặc hash (ví dụ HMAC) để đảm bảo tính toàn vẹn của dữ liệu

- Có thê sử đụng các công cụ như OWASP PHP Security Project để bảo vệ ứng dụng khỏi các cuộc tấn công insecure đeserialization

GV: Ninh Thị Thu Trang 16 Nhom 01

Trang 17

Bai tap lon CHƯƠNG 3: LO HONG INSECURE DESERIALIZATION TREN JAVA

CHUONG 3: LO HONG INSECURE

DESERIALIZATION TREN JAVA

3.1 Java Serialization

4 Write class information to the ' 3 Write the object to the stream using

stream by calling : writeObject(Object) writeClass

wooo eee eee eee eee Reum_ >»

- Tuần tự hóa trong Java (Serialize) cho phép các đối tượng được chuyền đối thành một luồng byte hoặc một mảng byte Máng byte được tuần tự hóa biểu thị lớp của đối tượng, phiên bản của đối tượng và trạng thái bên trong của đối tượng

- Đề một lớp Java có thế tuần tự hóa, nó phải đáp ứng một tiêu chí đó là lớp cần implement interface Serializable (java.io.Serializable) Cac lop khéng implement Serializable sẽ không tương thích với quy trình tuần tự hóa và không thê lưu trữ trạng thái của chúng bằng cách sử dụng tính năng tuần tự hóa cũng như không truy xuất trạng thái của chúng bằng cách sử dụng tính năng giải tuần tự hóa

- Interface Serializable là một interface đễ sử dụng vì nó không yêu cầu nhà phát trién triển khai bắt kỳ phương thức nào, việc của nó là xác định lớp có thể tuần tự hóa hay không, từ đó cho phép chuyên đổi đối tượng runtime thành mọt luỗng byte

- Tuần tự hóa đối tượng trong Java chấp nhận ca 2 interface Serializable va Externalizable khi tuần tự hóa các đối tượng Mọi đối tượng được tuần tự hóa đều được kiểm tra đề hỗ trợ interface Externalizable Nếu đối tượng hỗ trợ interface, thì nếu có, phương thức writeExternal được gọi đề xử lý tuần tự hóa đối tượng Nếu đối tượng không hỗ trợ interface Externalizable nhưng hỗ trợ interface Serializable, thi nếu có, đối tượng sẽ được ghi vào luỗng

Quá trình tuấn tự hoá trong Java:

- Ảnh xạ một cấu trúc dữ liệu vào lớp ObjectOutputStream, lớp này sử dụng OutputStream đề ghi luồng vào cơ sở dữ liệu, hệ thống tệp hoặc luồng mạng GV: Ninh Thị Thu Trang 17 Nhóm 01

Ngày đăng: 15/02/2025, 22:24

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN