《SxS also stands for Specter by Side.pdf》由会员分享,可在线阅读,更多相关《SxS also stands for Specter by Side.pdf(44页珍藏版)》请在三个皮匠报告上搜索。
1、SxS also stands for Specter by Side演讲人:张云海Talk is cheap.Show me the code.Talk is cheap.Show me the code.int main()LoadLibrary(AdmTmpl.dll);LoadLibrary(adrclient.dll);LoadLibrary(appmgr.dll);LoadLibrary(AuditNativeSnapIn.dll);LoadLibrary(wuapi.dll);Link(L?C:,LGLOBAL?C:test);LoadLibrary(BioCredProv.dl
2、l);目录/CONTENTSSxSSxS是什么是什么SxSSxS如何工作如何工作SxSSxS的缺陷的缺陷问题修复问题修复DLL Hell 问题Windows 早期没有完善的动态链接库(DLL)版本管理机制l 文件名是动态链接库的唯一标识l 同名的动态链接库会互相覆盖l 加载错误版本的动态链接库会导致程序崩溃l 将动态链接库私有化会浪费存储空间、降低系统效率SxS 的解决方案02每个 DLL 在系统中只保存一份01同名的 DLL 可以在系统中共存SxS 的解决方案C:WindowsWinSxSamd64_mon-controls_6595b64144ccf1df_6.0.22000.120_no
3、ne_9d947278b86cc467comctl32.dllSxS Directory:C:WindowsWinSxSSxS 的解决方案C:WindowsWinSxSamd64_mon-controls_6595b64144ccf1df_6.0.22000.120_none_9d947278b86cc467comctl32.dllprocessorArchitecture:amd64SxS 的解决方案C:WindowsWinSxSamd64_mon-controls_6595b64144ccf1df_6.0.22000.120_none_9d947278b86cc467comctl32.dl
4、lname:mon-controlsSxS 的解决方案C:WindowsWinSxSamd64_mon-controls_6595b64144ccf1df_6.0.22000.120_none_9d947278b86cc467comctl32.dllpublicKeyToken:6595b64144ccf1dfSxS 的解决方案C:WindowsWinSxSamd64_mon-controls_6595b64144ccf1df_6.0.22000.120_none_9d947278b86cc467comctl32.dllversion:6.0.22000.120SxS 的解决方案C:Windo
5、wsWinSxSamd64_mon-controls_6595b64144ccf1df_6.0.22000.120_none_9d947278b86cc467comctl32.dlllanguage:noneSxS 的解决方案C:WindowsWinSxSamd64_mon-controls_6595b64144ccf1df_6.0.22000.120_none_9d947278b86cc467comctl32.dllfile name:comctl32.dll目录/CONTENTSSxSSxS是什么是什么SxSSxS如何工作如何工作SxSSxS的缺陷的缺陷问题修复问题修复ManifestBi
6、oCredProv 通过 Manifest 声明依赖的 DLL Manifest加载 DLL 时若存在嵌入的 Manifest 资源则创建 Activation Context Activation Context由 CSRSS 服务创建KERNELBASE!CreateActCtxWKERNEL32!CreateActCtxWWorkerKERNEL32!BasepCreateActCtxKERNEL32!CsrBasepCreateActCtxCommonntdll!CsrClientCallServerActivation Context保存在 _LDR_DATA_TABLE_ENTRY
7、 中Activation Context_ACTIVATION_CONTEXT 结构_ACTIVATION_CONTEXT+0 x000 LONG RefCount;+0 x004 ULONG Flags;+0 x008 _LIST_ENTRY OnLiveList;+0 x018 _ACTIVATION_CONTEXT_DATA*ActivationContextData+0 x020 void*NotificationRoutine;+0 x028 PVOID NotificationContext;+0 x030 ULONG SentNotifications8;+0 x050 ULON
8、G DisabledNotifications8;+0 x070 _ASSEMBLY_STORAGE_MAP StorageMap;+0 x080 _ASSEMBLY_STORAGE_MAP_ENTRY*InlineStorageMapEntries32;Activation Context_ASSEMBLY_STORAGE_MAP 结构_ASSEMBLY_STORAGE_MAP+0 x000 ULONG Flags;+0 x004 ULONG AssemblyCount;+0 x008 _ASSEMBLY_STORAGE_MAP_ENTRY*AssemblyArray;Activation
9、Context_ASSEMBLY_STORAGE_MAP_ENTRY 结构_ASSEMBLY_STORAGE_MAP_ENTRY+0 x000 ULONG Flags;+0 x008 UNICODE_STRING DosPath;+0 x018 HANDLE Handle;SxS 加载加载依赖的 DLL 时会在 Activation Context 中进行查找ntdll!LdrpMapAndSnapDependencyntdll!LdrpLoadDependentModuleAntdll!LdrpLoadDependentModuleInternalntdll!RtlDosApplyFileI
10、solationRedirection_Ustrntdll!sxsisol_SearchActCtxForDllNameSxS 加载获取 AssemblyContextSectionKeyedData_ACTIVATION_CONTEXT_SECTION_KEYED_DATA+0 x000 ULONG Size;+0 x004 ULONG DataFormatVersion;+0 x008 PVOID Data;+0 x010 ULONG Length;+0 x018 PVOID SectionGlobalData;+0 x020 ULONG SectionGlobalDataLength;+
11、0 x028 PVOID SectionBase;+0 x030 ULONG SectionTotalLength;+0 x038 _ACTIVATION_CONTEXT*ActivationContext;+0 x040 ULONG AssemblyRosterIndex;+0 x044 ULONG Flags;+0 x048 _ACTIVATION_CONTEXT_SECTION_KEYED_DATA_ASSEMBLY_METADATA AssemblyMetadata;SxS 加载获取 AssemblyStorageRoot目录/CONTENTSSxSSxS是什么是什么SxSSxS如何工
12、作如何工作SxSSxS的缺陷的缺陷问题修复问题修复SxS 缓存问题CSRSS 服务对 Activation Context 进行了缓存KEY+0 x000 UNICODE_STRING ManifestPath;+0 x010 ULONG64 LastWriteTime;+0 x018 UNICODE_STRING AssemblyDirectory;+0 x028 ULONG64 lpResourceName;+0 x030 UNICODE_STRING Language;+0 x040 USHORT ProcessorArchitecture;+0 x042 USHORT Flags;+0
13、 x048 _FILE_ID_INFORMATION FileIdInfo;SxS 缓存问题Activation Context 的缓存在同一会话中是全局的CSRSSActCtx CacheNormal UserManifestSxS 缓存问题Activation Context 的缓存在同一会话中是全局的CSRSSActCtx CacheSystemEntryPointActivationContextSxS 缓存问题Activation Context 缓存的更新路径穿越问题BioCredProv BioCredProv 路径穿越问题C:WindowsWinSxSManifestsamd6
14、4_mon-controls_6595b64144ccf1df_6.0.22000.120_none_9d947278b86cc467.manifest$M$G$N.DLL$.$L$N.DLL$.$L$N.MANIFEST$.$L$N$N.DLL$.$L$N$N.MANIFEST路径穿越问题C:WindowsWinSxSManifestsamd64_mon-controls_6595b64144ccf1df_6.0.22000.120_none_9d947278b86cc467.manifest$M$G$N.DLL$.$L$N.DLL$.$L$N.MANIFEST$.$L$N$N.DLL$.$
15、L$N$N.MANIFEST路径穿越问题C:WindowsassemblyGAC_64Microsoft.Windows.Common-Controls6.0.0.0_zh-CN_6595b64144ccf1dfMicrosoft.Windows.Common-Controls.DLL$M$G$N.DLL$.$L$N.DLL$.$L$N.MANIFEST$.$L$N$N.DLL$.$L$N$N.MANIFEST路径穿越问题C:WindowsSystem32zh-CNMicrosoft.Windows.Common-Controls.DLL$M$G$N.DLL$.$L$N.DLL$.$L$N.M
16、ANIFEST$.$L$N$N.DLL$.$L$N$N.MANIFEST路径穿越问题C:WindowsSystem32zh-CNMicrosoft.Windows.Common-Controls.MANIFEST$M$G$N.DLL$.$L$N.DLL$.$L$N.MANIFEST$.$L$N$N.DLL$.$L$N$N.MANIFEST路径穿越问题C:WindowsSystem32zh-CNMicrosoft.Windows.Common-ControlsMicrosoft.Windows.Common-Controls.DLL$M$G$N.DLL$.$L$N.DLL$.$L$N.MANIF
17、EST$.$L$N$N.DLL$.$L$N$N.MANIFEST路径穿越问题C:WindowsSystem32zh-CNMicrosoft.Windows.Common-ControlsMicrosoft.Windows.Common-Controls.MANIFESTBioCredProv 路径穿越问题C:WindowsWinSxSManifestsamd64_.testtest_6595b64144ccf1df_6.0.22000.120_none_9d947278b86cc467.manifestC:WindowsassemblyGAC_64.testtest6.0.0.0_zh-CN_
18、6595b64144ccf1df.testtest.DLLC:WindowsSystem32zh-CN.testtest.DLLC:WindowsSystem32zh-CN.testtest.MANIFESTC:WindowsSystem32zh-CN.testtest.testtest.DLLC:WindowsSystem32zh-CN.testtest.testtest.MANIFEST路径穿越问题C:testtest.MANIFESTint main()LoadLibrary(AdmTmpl.dll);LoadLibrary(adrclient.dll);LoadLibrary(appm
19、gr.dll);LoadLibrary(AuditNativeSnapIn.dll);LoadLibrary(wuapi.dll);Link(L?C:,LGLOBAL?C:test);LoadLibrary(BioCredProv.dll);更新缓存设置缓存目录/CONTENTSSxSSxS是什么是什么SxSSxS如何工作如何工作SxSSxS的缺陷的缺陷问题修复问题修复问题修复微软2022年10月修复了这一问题问题修复对 Assembly Identity Name 进行校验解决路径穿越问题问题修复按 Integrity Level 设定优先级解决缓存污染问题感谢您的观看!T H A N KY O UF O RY O U RW A T C H I N G