アカウント名:
パスワード:
要するに、インストーラーがKnownDLLsにもSide-by-Sideアセンブリにも含まれないDLLを不用意に使っていたので、先にそのDLLと同名のファイルをダウンロードさせることができれば、ダウンロードフォルダからインストーラーを実行したときに、正規のインストーラーであるにもかかわらず任意のバイナリを読み込ませることができるわけだ。デスクトップアプリのインストーラーは通常管理者権限を持つから、確かに「攻撃手順は複雑だが、成功するとシステムを完全に乗っ取られる可能性がある」な。
もっとも攻撃の現実性はかなり疑わしいけど。これが成功する(リテラシーのユーザーを想定する)んだったら、もっとシンプルに改ざんしたインストーラーを実行させるだけで同じくらい成功すると思う。インストーラーの署名を確認すればいい? VirtualBoxのインストーラーは署名がSHA-1のままだから、ダウンロード時に表示されるダイアログでは署名されていないのと見分けがつかないしSmartScreenにブロックされてるぞ。マジで大丈夫かOracle。
>SetDllDirectory(_T(""));の一行を書いておけば防げる攻撃なのにまぁこの一行が必要なのはカレントディレクトリがdllの検索パスに含まれているという歴史的経緯のせいなんだが
> >SetDllDirectory(_T(""));> の一行を書いておけば防げる攻撃なのに
いや、以下の2点の理由により防げない。・ダウンロードフォルダーから実行すると、ダウンロードフォルダーがDLL検索パスで最優先の「アプリケーションのディレクトリ」になってしまう。これはSetDllDirectoryでは変更できない。・そもそも、暗黙にリンクされるDLLはバイナリが1バイトも実行されないうちにロードさせるので、プログラムコードに何か書いて防ぐことはできない。
対策としては、・インストーラーをexeにせず、MSIを使う。・どうしてもexeにする必要があるなら、Kn
> ・明示的リンクするときは、システムディレクトリのフルパスを指定するか、
これだけだと指定されたDLLが別のDLLを暗黙にリンクしているとき危険だった。LOAD_WITH_ALTERED_SEARCH_PATHと、あと結局SetDllDirectoryもいるな。LOAD_LIBRARY_SEARCH_SYSTEM32が使えるならそれが一番安全だ。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
※ただしPHPを除く -- あるAdmin
DLLハイジャック (スコア:0)
要するに、インストーラーがKnownDLLsにもSide-by-Sideアセンブリにも含まれないDLLを不用意に使っていたので、先にそのDLLと同名のファイルをダウンロードさせることができれば、ダウンロードフォルダからインストーラーを実行したときに、正規のインストーラーであるにもかかわらず任意のバイナリを読み込ませることができるわけだ。デスクトップアプリのインストーラーは通常管理者権限を持つから、確かに「攻撃手順は複雑だが、成功するとシステムを完全に乗っ取られる可能性がある」な。
もっとも攻撃の現実性はかなり疑わしいけど。これが成功する(リテラシーのユーザーを想定する)んだったら、もっとシンプルに改ざんしたインストーラーを実行させるだけで同じくらい成功すると思う。インストーラーの署名を確認すればいい? VirtualBoxのインストーラーは署名がSHA-1のままだから、ダウンロード時に表示されるダイアログでは署名されていないのと見分けがつかないしSmartScreenにブロックされてるぞ。マジで大丈夫かOracle。
Re: (スコア:0)
>SetDllDirectory(_T(""));
の一行を書いておけば防げる攻撃なのに
まぁこの一行が必要なのはカレントディレクトリがdllの検索パスに含まれているという歴史的経緯のせいなんだが
Re: (スコア:4, 参考になる)
> >SetDllDirectory(_T(""));
> の一行を書いておけば防げる攻撃なのに
いや、以下の2点の理由により防げない。
・ダウンロードフォルダーから実行すると、ダウンロードフォルダーがDLL検索パスで最優先の「アプリケーションのディレクトリ」になってしまう。これはSetDllDirectoryでは変更できない。
・そもそも、暗黙にリンクされるDLLはバイナリが1バイトも実行されないうちにロードさせるので、プログラムコードに何か書いて防ぐことはできない。
対策としては、
・インストーラーをexeにせず、MSIを使う。
・どうしてもexeにする必要があるなら、Kn
Re:DLLハイジャック (スコア:0)
> ・明示的リンクするときは、システムディレクトリのフルパスを指定するか、
これだけだと指定されたDLLが別のDLLを暗黙にリンクしているとき危険だった。LOAD_WITH_ALTERED_SEARCH_PATHと、あと結局SetDllDirectoryもいるな。LOAD_LIBRARY_SEARCH_SYSTEM32が使えるならそれが一番安全だ。