[23]Window PowerShell DSC学习系列---- MOF文件能存储用户的密码吗?

原创 2017年02月21日 11:26:32

我们知道,DSC的资源中,有很多的资源是需要访问文件共享目录,进入本地的用户的目录,或者为一个特定的用户安装一个MSI的安装包,修改注册表;这个时候,如果直接执行调用DSC的资源,则可能会弹出“Access is Denied” 错误或者异常。这个时候就需要在生成的MOF文件里面制定其访问的权限;因为默认的情况下,DSC是通过系统的账号(System account)运行资源的。解决方案就是在PowerShell DSC 5.x中,每一个资源都会默认支持PsDscRunAsCredential的属性。通过PsDscRunAsCredential属性,可以指定其用用户账号或者域账号运行DSC的资源。比如通过下面的命令,我们可以查看到 Group的DSC资源里面就包括一个PsDscRunAsCredential的属性。

PS C:\dsc> Get-DscResource -Name Group -Syntax
Group [String] #ResourceName
{
    GroupName = [string]
    [Credential = [PSCredential]]
    [DependsOn = [string[]]]
    [Description = [string]]
    [Ensure = [string]{ Absent | Present }]
    [Members = [string[]]]
    [MembersToExclude = [string[]]]
    [MembersToInclude = [string[]]]
    [PsDscRunAsCredential = [PSCredential]]
}

下面是一个例子,用来通过修改注册表,来修改用户的CMD命令行的背景颜色的。

Configuration ChangeCmdBackGroundColor    
{
    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Node $AllNodes.NodeName
    {
        Registry CmdPath
        {
            Key                  = 'HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor'
            ValueName            = 'DefaultColor'
            ValueData            = '1F'
            ValueType            = 'DWORD'
            Ensure               = 'Present'
            Force                = $true
            Hex                  = $true
           
PsDscRunAsCredential = Get-Credential
        }
    }                   
}
$configData = @{
    AllNodes = @(
        @{
            NodeName             = 'localhost';
            PSDscAllowPlainTextPassword = $true
        }
    )
}
ChangeCmdBackGroundColor -ConfigurationData $configData

通过上   PsDscRunAsCredential = Get-Credential的配置,需要我们在把DSC 配置文件转换成MOF文件的时候,输入用户名和密码。

我们注意到,输入用户名和密码后,其用户名和密码会保存在MOF文件中。

instance of MSFT_Credential as $MSFT_Credential1ref
{
 Password = "123456";
 UserName = "admin";

};


instance of MSFT_RegistryResource as $MSFT_RegistryResource1ref

{
ResourceID = "[Registry]CmdPath";
 ValueName = "DefaultColor";
 PsDscRunAsCredential = $MSFT_Credential1ref;
 Key = "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Command Processor";
 Ensure = "Present";
 Force = True;
 SourceInfo = "C:\\DSC\\ChangeCmdBackGroundColor.ps1::7::9::Registry";
 ValueType = "Dword";
 ModuleName = "PSDesiredStateConfiguration";
 ValueData = {
    "1F"
  };
 Hex = True;
ModuleVersion = "0.0";
 ConfigurationName = "ChangeCmdBackGroundColor";
};


instance of OMI_ConfigurationDocument
{
 Version="2.0.0";
 MinimumCompatibleVersion = "2.0.0";
 CompatibleVersionAdditionalProperties= {"Omi_BaseResource:ConfigurationName"};
Author="Admin";
GenerationDate="02/21/2017 03:07:04";
GenerationHost="PULL51W2K12NSSL";
Name="ChangeCmdBackGroundColor";
};


上面的脚本会直接弹出一个输入用户名和密码的认证框,如何把用户名和密码的认证信息通过写入到文本文件中,直接传入到MOF文件里面呢? 请看下面的配置。

$password = "ThisIsAPlaintextPassword" | ConvertTo-SecureString -asPlainText -Force
$username = "User1"
[PSCredential] $credential = New-Object System.Management.Automation.PSCredential($username,$password)

Configuration ChangeCmdBackGroundColor    
{
    Import-DscResource -ModuleName PSDesiredStateConfiguration


    Node $AllNodes.NodeName
    {
        Registry CmdPath
        {
            Key                  = 'HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor'
            ValueName            = 'DefaultColor'
            ValueData            = '1F'
            ValueType            = 'DWORD'
            Ensure               = 'Present'
            Force                = $true
            Hex                  = $true
            PsDscRunAsCredential = $credential
        }
    }                   
}
$configData = @{
    AllNodes = @(
        @{
            NodeName             = 'localhost';
            PSDscAllowPlainTextPassword = $true
        }
    )
}


