外注PHPソースからWorm.Avron検出!?何が原因なのか困ってま

このQ&Aのポイント
  • 外注PHPソースからWorm.Avronが検出されており、原因が分からず困っています。
  • 個人経営の商店で小規模のECサイトを構築中で、PHPの勉強中です。
  • 社長が買い込んだスクリプトの中で、メール送信モジュールがウイルスとして検出されました。VirsTotalでのチェックでも陽性反応があり、心配しています。ソースを見ても理解できない状態です。
回答を見る
  • ベストアンサー

外注PHPソースからWorm.Avron検出!?何が原因なのか困ってま

外注PHPソースからWorm.Avron検出!?何が原因なのか困ってます 個人経営の商店で小規模のECサイトを現在構築中です。 私のレベルは、ちょっとパソコンが出来るから、という理由だけでサイト管理者になってしまいました。 現在PHPの初歩向け教本で必死に勉強中の身分です。 社長は何年も前から店のEC化にお金だけは注ぎ込んでたらしく、人に言われるままに買い込んだ色々なスクリプトをどさっと渡されています。 先日ローカルマシン上でウイルスチェッカを回したら、社長がオーダーしたECサイト用PHPのうち、メール送信モジュールだけが「Worm.Avron」としてひっかかりました。 VirsTotalで再チェックすると、43社中、16エンジンで陽性反応なので少々慌てています。 http://www.virustotal.com/file-scan/report.html?id=ba43c6dac7bb642872bee3183c262b19c949f99f2af73796a1cbe4326f55803a-1286980743 問題のPHPソースはこちらです。 http://www1.axfc.net/uploader/File/so/52671.dat お店の登録会員が誕生日になると、お祝いメールを送信するモジュールです。 (300行程度です) charset=iso-8859-1 だったりする部分は直さなきゃ、と気づくのですが、 プレーンテキストのPHPスクリプトが、なぜワームとして検出されるのか? ソースを見ても私の力ではよくわからない状態です。 VirsTotalの43社中、27エンジンでは「無罪判決」なので、どうか誤検知であってほしいと思っています。 でも、本当にこのPHPがワームとして働くならば店の信用問題になってしまいます。 今の私のレベルでは、ワーム扱いになっている行さえ書き直せば済むのかな? という認識で投稿しているのですが・・・ どなたかソースを見ていただけませんでしょうか?

  • PHP
  • 回答数3
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • localica
  • ベストアンサー率52% (202/385)
回答No.3

こんにちは >なんと、そのまま使っていたら恐ろしい事件を引き起こしかねない所だったのですね。 誤解があるようですので補足しておきますが、このスクリプト自体にウイルスコードが含まれているわけではありません。 このスクリプトによって送られるメールに「悪意のあるプログラム(ウイルスコード)」を含めることが可能なだけです。 おそらく、大雑把な検知システムでは単純に文字列だけで検出し、そうでない検知システムは「文字列+特定の条件」や実際の「悪意あるプログラム」を検出するようにしているので、ベンダーによってこのスクリプトがワームとして判断されるか分かれているのでしょう。(※推測に過ぎませんが) しかし、このスクリプトから送信されるメールは高確率でウイルス付メールと判定されると思います。 セキュリティ担当としては実効可能なコードを含んだメールは迷惑以外の何ものでもありませんし、そもそもフレームを含んだメールに意味があるのでしょうか? まあ、毎日SPAMメールと格闘している者の愚痴として聞き流してくださっても構いませんが。

eddie_vinson
質問者

お礼

localicaさん、本当に懇切丁寧なご指導ありがとうございます。 >このスクリプト自体にウイルスコードが含まれているわけではありません。 ちょっと安心できました・・・ >このスクリプトによって送られるメールに「悪意のあるプログラム(ウイルスコード)」を含めることが可能なだけです。 (このスクリプトを無修正でそのままECサイトに使用したら)「無防備な新米管理者」である私の知らぬ間に、勝手に誰か悪党がうちのお店のメール発信にインジェクションをする。 ∴ウイルスチェッカー会社の約三分の一がこのPHPをマルウエア踏み台予備軍として定義に組み入れた・・・ という捉え方でよろしいでしょうか? 職場では、社長にブログの簡単なカスタマイズを見せたら過大評価されてしまい、うっかり大役を任されてしまったなあ、と冷や汗の毎日です。 クロスサイトスクリプティングとSQLインジェクションの違いも、イマイチどこがどう違うの??という状態で前途多難ですが、これを機に猛勉強がんばってみます! >しかし、このスクリプトから送信されるメールは高確率でウイルス付メールと判定されると思います。 それは ・フレーム(悪意の外部サイトを混入されるから?)付きメールのPHPだからでしょうか? ・$message挿入をJavaScriptのinnerHTMLに頼るロジックだからでしょうか? ・この二つがセットになったからでしょうか? ・どちらか一つでもあったら踏み台の危険があって、$messageはDBから直接平文で送信文に抽出すべき、という方向性でしょうか? No.1のluka3さんからご指導頂いた修正案は、iframeをあえて活かしておく(VBA32チェッカで合格するために)案でしたので、ちょっと気になってみました。 SPAMは私もウンザリの経験がありますので、お客様の誕生祝メッセージには必ず割引特典やポイント贈呈などを入れるよう、社長に進言するつもりです。 いろいろ頓珍漢なレベルですが、一生懸命頑張りたいと思います。

