“Serialization” là gì?
Đây là quá trình tuần tự chuyển đổi một đối tượng (Object). Ví dụ như một đối tượng Java (Java object), thành một định dạng có thể được gửi qua mạng, hoặc được lưu trữ trong bộ nhớ hoặc cơ sở dữ liệu. Mục đích của Serialization là để bảo vệ một đối tượng, có nghĩa là đối tượng sẽ tồn tại bên ngoài chương trình nơi mà nó được tạo ra. Như vậy, bằng việc tìm hiểu cơ chế của Serialization, ta có thể suy ra cơ chế làm việc của Deserialization như sau: Deserialization (chuyển đổi cấu trúc dữ liệu ảo) là quá trình sẽ giúp chuyển đổi định dạng dãy byte liên tục trở lại thành một đối tượng “sống”.
Phân loại Serialization
Có rất nhiều loại Serialization có sẵn phụ thuộc vào đối tượng đang được tuần tự chuyển đổi và mục đích của chúng. Hầu như tất cả các ngôn ngữ lập trình hiện đại đều hỗ trợ Serialization. Trong Java, ví dụ một đối tượng được chuyển đổi thành dạng nhỏ gọn sử dụng luồng byte, và luồng byte sau đó có thể chuyển đổi ngược lại thành một bản sao của đối tượng đó. Các loại Serialization khác bao gồm chuyển đổi một đối tượng thành một định dạng phân cấp như JSON hoặc XML. Ưu điểm của việc tuần tự hóa này là các đối tượng được tuần tự hóa có thể được đọc dưới dạng văn bản thuần, thay vì một luồng byte.Các lỗ hổng do Deserialization trong ba tháng gần đây
Trong top 10 nguy cơ bảo mật hàng đầu năm 2017, việc kết nối không an toàn đứng ở vị trí thứ tám. Đây thực sự cũng là một câu hỏi lớn cho vấn đề an ninh mạng trong năm 2017 và năm nay. Vào năm 2017, các lỗ hổng mới liên quan đến việc tuần tự hóa không an toàn, chủ yếu là ở Java, đã được công bố (xem hình 1).TÊN | NGÀY PHÁT HIỆN | THÔNG TIN LỖ HỔNG |
CVE-2017-12149 | 01/08/2017 | Lỗ hổng trong máy chủ ứng dụng JBoss cho phép thực hiện mã tùy ý thông qua dữ liệu đã được tạo thủ công bởi vì HTTP Invoker không giới hạn các lớp mà nó thực hiện Deserialization |
CVE-2017-10271 | 21/06/2017 | Lỗ hổng trong Oracle WebLogic Server cho phép thực hiện mã tùy ý do không đủ bộ lọc dữ liệu đầu vào trong thành phần wls-wsat |
CVE-2017-9805 | 21/06/2017 | Plugin REST trong Apache Struts sử dụng XStreamHandler với một cá thể của XStream để Deserialization mà không có bất kỳ kiểu lọc nào, có thể dẫn đến việc thực hiện mã từ xa khi sắp sếp payload của XML. |
CVE-2017-7504 | 05/04/2017 | HTTPServerILServlet.java trong JMS cho phép kẻ tấn công từ xa thực hiện mã tùy ý thông qua dữ liệu đã được tạo thủ công bởi vì nó không hạn chế các lớp mà nó thực hiện Deserialization |
Hình 1: Mã lỗ hổng CVEs liên quan đến Deserialization không an toàn

