Deserialization – xu hướng tấn công website mới

Email
Nhóm nghiên cứu của CyStack đã liên tục giám sát các cuộc tấn công website qua lỗ hổng mới, bằng cách đó chúng tôi nhận thấy có ít nhất 4 lỗ hổng quan trọng đã được phát hiện trong năm qua. Phân tích cho thấy, trong năm vừa qua, số lượng các cuộc tấn công website chuyển đổi cấu trúc dữ liệu (tấn công Deserialization) đã tăng lên đến 300%, biến chúng thành một nguy cơ bảo mật nghiêm trọng đối với các ứng dụng web – đặc biệt trong làn sóng đào tiền ảo bất hợp pháp. Mọi thứ càng trở nên tồi tệ hơn khi nhiều cuộc tấn công đã được đưa ra với mục đích cài đặt phần mềm độc hại khai thác tiền ảo trên các máy chủ web dễ bị tấn công, làm CPU hoạt động quá tải. Bài viết này sẽ giải thích những lỗ hổng chuyển đổi cấu trúc dữ liệu không an toàn là gì, cho thấy xu hướng ngày càng tăng của các cuộc tấn công khai thác những lỗ hổng này và kẻ tấn công làm gì để khai thác chúng (bao gồm cả các ví dụ tấn công thực tế).

“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”.
Sơ đồ thể hiện cơ chế hoạt động của Serialization và De-Serialization
Sơ đồ thể hiện cơ chế hoạt động của Serialization và De-Serialization
Ví dụ, khi rút tiền từ máy ATM, thông tin của chủ tài khoản và hoạt động yêu cầu được lưu trữ trong một đối tượng nội bộ. Trước khi đối tượng này được gửi tới máy chủ chính, nó được tuần tự thực hiện (Serialization) chuyển dữ liệu từ dạng đối tượng thành dạng dãy byte và phê duyệt các hoạt động cần thiết. Máy chủ sau đó chuyển đổi cấu trúc dữ liệu từ dạng byte sang dạng đối tượng (Desertlization) để hoàn thành các hoạt động, phản hồi với người dù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ì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

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

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).
Mã Script tiếp theo (xem hình 6) cố gắng khai thác cùng một lỗ hổng, tuy nhiên thời gian này payload đang nhắm đến các máy chủ Windows bằng lệnh cmd.exe và Powershell để tải phần mềm độc hại và chạy nó. Tấn công vector đang cố gắng lây nhiễm cho máy chủ Windows bằng phần mềm độc hại khai thác tiền ảo "<yoastmark Điều này chỉ ra rằng có hai phương pháp lây nhiễm khác nhau cho máy chủ Windows và Linux, mỗi hệ thống tương ứng với một tập lệnh riêng được chỉ định của nó. Một ví dụ khác là payload sau (hình 7) rút ra từ cuộc tấn công Deserialization với một đối tượng được nối tiếp Java. "<yoastmark Mã hoá “xấu” là một sản phẩm của serialization trên Java, nơi mà đối tượng được đại diện trong luồng byte. Tuy nhiên, có thể thấy một tập lệnh thuần văn bản được đánh dấu màu vàng. “$ {IFS}” là một biến định nghĩa một dấu cách trường nội bộ, trong trường hợp này nó chỉ là một biến cho dấu cách. Biến này có thể được sử dụng thay cho dấu cách để làm cho payload khó phát hiện hơn. Cũng như trong các ví dụ trước, tập lệnh Bash nhắm mục tiêu các máy chủ Linux gửi một yêu cầu HTTP bằng cách sử dụng “wget” để tải xuống một công cụ đào tiền ảo (coin miner).

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

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ọ.

Lời khuyên

Với nhiều lỗ hổng mới liên quan đến Deserialization không an toàn đã được phát hiện trong năm nay và sự xuất hiện của nó trong danh sách các rủi ro bảo mật hàng đầu của OWASP, chúng tôi hi vọng các lỗ hổng liên quan sẽ được phát hiện đầy đủ vào cuối năm 2018. Trong thời gian chờ đợi, các tổ chức sử dụng các máy chủ bị ảnh hưởng được khuyên sử dụng bản vá mới nhất để giảm thiểu các lỗ hổng này. Còn một lựa chọn thay thế cho bản vá lỗi bằng tay là dùng bản vá ảo. Bản vá ảo giúp bảo vệ các ứng dụng web khỏi các cuộc tấn công website, giảm số lượng điểm tiếp xúc và giảm chi phí của các bản vá lỗi khẩn cấp cũng như các chu kỳ khắc phục. Xem thêm về các lỗ hổng khác tại bài viết: OWASP công bố top 10 rủi ro bảo mật ứng dụng

Nhận những bài viết
chất lượng do chúng tôi chọn lọc








Email