使用协议转换 - 防御提示
2009-02-09 13:52:49 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁惧墽鎳撻—鍐偓锝庝簻椤掋垺銇勯幇顖毿撻柟渚垮妼椤粓宕卞Δ鈧獮濠勭磽閸屾艾鈧懓顫濋妸鈺佺疅缂佸顑欓崥瀣煕椤愵偅绶氱紓鍐╂礋濮婂宕掑▎鎴М濠电姭鍋撻梺顒€绉甸幆鐐哄箹濞n剙濡肩紒鎰殜閺屸€愁吋鎼粹€茬敖婵炴垶鎸哥粔鐢稿Φ閸曨垰鍐€妞ゆ劦婢€濞岊亪姊虹紒妯诲蔼闁稿海鏁诲濠氭晲婢跺﹤宓嗛梺缁樺姈缁佹挳宕戦幘璇叉嵍妞ゆ挻绋戞禍鐐叏濡厧浜鹃悗姘炬嫹

string admin = "administrator@mydomain.local";
using (WindowsIdentity id = new WindowsIdentity(admin)) // S4U logon
using (WindowsImpersonationContext ctx = id.Impersonate()) {
string SAM = @"c:windowsrepairsam";
Console.WriteLine(File.ReadAllText(SAM));
}
假设,她正通过将其权限暂时升级到域管理员级别来攻击本地计算机中的安全帐户数据库。
很显然,如果攻击得逞,后果是很严重的。但这是绝对不可能的。您可以看到,虽然这个黑客能够成功执行最初几行代码,但她执行 S4U 登录时所收到的安全令牌权限非常弱,不会支持用户模拟。她对 File.ReadAllText 的调用将失败,因为她所收到的管理员帐户令牌只可用于识别管理员,而不能模拟管理员。
只有具有更高权限的用户才可以使用 WindowsIdentity 中的 S4U 登录构造函数来获得可成功用于模拟的令牌。在后台,此构造函数调用的 Win32® API (LsaLogonUser) 将检查调用进程的标识是否含有 SeTcbPrivilege,默认情况下,SYSTEM 是包含 SeTcbPrivilege 的。这是 Windows 中的最高权限,因为它表明了您有效地成为了操作系统本身或者“可信计算基础”(Trusted Computing Base,首字母缩写为 TCB)的一部分。如果您获得了这项权限,您将“无所不能”,安全系统将颁发可以模拟的 S4U 登录票证。
这正是读者开始遇到麻烦的地方。他们想使用协议转换,但很快发现除非他们的网关进程以 SYSTEM 来运行,否则,他们通过此功能建立的任何登录都毫无用处。他们不能通过模拟来获取后端资源。有些人先行一步,将网关提升以 SYSTEM 权限来运行,但感觉到这样做不妥,而另一些人则拒绝这样做并寻求其他更传统的解决方案。
更多精彩
赞助商链接