Windows 취약점 점검 스크립트 - Windows chwiyagjeom jeomgeom seukeulibteu

[Windows] 윈도우 시스템 점검 스트립트

@echo off

echo.

echo "==============================================================="

echo " 점검일자 : %data% / %time%

echo "==============================================================="

echo.

echo "==============================================================="

echo " 서버기본정보 "

echo "==============================================================="

echo.

systeminfo | findstr 호스트

systeminfo | findstr OS

systeminfo | findstr 제조업체

systeminfo | findstr 모델

systeminfo | findstr 부트

echo.

echo "==============================================================="

echo " CPU사용률 (할당된 메모리) "

echo "==============================================================="

echo.

typeperf "\processor(_total)\%% processor time" -sc 3

echo.

echo "==============================================================="

echo " Memory 사용률 "

echo "==============================================================="

echo.

typeperf "\memory\%% committed bytes in use" -sc 3

echo.

echo "==============================================================="

echo " Disk 남은공간(MB) "

echo "==============================================================="

echo.

echo "C드라이브"

typeperf "\Logicaldisk(c:)\Free megabytes" -sc 3

echo.

echo "D드라이브"

typeperf "\Logicaldisk(d:)\Free megabytes" -sc 3

echo.

echo "E드라이브"

typeperf "\Logicaldisk(e:)\Free megabytes" -sc 3

echo.

echo "==============================================================="

echo " Disk 사용률 "

echo "==============================================================="

echo.

echo "C드라이브"

typeperf "\Logicaldisk(c:)\%% Free Space" -sc 3

echo.

echo "d드라이브"

typeperf "\Logicaldisk(d:)\%% Free Space" -sc 3

echo.

echo "e드라이브"

typeperf "\Logicaldisk(e:)\%% Free Space" -sc 3

echo.

echo "==============================================================="

echo " 시간동기화 확인 (NTP서버 : x.x.x.x)"

echo "==============================================================="

echo.

w32tm /stripchart /dataonly /computer:x.x.x.x /samples:5

echo.

!우선적인 설정!

Windows 취약점 점검 스크립트 - Windows chwiyagjeom jeomgeom seukeulibteu

VMnet8 의 Subnet IP를 192.168.0.0 으로 설정한다.

[주요정보통신기반시설]

▶ 윈도우 서버 진단항목

   1) 계정 관리

     ㆍ기본계정은 이름을 변경해서 사용해야 한다

     ㆍ패스워드는 안전한 패스워드로 설정해야 한다

   2) 서비스 관리

    ㆍ불필요한 서비스는 중지 및 삭제해야 한다

    ㆍ필요한 서비스는 접근권한 및 접근제어가 수반된다

   3) 패치 관리

    ㆍ최신 패치가 적용되어야 한다

   4) 로그 관리

    ㆍ로그를 남기도록 설정이 되어야 한다

    ㆍ로그는 주기적으로 분석되어져야 한다

   5) 보안 관리

    ㆍ윈도우 서버 운영 체제에서 제공하는 보안 설정이 유지되어야 한다

   6) DB 관리

    ㆍ윈도우 서버이기 때문에 MS-SQL의 인증방식은 보안이 유지되어야 한다


~ 계정 관리 ~

▶ Administrator 계정 이름 바꾸기

Windows 취약점 점검 스크립트 - Windows chwiyagjeom jeomgeom seukeulibteu

명령 프롬프트 창에 net user 라고 입력하면, 해당 PC(WIN-U6750GC0DQB)에 대한 사용자 계정을 보여준다.

해당 명령어는 계정의 이름만 출력해준다. 사용하는지, 사용하지 않는지는 보여주지 않는다.

계정이 이렇게 두 개 뿐이라면, 보통 Administrator를 쓰고 있는 것이다. Guest는 일을 잘 하지 않는다. 말 그대로 게스트.

Windows 취약점 점검 스크립트 - Windows chwiyagjeom jeomgeom seukeulibteu

net user 계정이름 비밀번호 /add 하면 계정을 만들 수 있다.

Windows 취약점 점검 스크립트 - Windows chwiyagjeom jeomgeom seukeulibteu

net user 계정이름 을 통하여 해당 계정의 정보를 알 수 있다.

  * 이 때, 주의할 점!!! - 취약점 진단 관점에서

    administrator를 쓰지 않고 활성화는 되어있는 경우 그래도 취약이에요? 라고 묻는다면,

    이 항목을 진단할 때 administrator 라는 이름을 바꿔서 사용해야한다고 말해주어야 한다. 비활성화인거 확인은 했지만,

    언제든 활성화돼서 사용될 수 있기 때문이다.