ChangeCmdBackGroundColor -ConfigurationData $configData


我们知道,把密码直接放在MOF文件里面是十分不安全的。那么如何把MOF文件的里面的密码通过证书加密,保护起来?这样的话,即使

有恶意攻击者获取到MOF文件以后,因为其不知道其密码,也不能执行其脚本,这样其安全性就会大大提高。欲知详情,敬请查看回分解。


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chancein007/article/details/56278440

[1] Window PowerShell DSC 学习系列----DSC的定义和2种架构模式

PowerShell DSC是PowerShell的一部分,是一个新的管理平台,英文全称为,PowerShell Desired Status Configuration,翻译成中文就是理想管理配置状...
  • chancein007
  • chancein007
  • 2017-01-09 23:09:46
  • 1732

Powershell之MOF后门

0x00 MOF Managed Object Format (MOF)是WMI数据库中类和类实例的原始保存形式。具体介绍可以阅读《WMI 的攻击,防御与取证分析技术之防御篇》,Windows ...
  • qq_27446553
  • qq_27446553
  • 2016-01-25 11:27:48
  • 1071

[12]Windows PowerShell DSC学习系列---PowerShell DSC的几个例子

在这节中,笔者给大家分享几个使用PowerShell DSC的例子,并且会持续更新中。。。。。...
  • chancein007
  • chancein007
  • 2017-02-09 14:12:21
  • 1500

[4] Window PowerShell DSC 学习系列----PowerShell DSC 5.x 提供了哪些有用好用的工具命令?

在使用PowerShell DSC的时候,我们经常需要使用 PSDesiredStateConfiguration的一些常用的命令去配置或者获取一些DSC的配置信息已经设置DSC的LCM的状态等信息;...
  • chancein007
  • chancein007
  • 2017-01-23 14:08:11
  • 1486

[6] Window PowerShell DSC 学习系列----如何安装最新的PowerShell DSC 5.1 Pull Server?

前面的5个章节做了很多的铺垫,包括Powershell DSC是什么? 能干什么? 其包含了推模式(push)和拉模式(Pull)。 而且笔者也描述了PowerShell DSC的配置文件(Confi...
  • chancein007
  • chancein007
  • 2017-01-24 00:47:59
  • 2079

[5] Window PowerShell DSC 学习系列----如何生成一个DSC MOF文件?

在前面的四个章节,笔者介绍了一些PowerShell基础的知识,包括PowerShell DSC的基本架构,DSC的资源以及配置格式,已经在PowerShell DSC 如何安装扩展的DSC Modu...
  • chancein007
  • chancein007
  • 2017-01-23 16:07:00
  • 1536

[13]Windows PowerShell DSC学习系列---直接调用DSC的资源方法

在PowerShell DSC 5.x中,我们能够使用Invoke-DscResource 这个DSC的命令去直接调用DSC 资源文件中定义的方法或者函数(如果是基于MOF的资源的话,其里面包含Get...
  • chancein007
  • chancein007
  • 2017-02-09 17:26:25
  • 1000

[9] Window PowerShell DSC 学习系列----错误诊断和分析

PowerShell DSC就像一个汽车,内部复杂,司机作为一个普通的用户在使用它,因为知道一些汽车的基本常识,所以当汽车发生一些简单的故障时,可以通过汽车自身带的仪表仪器诊断问题出在哪方面,也可以借...
  • chancein007
  • chancein007
  • 2017-01-31 00:59:09
  • 1852

[8] Window PowerShell DSC 学习系列----MOF文件和DSC Module的部署

在前面的第7节,笔者分享了如何安装Pull服务器,如何生成MOF文件。那么生成了MOF文件之后,如何在Pull服务器上部署?另外如果MOF文件中又引用了其他的DSC Module或者DSC Resou...
  • chancein007
  • chancein007
  • 2017-01-29 00:50:26
  • 1360

[24]Window PowerShell DSC学习系列---- 如何保护MOF文件里面存储的密码?

在上节笔者分享了[23]Window PowerShell DSC学习系列---- MOF文件能存储用户的密码吗?MOF文件里面能直接存储明文密码,这样是非常不安全的。那么有什么方式能够把MOF里面存...
  • chancein007
  • chancein007
  • 2017-02-24 15:13:51
  • 1746
收藏助手
不良信息举报
您举报文章:[23]Window PowerShell DSC学习系列---- MOF文件能存储用户的密码吗?
举报原因:
原因补充:

(最多只允许输入30个字)