运用大众言语运行时猎取持久性(上) | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

运用大众言语运行时猎取持久性(上)

申博_安全预警 申博 63次浏览 未收录 0个评论

运用大众言语运行时猎取持久性(上)

本文我们会引见怎样经由历程运用大众言语运转时运用顺序域治理器实行恣意代码并保护对Microsoft Windows体系的接见。

东西、平安性评价和测试

在平安性评价中,取得对组织内部网络的初始接见是一项非常具有挑战性的使命,须要消费很多的时候和精神。

为了处置惩罚这个题目,可以运用多种持久性手艺。这些手艺可以确保落空接见权只是临时的,这意味着你可以在特定的时候或实行特定的操纵以后恢复接见权限。本文诠释了怎样经由历程运用大众言语运转时运用顺序域治理器实行恣意代码并保护对Microsoft Windows体系的接见。

在这篇文章中,我们将详细引见:

1.基本.Net学问(比方大众言语运转时,全局顺序集缓存);

2.PowerShell剧本的基本学问;

3.C#编程的基本学问

.Net概述

.Net是Microsoft于2002年2月宣布的开辟平台,支撑三种言语:C#,F#和Visual Basic .Net(VB.NET)。

C#1.0于2002年1月初次宣布,如今是最盛行和最经常使用的.Net言语之一。这是一种高等的面向对象编程言语,重要用于开辟胖客户端运用顺序,Web运用顺序和挪动运用顺序(Xamarin)。

F#1.x于2005年5月宣布,是一种用于科学和数据剖析的强函数式言语。

末了说说VB.NET,其第一个版本于2002年宣布,基于Visual Basic 7.0,用于开辟桌面运用顺序。

.Net之所以变得云云受欢迎的缘由是因为它供应了很多风趣的功用,比方:

1.自动内存治理功用:垃圾网络(GC)自动消除分派.Net运用顺序运用的已分派内存,别的GC还确保只能接见分派的内存,从而确保内存平安。

2.运用非托管资本功用:不由.Net保护的资本称为非托管资本,.Net运用顺序可以经由历程托管范例(比方MemoryStream、CryptoStream、UnmanagedMemoryStream等)运用这些非托管资本。

3.范例平安功用:范例的每一个对象都定义了具有差别可接见级别的要领和属性,比方private、public、protected、internal、protected internal、private internal。.Net在尝试接见未定义或不可接见的要领或属性时,经由历程抛出运转时或编译时非常来确保范例平安。

4. delegate函数和“Lambda 表达式”: 托付(delegate)是一种范例平安的函数指针,用于通用言语运转库(CLI)。在C#中,delegate是一种class,包装了一个或多个函数指针及绑定的类实例。“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于个中的lambda笼统(lambda abstraction),是一个匿名函数,即没有函数名的函数,Lambda表达式可以示意闭包(注重和数学传统意义上的差别)。

5. Java泛型(Generics):  泛型是Java SE 1.5的新特征,泛型的实质是参数化范例,也就是说所操纵的数据范例被指定为一个参数。Generics有“类的,属性的”之意,在Java中代表泛型,泛型作为一种平安机制而发生。

类可以运用泛型来许可顺序员在组织类时指定范例,比方,完成泛型数据构造的范例是List,它可用于组织字符串List或整数列表的强范例List。

6.异步编程:经由历程C#中的async和await症结字,编写I / O绑定和CPU绑定的异步代码相称轻易,这有助于改良运用顺序的实行时候和机能。

