ti-enxame.com

O que é dll seqüestro?

Pergunta simples: O que é o seqüestro de dll?

Eu li muito sobre quais aplicativos são vulneráveis, mas não muito detalhados quanto a por que.

Respostas apreciadas.

40
The Pixel Developer

O básico é simples. O Windows possui um caminho de pesquisa para DLLs, da mesma forma que possui um $ PATH para localizar executáveis. Se você descobrir quais DLLs um aplicativo solicita sem um caminho absoluto (acionando esse processo de pesquisa), poderá colocar o host DLL em algum lugar mais acima do caminho de pesquisa, para que seja encontrado antes a versão real é, e o Windows irá alimentar seu código de ataque com o aplicativo.

Então, vamos fingir que o caminho de pesquisa DLL do sistema se parece com isso:

a) .     <--current working directory of the application, highest priority, first check
b) \windows
c) \windows\system32
d) \windows\syswow64   <-- lowest priority, last check

e algum aplicativo Foo.exe solicita "bar.dll", que fica no subdiretório syswow64 (d). Isso permite que você coloque sua versão maliciosa em a), b) ou c) e ela será carregada no aplicativo automaticamente sempre que o aplicativo solicitar o bar.dll. E agora seu foo está bem e realmente não pode.

Como mencionado anteriormente, mesmo um caminho completo absoluto não pode proteger contra isso, se você puder substituir o DLL pela sua própria versão.

E, claro, isso também não é realmente limitado ao Windows. Qualquer sistema operacional que permita a vinculação dinâmica de bibliotecas externas é teoricamente vulnerável a isso.

51
Marc B

O seqüestro de DLL é realmente um conceito simples.

Os aplicativos carregam código externo por DLLs (Dynamic Link Libraries). DLL Highjacking é um processo pelo qual o código malicioso é injetado em um aplicativo por meio de um === malicioso [DLL com o mesmo nome que um DLL usado pelo aplicativo.

Um aplicativo está vulnerável ao seqüestro de DLL, dependendo de como eles referenciam suas DLLs. Um exemplo é usar caminhos relativos em vez do caminho absoluto para a DLL. Outro está carregando DLLs usando variáveis ​​de ambiente que podem não ser defina corretamente, nesse caso, o diretório padrão para um caminho relativo do aplicativo em execução.

9
Justin Niessner