Hình 2: Các cuộc tấn công Deserialization không an toàn trong suốt ba tháng vừa qua
Hầu hết những kẻ tấn công không sử dụng các vector tấn công nào khác ngoài hình thức tấn công Deserialization không an toàn. Chúng tôi nhận thấy rằng mỗi kẻ tấn công đều đang cố gắng khai thác các lỗ hổng khác nhau với lỗ hổng được đề cập ở trên là phổ biến nhất.TÊN | HỆ THỐNG ẢNH HƯỞNG | CÔNG KHAI | NAME | HỆ ĐIỀU HÀNH ẢNH HƯỞNG | CÔNG KHAI |
CVE-2017-9844 | SAP NetWeaver | yes | CVE-2016-2170 | Apache OFBiz | No |
CVE-2017-9830 | Code42 CrashPlan | No | CVE-2016-2003 | HP P9000, XP7 Command View Advanced Edition (CVAE) Suite | No |
CVE-2017-9805 | Apache Struts | Yes | CVE-2016-2000 | HP Asset Manager | No |
CVE-2017-7504 | Red Hat JBoss | yes | CVE-2016-1999 | HP Release Control | No |
CVE-2017-5878 | Apache OpenMeetings | Yes | CVE-2016-1998 | HP Service Manager | No |
CVE-2017-5645 | Apache Log4j | No | CVE-2016-1997 | HP Operations Orchestration | No |
CVE-2017-5641 | Apache BlazeDS | Yes | CVE-2016-1986 | HP Continuous Delivery Automation | No |
CVE-2017-5586 | OpenText Documentum D2 | yes | CVE-2016-1985 | HP Operations Manager | No |
CVE-2017-3159 | Apache Camel | Yes | CVE-2016-1487 | Lexmark Markvision Enterprise | No |
CVE-2017-3066 | Adobe ColdFusion | Yes | CVE-2016-1291 | Cisco Prime Infrastructure | Yes |
CVE-2017-2608 | Jenkins | Yes | CVE-2016-0958 | Adobe Experience Manager | No |
CVE-2017-12149 | Red Hat JBoss | yes | CVE-2016-0788 | Jenkins | Yes |
CVE-2017-11284 | Adobe ColdFusion | No | CVE-2016-0779 | Apache TomEE | No |
CVE-2017-11283 | Adobe ColdFusion | No | CVE-2016-0714 | Apache Tomcat | No |
CVE-2017-1000353 | CloudBees Jenkins | yes | CVE-2015-8765 | McAfee ePolicy Orchestrator | No |
CVE-2016-9606 | Resteasy | Yes | CVE-2015-8581 | Apache TomEE | No |
CVE-2016-9299 | Jenkins | yes | CVE-2015-8545 | NetApp | No |
CVE-2016-8749 | Jackson (JSON) | ||||
CVE-2016-8744 | Apache Brooklyn | Yes | CVE-2015-8238 | Unify OpenScape | No |
CVE-2016-8735 | Apache Tomcat JMX | yes | CVE-2015-8237 | Unify OpenScape | No |
CVE-2016-7462 | VMWare vRealize Operations | No | CVE-2015-8103 | Jenkins | Yes |
CVE-2016-6809 | Apache Tika | No | CVE-2015-7501 | Red Hat JBoss | Yes |
CVE-2016-5229 | Atlassian Bamboo | Yes | CVE-2015-7501 | Oracle Application Testing Suite | No |
CVE-2016-5004 | Apache Archiva | yes | CVE-2015-7450 | IBM Websphere | Yes |
CVE-2016-4385 | HP Network Automation | No | CVE-2015-7253 | Commvault Edge Server | Yes |
CVE-2016-4372 | HP iMC | No | CVE-2015-6934 | VMWare vCenter/vRealize | No |
CVE-2016-3642 | Solarwinds Virtualization Manager | yes | CVE-2015-6576 | Atlassian Bamboo | No |
CVE-2016-3461 | Oracle MySQL Enterprise Monitor | yes | CVE-2015-6555 | Symantec Endpoint Protection Manager | Yes |
CVE-2016-3427 | JMX | yes | CVE-2015-6420 | Cisco (various frameworks) | |
CVE-2016-3415 | Zimbra Collaboration | No | CVE-2015-5348 | Apache Camel | No |
CVE-2016-2510 | Red Hat JBoss BPM Suite | No | CVE-2015-5254 | Apache ActiveMQ | No |
CVE-2016-2173 | Spring AMPQ | No | CVE-2015-4852 | Oracle WebLogic | Yes |
CVE-2016-2170 | Apache OFBiz | No | CVE-2015-3253 | Jenkins | Yes |
CVE-2016-2003 | HP P9000, XP7 Command View Advanced Edition (CVAE) Suite | No | CVE-2012-4858 | IBM Congnos BI | No |
Hình 3: CVEs liên quan đến Deserialization không an toàn
Tấn công Deserialization vào website
Hầu hết các cuộc tấn công mà chúng ta thấy đều liên quan đến việc tuần tự hóa byte của các đối tượng Java. Ngoài ra, chúng ta đã thấy một số cuộc tấn công serialization đến XML và các định dạng khác (xem hình 4).
Hình 4: Phân bố các lỗ hổng trên các định dạng tuần tự khác nhau
Trong cuộc tấn công sau (xem hình 5), kẻ tấn công đang cố khai thác lỗ hổng CVE-2017-10271. Các payload được gửi trong định dạng của yêu cầu HTTP bằng cách sử dụng một đối tượng Java được tuần tự hóa thông qua XML đại diện. Vector tấn công chứa mảng java được nối tiếp vào một XML
Hình 5: Vector tấn công chứa mảng Java được tuần tự hóa vào một XML
Thực tế đây là một mảng Java có thể được nhìn thấy bởi cấu trúc phân cấp của các tham số, với hậu tố của “java / void / array / void / string”. Kẻ tấn công đang cố gắng chạy một tập lệnh bash trên máy chủ bị tấn công. Tập lệnh bash này cố gắng gửi một yêu cầu HTTP sử dụng lệnh hệ điều hành “wget” sau đó tải về một tập lệnh trình báo được ngụy trang dưới dạng tệp hình ảnh (lưu ý phần mở rộng tệp jpg) và chạy nó. Có rất ít các ghi chú được thực hiện kiểm tra lệnh này:- Sự tồn tại của lệnh shell và “wget” chỉ ra rằng payload này đang nhắm đến các hệ thống Linux
- Việc sử dụng một phần mở rộng tệp hình ảnh thường được thực hiện để tránh các điều kiện bảo mật
- Tham số “-q” đến “wget” là viết tắt của “quiet”, nghĩa là “wget” sẽ không có đầu ra cho giao diện điều khiển, do đó sẽ khó ghi nhận rằng yêu cầu đó được thực hiện. Một khi các tập lệnh tải về máy chủ bị nhiễm phần mềm độc hại khai thác tiền ảo, nó sẽ thực hiên quá trình đào tiền ảo Monero (một đồng tiền ảo tương tự như Bitcoin).