7.言语集成查询(LINQ):言语集成查询是微软公司供应的一项新手艺。它可以将查询功用直接引入到.NET Framework 3.5所支撑的编程言语(如C#、Visual Basic等)中,使开辟人员可以在运用顺序代码中构成基于鸠合的查询,而没必要运用零丁的查询言语。查询操纵可以经由历程编程言语本身来转达,而不是以字符串嵌入到运用顺序代码中。LINQ的语法和语义和SQL很像,具有很多雷同的上风。要查询的数据的内部构造发送转变后,没必要修正查询代码。注重,虽然LINQ和SQL看起来很像,但LINQ越发天真,而且能处置惩罚局限更大的逻辑数据构造。比方,LINQ能处置惩罚以条理化的体式格局组织的数据,比方XML文档中的数据。

8.互操纵性:操纵体系供应了运用顺序编程接口(API),可以用来接见操纵体系治理的函数和信息的硬件。.Net供应了多种要领来挪用体系的API。另外,在Windows上,互操纵性许可运用组件对象模子(COM)组件。

7.不平安的代码:为了操纵内存块(如API挪用、指针、算法),接见本机内存是必要的,可以在c#中运用不平安的症结字来实行不平安的代码。

虽然多年来,.Net诞生了差别的完成体式格局,但就实质来说,.Net只要四种重要的完成体式格局:

· 1..Net框架:这是.Net在2002年的最初完成体式格局,此完成仅适用于Windows体系,用于开辟Web,Windows,Windows Phone,Windows Server和Azure的运用顺序;

· 2..Net内核:这是.Net的开源和跨平台完成,重要用于构建装备、云和物联网(IoT)运用顺序;

· 3. Mono:Mono是基于.Net Framework的.Net的开源和跨平台完成,该框架最初是为在Unix体系上运用.Net Framework运用顺序而开辟的。如今,Mono重要由Xamarin用于Android,iOS,tvOS和watchOS运用顺序。Xamarin作为一个跨平台开辟框架始创于2011年,旨在使挪动开辟变得难以置信地迅捷和简朴。Xamarin的产物简化了针对多种平台的运用开辟,包括iOS、Android、Windows Phone和Mac App。Xamarin由很多有名的开源社区开辟者建立和介入,而且也是Mono项目的主导者——C#与?NET框架的开源、跨平台完成。

· 4.通用Windows平台(UWP):末了一种完成通经常使用于开辟当代物联网、挪动装备、平板电脑、平板手机或Xbox运用顺序。

统统的完成都有两个共同点:.Net规范,以及一个或多个运转时。.Net规范是每一个.Net基类库完成的一组API。此API可确保任何.Net完成的一致性,从而许可跨完成库。这个API确保了任何.Net完成的一致性,因而许可跨完成库。差别的运转时(托管运用顺序的实行环境)包括:.Net Framework的大众言语运转时(CLR); .Net Core的内核CLR;用于UWP的.Net Native和用于基于Mono的运用顺序的Mono运转时。

大众言语运转时

大众言语运转时(Common Language Runtime,CLR)是Microsoft的大众语中言基本构造(CLI)的一个贸易完成,CLI是一种国际规范,用于建立言语和库在个中无缝协同事情的实行和开辟环境基本。.NET Framework 供应了一个称为大众言语运转时的运转环境,它运转代码并供应使开辟历程更轻松的效劳。有了大众言语运转时,就可以很轻易的设想出对象可以跨言语交互的组件和运用顺序。也就是说,用差别言语编写的对象可以相互通讯,而且它们的行动可以严密集成。

元数据形貌运用顺序运用的范例、成员和援用,CLR在运转时运用元数据来确保运用顺序具有所需的统统(比方加载顺序集、分派内存、天生本机代码),并设置运转时上下文边境。

大众言语运转时遵照大众言语架构的规范,可以使C++、C#、Visual Basic、以及JScript等多种言语深度集成。 CLR从某种意义上明白相称于Java中的Java虚拟机(JVM),而MSIL相称于Java中的字节码(.class文件)。MSIL老是及时编译(称为JIT编译)为响应平台的机械代码,这一点与Java也很类似。

编译将源代码翻译为Micrisoft 中心言语(MSIL)并天生所需的元数据。MSIL是一组可以有用地转换为本机代码且独立于CPU的指令。它包括用于加载、存储和初始化对象以及对对象挪用要领的指令,还包括用于算术和逻辑运算、掌握流、直接内存存取、非常处置惩罚和其他操纵的指令。元数据形貌代码中的范例,包括每种范例的定义、每种范例的成员的署名、代码援用的成员和运转时在实行时运用的其他数据。

在实行时,及时(JIT)编译器将MSIL翻译为本机代码。在此编译历程当中,代码必需经由历程考证历程,该历程搜检MSIL和元数据以检察是不是可以将代码确定为范例平安。

以上所述可用下图抽象地示意:

运用大众言语运行时猎取持久性(上)

经由历程运用中心言语反汇编顺序(ILDASM)二进制文件,可以猎取.exe,.dll,.obj,.lib和.winmd文件的MSIL代码。请注重,此二进制文件可从Windows软件开辟东西包(SDK)取得。

比方,可以将以下C#编译到名为Tool.exe的文件中,然后运用Ildasm.exe举行剖析:

using System;

namespace Tools {
    class Program {
        static void Main(string[] args) {
            Console.WriteLine("Hook my Common Language Runtime");
        }
    }
}

下面的屏幕截图显现了经由历程Ildasm.exe从上面的C#编译代码中提取的Main要领的MSIL代码。

运用大众言语运行时猎取持久性(上)

应当注重的是,任何运用CLR的. net运用顺序都被认为是托管运用顺序。CLR可以运用的代码也被认为是托管代码。托管运用顺序的重要长处是它们可以从CLR的效劳和功用中获益,比方:

1.跨言语集成;

CVE-2019-16097 Harbor权限提拔破绽剖析

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。 Unit 42安全研究人员Aviv Sasson在Harbor中发现了一个严重漏洞,攻击者利用该漏洞可以通过发送恶意请求来

2.跨言语非常处置惩罚;

3.加强的平安性;

4.版本掌握和布置支撑

5.组件交互的简化模子

6.调试和剖析效劳

在上面的功用列表中,最风趣的功用之一是跨言语集成。实际上,任何托管运用顺序都可以加载和运用任何托管库,而不论用于开辟库的言语是什么。

除了上述题目,另有一个症结的题目,就是Windows怎样运用CLR实行运用顺序?事实上,Windows运用运转时主机,如Microsoft Internet Explorer、APS.Net或Windows shell来实行托管运用顺序,这些运转时主机是将CLR的DLL加载到它们的历程空间的历程。

CLR运用的重要DLL是’mscorlib.dll’,它代表多言语规范大众对象运转时库(MS COR LIB)。然则,CLR运用了很多其他DLL,它们都以’mscor’为前缀。因而,可以经由历程列出以“mscor”开首的统统DLL称号来列出CLR在体系上运用的统统DLL。

以下PowerShell cmdlet将经由历程‘C:\Windows\Microsoft.Net\Framework’ 文件夹,该文件夹包括.Net Framework DLL并运用‘mscor*’过滤称号。

运用大众言语运行时猎取持久性(上)

请注重; .Net Framework 4.0及更高版本中的重要DLL是’clr.dll’。

另外,运转时主机不仅加载CLR的DLL。启动运转时主机时,将建立一个默许运用顺序域,然后在默许运用顺序域中加载并实行托管代码。

以上所述可用下图抽象地示意:

运用大众言语运行时猎取持久性(上)

如上图所示,运转时主机建立一个运用顺序域,加载托管代码,然后在运用顺序域中实行JIT编译器编译的托管代码。

运用顺序域和运用顺序域治理器

运用顺序域是平安边境,实行托管运用顺序时,运转时主机将自动建立一个默许的运用顺序域。多个运用顺序域可以驻留在统一运转时主机中,此平安边境供应了运用顺序域之间的断绝,这意味着运用顺序域A没法直接接见运用顺序域B的代码或资本。

统一运转时主机中的运用顺序域之间的断绝供应了以下几个优点:

1.假如一个运用顺序涌现毛病,则不会影响其他运用顺序域;

2.运用顺序域可以零丁住手/重新启动,而无需住手/重新启动运转时主机;

3.每一个运用顺序域的代码都有一组奇特授与的权限,这些权限能够与其他运用顺序域差别;

4.每一个运用顺序域都有本身的与域无关的顺序集列表,可以依据须要加载或卸载顺序集;

应当注重,从一个运用顺序域接见代码或资本是能够的。然则,须要一个代办。

每一个运用顺序域都有一种范例的运用顺序域治理器,而一个运用顺序域治理器可以有X个运用顺序域。运用顺序域治理器是System.AppDomainManager类,担任建立和自定义新建立的运用顺序域。总的来说,这个类公开了4个属性和6个要领,可以掩盖这些属性和要领来修正默许的CLR行动。

以下屏幕截图显现了System.AppDomainManager类的属性和要领。

运用大众言语运行时猎取持久性(上)

可以重写标记为virtual的属性和要领,并因而在自定义顺序集合完成,以便在实行任何托管代码之前修正新的运用顺序域。

下表形貌了可以依据Microsoft文档重写的属性和要领:

1.ApplicationActivator:属性,猎取处置惩罚域的外接顺序和基于清单的运用顺序的激活的运用顺序激活器;

2.HostSecurityManager:属性,猎取介入运用顺序域平安性决议计划的主机平安性治理器;

3.HostExecutionContextManager:属性,猎取治理实行上下文流程的主机实行上下文治理器;

4.EntryAssembly:属性,猎取运用顺序的项目顺序集;

5.CreateDomainHelper:要领,供运用于建立运用顺序域的协助顺序要领;

6.CheckSecuritySettings:要领,指导运用顺序域中是不是许可指定的操纵;

7. CreateDomain:要领,返回新的或现有的运用顺序域;

8.InitializeNewDomain:要领,初始化新的运用顺序域。

另外,因为System.AppDomainManager类继承自System.MarshalByRefObject,也可以重写以下要领:

1.ApplicationActivator:属性,猎取处置惩罚域的外接顺序和基于清单的运用顺序的激活的运用顺序激活器。

2.CreateObjRef:要领,建立一个对象,该对象包括天生用于与长途对象通讯的代办所需的统统相干信息;

3.InitializeLifetimeService:要领,猎取生命周期效劳对象以掌握此实例的生存期战略;

如今,虽然我们已晓得可以重写的要领和属性,然则,现在尚不清晰怎样变动CLR运用的默许运用顺序域治理器。

要处置惩罚此题目,必需设置“APPDOMAIN_MANAGER_ASM”和“APPDOMAIN_MANAGER_TYPE”环境变量。它们离别示意从System.AppDomainManager继承并掩盖要领和属性的自定义顺序集的全名,以及自定义顺序集用于完成System.AppDomainManager类的范例称号。

末了,因为运用顺序域治理器可以修正CLR的平安性决议计划,因而自定义顺序集须要完整受信托,这就请求必需是强称号顺序集,而且必需安装到全局顺序集缓存(GAC)中。

本篇文章,我们已晓得可以重写的要领和属性,以及怎样变动CLR运用的默许运用顺序域治理器。下一篇,我们就来继承说说怎样将完成System.AppDomainManager的强称号顺序集安装到GAC中,并终究完成运用大众言语运转时猎取持久性。

本文翻译自:https://www.contextis.com/en/blog/common-language-runtime-hook-for-persistence


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明运用大众言语运行时猎取持久性(上)
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址