パスワードを忘れた? アカウント作成
13603104 story
マイクロソフト

WindowsアプリのインストーラのDLL読込み脆弱性、Microsoftは自社製品を修正せず 61

ストーリー by hylom
いつものやつ 部門より

複数のMicrosoft製品およびそのインストーラにおいて、DLL読み込みに関する脆弱性が発見された(JVN#91151862)。

この脆弱性は、アプリケーションやインストーラの実行時に、それと同一のディレクトリ内に存在する特定のDLLファイルを読み込んでしまうと言うもの。Microsoftはこの問題を認識しているものの、攻撃の実現性は限定的であるため対処は行わないという(Microsoftによる「DLL の植え付けの脆弱性のトリアージ」ドキュメント)。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 「DLL の植え付けの脆弱性のトリアージ」冒頭

    ダイナミックリンク ライブラリ (DLL) の植え付け (バイナリの植え付け/ハイジャック/プリロード) の問題は数年に 1 度表面化する傾向があり、マイクロソフトがそのような報告にどう対応するかが明確でない場合があります。

    中の人も「いつものやつ」と思ってるんだね。

  • by Anonymous Coward on 2018年05月22日 8時22分 (#3412399)

    同一のフォルダにdll仕込まれたらインストーラでなく、ふつうのアプリでもそのdllを読みにいくよね。
    これはwindowsの仕様によるもの。
    もちろんそのdllが正規なものかどうかのチェックをインストーラ側(exe側)でチェックすることもできるから脆弱性といえばそうなのかもしれないけど、dll側がapiフックかけてそのチェックを回避することもできるしねー。

    • by Anonymous Coward on 2018年05月22日 8時41分 (#3412406)

      同一のフォルダにdll仕込まれたらインストーラでなく、ふつうのアプリでもそのdllを読みにいくよね。

      仕込まれた時点で、もう乗っ取られてると思うよ。

      親コメント
      • by Anonymous Coward

        %PROGRAMFILES% に仕込まれる危険性は UAC の保護等もあり低い一方で
        ダウンロード先フォルダなどは危険性が高いということで、最近は
        ダウンロードしてそのまま実行するようなものが報告の対象になってる。

        • by Anonymous Coward

          怪しいソフトをダウンロードして実行したらダメですよ!ってレベルの問題か・・・

          • by Anonymous Coward

            怪しくないソフトと怪しいファイルを同じディレクトリに置いたらダメですよ!というのはちょっとレベルが違うと思うんだ。

            • by Anonymous Coward on 2018年05月22日 9時48分 (#3412437)

              怪しいファイルダウンロード(ダウンフォルダに自動保存)

              怪しくないアプリダウンロード(ダウンフォルダに自動保存)

              怪しくないアプリ実行

              サヨウナラ

              うーん

              親コメント
              • by Anonymous Coward

                直接怪しい(DLL)ファイルをダウンロードする方が間違ってるだろ。

              • by Anonymous Coward

                Windowsのシステムファイルをネット検索すると
                このファイル何?みたいなサイト山ほど見つかって
                最新ファイルをダウンロード みたいなリンクまである
                怪しいと言えば怪しいんだけど、そういう所から単品持ってくる可能性はあるかもしれない

            • by Anonymous Coward

              違うが、それも含めて仕様としか言いようがないケースでは。これを脆弱性呼ばわりして何をさせたいんだ。

              • by Anonymous Coward

                ここはスラドなので、マイクロソフトが絡んでて脆弱性っぽければ、実害やリスク・発生可能性は関係なくマイクロソフトを叩きましょう。肯定なんて許しません。
                # という話では

              • by Anonymous Coward

                Windowsのライセンスを隅から隅まで読んだとまでは言えないが、「仕様がクソだね」と文句垂れる権利まで放棄した記憶はないぞ。
                マカーも真っ青の信者脳だな。

              • by Anonymous Coward

                自身の発言に対して「何いってんだこいつ」と言われない権利をいつ手に入れた記憶があるんだ?

              • by Anonymous Coward

                別に文句をたれるなと入っていないが。公の場で筋違いの文句を大声で
                叫んでいたら、うるせーチラシの裏にでも書いてろと言われただけだろ。

          • by Anonymous Coward

            それよりももう一歩か二歩進んだ話かと。一部の安全性の確認方法が通じなくなる。

            取引先(?)から「このソフトを使ってください。マイクロソフト製のソフトです」ってリンクが送られてきて、ダウンロードした。
            ZIPを解凍し、署名も問題なく、ウイルス対策ソフトも警告を出さなかったので、インストールしたところ、展開したZIPに標的型の攻撃コードがはいったDLLが含まれていて…

            こういうことがおきる。

            不審者から送られてきたソフトは実行してはいけません ってのはソーシャルハッキングでどうにでもなってしまう時代。なので信頼できる相手であっても、信頼できない

            • by Anonymous Coward
              ホワイトリスト運用でいいんじゃないの?
              信用できるパブリッシャーの署名のないexeとdllの実行をブロックするだけ
              法人向けのAAならどこのでもできると思うよ
              • by Anonymous Coward on 2018年05月22日 11時16分 (#3412479)

                可能ではあるが、Windows Defender Exploit Protectionでがちがちにガードするとだいぶ不便な環境になるよ。

                親コメント
              • by Anonymous Coward

                基本的、多くの仕事はセキュリティを守ることじゃなくて、効率よくお金を稼ぐことなので、ガチガチに制限したら意味ないんですよ。
                健康の為なら死んでも言い、ならぬ、セキュリティの為なら仕事をしなくてもいい、ってわけにはいかないもんなんです。

                そのバランスを守る運用が必要なんだけど、こういう話でだんだんとバランスを制限側に持って行かざるを得なくなるんだが、はっきり言ってセキュリティはどこまでかけても金に

              • by Anonymous Coward
                企業向けのホワイトリスト型って業務用に必要なアプリを全部入れたクリーンなPCを1台用意して、そこにあるexeとdllとスクリプトをコマンド1発で全部ホワイトリストに追加するって仕組みだから作る方は全く楽々だよ
                使う方は許可されたバイナリ以外は全部不可で後から追加もできないから超絶不便だけど、アプリケーション開発者でもない限りそれで何ら不自由ないだろ
              • by Anonymous Coward

                > アプリケーション開発者でもない限りそれで何ら不自由ないだろ

                んなわけない。

        • by Anonymous Coward

          for /f delims^= %i in ('dir /a-d /b /s %homedrive%%homepath%\downloads\*dll ^| findstr /i /e "DLL"') do attrib -h -s "%i"&&ren "%i" "%~nxi~"

      • by Anonymous Coward

        初心者がインストーラをデフォルトのtempディレクトリにぐしゃっと
        展開して起動したときにtempディレクトリに悪意ある
        dllがあれば読み込まれるというケースは有りえるかも

        もっともデフォルトのtempディレクトリにぐしゃっと
        展開するときに同名のdllに上書きするか聞いてくる
        はずでそれを許可してしまうという間抜けなミスが
        必要ですね

        • by Anonymous Coward

          初心者がインストーラをデフォルトのtempディレクトリにぐしゃっと展開

          この時点で初心者ではありません
          本当の初心者はデフォルトのダウンロードフォルダでそのまま実行します
          というかどこという概念自体を持っていません
          ドライブバイダウンロードは当たり前の便利な機能というのが初心者ですので

          # しょしんしゃまじこわい

          • by Anonymous Coward

            「ダウンロード」してからエクスプローラから実行するようなケースだよね。
            ブラウザのリンクから直接「実行」だと、ダウンロードフォルダには入らんし、ダウンロードセッション毎に個別のフォルダから実行される。

            真の初心者ならDLL差し替えのリスクはあまりないかもね。

          • by Anonymous Coward

            行儀悪いプリンタドライバとかでtempにごっそり展開してくれる奴はあったような気がする

    • by Anonymous Coward

      ソーシャルエンジニアリングであるという認識らしいです。

      「OneDrive」「Skype」などMS製複数アプリに脆弱性 - 修正は次期バージョン以降
      http://security.at.webry.info/201805/article_4.html [webry.info]

  • by Anonymous Coward on 2018年05月22日 9時56分 (#3412440)

    どうみても仕様。こういうのをどや顔で脆弱性報告しちゃうのはどうかと思うし、受け付けちゃうのもびっくりする。日本のITスキルの水準がわかる事例。

    • by miyuri (33181) on 2018年05月22日 11時21分 (#3412483) 日記

      インストーラの脆弱性なので。

      親コメント
      • by Anonymous Coward

        どうみてもOSの脆弱性じゃないの?
        MSに報告しなきゃ(使命感)

        Windows が使用する DLL 検索パス

        暗黙的なリンクと明示的なリンクの両方で、Windows は、Kernel32.dll や User32.dll などの "既知の DLL" を最初に検索します。 次に、以下に示す順序で DLL が検索されます。

        1.実行中のプロセスの実行形式モジュールがあるフォルダー。
        2.現在のフォルダー。
        3.Windows システム フォルダー。 このフォルダーへのパスは、GetSystemDirectory 関数が取得します。
        4.Windows ディレクトリ。 このフォルダーへのパスは、GetWindowsDirectory 関数が取得します。
        5.環境変数 PATH 内に記述されたフォルダー。

        • by Anonymous Coward

          MSが報告している内容をMSに報告してどうするのかw

        • by Anonymous Coward

          いや、いくらなんでもその情報は古すぎ。(ネタかもしれないけど、一応)
          XP SP2以降はSafeDllSearchMode [microsoft.com]がデフォルトで有効なので、

          1.実行中のプロセスの実行形式モジュールがあるフォルダー。
          2.Windows システム フォルダー。
          3.Windows ディレクトリ。
          4.現在のフォルダー。
          5.環境変数 PATH 内に記述されたフォルダー。

          の順番です。

    • Re:イミフ (スコア:2, すばらしい洞察)

      by Anonymous Coward on 2018年05月22日 12時32分 (#3412527)

      大昔のUnixにあったPATHに.を入れる慣習と同じくらい頭の悪い仕様に見えるんだが、気のせいかなあ。

      そしてそのUnixでもさすがにLD_LIBRARY_PATHに.を入れるなんて暴挙は寡聞にして知らない。

      親コメント
      • by manmos (29892) on 2018年05月22日 14時01分 (#3412575) 日記

        > そしてそのUnixでもさすがにLD_LIBRARY_PATHに.を入れるなんて暴挙は寡聞にして知らない。
        shared libraryを自作しているときだけだな。

        親コメント
      • by Anonymous Coward

        DLL Hell時代にシステムパスにあるDLLは互換性が不明だから必要なDLLは全部exeの隣に配置しておけば安心だねって文化がありまして。

        • by Anonymous Coward
          WindowsにDLLを静的リンクする仕組みがないのは何でなんだろね
          UNIX系OSにはずっと昔からあるのに
          カレントディレクトリから動的ロードしてしまう問題の直接の解決ではないけど
          • by Anonymous Coward

            Unix系にはずっとあるというか Unix というのか Linuxでの so って、かなり後になってから出来たもんだからね。利用方法は他のOSの失敗見て整理されてるところはある。

            Winodws に関しては、最も初期から DLL が OS のAPIを提供するインターフェースなので完全にDLLを使わないというのは無理だけど、MFCだとか開発言語のランタイムは普通に静的リンクできる。
            .NET になってからは、厳密な署名でマイナーバージョンまで完全に一致しないとリンクしないとか、マイナーバージョンの違いは許すとか、互換あるかわからんけど、とりあえずリンクして動かしてみるけど、動くかはわからんってのが選べるようになってる。
            逆に静的なリンクは(公式には)なくなってる。

      • by Anonymous Coward

        いや、今回の話はカレントディレクトリじゃないっすよ。exeと同一ディレクトリのほう。
        (カレントディレクトリはだいぶ前に優先順位が下げられてます)
        Windowsは大抵、実行ファイルを(PATHの通っていない)任意の場所に置くので、DLLを実行ファイルと同一ディレクトリから読めないと、アプリ固有のDLLが使えなくなります。
        (*nixなんかでも、「同一ディレクトリ中の別スクリプトを呼ぶの禁止」とかになったら困るよね?)

        これについてはmacOSも同様なんだろうけど、あっちはそもそもapp形式の実体がディレクトリな上、バイナリ配布は大抵dmg(ディスクイメージ)で行うので、「同一ディレクトリ内に攻撃者のDLLが置かれる」という状況自体が発生しないのかも。

    • by Anonymous Coward on 2018年05月22日 11時25分 (#3412488)

      msiファイルを置いただけのフォルダからDLLを読む必要がどうしてあるんかね。
      仕様とは思えないが?

      親コメント
      • by nee (41210) on 2018年05月22日 12時14分 (#3412519)

        今回挙げられているMS製品のインストーラーは全てexe形式だと思います。
        msi形式のインストーラーも影響範囲に含まれるという情報を見つけられなかったのですが、どこで確認できますか?

        親コメント
      • by Anonymous Coward

        MFC等のアプリで使用しているDLLを偽造してカレントに置いておけば、システムが勝手にカレントのDLLをロード(起動時に動的リンクされたライブラリを自動的に読み込む)してしまうのよ。

        つまり、一切ランタイムを使わないでインストーラを作れって話になるんだけど。

        • by Anonymous Coward

          システムディレクトリ等から読み込みたいのなら、そう指定すべきでは?
          元々カレントにあったDLLを上書きする、という話ならその通りですが。

          • by Anonymous Coward

            動的リンクされたライブラリのロードは、OSがやります。
            その際、カレントディレクトリ、システムディレクトリの順で対象のDLLを探すので今回の話になるわけです。(動的リンクしたライブラリの読込場所は指定できない)

            一応、動的リンクをやめて、全てのライブラリをloadlibraryで読み込む様にすれば、回避できるけど、普通はやらないね。(MFC等のクラスライブラリを使ってるとほぼ不可能だと思う)

            • by Anonymous Coward

              一応。
              カレントディレクトリは「実行ファイルのディレクトリ」の意味で記載してます。

    • by Anonymous Coward

      これって、exeやmsiを生でダウンロードさせるという慣習に問題があるのかも。
      zipとかで固めてあれば、当然解凍時に別ディレクトリ作るよね。だから、実行ファイルの同一ディレクトリに何かが紛れ込むことは基本的にないわけで。
      (解凍時に同一名のディレクトリが既にあったら混入の可能性はあるけど、さすがにそれは不用心すぎる)

      昔はlzhとかzipで固めるのが普通だったと思うんだけど(cygwinのsetup.exeが生だったのに驚いた覚えが……)、いつの間にかexeを生で配ることが多くなってきたよね。
      その悪しき風習を改めるべきなのかもしれない。

      • by Anonymous Coward

        もっとそれ以前の勝手にとりあえずダウンロード仕様が犯人だと思うんですよね。
        インジェクションの単体.dllがダウンロードフォルダに入り込まなければ問題は起きにくいので。

        lzhやzipで固めていたのは、
        ・消費帯域を減らすため
        ・複数ファイルをまとめるため
        ・ファイルが壊れていないかの破損チェックのため
        で、上2つは回線の高速化で自己解凍で済んで、
        破損チェックも電子署名すれば生exeで出来るからかも。

        次期WindowsでマニフェストにシステムディレクトリからしかDLL読み込まないオプションとか付くのかね。
        そいつがディレクトリを掘って自己解凍すれば大分緩和されるかな。

        • by Anonymous Coward

          次期Windows を期待せんでも、昔から 読込むDLLの署名要求できる。署名が違ったら同じバージョンでも読込まずに別のを探させることが出来る。

          アプリの提供側が、その設定をやってるかどうかってことだけど、Windows って開発者がプラットホームの事を知らなさすぎるってケースが多いので、やってないが多いだろうな。

    • by Anonymous Coward

      今回の件に特定するのでなければ
      仕様そのものが脆弱である場合もあるので、仕様だから脆弱ではないということは言えない。

      これは、脆弱と言ってもいいような気もするけど、
      じゃあどうするのって言うと困るなぁ

      信用置けないフォルダはDLLの読み込みを止めたら良いのかね・・・

  • by Anonymous Coward on 2018年05月22日 12時22分 (#3412522)

    ダウンロードフォルダにあらかじめインストーラーが使うDLLの本物のコピーを置いて上書きできないようにロックしておけばいい

    • by Anonymous Coward

      ダウンロードフォルダ変更できないと不便なんだが。

  • by Anonymous Coward on 2018年05月22日 14時01分 (#3412574)

    とか思ってたりするのかねぇ。

    # いやストアアプリなら安全なのかよく知りませんけども

typodupeerror

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

読み込み中...