让木马代码执行包装二进制

时间:2016-02-18 18:29:38

标签: c# trojan

让我先说明它已经从security.stackexchange迁移到stackoverflow。另外,我理解堆栈成员可能有的任何问题;寻求安全敏感知识对任何参与者来说都是一把双刃剑。我个人认为,公开谈论漏洞和漏洞非常重要,因为它为社区提供了解决问题的机会。

我的目标:

  • 让自定义编码的恶意C#应用程序在执行任务后执行它所包含的合法应用程序。
    • 我们的目标系统具有支持代码的所有必要框架。

问题:

  • Wrappers独立地执行两个包装的二进制文件。
    • 我需要恶意文件在请求提升权限后触发合法文件。
    • 这将模拟合法文件在安装时通常执行的单个权限提升请求。

问题:

  • 是否有一种方法可以对C#应用程序进行编码,使其可以执行“包装”的二进制文件?
    • 我不完全理解被包装的二进制文件发生了什么,可能会错误地提出这个问题。

背景

我的小组将在接下来的几个月内进行笔测试,我们已经发现了一个客户缺陷。客户使用的特定软件套件每次更新时都需要完全重新安装。这种重新安装需要权限提升,我们已经证明使用自定义编码特洛伊木马的受污染媒体可能会导致其设备/网络受到攻击。

客户可以采用多种解决方案来确保其应用程序安装程序未被篡改。

修改:显示executing wrapped binary解决了如何在汇编语言中执行此操作的问题,而不是更高级别的语言。仍然可能是一个有用的教训...

1 个答案:

答案 0 :(得分:3)

好的应用程序......(首先编译此应用程序)

using System;

namespace App
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

BadApp ...(将上述应用程序包含为嵌入式资源)

using System;
using System.IO;
using System.Reflection;

namespace BadApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("do bad");

            Assembly good = null;

            var ea = Assembly.GetExecutingAssembly();
            using (var rs = ea.GetManifestResourceStream(ea.GetManifestResourceNames()[0]))
            using (var ms = new MemoryStream())
            {
                rs.CopyTo(ms);
                good = Assembly.Load(ms.ToArray());
            }

            var ep = good.EntryPoint;
            ep.Invoke(null, new [] {args});

            Console.WriteLine("ha ha too late");
        }
    }
}

...运行BadApp输出

do bad
Hello World!
ha ha too late