我有两个工具,它们由.NET应用程序初始化为一个进程。其中一些来自第三方。启动工具列表是可配置的。我想保护系统免于执行(恶意)修改的工具。
假设和可能的攻击媒介
我假设我的应用程序受操作系统(包括其配置文件)保护。但是,包含要启动的工具的文件夹为 not 。意味着攻击者理论上可以用名称相同的其他程序替换任何工具。
可能的解决方案
我当前的概念是将每个工具的SHA256哈希添加到配置中。假设我的应用程序和包含该列表的配置文件受到保护,这应该可以防止它们被操纵的应用程序替换。
实施示例
配置文件示例:
<FileHashes>
<Hashes>
<add Filename="the-tool.exe" Hash="87BC21C157F7B3E4..." />
</Hashes>
</FileHashes>
应用示例:
public void Execute(FileInfo fileToLoad)
{
var hashDictionary = LoadHashDictionary(); //load hash from config
if (!hashDictionary.TryGetValue(fileToLoad.Name, out string configFileHash))
{
throw new Exception("Unknown file");
}
var fileHash = GetFileHash(fileToLoad);
if (!configFileHash.ToUpperInvariant().Equals(fileHash))
{
throw new Exception("File is manipulated");
}
Process.Start(new ProcessStartInfo()
{
FileName = fileToLoad.FullName
});
}
public string GetFileHash(FileInfo fileToLoad)
{
using (var fileStream = new FileStream(fileToLoad.FullName, FileMode.Open))
{
using (var shaHash = SHA256.Create())
{
fileStream.Position = 0;
byte[] hasValue = shaHash.ComputeHash(fileStream);
return BitConverter.ToString(hasValue)
.Replace("-", string.Empty)
.ToUpperInvariant();
}
}
}
问题
答案 0 :(得分:0)
如您所说。 Confg文件也不安全。恶意应用程序可以一起修改您的工具+配置文件以掩盖自身。
有什么简单的方法可以防止这种情况发生?代码签名。
在从主应用程序启动工具之前,只需对所有工具进行签名并进行证书验证。