Các phương pháp tấn công khác
Mẫu số chung của các cuộc tấn công ở trên là kẻ tấn công website đang cố lây nhiễm phần mềm độc hại khai thác tiền ảo bằng cách sử dụng lỗ hổng Deserialization không an toàn. Tuy nhiên tấn công Deserialization không phải là phương pháp duy nhất để đạt được mục tiêu này. Dưới đây, chúng ta sẽ thấy một ví dụ về một cuộc tấn công website khác, lần này tại header “Content-Type”.
Hình 8: Vector tấn công sử dụng lỗ hổng RCE của Apache Struts
Cuộc tấn công này cố gắng khai thác CVE-2017-5638, một lỗ hổng nổi tiếng của RCE liên quan đến Apache Struts đã được công bố vào tháng 3 năm 2017. Khi được ghi nhận lần đầu, chúng ta không thấy dấu vết của những người khai thác tiền ảo trong các cuộc tấn công liên quan đến CVE này và phần lớn payload là các cuộc tấn công trinh sát. Tuy nhiên, trong cuộc tấn công này, payload (đánh dấu màu vàng ở trên) rất giống với payload từ ví dụ trước sử dụng cùng một máy chủ từ xa và cùng một kịch bản chính xác, lây nhiễm vào máy chủ bằng phần mềm độc hại khai thác tiền ảo. Phương pháp tấn công cũ này với một payload mới cho thấy một xu hướng mới trong lĩnh vực không gian mạng – những kẻ tấn công website cố gắng khai thác các lỗ hổng của RCE, mới và cũ, để biến các máy chủ dễ bị tổn thương thành những người khai thác tiền ảo và thu được một chỉ số ROI nhanh hơn cho “nỗ lực” của họ.