windows基線檢測腳本編寫指南-powershell版


前言:

  因為工作的原因,要寫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
}

 

2019/11/26 update

把去年寫的基線放在github上了

https://github.com/Echox1/windows_baseline

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM