itsme

10-11주차 : 윈도우 서버 취약점 진단 본문

대외활동/K-Shield 10기

10-11주차 : 윈도우 서버 취약점 진단

itssmeee 2023. 6. 11. 21:46
반응형

GUI → CLI로 변환해야함.

[W-01. Administrator 계정 이름 변경 및 보안성 강화]

  1. Administrator 계정 활성화 여부
  2. 활성화 시 계정이름 확인
  3. 계정 이름이 Administrator 일 경우 강화된 패스워드를 사용하고 있는지 확인
  4. 강화된 패스워드 사용 여부 확인 방법
    1. 패스워드 최소 길이 : 8자 이상
    2. 패스워드 복잡성 설정 : 설정 여부 (설정 시 4조합)

<양호 조건>

  1. Administrator 계정 비활성화
  2. Administrator가 활성화 되어있으나, 계정 이름이 변경된 경우
  3. Administrator가 활성화 되어 있고, 계정 이름을 그대로 사용하고 있으나, 패스워드 최소 길이가 8자 이상이고, 패스워드 복잡성 설정이 설정된 경우

Administrator 계정 이름 변경 및 보안성 강화 확인 방법

  • 계정 확인 : net user
  • 로컬 보안 정책 확인 (GUI)
    • win + r
    • 로컬 정책 → 보안 → 계정 : Administrator 계정 상태
    • 로컬 정책 → 보안 → 계정 : Administrator 계정 이름 바꾸기
    • 계정 정책 → 암호 정책 → 최소 암호길이, 암호는 복잡성을 만족해야함.
  • 로컬 보안 정책 확인 (CLI)
    • cmd → cd Desktop
    • secedit /export /cgf secpol.txt
    • 계정 상태
      • EnableAdminAccount : 1은 활성화, 0은 비활성화
    • 계정 이름
      • NewAdminstratorName : 쌍따옴표 안의 내용을 확인
    • 최소 암호길이
      • MiniumPasswordlLength : 숫자 크기
    • 암호는 복잡성을 만족해야함
      • PasswordComplexity : 1은 사용, 0은 사용 안함

[W-04. 계정 잠금 임계값 설정]

  • net account로도 확인 가능
  • chcp 437 : 영어 코드 페이지
    • Lockout threshold
  • chcp 949 : 한글 코드 페이지
    • 잠금 임계값
  • 로컬 보안 정책 확인 (나중에 스크립트를 위해 확인하는 방법)
    • 계정 잠금 입계값 : LockoutBadCount 설정의 숫자 크기 확인
    • 0보다는 크고 5보다는 작거나 같아야 양호

[W-47. 계정 잠금 기간 설정]

  • LockoutBadCount 가 설정되어있지 않으면, 해당 설정들은 로컬 보안 정책 상 확인하기 어려움
  • LockoutBadCount 가 활성화 되어있으면 아래 설정들이 활성화
    • LockoutDuration : 계정 잠금 기간
    • ResetLockoutCount : 다음 시간 후 계정 잠금 수를 원래대로 설정
    • 두 설정이 60보다 커야 양호

[W-55. 최근 암호 기억]

  • 최근 암호 기억이 4개 이상으로 설정되어 있다면 양호

[W-08. 하드디스크 기본 공유 제거]

시작 우클릭 → 실행 → regedit → HKLM → SYSTEM → CurrentControlSet → Services → Lanmanserver → parameters

** AutoShareServer 따로 추가 해줘야함.

reg query “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters” /s /v AutoShareServer

[W-25. FTP 서비스 구동 점검]

  • FTP인지 secure FTP 인지 구분 어려워 FTP 서비스가 구동되고 있는지 아닌지 여부만 판단해서 양호, 취약을 판단
  • FTP 서비스가 구동 중 이면 취약
  • FTP 서비스가 구동 중이지 않으면 양호
  • 다만, 차후 인터뷰를 통해서 구동 중인 FTP 서비스가 secure FTP 라는 것이 증명된다면, 이 항목은 양호로 변겅

net start 명령어를 통해서 확인

  • net start 명령은 현재 실행 중이 서비스 목록만 출력
  • net start | find /i “FTP”

[W-69. 정책에 따른 시스템 로깅 설정]

<Event Audit>

시스템 이벤트 : AuditSystemEvents = 3 로그온 이벤트 : AuditLogonEvents = 3 개체 엑세스 : AuditObjectAccess = 0 권한 사용 : AuditPrivilegeUse = 0 정책 변경 : AuditPolicyChange = 1 계정 관리 : AuditAccountManage = 1 프로세스 추적 : AuditProcessTracking = 0 디렉터리 엑세스 : AuditDSAccess = 1 계정 로그온 : AuditAccountLogon = 1

감사 안함(0)은 확인 X 성공, 실패만 확인

[W-38. 화면 보호기 설정]

  1. 화면 보호기 설정
  2. 대시 시간 10분 이하 값으로 설정
  3. 화면 보호기 해제를 위한 암호를 사용

ScreenSaveActive : 화면 보호기 설정 여부