その他の回答 (2)

  • localica
  • ベストアンサー率52% (202/385)
回答No.2

>VirsTotalで再チェックすると、43社中、16エンジンで陽性反応なので少々慌てています。 陽性反応の理由はそれぞれのセキュリティベンダーが決定していることなので分かりませんが、私の使用しているセキュリティソフト(大手ベンダ製品)では検知対象となりませんでした。 ただし、このスクリプトから送られるメールはゲートウエイのセキュリティ製品では検知対象となる可能性が高いと思います。 理由は、典型的なガンブラー手法のメールと同じだからです。 No.1の方が指摘されていますが、innerHTML はクロスサイトスクリプティングの脆弱性を含んでいます。 innerHTML → innerText に変更すれば検知対象から外れるかもしれませんが、ロジックを見直す方が宜しいと思います。

eddie_vinson
質問者

お礼

localicaさん、今回大変お世話になります。 > 理由は、典型的なガンブラー手法のメールと同じだからです。 > > No.1の方が指摘されていますが、innerHTML はクロスサイトスクリプティングの脆弱性を含んでいます。 なんと、そのまま使っていたら恐ろしい事件を引き起こしかねない所だったのですね。 ちょっと身勝手で失礼な質問投稿をしてしまった、と反省もしていますが、やっぱり質問してよかった、と皆様に感謝いたしております。 JavaScriptや非推奨タグのiframeは、顕在化しているXSSはもちろんですし、今後発生するかもしれない潜在的にも人の迷惑になりやすい、と心得ておくのが無難でしょうか? >ロジックを見直す方が宜しいと思います。 そうですね。 にわか管理者の私にはとても難問ですが、No.1のluka3さんも応援して下さっていますし、一生懸命頑張ってみます。 工程とにらめっこするとかなり無理なんですが、社長も自分が購入したスクリプトに脆弱性が本当にあるとは思ってない様子なので、事情を説明しようと思っています。

  • luka3
  • ベストアンサー率74% (300/403)
回答No.1

eddie_vinson さん、こんにちは。 プレーンテキストな訳ですから、自分で少しずつ削除して再検出させればどこがおかしいかわかるハズですよ。 で、試してみたところ、228行目の  idContent.document.body.innerHTML="<? echo nl2br($message) ?>"; がアウトのようで、この行を削除するだけで検出0となりました。 $messageはこのphpでは定義されていませんので、これがどういう意味をなすかはわかりませんが、iframeの中身をまるっと書き換える、ということがよくないということでしょうか。 ここまででやめようかとも思いましたが、少し興味があったので対策を考えました。 まずiframeを、textareaやdivにしてみましたがVBA32だけは許してくれませんでした。 そこで$messageをJavaScriptでなく直接表示するようにしたところうまくいきました。 変更したのは189行目を <iframe width="500" name="idContent" height="250"><? echo nl2br($message) ?></iframe> として、225~230行目までを削除しました。 ただこれはウイルス検出されないというだけで、実際にうまく表示されるかはやってみないとわかりませんね。 試してみてください。

eddie_vinson
質問者

お礼

luka3さん、今回本当にありがとうございます。 もうすっかり動転してました。 > プレーンテキストな訳ですから、自分で少しずつ削除して再検出させればどこがおかしいかわかるハズですよ。 大変失礼しました。 今、深呼吸してみれば、確かにそうですよね。 自分の力では手に負えない膨大な構文の意味解明ばかりに、完全に捉われてしまっていました。 次回からは構文の意味が分からなくても、冷静に一行ずつ削除してみます。 $messageでgrepしてみたら、任意の誕生日お祝いメッセージをDB格納&抽出している様子でした。 >ここまででやめようかとも思いましたが、少し興味があったので対策を考えました。 こんなにご指導頂けまして、本当に感謝感激です! さっそく実験してみます!

