W-01 : 계정관리 > 1.1 Administrator 계정 이름 변경 또는 보안성 강화
점검 스크립트 짜는 법 : Get-LocalUser로 Administrator가 있는지 보고 레지스트리 키를 조회해서 패스워드 복잡도 설정이 활성화 되어 있는지 본다.
# W-01 점검 스크립트: Administrator 계정 이름 변경 및 비밀번호 보안성 점검
# Function to check Administrator account name and password complexity
function Check-W01 {
# Check if the Administrator account name is changed
$adminAccount = Get-LocalUser | Where-Object { $_.Name -match "Administrator" }
$isNameChanged = $adminAccount -eq $null
# Check if password complexity is enabled
$complexity = Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name "PasswordComplexity" -ErrorAction SilentlyContinue
$isPasswordComplex = $complexity.PasswordComplexity -eq 1
# Detailed results
$reasons = @()
if (-not $isNameChanged) {
# Administrator 계정 이름이 변경되지 않았습니다.
$reasons += "QWRtaW5pc3RyYXRvciDqs4TsoJUg7J2066aE7J20IOuzgOqyveuQmOyngCDslYrslZjsirXri4jri6Qu"
}
if (-not $isPasswordComplex) {
# 비밀번호 복잡성 정책이 활성화되지 않았습니다.
$reasons += "67mE67CA67KI7Zi4IOuzteyeoeyEsSDsoJXssYXsnbQg7Zmc7ISx7ZmU65CY7KeAIOyViuyVmOyKteuLiOuLpC4="
}
# Final output based on checks
if ($isNameChanged -and $isPasswordComplex) {
# Base64 인코딩된 양호 메시지
$message = "Vy0wMSDsoJDqsoAg6rKw6rO8OiDslpHtmLggLSBBZG1pbmlzdHJhdG9yIOqzhOyglSDsnbTrpoTsnbQg67OA6rK965CY7JeI6rOgLCDruYTrsIDrsojtmLgg67O17J6h7ISxIOygleyxheydtCDtmZzshLHtmZTrkJjslrQg7J6I7Iq164uI64ukLg=="
$decodedMessage = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($message))
Write-Output $decodedMessage
} else {
# Base64 인코딩된 취약 메시지
$message = "Vy0wMSDsoJDqsoAg6rKw6rO8OiDst6jslb0gLSBBZG1pbmlzdHJhdG9yIOqzhOyglSDsnbTrpoQg67OA6rK9IOuYkOuKlCDruYTrsIDrsojtmLgg67O17J6h7ISxIOygleyxheydtCDtmZzshLHtmZTrkJjsp4Ag7JWK7JWY7Iq164uI64ukLgo="
$decodedMessage = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($message))
Write-Output $decodedMessage
# Base64 디코딩된 세부 사유 출력
$reasonHeader = "7IS467aAIOyCrOycoDo=" # "세부 사유:" Base64 인코딩된 문자열
Write-Output ([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($reasonHeader)))
$reasons | ForEach-Object {
$decodedReason = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($_))
Write-Output "- $decodedReason"
}
}
}
# 실행
Check-W01
한글이 깨져서 base64로 인코딩해서 출력해야 한다.
실제로 복잡성을 만족하지 않고, Administrator 계정이 살아있기 때문에 취약하다고 뜸
W-02 : 계정관리 > 1.2 Guest 계정 비활성화
# W-02 점검 스크립트: Guest 계정 비활성화 여부 점검
function Check-W02 {
# Guest 계정 상태 확인
$guestAccount = Get-LocalUser | Where-Object { $_.Name -eq "Guest" }
$isGuestDisabled = $guestAccount.Enabled -eq $false
# 결과 출력
if ($isGuestDisabled) {
# Base64 인코딩된 양호 메시지
$message = "Vy0wMiDsoJDqsoAg6rKw6rO8OiDslpHtmLggLSBHdWVzdCDqs4TsoJXsnbQg67mE7Zmc7ISx7ZmU65CY7Ja0IOyeiOyKteuLiOuLpC4="
$decodedMessage = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($message))
Write-Output $decodedMessage
} else {
# Base64 인코딩된 취약 메시지
$message = "Vy0wMiDsoJDqsoAg6rKw6rO8OiDst6jslb0gLSBHdWVzdCDqs4TsoJXsnbQg7Zmc7ISx7ZmU65CY7Ja0IOyeiOyKteuLiOuLpC4="
$decodedMessage = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($message))
Write-Output $decodedMessage
Write-Output "7IS467aAIOyCrOycoDo=" # "세부 사유:" Base64
Write-Output "LSBHdWVzdCDqs4TsoJXsnbQg7Zmc7ISx7ZmU65CY7Ja0IOyeiOyKteuLiOuLpC4="
}
}
# 실행
Check-W02
Guest 계정이 비활성화 되어 있기 때문에 양호라고 뜸
W-04 : 계정관리 > 1.4 계정 잠금 임계값 설정
# W-04 점검 스크립트: 계정 잠금 임계값 설정 여부 점검
function Check-W04 {
# 계정 잠금 임계값 확인
$lockoutThreshold = (Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" -Name "LockoutThreshold" -ErrorAction SilentlyContinue).LockoutThreshold
# 값이 null인 경우 0으로 초기화
if ($null -eq $lockoutThreshold) {
$lockoutThreshold = 0
}
# 결과 판별
if ($lockoutThreshold -le 5 -and $lockoutThreshold -gt 0) {
# Base64 인코딩된 양호 메시지
$message = "LSBHdWVzdCDqs4TsoJXsnbQg7Zmc7ISx7ZmU65CY7Ja0IOyeiOyKteuLiOuLpC4=" # "Guest 계정 이름이 변경되었고 비밀번호 복잡성 정책이 활성화되어 있습니다."
$decodedMessage = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($message))
Write-Output $decodedMessage
} else {
# Base64 인코딩된 취약 메시지
$message = "Vy0wNCDsoJDqsoAg6rKw6rO8OiDst6jslb0gLSDqs4TsoJUg7J6g6riIIOyehOqzhOqwkuydtCA2IOydtOyDgeydtOqxsOuCmCDshKTsoJXrkJjsp4Ag7JWK7JWY7Iq164uI64ukLg==" # 취약 메시지
$decodedMessage = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($message))
Write-Output $decodedMessage
# 세부 사유 출력
$reasonHeader = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("7IS467aAIOyCrOycoDo=")) # "세부 사유:"
Write-Output $reasonHeader
if ($lockoutThreshold -eq 0) {
# Base64 디코딩된 세부 사유 메시지 출력
$reasonMessage = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("LSDqs4TsoJUg7J6g6riIIOyehOqzhOqwkuydtCDshKTsoJXrkJjsp4Ag7JWK7JWY7Iq164uI64ukLg==")) # "계정 잠금 임계값이 설정되지 않았습니다."
Write-Output "- $reasonMessage"
} else {
$reasonMessage = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("LSDqs4TsoJUg7J6g6riIIOyehOqzhOqwkuydtCA2IOydtOyDgeycvOuhnCDshKTsoJXrkJjslrQg7J6I7Iq164uI64ukLg==")) # "계정 잠금 임계값이 6 이상으로 설정되어 있습니다."
Write-Output "- $reasonMessage"
}
}
}
# 실행
Check-W04
W-06 : 계정관리 > 1.6 관리자 그룹에 최소한의 사용자 포함
# W-06 점검 스크립트: 관리자 그룹에 최소한의 사용자 포함 여부 점검
function Check-W06 {
# Administrators 그룹의 구성원 확인
$adminGroup = Get-LocalGroupMember -Group "Administrators"
$membersCount = $adminGroup.Count
# 기본적으로 포함될 사용자 리스트 (예: Administrator 계정)
$defaultAdmins = @("Administrator")
# 기본 사용자를 제외한 나머지 구성원 확인
$additionalMembers = $adminGroup | Where-Object { $_.Name -notin $defaultAdmins }
# 결과 판별
if ($membersCount -le 1 -or $additionalMembers.Count -eq 0) {
# Base64 인코딩된 양호 메시지
$message = "LSDqs4TsoJUg7J6g6riIIOyehOqzhOqwkuydtCA2IOydtOyDgeycvOuhnCDshKTsoJXrkJjslrQg7J6I7Iq164uI64ukLg=="
$decodedMessage = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($message))
Write-Output $decodedMessage
} else {
# Base64 인코딩된 취약 메시지
$message = "Vy0wNiDsoJDqsoAg6rKw6rO8OiDst6jslb0gLSBBZG1pbmlzdHJhdG9ycyDqt7jro7nsl5Ag67aI7ZWE7JqU7ZWcIOyCrOyaqeyekOqwgCDtj6ztlajrkJjslrQg7J6I7Iq164uI64ukLg=="
$decodedMessage = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($message))
Write-Output $decodedMessage
# 세부 사유 출력
$reasonHeader = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("7IS467aAIOyCrOycoDo=")) # "세부 사유:"
Write-Output $reasonHeader
foreach ($member in $additionalMembers) {
Write-Output "- $($member.Name)"
}
}
}
# 실행
Check-W06
'digital forensics' 카테고리의 다른 글
[우암 길드] Attify를 통한 펌웨어 분석 NETGEAR (0) | 2024.12.30 |
---|---|
[우암던전] L0phtCrack을 통한 윈도우 계정 크랙 (0) | 2024.12.21 |
[우암 던전] 윈도우 서버 hydra로 해킹 후 RDP 연결하기 (0) | 2024.12.10 |
[우암던전] Buffer Over Flow (0) | 2024.11.06 |
[우암던전] Privilege Escalation: Exploitation for Privilege Escalation (2) | 2024.10.17 |