外注PHPソースからWorm.Avron検出!?何が原因なのか困ってます
個人経営の商店で小規模のECサイトを現在構築中です。
私のレベルは、ちょっとパソコンが出来るから、という理由だけでサイト管理者になってしまいました。
現在PHPの初歩向け教本で必死に勉強中の身分です。
社長は何年も前から店のEC化にお金だけは注ぎ込んでたらしく、人に言われるままに買い込んだ色々なスクリプトをどさっと渡されています。
先日ローカルマシン上でウイルスチェッカを回したら、社長がオーダーしたECサイト用PHPのうち、メール送信モジュールだけが「Worm.Avron」としてひっかかりました。
VirsTotalで再チェックすると、43社中、16エンジンで陽性反応なので少々慌てています。
http://www.virustotal.com/file-scan/report.html? …
問題のPHPソースはこちらです。
http://www1.axfc.net/uploader/File/so/52671.dat
お店の登録会員が誕生日になると、お祝いメールを送信するモジュールです。
(300行程度です)
charset=iso-8859-1 だったりする部分は直さなきゃ、と気づくのですが、
プレーンテキストのPHPスクリプトが、なぜワームとして検出されるのか?
ソースを見ても私の力ではよくわからない状態です。
VirsTotalの43社中、27エンジンでは「無罪判決」なので、どうか誤検知であってほしいと思っています。
でも、本当にこのPHPがワームとして働くならば店の信用問題になってしまいます。
今の私のレベルでは、ワーム扱いになっている行さえ書き直せば済むのかな?
という認識で投稿しているのですが・・・
どなたかソースを見ていただけませんでしょうか?
No.3ベストアンサー
- 回答日時:
こんにちは
>なんと、そのまま使っていたら恐ろしい事件を引き起こしかねない所だったのですね。
誤解があるようですので補足しておきますが、このスクリプト自体にウイルスコードが含まれているわけではありません。
このスクリプトによって送られるメールに「悪意のあるプログラム(ウイルスコード)」を含めることが可能なだけです。
おそらく、大雑把な検知システムでは単純に文字列だけで検出し、そうでない検知システムは「文字列+特定の条件」や実際の「悪意あるプログラム」を検出するようにしているので、ベンダーによってこのスクリプトがワームとして判断されるか分かれているのでしょう。(※推測に過ぎませんが)
しかし、このスクリプトから送信されるメールは高確率でウイルス付メールと判定されると思います。
セキュリティ担当としては実効可能なコードを含んだメールは迷惑以外の何ものでもありませんし、そもそもフレームを含んだメールに意味があるのでしょうか?
まあ、毎日SPAMメールと格闘している者の愚痴として聞き流してくださっても構いませんが。
localicaさん、本当に懇切丁寧なご指導ありがとうございます。
>このスクリプト自体にウイルスコードが含まれているわけではありません。
ちょっと安心できました・・・
>このスクリプトによって送られるメールに「悪意のあるプログラム(ウイルスコード)」を含めることが可能なだけです。
(このスクリプトを無修正でそのままECサイトに使用したら)「無防備な新米管理者」である私の知らぬ間に、勝手に誰か悪党がうちのお店のメール発信にインジェクションをする。
∴ウイルスチェッカー会社の約三分の一がこのPHPをマルウエア踏み台予備軍として定義に組み入れた・・・
という捉え方でよろしいでしょうか?
職場では、社長にブログの簡単なカスタマイズを見せたら過大評価されてしまい、うっかり大役を任されてしまったなあ、と冷や汗の毎日です。
クロスサイトスクリプティングとSQLインジェクションの違いも、イマイチどこがどう違うの??という状態で前途多難ですが、これを機に猛勉強がんばってみます!
>しかし、このスクリプトから送信されるメールは高確率でウイルス付メールと判定されると思います。
それは
・フレーム(悪意の外部サイトを混入されるから?)付きメールのPHPだからでしょうか?
・$message挿入をJavaScriptのinnerHTMLに頼るロジックだからでしょうか?
・この二つがセットになったからでしょうか?
・どちらか一つでもあったら踏み台の危険があって、$messageはDBから直接平文で送信文に抽出すべき、という方向性でしょうか?
No.1のluka3さんからご指導頂いた修正案は、iframeをあえて活かしておく(VBA32チェッカで合格するために)案でしたので、ちょっと気になってみました。
SPAMは私もウンザリの経験がありますので、お客様の誕生祝メッセージには必ず割引特典やポイント贈呈などを入れるよう、社長に進言するつもりです。
いろいろ頓珍漢なレベルですが、一生懸命頑張りたいと思います。
No.2
- 回答日時:
>VirsTotalで再チェックすると、43社中、16エンジンで陽性反応なので少々慌てています。
陽性反応の理由はそれぞれのセキュリティベンダーが決定していることなので分かりませんが、私の使用しているセキュリティソフト(大手ベンダ製品)では検知対象となりませんでした。
ただし、このスクリプトから送られるメールはゲートウエイのセキュリティ製品では検知対象となる可能性が高いと思います。
理由は、典型的なガンブラー手法のメールと同じだからです。
No.1の方が指摘されていますが、innerHTML はクロスサイトスクリプティングの脆弱性を含んでいます。
innerHTML → innerText に変更すれば検知対象から外れるかもしれませんが、ロジックを見直す方が宜しいと思います。
localicaさん、今回大変お世話になります。
> 理由は、典型的なガンブラー手法のメールと同じだからです。
>
> No.1の方が指摘されていますが、innerHTML はクロスサイトスクリプティングの脆弱性を含んでいます。
なんと、そのまま使っていたら恐ろしい事件を引き起こしかねない所だったのですね。
ちょっと身勝手で失礼な質問投稿をしてしまった、と反省もしていますが、やっぱり質問してよかった、と皆様に感謝いたしております。
JavaScriptや非推奨タグのiframeは、顕在化しているXSSはもちろんですし、今後発生するかもしれない潜在的にも人の迷惑になりやすい、と心得ておくのが無難でしょうか?
>ロジックを見直す方が宜しいと思います。
そうですね。
にわか管理者の私にはとても難問ですが、No.1のluka3さんも応援して下さっていますし、一生懸命頑張ってみます。
工程とにらめっこするとかなり無理なんですが、社長も自分が購入したスクリプトに脆弱性が本当にあるとは思ってない様子なので、事情を説明しようと思っています。
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行目までを削除しました。
ただこれはウイルス検出されないというだけで、実際にうまく表示されるかはやってみないとわかりませんね。
試してみてください。
luka3さん、今回本当にありがとうございます。
もうすっかり動転してました。
> プレーンテキストな訳ですから、自分で少しずつ削除して再検出させればどこがおかしいかわかるハズですよ。
大変失礼しました。
今、深呼吸してみれば、確かにそうですよね。
自分の力では手に負えない膨大な構文の意味解明ばかりに、完全に捉われてしまっていました。
次回からは構文の意味が分からなくても、冷静に一行ずつ削除してみます。
$messageでgrepしてみたら、任意の誕生日お祝いメッセージをDB格納&抽出している様子でした。
>ここまででやめようかとも思いましたが、少し興味があったので対策を考えました。
こんなにご指導頂けまして、本当に感謝感激です!
さっそく実験してみます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP EC-CUBEをeclipseからコンパイル実行したいです 1 2023/02/09 21:58
- PHP PHPの変わった閉じタグの必要性と意味を教えてください。 1 2022/08/28 15:15
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- PHP PHP ページング データベース 1 2022/06/16 10:30
- PHP どうして送信されないのでしょうか? 1 2022/12/09 05:23
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
3つ以上の論理積は利用可能なの...
-
簡単な心理テストを作りたい
-
phpと<?xml version="1.0" enco...
-
円グラフ描画について
-
PHPの吐くデバッグ行番号の見方...
-
HTMLで入力されたデータをPOST...
-
PHP PCアクセス制限
-
会議室予約のPHPスクリプト
-
MacブラウザのSafariで文字化け...
-
オブジェクト指向の勘違い?
-
画像掲示板用のPHPかCGIスクリ...
-
onedrive にexcelファイルをア...
-
CFileDialogの最初のディレクト...
-
透過PNGが透過されない!!
-
フォームで戻った際に入力済み...
-
別ファイルの変数を呼び出した...
-
PHPのif文でその処理を途中で抜...
-
phpの中でphpを書けないか
-
さくらサーバーにて、phpからメ...
-
リンク先を隠す方法はないでし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
3つ以上の論理積は利用可能なの...
-
ステップカウンタ(PHP)
-
phpと<?xml version="1.0" enco...
-
HTMLで入力されたデータをPOST...
-
phpにて、ipアドレスによる処理...
-
簡単な心理テストを作りたい
-
FC2ブログへの投稿 カテゴリー...
-
円グラフ描画について
-
スクリプト終了時に呼び出す関...
-
textareaで入力できる文字数を...
-
会議室予約のPHPスクリプト
-
PHPスクリプトにプロキシを弾か...
-
FPDFについて
-
動的にラジオボタンを増やす方法
-
外注PHPソースからWorm.Avron検...
-
フォントの色を変えるには?
-
onedrive にexcelファイルをア...
-
PHPのif文でその処理を途中で抜...
-
こちらはただの直列処理ですか?
-
別ファイルの変数を呼び出した...
おすすめ情報