関連するQ&A

  • PHPで作成したサイトのSEOについて

    ECサイトを運営しているのですがECキューブというオープンソースを使って ECサイトの中にLPサイト風のキャンペーンページを1ページ設けています。 このページのURLがcampaign.phpというURLなのですが、検索エンジンには .phpで作成したものはあまりよくないのでしょうか?

    • 締切済み
    • SEO
  • PHPの処理後に吐き出されるソースの重さやスピード

    とても稚拙な質問なら大変申し訳ないのですが、検索しても出てこなかったために質問させていただきます。 現在Wodpressのテンプレートをカスタマイズしてマルチサイトのホームページを制作しているのですが、URLによって処理を変えたい部分があります。 1つのPHPファイルに各URL(数千ページ相当)の処理内容をif文の条件分岐で何百何千行と記述した場合でも、ブラウザ上のソースでは、その該当するページは2行程度しか表示されません。 ただ、これはソース上2行程度なだけで、ファイルやページの重さ、実際に体感するユーザーや検索エンジンにとってどうなのか、下記のことを知りたいです。 主に知りたいことは、 ■ユーザーがそのページを見る際、体感速度で大きな違いはあるのか。 ■googleなどの検索エンジンより、このサイト(ページ)は重いページと判断されるのか。 です。 処理後のソースが2行程度ならば重いサイト(ページ)にはならないだろうと安易な考えなのですが、実際にどうか分からず教えてほしいです。 すみませんが、ご教授いただければ幸いです。

    • ベストアンサー
    • PHP
  • PHPで取得したHTMLソースと実際のソースの違い

    PHPで、 file_get_contents($uri) などで取得したHTMLソースと、実際にアクセスして表示したソースが違う場合があります。 例えば、ネットオフというサイトが違いました。 http://www.netoff.co.jp/cmdtyallsearch/hdnAllSearchFlg/1/Ctgry/home/LRack/*/SetFlg/?cat=&word=9784864102254 PHPで取得すると、商品結果の情報を取得できなかったのですが、 実際のソース(FireFoxでCtrl+Uでページのソース表示)は表示されています。 こういったページもPHPで取得することは可能なのでしょうか? わかる方よろしくおねがいします。

    • ベストアンサー
    • PHP
  • PHP初心者です。

    xamppを使用して勉強してます。 htmlでファイルをアップロードするソースを作り、phpで <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8" /> <?php $file=$_FILES['my_img']; $filePath="./user_img/".$file['name']; move_uploaded_file($file['tmp_name'],$filePath); というコードを書いて実行したところ、 Warning: move_uploaded_file(./user_img/021.jpg): failed to open stream: No such file or directory in  このphpファイルの名前 on line 〇〇行目 Warning: move_uploaded_file(): Unable to move 'C:\xampp\tmp\php6207.tmp' to './user_img/021.jpg' in このphpファイルの名前 on line 〇〇行目 とエラーになってしまいました。 なぜでしょうか?

    • 締切済み
    • PHP
  • PHP初心者です。

    PHP初心者です。 画像を何枚かアップロードし、リサイズをしてImagesフォルダ に収めたのですが、それをPHPとJRUQEYと組み合わせて「次へ」 ボタンをクリックすると、アップロードした順番に画像が スライドするというのを作りたいのですが、スライドする所 でつまづいています。どなたかご教授お願い致します。    ただ、初心者ですのでごく基本的な関数でお願いしたいのと、 質問の内容は実用的ではないと思いますが、どうか宜しく お願い致します。  以下がソースになりますが、手直しもしくは新しいものが あれば宜しくお願い致します。 <html> <meta http-equiv="content-type" content="text/html; charset=euc-jp"> <script src="jquery.js"></script> <script> pic=new Array; c=0; <? $dir=opendir("./images/"); $cnt=0; while( $f=readdir($dir) ){ if(is_file("./images/".$f)){ print("pic[".$cnt."]='".$f."';\n"); $cnt++;} } ?> $(function(){ $("img").attr("src","images/"+pic[c]); }); $cnt=0; $(function btn(){ cnt++; $("img").attr("src","images/"+pic[c]); }); </script> <body> <img /> <form method="post"> <input type="button" value="次へ" onclick="btn()"> </form> </body> </html>    宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPのビルドについて質問です。

    ご教授願います。 LINUX上でPHPをソースからビルドした場合、例えば./configureオプションに --with-readline というオプションをつけたとします。その場合別途インストールした libreadlline.soというモジュールが共有ライブラリとして動的に作用しますよね? lddコマンドで共有ライブラリをしらべると linux-vdso.so.1 => (0x00007fff86bff000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f70ed4ab000) libz.so.1 => /lib64/libz.so.1 (0x00007f70ed294000) libexslt.so.0 => /usr/lib64/libexslt.so.0 (0x00007f70ed080000) libtidy-0.99.so.0 => /usr/lib64/libtidy-0.99.so.0 (0x00007f70ece21000) libreadline.so.6 => /lib64/libreadline.so.6 (0x00007f70ecbdd000) libncurses.so.5 => /lib64/libncurses.so.5 (0x00007f70ec9bb000) librt.so.1 => /lib64/librt.so.1 (0x00007f70ec7b3000) libmcrypt.so.4 => /usr/local/lib/libmcrypt.so.4 (0x00007f70ec580000) libgmp.so.3 => /usr/lib64/libgmp.so.3 (0x00007f70ec325000) libpng12.so.0 => /usr/lib64/libpng12.so.0 (0x00007f70ec0ff000) とこのような共有状態が確認できます。だだこれだと、libreadline.so.6 => /lib64/libreadline.so.6という共有モジュールを 意図して削除した場合、動的リンクができずに php -a によるインタラクティブモードが動かせなくなります。 これを回避するために、静的リンク?というのでしょうかphpバイナリそのものに組み込むことはできないのでしょうか? つまり外部のlibreadline.soに依存せずにphpを動かすと行った具合です。 もちろん、これがなんのいみのない処理なのはわかります。起動するたびにメモリを大量に消費してしまうのでしょう。 ただ、こういうlibreadline.soなどの共有モジュールをphpバイナリに組み込める方法があるかどうかをしって実際に試してみたいのです。 LINUXなどPHPなどに造詣が深い方よろしっくご教授ください。お願い致します。

    • 締切済み
    • PHP
  • PHPで電卓を作りたい

    PHPで電卓を作りたいと思っています。 環境:PHP5&XP 四則演算ができればよい程度の電卓をIE上で作りたいと思っています。 PHPの中に電卓モジュールのようなものはあるのでしょうか。 拡張子はPHPですが、言語はJAVAでもいいかと思います。 参考サイト、ソースなど教えていただけると助かります。

    • ベストアンサー
    • PHP
  • phpの表示について

    phpを勉強するためにxampをいれてソースコードをかきましたが、上手く表示されません。 拡張子は.phpで保存をしてますが上手く表示されません。 ※表示ないようはソースコードがそのまま表示してしまいます。 またlocalhostなのにURLでは file:///C:/xampp/htdocs/bass/ha.php のように表示してしまいます。 どうすれば、プログラム通りの結果が表示されますか?

    • ベストアンサー
    • PHP
  • ワームは駆除できたのでしょうか???

    先日、いつも閲覧しているサイトを見ていたときに、ノートンからの警告で、ワーム(Wscript.KakWorm)に感染していることが分かりました。 感染場所は一時ファイルで(Temporary Internet Files)ノートンでは駆除出来なかったので、色々なサイトを見ながら、一時ファイルの削除をしました。 その後、パソコンの調子がおかしくなったので、システムの復元をし、今は元通りになっています。 ノートンでウイルス検索をしても、検出はしません。 (しかし、感染していた時も検出は出来なかった) ワームは駆除できたのでしょうか? 一応、Cドライブの中の隠しファイルも含めて検索したのですが、該当のファイル名は見つかりませんでした。 ノートンも、マイクロソフト関連のソフトも全てアップデートはしています。 分かりやすく、教えていただけますでしょうか。 (もしくは、既出の質問であれば、該当URLを教えていただけますでしょうか)

  • PHPについて

    PHPの勉強をはじめてまだ数日の初心者です(プログラミング自体はじめてです) 質問なのですが、現在 PHPによるWebアプリケーションスーパーサンプル http://www.nishi2002.com/phpsample/ にて勉強してるのですが、どうしてもわからない所がありまして 知恵を貸していただきたく投稿いたします。 書籍の中に『オンラインメモ帳』を作る項目があり そのソースの中に $file_name = (isset($_REQUEST["f"])) ? basename($_REQUEST["f"]) : ""; という部分があるのですが、この『?』はどういった意味を持つのでしょうか? 調べてみたのですが解答にいきつかず、どなたかご教授お願いします!!!

    • ベストアンサー
    • PHP

専門家に質問してみよう