Windows 취약점 점검 스크립트 - Windows chwiyagjeom jeomgeom seukeulibteu

net user 계정이름 | find "필요한 항목"

사용자 이름만 필요하다든지, 활성 계정만 필요하다든지 등 일 경우, 다른 항목들은 다 더미 데이터가 된다.

따라서, find 와 같은 명령어(= 리눅스에서의 grep)를 사용하여 필요한 항목만 찾는다.

echo [Start: 1. 계정 관리]					>>[win]%computername%.txt
echo [W-01 Start]						>>[win]%computername%.txt
echo [W-01 Administrator 계정이름 바꾸기]			>>[win]%computername%.txt
echo # 현재 시스템 계정 목록 #					>>[win]%computername%.txt
net user							>>[win]%computername%.txt
echo.								>>[win]%computername%.txt
echo # Administrator 계정활성유무확인 #				>>[win]%computername%.txt
net user Administrator | find "활성 계정"			>>[win]%computername%.txt
echo.								>>[win]%computername%.txt
echo.								>>[win]%computername%.txt
echo W-01 END							>>[win]%computername%.txt
echo ==================================================		>>[win]%computername%.txt

win_script_v0.1.bat 파일

윈도우 스크립트 파일, 윈도우 배치파일 등 bat 확장자를 쓴다.

Windows 취약점 점검 스크립트 - Windows chwiyagjeom jeomgeom seukeulibteu

만들어진 파일을 win8 에 넣고, 더블 클릭하면 txt 파일이 생긴다.

해당 txt 파일을 다시 로컬 PC에 옮겨온다.

Windows 취약점 점검 스크립트 - Windows chwiyagjeom jeomgeom seukeulibteu

파일을 열어보면 위와 같이 결과가 나온다.

Windows 취약점 점검 스크립트 - Windows chwiyagjeom jeomgeom seukeulibteu

취약점 진단 파일을 다음과 같이 작성한다. 점검결과 X 는 취약하다는 의미이다.

현재상태의 항목에는 [현재설정], [권고사항]을 입력한다.

▷ 계정 잠금 임계값 설정

   - 계정 잠금 임계값을 설정하여 공격자의 자유로운 자동화 암호 유추 공격을 차단하기 위함이다.

Windows 취약점 점검 스크립트 - Windows chwiyagjeom jeomgeom seukeulibteu

net accounts | find "잠금 임계값" 으로 확인 가능하다.

"아님" 으로 되어있으므로 설정이 안돼있다는 의미이다. 5 이하 일때만 앙호이다. 나머지는 다 취약에 속한다.

▶ 계정 잠금 기간 설정

위의 임계값이 설정 되어있어야만 이 기간을 설정할 수 있다.

net accounts | find "잠금 기간" 으로 확인하는 것이 하능하다.

▷ 패스워드 최소 암호 길이

   - 크랙 기법에 대응하는 설정이다.

   - 8자리 이상이어야 양호하다. 이에 미치지 못한다면 다 취약으로 간주한다.

net accounts | find "최소 암호 길이"

로 확인이 가능하다.

~ 현재까지의 소스 ~

echo [W-04 Start]						>>[win]%computername%.txt
echo [W-04 계정 잠금 임계값 설정]					>>[win]%computername%.txt
echo # 잠금 임계값 #						>>[win]%computername%.txt
net accounts | find "잠금 임계값"				>>[win]%computername%.txt
echo.								>>[win]%computername%.txt
echo.								>>[win]%computername%.txt
echo W-04 END							>>[win]%computername%.txt
echo ==================================================		>>[win]%computername%.txt
echo [W-08 Start]						>>[win]%computername%.txt
echo [W-08 계정 잠금 기간 설정]					>>[win]%computername%.txt
echo # 잠금 기간(분) #						>>[win]%computername%.txt
net accounts | find "잠금 기간"					>>[win]%computername%.txt
echo.								>>[win]%computername%.txt
echo.								>>[win]%computername%.txt
echo W-08 END							>>[win]%computername%.txt
echo ==================================================		>>[win]%computername%.txt
echo [W-10 Start]						>>[win]%computername%.txt
echo [W-10 패스워드 최소 암호 길이]				>>[win]%computername%.txt
echo # 최소 암호 길이 #						>>[win]%computername%.txt
net accounts | find "최소 암호 길이"				>>[win]%computername%.txt
echo.								>>[win]%computername%.txt
echo.								>>[win]%computername%.txt
echo W-10 END							>>[win]%computername%.txt
echo ==================================================		>>[win]%computername%.txt

