パスワードを忘れた? アカウント作成
9484444 story
PHP

exifヘッダ内に命令を埋め込むことで身を隠すマルウェア 37

ストーリー by hylom
色々考えるのね 部門より
あるAnonymous Coward 曰く、

JPEGデータのexifヘッダ内に命令を埋め込むことで、その身を隠すマルウェアが発見された模様(GIGAZINE、元ネタのsucuri blog)。

元ネタの記事がいまいち分かりにくいのでGIGAZINEの記事も若干分かりにくいものになっているが、このマルウェアはPHPで書かれており、その処理途中であらかじめ指定されていたJPEGファイルを読み込み、そのJPEG画像内のexifヘッダ内にBASE64形式でエンコードされて記載されていた処理を実行する、というものだそうだ。

これのポイントは、PHPのpreg_replace関数を使って任意のコードを実行させているという点。preg_replaceには引数として与えられた文字列を実行する「/e」パターン修飾子があり、これを利用してexifヘッダ内に記述されている命令を実行するという。

わざわざこのような回りくどい処理を行うメリットとしては、コードが分かりにくくなる(外部から入力された命令を実行していることが分かりにくくなる)点、JPEGファイルを差し替えれば実行する処理を変えることができる、という点だろうか。

なお、preg_replaceにおける/eパターン修飾子については以前からその危険性が指摘されており、PHP 5.5.0では非推奨とされている。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • マルウェア対策ツールの類がJPEGデータの中身まではチェックしないからフィルタを抜けやすくなるテク、みたいな話かと思ったけど、 どっちにしろ、とても怪しいPHPスクリプトとセットになってるから、シグネチャで判別するタイプのフィルタでの発見は容易に思える。

    ヒューリスティック検知を避ける目的ではあり得るかも知れない。 でも、その目的で実際に悪いことをする部分のコードを隠すなら、暗号化なり他にもいくらでも方法があるし。 暗号化されてるといかにも怪しいけど、JPEGファイルに隠すなら、一見怪しくもないからチェックされにくい・・・とはいまいち思えないなぁ。 よく分からない。
  • by ta-321 (42590) on 2013年07月19日 12時10分 (#2424205)
    モー娘。の画像を思い出したやつは正直に手を上げろ。

    # いないですか,そうですか…。
  • by Anonymous Coward on 2013年07月18日 13時00分 (#2423558)

    どう見ても元ネタは釣り広告でしょう。
    わざわざJPEGにコードを分離する必要など全くない。
    しかもEXIFって。小学生ハカーが夏休みに思いつくレベル。

    • by Anonymous Coward on 2013年07月18日 16時38分 (#2423680)

      馬鹿馬鹿しいって言ってる君のほうが恥ずかしい。

      外部から実行部分本体を読み込んでくるPHPプログラムを送り込んでおき、サーバに侵入する手口は実際に行われている手口だよ。

      コマンドインジェクションか何かの手口で、eval関数を使ったコマンドをサーバ上で実行させる。
      そうやってまずサーバにRATを仕込む。
      そのRATを使って、サーバ上にある既存のPHPプログラムを改変し、read_exif_data関数を使ってスクリプトを取り込んで実行する機能を付加する。
      最初に仕込んだRATは削除する。

      Linuxサーバでリアルタイムスキャンをしているところはとても少ないし、やっていても定期的にスキャンするだけのウィルスチェックくらい。
      定期スキャンでは外部にある画像ファイルはスキャンしないので、まずみつからない。
      Windowsサーバでも、外部から読み込んで保存しない画像ファイルのスキャンをするのかは検証したことが無いのでわからない。

      自分が使っていて問題なく動いているPHPのソースコードを開いて読む人なんてほとんどいないので、バックドアの機能には気づかない。

      そういうわけで、身を隠すやり方としてはマルウェア本体を外部の別ファイルに分離しておくというのはうまいやり方。
      これが小学生が夏休みの自由研究で思いつくレベルなのかは知らない。

      確かにいえることは、これが実際に出来るようなセキュリティの穴を持つサーバが世界には無数にあるってことだけだ。

      親コメント
      • by Anonymous Coward

        > 自分が使っていて問題なく動いているPHPのソースコードを開いて読む人なんてほとんどいない
        こりゃまたでかい釣り針だぜぇ・・・

        うん、とりあえず君は一緒に仕事したくないタイプの人種だというのはよく分かった。理解が浅い。
        もしよければ名前教えてくれないか?
        早目にドロップアウトさせたいしさ。

        いや、フレームの元と分かっているけど本気で思っていることよ?

        • 元コメとは別人ですが、

          私の手元で運用している社内サーバでは、
          RoundCube とか ownCloud とか phpMyAdmin とか、PHPベースのWebアプリがいくつか入っていますけど、
          そのソースコードに意味も無く目を通したりしないし、こっそりトロイを埋め込まれても、「コードを読むことで改ざんに気づく」ことなんて出来ない自信があります。

          > > 自分が使っていて問題なく動いているPHPのソースコードを開いて読む人なんてほとんどいない
          > こりゃまたでかい釣り針だぜぇ・・・

          じゃあ、あなたは毎日、サーバに置いてある全PHPファイルに眼を通して改ざんされてないか確認してるんですかね。
          それだけで一日が終わりそうだ…

          #PHPソースに目を通して改ざんチェックするのではなく、
          #ファイルの改ざんそのものを検出できる体制を整えるのが本道でしょう。

          親コメント
          • by Anonymous Coward

            > #PHPソースに目を通して改ざんチェックするのではなく、
            > #ファイルの改ざんそのものを検出できる体制を整えるのが本道でしょう。

            うん、まさにそれだと思う。
            てかその突込みを入れたつもりだったんだけどw
            お前は毎日ソースを開いてチェックしないとソースの改竄に気付けないのかよ馬鹿、ってこと。

            元ACみたいなんがいっぱいいるから
            >これが実際に出来るようなセキュリティの穴を持つサーバが世界には無数にある
            って状態が生まれているんだということに当人が気付けていない不幸が
            ヤバいね、馬鹿馬鹿しいね、って話だと俺は思ってた

        • by Anonymous Coward

          煽るだけで具体的な内容に言及しないコメントのタチの悪さよ。
          #2423680もあまりいい物ではないが、まだ価値がある。

        • by Anonymous Coward

          どう考えても理解が浅いのは君のほうで、ドロップアウトすべき存在。
          だから自分の名前を明かしたまえ。

          君みたいな現実も技術もセキュリティの何たるかも知らない浅い考えの人が「パソコンに詳しい人」なんて演じたりするから、WWWサイトの改竄が後を絶たず、いつまでも直されなかったりしてんだ。

          WWWサーバやサイトの管理者たちのなかで、普段使っているWebアプリケーションのソースコードをいつも詠んでる人ってどれだけいるかアンケートでもとってみたら?
          もちろんソースコードを改変されたら気づく程度は最低限読んでるってことだよ。

          • by Anonymous Coward

            > いつも詠んでる人ってどれだけいるか
            誤字はどうでもいいが、取るまでもなく0だろ。
            普通は自動化してるっつーの。
            おまえ本当にエンジニア?

    • by Anonymous Coward

      ごめんぼくもそう感じた。
      記事内にも/eの危険性に言及している通り、割と常識。

      画像に隠すってのは確かにアレゲっぽいけど。
      そもそも「バックドアの第1のパーツ」ってのをどうやって実行させんのか言及してないのが逆アレゲ。ナンセンスじゃないのって思うのよねぇ

      • by hahahash (41409) on 2013年07月18日 13時33分 (#2423579) 日記

        まあ、実質的には、
        こういう攻撃方法がありえる! 俺達は対応した! だから俺達のセキュリティソフトを買おうよ!
        ってことだろうな-、とは思うけどさ。

        それでも『マルウェアに感染している』という状況に『気づかせない』。
        ってのはマルウェアの機能としては結構重要な部分なので、
        EXIFにコードの一部を隠すとか、そういうアプローチそのものは、
        そこまでバカにしたもんでもないと思う。

        任意の文字列を実行します。みたいなコードをあからさまに書いたら、
        そんなものはあっという間に見つかって駆除されるわけで。
        『第一のパーツ』は攻撃用のjpegを食わせなければ怪しい挙動をしないわけだし、
        まあ、下手なセキュリティソフトだったら、スルーしちゃうかもしれないし。

        親コメント
        • by ma_kon2 (9679) on 2013年07月18日 15時02分 (#2423637) 日記
          高度になれば,もっと恐ろしいものが出来そうに思えるけど,
          高度になればなるほど発症させるための条件がそろいにくそうですね。
          だいたい,コレだってどんな条件で発症するのかわかんないし。

          も少しシンプルな方が効果があって良いと思うんですけどねえ。
          親コメント
          • by digoh (17917) on 2013年07月18日 15時09分 (#2423644) 日記

            これはexifに最初から意図されたcodeが入ってると思うからバカっぽいのであって、
            任意のjpegファイルのexifを読み取っては実行チャレンジするウイルスが産まれる徴候なのですよ!
            つまり、jpegを喰い代謝し増殖するネット生命体が産まれようとしているのです!

            #増殖機能はカケラすら持ってないだろう、exifじゃなくていいだろ、というツッコミに全く耐えられなくて死ぬ

            ##とある種類のexif情報を持ってる時だけ実行されるマルウェアとかあったら怖い……かなぁ

            親コメント
        • by Anonymous Coward

          バカにするよ。
          Exifセグメントにコード入れるくらいなら、他のAPPセグメントやCOMセグメントに記載した方がよほど見つからない。
          なぜ人目に触れる可能性が高いAPP1-Exifを選択したのか?
          バカだから。

          • by Anonymous Coward

            いいこと思いついた!
            日本には「灯台下暗し」って言葉があるくらいなんだからさ!!

            エロ画像.jpg                           .exe

            って感じでパッと見のファイル名を隠せば第一のコードとかexifだとか考えなくて済むんじゃね!俺天才!!

            exifに隠すのが馬鹿に出来ないって言うんだったら画像そのもののバイナリに埋め込めよって思う。
            任意で抽出したバイトコードを復元したらソースでした!って方がよほど偽装としては高度。
            ってか既にある。表ざたに問題化してないだけ。知らないなら意識低い猫かおめーは、ってなる。

            // それなんて縦読み

          • by Anonymous Coward

            > バカにするよ。

            おれもバカにするよ。

            > Exifセグメントにコード入れるくらいなら、他のAPPセグメントやCOMセグメントに記載した方がよほど見つからない。

            Exifに埋め込んで隠される画像ファイルは、外部にある不正侵入者が管理するWWWサーバだ。
            ローカルに置かれた画像ファイルのことじゃないよ。わかってなくてバカにしてんのかい?

            > なぜ人目に触れる可能性が高いAPP1-Exifを選択したのか?
            > バカだから。

            なぜ画像のExif情報にマルウェアの本体を隠すのかの意図を理解できないのか?
            バカだから。

            • by Anonymous Coward

              PHPってJpegのApp1-Exifセグメントとイメージデータ部しか読み書きできないの?って話なんだけど理解できないのか?

              • by Anonymous Coward

                もうやめとこうぜ。ここに住んでる奴らは正直馬鹿ばっかりだ。

    • by Anonymous Coward

      夏休みの宿題です。

  • by Anonymous Coward on 2013年07月18日 13時10分 (#2423567)

    起点となる任意のコードが実行された時点でウィルスに感染したと等しいじゃん。
    権限を突破されたならともかく、権限内で信頼されないコードを実行した時点で自業自得だろう。

    というか一般ユーザーはPHPなんかインストールしてねぇよ。

    • by Anonymous Coward

      Mac使いは一般ユーザーではない…?
      #そうかも

      • by Anonymous Coward

        Macは安全なのでそもそも検討の対象外なのです。

    • by Anonymous Coward

      あなたは、Macユーザを敵にまわしたね。

      デフォルトで入っているようです。

      • by Anonymous Coward

        インストールはされてますが、有効でしたっけ?
        手元のMacでPHP動かすときにhttpd.confを弄った記憶が。

    • by Anonymous Coward

      OSXには初めから入ってたりするんだこれが

    • by Anonymous Coward

      何が言いたいやら。
      マルウェア感染したから、このバックドアが作られたわけなんですが。

    • by Anonymous Coward

      > 一般ユーザーはPHPなんかインストールしてねぇよ。

      「一般人」でもVisualStudioくらいは持っているというのに。。。

      • by Anonymous Coward

        何をおっしゃいますやら、「素人が購入することは考えにくい [srad.jp]」とマスゴミ様のお墨付きではありませんか。

        • by Anonymous Coward

          それに我々は反発したのですよ?
          「一般人だってVisualStudioくらい持っとるわwww」と。
          もうお忘れで?

    • by Anonymous Coward

      整理しよう。

      まず、このマルウェアの標的は一般ユーザのPCではないと思われる。
      次に、不正侵入や感染するための技術の話ではなく、身を隠す手段の話であること。

      不正侵入したサーバを、その後も見つからないように使い続けるときなんかに使うってことじゃないかな。
      マルウェア本体が普段は外部のサーバにあるってんだから、見つかりにくいよね。
      普段は普通のノーマルな画像にしていればいいわけだ。

    • by Anonymous Coward

      「EXIF内のデータを読んで実行するコードが実装されている」
      環境をターゲットにした攻撃手法なんですよ、きっと。

      #そんな環境あるのかよ

  • by Anonymous Coward on 2013年07月18日 14時22分 (#2423610)

    言っている意味はわかるんだけど、GIGAZINEの記事にも

    通常、バックドアはBASE64変換やgzip圧縮で身を隠しますが

    って書いてあるし、なんというか、バックドアの定義がずいぶん狭くなったように感じる。

    サーバー側にあるのがバックドアなのか。

    • by Anonymous Coward
      >> 通常、バックドアはBASE64変換やgzip圧縮で身を隠しますが

      > って書いてあるし、なんというか、バックドアの定義がずいぶん狭くなったように感じる。

      身を隠す手段の事しか書いてないのになぜバックドアの定義にまで飛躍した?
      ウィルスパターンチェック回避の話だからどっちにあろうが身は隠すように思うのだけど?
  • by Anonymous Coward on 2013年07月18日 14時35分 (#2423619)

    preg_replace($exif['Make'],$exif['Model'],'');
    なぜ入力値をエスケープしないのか

  • by Anonymous Coward on 2013年07月18日 16時30分 (#2423677)

    そんな単語が頭をよぎる昨今

typodupeerror

目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond

読み込み中...