
WindowsアプリのインストーラのDLL読込み脆弱性、Microsoftは自社製品を修正せず 61
ストーリー by hylom
いつものやつ 部門より
いつものやつ 部門より
複数のMicrosoft製品およびそのインストーラにおいて、DLL読み込みに関する脆弱性が発見された(JVN#91151862)。
この脆弱性は、アプリケーションやインストーラの実行時に、それと同一のディレクトリ内に存在する特定のDLLファイルを読み込んでしまうと言うもの。Microsoftはこの問題を認識しているものの、攻撃の実現性は限定的であるため対処は行わないという(Microsoftによる「DLL の植え付けの脆弱性のトリアージ」ドキュメント)。
Re:いつものやつ 部門より (スコア:1)
「DLL の植え付けの脆弱性のトリアージ」冒頭
ダイナミックリンク ライブラリ (DLL) の植え付け (バイナリの植え付け/ハイジャック/プリロード) の問題は数年に 1 度表面化する傾向があり、マイクロソフトがそのような報告にどう対応するかが明確でない場合があります。
中の人も「いつものやつ」と思ってるんだね。
仕様と脆弱性の違いはどこに? (スコア:1)
同一のフォルダにdll仕込まれたらインストーラでなく、ふつうのアプリでもそのdllを読みにいくよね。
これはwindowsの仕様によるもの。
もちろんそのdllが正規なものかどうかのチェックをインストーラ側(exe側)でチェックすることもできるから脆弱性といえばそうなのかもしれないけど、dll側がapiフックかけてそのチェックを回避することもできるしねー。
Re:仕様と脆弱性の違いはどこに? (スコア:1)
同一のフォルダにdll仕込まれたらインストーラでなく、ふつうのアプリでもそのdllを読みにいくよね。
仕込まれた時点で、もう乗っ取られてると思うよ。
Re: (スコア:0)
%PROGRAMFILES% に仕込まれる危険性は UAC の保護等もあり低い一方で
ダウンロード先フォルダなどは危険性が高いということで、最近は
ダウンロードしてそのまま実行するようなものが報告の対象になってる。
Re: (スコア:0)
怪しいソフトをダウンロードして実行したらダメですよ!ってレベルの問題か・・・
Re: (スコア:0)
怪しくないソフトと怪しいファイルを同じディレクトリに置いたらダメですよ!というのはちょっとレベルが違うと思うんだ。
Re:仕様と脆弱性の違いはどこに? (スコア:2, すばらしい洞察)
怪しいファイルダウンロード(ダウンフォルダに自動保存)
↓
怪しくないアプリダウンロード(ダウンフォルダに自動保存)
↓
怪しくないアプリ実行
↓
サヨウナラ
うーん
Re: (スコア:0)
直接怪しい(DLL)ファイルをダウンロードする方が間違ってるだろ。
Re: (スコア:0)
Windowsのシステムファイルをネット検索すると
このファイル何?みたいなサイト山ほど見つかって
最新ファイルをダウンロード みたいなリンクまである
怪しいと言えば怪しいんだけど、そういう所から単品持ってくる可能性はあるかもしれない
Re: (スコア:0)
違うが、それも含めて仕様としか言いようがないケースでは。これを脆弱性呼ばわりして何をさせたいんだ。
Re: (スコア:0)
ここはスラドなので、マイクロソフトが絡んでて脆弱性っぽければ、実害やリスク・発生可能性は関係なくマイクロソフトを叩きましょう。肯定なんて許しません。
# という話では
Re: (スコア:0)
Windowsのライセンスを隅から隅まで読んだとまでは言えないが、「仕様がクソだね」と文句垂れる権利まで放棄した記憶はないぞ。
マカーも真っ青の信者脳だな。
Re: (スコア:0)
自身の発言に対して「何いってんだこいつ」と言われない権利をいつ手に入れた記憶があるんだ?
Re: (スコア:0)
別に文句をたれるなと入っていないが。公の場で筋違いの文句を大声で
叫んでいたら、うるせーチラシの裏にでも書いてろと言われただけだろ。
Re: (スコア:0)
それよりももう一歩か二歩進んだ話かと。一部の安全性の確認方法が通じなくなる。
取引先(?)から「このソフトを使ってください。マイクロソフト製のソフトです」ってリンクが送られてきて、ダウンロードした。
ZIPを解凍し、署名も問題なく、ウイルス対策ソフトも警告を出さなかったので、インストールしたところ、展開したZIPに標的型の攻撃コードがはいったDLLが含まれていて…
こういうことがおきる。
不審者から送られてきたソフトは実行してはいけません ってのはソーシャルハッキングでどうにでもなってしまう時代。なので信頼できる相手であっても、信頼できない
Re: (スコア:0)
信用できるパブリッシャーの署名のないexeとdllの実行をブロックするだけ
法人向けのAAならどこのでもできると思うよ
Re:仕様と脆弱性の違いはどこに? (スコア:1)
可能ではあるが、Windows Defender Exploit Protectionでがちがちにガードするとだいぶ不便な環境になるよ。
Re: (スコア:0)
基本的、多くの仕事はセキュリティを守ることじゃなくて、効率よくお金を稼ぐことなので、ガチガチに制限したら意味ないんですよ。
健康の為なら死んでも言い、ならぬ、セキュリティの為なら仕事をしなくてもいい、ってわけにはいかないもんなんです。
そのバランスを守る運用が必要なんだけど、こういう話でだんだんとバランスを制限側に持って行かざるを得なくなるんだが、はっきり言ってセキュリティはどこまでかけても金に
Re: (スコア:0)
使う方は許可されたバイナリ以外は全部不可で後から追加もできないから超絶不便だけど、アプリケーション開発者でもない限りそれで何ら不自由ないだろ
Re: (スコア:0)
> アプリケーション開発者でもない限りそれで何ら不自由ないだろ
んなわけない。
Re: (スコア:0)
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~"
Re: (スコア:0)
初心者がインストーラをデフォルトのtempディレクトリにぐしゃっと
展開して起動したときにtempディレクトリに悪意ある
dllがあれば読み込まれるというケースは有りえるかも
もっともデフォルトのtempディレクトリにぐしゃっと
展開するときに同名のdllに上書きするか聞いてくる
はずでそれを許可してしまうという間抜けなミスが
必要ですね
Re: (スコア:0)
初心者がインストーラをデフォルトのtempディレクトリにぐしゃっと展開
この時点で初心者ではありません
本当の初心者はデフォルトのダウンロードフォルダでそのまま実行します
というかどこという概念自体を持っていません
ドライブバイダウンロードは当たり前の便利な機能というのが初心者ですので
# しょしんしゃまじこわい
Re: (スコア:0)
「ダウンロード」してからエクスプローラから実行するようなケースだよね。
ブラウザのリンクから直接「実行」だと、ダウンロードフォルダには入らんし、ダウンロードセッション毎に個別のフォルダから実行される。
真の初心者ならDLL差し替えのリスクはあまりないかもね。
Re: (スコア:0)
行儀悪いプリンタドライバとかでtempにごっそり展開してくれる奴はあったような気がする
Re: (スコア:0)
ソーシャルエンジニアリングであるという認識らしいです。
「OneDrive」「Skype」などMS製複数アプリに脆弱性 - 修正は次期バージョン以降
http://security.at.webry.info/201805/article_4.html [webry.info]
イミフ (スコア:0)
どうみても仕様。こういうのをどや顔で脆弱性報告しちゃうのはどうかと思うし、受け付けちゃうのもびっくりする。日本のITスキルの水準がわかる事例。
Re:イミフ (スコア:2)
インストーラの脆弱性なので。
Re: (スコア:0)
どうみてもOSの脆弱性じゃないの?
MSに報告しなきゃ(使命感)
Re: (スコア:0)
MSが報告している内容をMSに報告してどうするのかw
Re: (スコア:0)
いや、いくらなんでもその情報は古すぎ。(ネタかもしれないけど、一応)
XP SP2以降はSafeDllSearchMode [microsoft.com]がデフォルトで有効なので、
1.実行中のプロセスの実行形式モジュールがあるフォルダー。
2.Windows システム フォルダー。
3.Windows ディレクトリ。
4.現在のフォルダー。
5.環境変数 PATH 内に記述されたフォルダー。
の順番です。
Re:イミフ (スコア:2, すばらしい洞察)
大昔のUnixにあったPATHに.を入れる慣習と同じくらい頭の悪い仕様に見えるんだが、気のせいかなあ。
そしてそのUnixでもさすがにLD_LIBRARY_PATHに.を入れるなんて暴挙は寡聞にして知らない。
Re:イミフ (スコア:2)
> そしてそのUnixでもさすがにLD_LIBRARY_PATHに.を入れるなんて暴挙は寡聞にして知らない。
shared libraryを自作しているときだけだな。
Re: (スコア:0)
DLL Hell時代にシステムパスにあるDLLは互換性が不明だから必要なDLLは全部exeの隣に配置しておけば安心だねって文化がありまして。
Re: (スコア:0)
UNIX系OSにはずっと昔からあるのに
カレントディレクトリから動的ロードしてしまう問題の直接の解決ではないけど
Re: (スコア:0)
Unix系にはずっとあるというか Unix というのか Linuxでの so って、かなり後になってから出来たもんだからね。利用方法は他のOSの失敗見て整理されてるところはある。
Winodws に関しては、最も初期から DLL が OS のAPIを提供するインターフェースなので完全にDLLを使わないというのは無理だけど、MFCだとか開発言語のランタイムは普通に静的リンクできる。
.NET になってからは、厳密な署名でマイナーバージョンまで完全に一致しないとリンクしないとか、マイナーバージョンの違いは許すとか、互換あるかわからんけど、とりあえずリンクして動かしてみるけど、動くかはわからんってのが選べるようになってる。
逆に静的なリンクは(公式には)なくなってる。
Re: (スコア:0)
いや、今回の話はカレントディレクトリじゃないっすよ。exeと同一ディレクトリのほう。
(カレントディレクトリはだいぶ前に優先順位が下げられてます)
Windowsは大抵、実行ファイルを(PATHの通っていない)任意の場所に置くので、DLLを実行ファイルと同一ディレクトリから読めないと、アプリ固有のDLLが使えなくなります。
(*nixなんかでも、「同一ディレクトリ中の別スクリプトを呼ぶの禁止」とかになったら困るよね?)
これについてはmacOSも同様なんだろうけど、あっちはそもそもapp形式の実体がディレクトリな上、バイナリ配布は大抵dmg(ディスクイメージ)で行うので、「同一ディレクトリ内に攻撃者のDLLが置かれる」という状況自体が発生しないのかも。
Re:イミフ (スコア:1)
msiファイルを置いただけのフォルダからDLLを読む必要がどうしてあるんかね。
仕様とは思えないが?
Re:イミフ (スコア:1)
今回挙げられているMS製品のインストーラーは全てexe形式だと思います。
msi形式のインストーラーも影響範囲に含まれるという情報を見つけられなかったのですが、どこで確認できますか?
Re: (スコア:0)
MFC等のアプリで使用しているDLLを偽造してカレントに置いておけば、システムが勝手にカレントのDLLをロード(起動時に動的リンクされたライブラリを自動的に読み込む)してしまうのよ。
つまり、一切ランタイムを使わないでインストーラを作れって話になるんだけど。
Re: (スコア:0)
システムディレクトリ等から読み込みたいのなら、そう指定すべきでは?
元々カレントにあったDLLを上書きする、という話ならその通りですが。
Re: (スコア:0)
動的リンクされたライブラリのロードは、OSがやります。
その際、カレントディレクトリ、システムディレクトリの順で対象のDLLを探すので今回の話になるわけです。(動的リンクしたライブラリの読込場所は指定できない)
一応、動的リンクをやめて、全てのライブラリをloadlibraryで読み込む様にすれば、回避できるけど、普通はやらないね。(MFC等のクラスライブラリを使ってるとほぼ不可能だと思う)
Re: (スコア:0)
一応。
カレントディレクトリは「実行ファイルのディレクトリ」の意味で記載してます。
Re: (スコア:0)
これって、exeやmsiを生でダウンロードさせるという慣習に問題があるのかも。
zipとかで固めてあれば、当然解凍時に別ディレクトリ作るよね。だから、実行ファイルの同一ディレクトリに何かが紛れ込むことは基本的にないわけで。
(解凍時に同一名のディレクトリが既にあったら混入の可能性はあるけど、さすがにそれは不用心すぎる)
昔はlzhとかzipで固めるのが普通だったと思うんだけど(cygwinのsetup.exeが生だったのに驚いた覚えが……)、いつの間にかexeを生で配ることが多くなってきたよね。
その悪しき風習を改めるべきなのかもしれない。
Re: (スコア:0)
もっとそれ以前の勝手にとりあえずダウンロード仕様が犯人だと思うんですよね。
インジェクションの単体.dllがダウンロードフォルダに入り込まなければ問題は起きにくいので。
lzhやzipで固めていたのは、
・消費帯域を減らすため
・複数ファイルをまとめるため
・ファイルが壊れていないかの破損チェックのため
で、上2つは回線の高速化で自己解凍で済んで、
破損チェックも電子署名すれば生exeで出来るからかも。
次期WindowsでマニフェストにシステムディレクトリからしかDLL読み込まないオプションとか付くのかね。
そいつがディレクトリを掘って自己解凍すれば大分緩和されるかな。
Re: (スコア:0)
次期Windows を期待せんでも、昔から 読込むDLLの署名要求できる。署名が違ったら同じバージョンでも読込まずに別のを探させることが出来る。
アプリの提供側が、その設定をやってるかどうかってことだけど、Windows って開発者がプラットホームの事を知らなさすぎるってケースが多いので、やってないが多いだろうな。
Re: (スコア:0)
今回の件に特定するのでなければ
仕様そのものが脆弱である場合もあるので、仕様だから脆弱ではないということは言えない。
これは、脆弱と言ってもいいような気もするけど、
じゃあどうするのって言うと困るなぁ
信用置けないフォルダはDLLの読み込みを止めたら良いのかね・・・
先回りしろ (スコア:0)
ダウンロードフォルダにあらかじめインストーラーが使うDLLの本物のコピーを置いて上書きできないようにロックしておけばいい
Re: (スコア:0)
ダウンロードフォルダ変更できないと不便なんだが。
MS<もうストアアプリだけにしたい (スコア:0)
とか思ってたりするのかねぇ。
# いやストアアプリなら安全なのかよく知りませんけども