여기까지는 win_script_v0.2.bat 으로 저장한다.

▶ 패스워드 최대 사용 기간

   - 최대 사용 기간은 weak point가 좀 있기 때문에 주의해야한다.

   - 90일 이하여도 "취약"일 수 있다.

Windows 취약점 점검 스크립트 - Windows chwiyagjeom jeomgeom seukeulibteu

secpol.msc -> secutiry policy 를 의미한다.

Windows 취약점 점검 스크립트 - Windows chwiyagjeom jeomgeom seukeulibteu

최대 암호 사용 기간을 90일로 설정 후 확인을 눌러 저장한다.

Windows 취약점 점검 스크립트 - Windows chwiyagjeom jeomgeom seukeulibteu

90일로 변경이 되었다.

Windows 취약점 점검 스크립트 - Windows chwiyagjeom jeomgeom seukeulibteu

lusrmgr.msc -> local user 및 group : 계정 정보과 윈도우의 그룹 정보를 알 수 있다

만약, 내가 쓰는 패스워드는 90일마다 변경하고 싶지가 않다. 하면,

로컬 사용자 및 그룹 - 사용자 - Administrator 우클릭 - 암호 설정 - 비밀번호를 설정.

다시 우클릭 후 속성 - 암호 사용 기간 제한 없음 으로 설정 후 저장한다.

명령 프롬프트로 돌아와서 확인해본다.

Windows 취약점 점검 스크립트 - Windows chwiyagjeom jeomgeom seukeulibteu

잘 변경이 되었다.

Windows 취약점 점검 스크립트 - Windows chwiyagjeom jeomgeom seukeulibteu

기한 없앤 부분도 잘 적용이 된 것을 볼 수 있다.

STOP!!

계정 아이디는 다 다르다. 이를 확인하기 위하여 for문을 이용하여 소스를 짠다.

echo [W-11 Start]						>>[win]%computername%.txt
echo [W-11 패스워드 최대 사용 기간]				>>[win]%computername%.txt
echo # 최대 암호 사용 기간 (일) #					>>[win]%computername%.txt
net accounts | find "최대 암호 사용 기간"			>>[win]%computername%.txt
echo.								>>[win]%computername%.txt
echo.								>>[win]%computername%.txt
echo # 계정별 상세내용(암호만료날짜확인) #				>>[win]%computername%.txt
for /f "tokens=1 skip=4" %%i in ('net user') do net user %%i	>>[win]%computername%.txt
for /f "tokens=2 skip=4" %%i in ('net user') do net user %%i	>>[win]%computername%.txt
for /f "tokens=3 skip=4" %%i in ('net user') do net user %%i	>>[win]%computername%.txt
echo W-11 END							>>[win]%computername%.txt
echo ==================================================		>>[win]%computername%.txt

Q. 윈도우 서버에 존재하는 계정의 상세정보를 출력시키는 윈도우 스크립트 작성.

    윈도우 배치 스크립트 검색을 통하여 skip, token, for문 쓰는 법을 찾아보기. (token=1 값 차례로 변수 %%i)

    현재 윈도우 2008 서버에 존재하는 계정, 즉 net user를 통한 계정 이름을 다시 이용하여 net user 계정명을 실행시킨 결과 파일 뽑아보기.( |, find 안 씀) -> skip=4, token=3

* 윈도우 스크립트 for문*

for %%i in (*.*) do attrib %%i

 = 기초 문법 = 

for 다음   for 다음의 변수는 %%i 와 같이 퍼센트 기호를 2개 붙여야한다. No 1개, Yes 2개!
  변수명은 대소문자를 구분한다. %%A와 %%a는 다른 것!
in 다음   in 다음의 (*.*)은 모든 파일을 작업 대상으로 하라는 것.
  in (파일-집합)
  in ("문자열")
  in ('명령어')
  로 보통 사용이 가능하다.
do 다음   do 다음은 각 패일에 대해 실행할 명령어와 옵션을 적어주기.
맨 마지막의 %%i   각 파일명들이 명령어에 자동으로 대입되는 부분.
  큰따옴표로 둘러싸면 "공백있는 파일명"을 다룰 수 있음.

