1. 程式人生 > >windows基線編寫指南-powershell版

windows基線編寫指南-powershell版

csdn copy event cedit off https error ping 讀取配置

前言:

因為工作的原因,要寫windows下的基線檢查腳本。之前沒接觸過,在網上找了半天也沒找到現成的,無奈只好自己研究,最後還是成功完成了工作。

在我編寫之後發現windows下的基線基本就是檢查註冊表表項。但也有例外。windows組策略有些並不存在於註冊表中,那麽就要用到組策略命令行工具secedit

在powershell中獲取secedit用法

技術分享圖片

舉個例子:如果需要對審核策略進行檢查,那我們的思路是先讀取審核策略,然後判斷是否符合策略,通過

secedit /export /cfg config.cfg /quiet

讀取組策略到該目錄下的config.cfg文件中,截取一部分config.cfg文件如下

技術分享圖片

那麽我們只需知道這裏面的參數名和對應的值所代表的含義就能夠編寫檢查腳本,我在網上找了一下關於參數的含義,只找到一篇,不過也夠用了

[Unicode]
Unicode=yes
[System Access]
MinimumPasswordAge = 0    //密碼最短留存期
MaximumPasswordAge = 42    //密碼最長留存期
MinimumPasswordLength = 0    //密碼長度最小值
PasswordComplexity = 0    //密碼必須符合復雜性要求
PasswordHistorySize = 0    //強制密碼歷史 N個記住的密碼
LockoutBadCount 
= 5 //賬戶鎖定閾值 ResetLockoutCount = 30 //賬戶鎖定時間 LockoutDuration = 30 //復位賬戶鎖定計數器 RequireLogonToChangePassword = 0 *下次登錄必須更改密碼 ForceLogoffWhenHourExpire = 0 *強制過期 NewAdministratorName = "Administrator" *管理員賬戶名稱 NewGuestName = "Guest" *來賓賬戶名稱 ClearTextPassword = 0 LSAAnonymousNameLookup = 0 EnableAdminAccount
= 1 //administrator是否禁用 EnableGuestAccount = 0 //guest是否禁用 [Event Audit] AuditSystemEvents = 3 //審核系統事件 成功、失敗 AuditLogonEvents = 3 //審核登錄事件 成功、失敗 AuditObjectAccess = 3 //審核對象訪問 成功、失敗 AuditPrivilegeUse = 2 //審核特權使用 失敗 AuditPolicyChange = 3 //審核策略更改 成功、失敗 AuditAccountManage = 3 //審核賬戶管理 成功、失敗 AuditProcessTracking = 2 //審核過程追蹤 失敗 AuditDSAccess = 2 //審核目錄服務訪問 失敗 AuditAccountLogon = 3 //審核賬戶登錄事件 成功、失敗 --------------------- 本文來自 yongping8204 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/yongping8204/article/details/7471627?utm_source=copy

那麽現在就簡單了,如果我們審核賬戶登錄事件的標準策略為失敗。那麽只要AuditAccountLogon = 2就滿足策略標準了

代碼如下:

 $config = Get-Content -path config.cfg
 for ($i=0; $i -lt $config.Length; $i++)
 {
    $config_line = $config[$i] -split "="
    if(($config_line[0] -eq "AuditAccountLogon "))
    {
        $config_line[1] = $config_line[1].Trim(‘ ‘)
        if($config_line[1] -eq "2")
        { 
            $projectdata = @{"msg"="審核賬戶登錄事件策略符合標準";}
            $data[‘project‘]+=$projectdata
        }
        else
        {
            $projectdata = @{"msg"="審核賬戶登錄事件策略不符合標準";}
            $data[‘project‘]+=$projectdata
        }
    }
}

而不在secedit組策略中的基線要求可以讀註冊表,這裏很簡單,先百度一下該策略所在的註冊表的位置,使用powershell讀取註冊表,判斷是否符合標準即可。

舉個例子:

#安全日誌查看器大小設置
$Key = ‘HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security‘
$name = "MaxSize"
$config = (Get-ItemProperty -Path "Registry::$Key" -ErrorAction Stop).$name
if($config -ge "8192")
        {
            $projectdata = @{"msg"="安全日誌查看器大小設置策略符合標準";}
            $data[‘project‘]+=$projectdata
        }
else
        {
            $projectdata = @{"msg"="安全日誌查看器大小設置策略不符合標準";}
            $data[‘project‘]+=$projectdata
        }

除了windows之外還有windows下中間件基線腳本的編寫,思路比較清楚。

無非就是讀取配置文件,通過正則匹配確認策略是否符合標準。

或是通過Test-Path判斷是否存在敏感目錄或文件:

if(Test-Path %systemroot%\system32\inetsrv\iisadmpwd){
        $projectdata = @{"msg"="刪除風險實例文件%systemroot%\system32\inetsrv\iisadmpwd策略不符合標準";}
        $data[‘project‘]+=$projectdata
}

windows基線編寫指南-powershell版