ScreenSaverIsSecure : 화면 보호기 해제 암호 사용 여부

ScreenSaveTimeOut : 대기시간 확인 600보다 작아야함.

  • 맨 처음 확인 하는 부분 (교안 내 확인 방법)
    • 해당 내용으로 얗호, 취약을 1차적으로 판단한 후 아래의 추가 확인 기능 부분을 통해 별도 설정이 되어있다면 양호로 변경할 수도 있음.
  • 추가 확인 가능 부분
    • (현재 사용자) 화면 보호기 로컬 그룹 정책 설정
      • reg query "HKCU\Software\Policies\Microsoft\Windows\Control Panel\Desktop" \v ScreenSaveAcitve
    • 로컬 전체 사용자 화면 보호기 설정
      • reg query "HKEY_USERS" \s \v ScreenSaveActive
    • 로컬 사용자별 화면 보호기 정보
      • Powershell "Get-WmiObject Win32_UserAccount | Select-Object -Property SID"
      • reg query "HKEY_USERS\나온 SID\Control Panel\Desktop" /s | findstr /i "ScreenSaveActive ScreenSaverlsSecure ScreenSaveTimeOut"

[배치 스크립트]

@echo off : echo 하고자 하는것만 출력

아니면 명령 한줄한줄 다 cmd창에 뜸

에러 찾을 수 없을때 @echo off 빼고 실행해보기

ehco “” == echo.

/dev/null == nul

2>/dev/null == 2>nul

cat /etc/passwd > /dev/null == pause>nul

Linux : echo “Hello World”

Windows : echo Hello World

echo <hello>, |hello| → error

echo ^<hello^>, ^|hello^| → not error

<ERRORLEVEL>

직전에 실행한 명령어의 성공 여부를 알려줌

성공 : 0반환

실패 or 문제 생김 : 0이 아닌 다른 값 반환

%errorlevel%변수에 저장

<쉘 스크립트 작성시 유의점>

처음에 root계정인지 아닌지 확인하는 부분이 있어야함

Linux : id | grep “uid=0” = “”

Windows : net session > nul 2>&1

윈도우는 옵션값의 대소문자 구분하지 않음

<FIND>

문자열을 검색하고 지정된 문자열을 포함하는 텍스트 줄을 표시

<FINDSTR>

파일에서 텍스트의 패턴을 검색하며, 정규표현식이 사용 가능하여 FIND 명령보다 강력

리눅스의 grep, egrep과 유사한 기능

  • /b: 줄의 시작부터 검색
  • /a : 줄의 끝 부분부터 검색
  • /v : 지정한 문자열이 없는 줄을 표시
  • /i : 대소문자 구분 무시
  • /s : 현재 디렉터리와 모든 하위 디렉터리를 검색
  • /c:”문자열” : 문자열 그대로 검색하는 옵션, 공백까지 문자열로 인식해서 검색
  • /r : 문자열 검색 시 정규식 사용

EX)

<검색 List>

Hello World

Hello Batch

K-Shield World

findstr “Hello World” ⇒ Hello World, Hello Batch, K-Shield World

findstr /c:”Hello World” ⇒ Hello World

findstr /c:”^Hello World$” ⇒ 정규식 표현이 문자로 인식되어 아무것도 안나옴

findstr /rc:”^Hello World$” ⇒ Hello World

<변수>

set val=Hello

echo %val%

/a : =기호 오른쪽의 문자열을 연산을 위한 수식

<연산>

set count=0

set /a count+=1

echo %count%

⇒ 1

<문자열 일부 추출>

set val=Hello

set val=%val:~0,1%

H e l l o

~0 ~1 ~2 ~3 ~4

echo %val%

→ H

<치환>

set val=Hello

set val=%val:l=k%

echo %val%

→ Hekko

<IF문>

if [not] errorlevel [숫자]

if [not] 문자열==문자열

if [not] exist [파일 이름]

if [조건] (

) else if [조건] (

) else if [조건] (

) else (

)

<FOR문>

.bat : %%a, (파일), “문자열”, ‘명령어’

cmd : %a

Hello World Batch 1 2 3

for /f "tokens=1,2" %%a in ("Hello World Batch") do echo %%a Hello World Batch 1 2 a b

for /f "tokens=2,3" %%a in ("Hello World Batch") do echo %%a Hello World Batch 2 3 a b

for /f "tokens=2" %%a in ("Hello World Batch") do echo %%b Hello World Batch 2

a

for /f "tokens=1,2,3" %a in ("Hello World Batch") do echo %b Hello World Batch 1 2 3 a b c

for /f "tokens=1-3" %a in ("Hello World Batch") do set conf=%%b Hello World Batch 1 2 3 a b c

"tokens=1-3 delims=" "delims=" -> 라인 단위로 하나의 토큰을 처리

<CALL>

쉘 스크립트에서 함수처럼 사용할 수 있는 명령어

call :printstr test call :printstr kisec call :printst1 k-shield

exit /b 0 :printstr echo This is %1 exit /b

:printstr1 echo This is %1 exit /b

<GOTO>

지정한 레이블로 이동하는 명령어