= for과 %%i(변수) 사이에 넣는 옵션들 =

/D   파일이 아닌 디렉토리들을 작업 대상으로 함.
  for /d %%변수 in (집합) do 명령 [명령-매개변수]
/R   하위 디렉토리의 파일들까지 처리.
  for /r [[드라이브:]경로] %%변수 in (집합) do 명령 [명령-매개변수]
/L   집합은 단계별로 증가/감소하는 시작부터 끝까지의 일련의 숫자.
  for /l %%변수 in (시작,단계,끝) do 명령 [명령-매개변수]

  ex)
   (1,1,5)는 1 2 3 4 5를 나타내며, (5,-1,1)은 5 4 3 2 1을 나타냄.

/F   for /f ["옵션"] %%변수 in (파일-집합) do 명령 [명령-매개변수]
  for /f ["옵션"] %%변수 in ("문자열") do 명령 [명령-매개변수]
  for /f ["옵션"] %%변수 in ('명령어') do 명령 [명령-매개변수]

= skip, tokens =

skip   위에서부터 몇 번째 줄 까지 무시를 할 지 지정함.
  필요한 토큰이 세 번째 줄에 있다면 처음 두 줄은 무시해도 됨. → skip=2 라고 작성.
tokens   for 구문은 각 행별로 분석하는데, 이 때 토큰은 각 행의 몇 번째 문자열을 전달해줄지 지정함.
  문자열의 기본 구분단위는 공백.

  ex)
  for /f "tokens=3" %%i in ("I love you") do echo %%i
  라고 했을 경우, 3번째 문자열인 you가 출력.

  * 둘이 같이 쓰고 싶다면, (skip=1, token=1) 이런 식으로 묶어서 사용!

내가 원하는 것은, net user 했을 때의 정보들이 쭉 나왔으면 좋겠다는 것이다. 따라서 그에 맞게 구성해본다.

for /f "tokens=1 skip=4" %%i in ('net user') do net user %%i

라고 하면, net user 를 실행했을 때 토큰 첫 번째를 출력하고 위에서 4개의 줄은 skip되는 것이다.

마찬가지로, 토큰은 총 3개이기 때문에 for문을 세 개 작성해주어야 한다.

for /f "tokens=1 skip=4" %%i in ('net user') do net user %%i
for /f "tokens=2 skip=4" %%i in ('net user') do net user %%i
for /f "tokens=3 skip=4" %%i in ('net user') do net user %%i

위와 같이 하면 net user 했을 때, 유저들이 추가되더라도 모두 출력이 가능하다.

▷ 최근 암호 기억

   - d, c, b, a 이전 4개 패스워드는 재사용할 수 없다.

   - net accounts 에는 "최근 암호 기억"이 없다.

Windows 취약점 점검 스크립트 - Windows chwiyagjeom jeomgeom seukeulibteu

secedit /export /cfg c:\secpol.txt

   - secedit : 현재 구성을 지정된 보안 템플릿과 비교하여 시스템 보안을 구성 및 분석

   - /export : 데이터베이스에 저장된 보안 설정을 내보냄

   - /cfg : 분석을 위해 데이터베이스로 가져올 보안 템플릿의 경로와 파일 이름

   - c:\secpol.txt : 경로 및 파일명

해당 파일을 열어보면,

Windows 취약점 점검 스크립트 - Windows chwiyagjeom jeomgeom seukeulibteu

위의 부분을 find하면 된다.

Windows 취약점 점검 스크립트 - Windows chwiyagjeom jeomgeom seukeulibteu

type secpol.txt | find /I "PasswordHistorySize"

/I(대문자 i) : 뒤에 값의 대소문자 구분을 하지 않겠다는 의미.

echo [W-16 Start]						>>[win]%computername%.txt
echo [W-16 최근 암호 기억]					>>[win]%computername%.txt
echo # 로컬보안정책 설정정보 추출 #				>>[win]%computername%.txt
secedit /export /cfg c:\secpol.txt				>>[win]%computername%.txt
echo.								>>[win]%computername%.txt
echo.								>>[win]%computername%.txt
echo # 최대 암호 기억 (개) #					>>[win]%computername%.txt
type c:\secpol.txt | find /I "PasswordHistorySize"		>>[win]%computername%.txt
echo W-16 END							>>[win]%computername%.txt
echo ==================================================		>>[win]%computername%.txt