본문 바로가기
운영체제 (LNX,WIN)

윈도우PC 간단한 유틸리티 구성 및 관리 AutoIt 스크립팅 자동화

by 날으는물고기 2023. 12. 29.

윈도우PC 간단한 유틸리티 구성 및 관리 AutoIt 스크립팅 자동화

AutoIt Scripting Language & AutoIt Script Editor

AutoIt v3은 Windows GUI 및 일반 스크립팅을 자동화하기 위해 설계된 프리웨어인 BASIC과 유사한 스크립팅 언어입니다. 이는 다른 언어(예: VBScript 및 SendKeys)로는 불가능하거나 신뢰성이 부족한 작업을 자동화하기 위해 모의 키보드 입력, 마우스 이동 및 창/컨트롤 조작의 조합을 사용합니다. AutoIt은 매우 작고 독립적이며, 추가적인 "런타임"이 필요하지 않고 Windows의 모든 버전에서 기본적으로 실행됩니다.

기능

  1. 쉬운 학습이 가능한 BASIC과 유사한 문법
  2. 키보드 입력 및 마우스 이동 시뮬레이션
  3. 창 및 프로세스 조작
  4. 모든 표준 Windows 컨트롤과 상호 작용
  5. 스크립트를 독립적인 실행 파일로 컴파일 가능
  6. 그래픽 사용자 인터페이스(GUI) 생성
  7. COM 지원
  8. 정규 표현식
  9. 외부 DLL 및 Windows API 함수 직접 호출
  10. Scriptable RunAs 함수
  11. 자세한 도움말 및 큰 커뮤니티 기반 지원 포럼
  12. Windows XP / 2003 / Vista / 2008 / Windows 7 / 2008 R2 / Windows 8 / 2012 R2 / Windows 10과 호환
  13. 유니코드 및 x64 지원
  14. 안전하게 서버에서 사용 가능한 외부 .dll 파일이나 레지스트리 항목이 필요하지 않음
  15. Aut2Exe를 사용하여 스크립트를 독립 실행형으로 컴파일 가능

AutoItX라는 AutoIt의 COM 및 DLL 결합 버전도 제공되어 사용자가 선호하는 스크립팅이나 프로그래밍 언어에 AutoIt의 독특한 기능을 추가할 수 있습니다. 이 언어는 초기에 수천 대의 PC를 신뢰성 있게 자동화하고 구성하기 위해 설계되었으며, 시간이 지남에 따라 복잡한 표현식, 사용자 함수, 루프 등을 지원하는 강력한 언어로 발전했습니다.


AutoIt은 Windows 운영 체제에서 사용되는 스크립팅 언어이며, 자동화 및 테스트 작업을 수행하는 데 주로 사용됩니다. 주로 GUI (그래픽 사용자 인터페이스) 자동화에 특화되어 있어 사용자가 마우스 및 키보드 입력을 시뮬레이션하고, 윈도우 응용 프로그램을 제어할 수 있습니다.

 

간단한 예제를 통해 AutoIt 스크립트의 기본적인 구조를 보여드리겠습니다.

; 이것은 주석입니다.

MsgBox(0, "안녕하세요", "AutoIt으로 여러분을 환영합니다!")

; 메시지 박스가 표시되고 사용자가 확인 버튼을 클릭할 때까지 스크립트가 일시 중지됩니다.

이 스크립트는 간단한 메시지 박스를 표시하는 예제입니다. AutoIt 스크립트는 사용자 인터페이스 조작, 파일 조작, 레지스트리 조작 등 다양한 작업을 자동화하는 데 사용됩니다. 더 복잡한 작업을 수행하려면 AutoIt 함수 및 명령어를 이해하고 활용해야 합니다.

 

AutoIt을 사용하여 윈도우 계정 정책을 수집하는 과정은 복잡하고, 시스템 보안과 관련된 작업이므로 주의 깊게 다뤄져야 합니다. 여기서는 몇 가지 주요 단계를 설명하겠습니다. 하지만, 사용자의 목적이 합법적이며 윤리적인 것임을 강조하며, 시스템 및 네트워크 정책을 준수해야 합니다.

  1. 계정 정책 수집 스크립트 작성
    AutoIt 스크립트를 사용하여 계정 정책을 수집하는 스크립트를 작성해야 합니다. 예를 들어, secedit 명령을 사용하여 보안 템플릿을 내보내거나 Get-LocalUser 명령을 사용하여 로컬 사용자 계정을 가져올 수 있습니다.이 예제는 세큐리티 템플릿을 내보내는 방법과 PowerShell 명령어를 사용하여 로컬 사용자를 가져오는 방법을 보여줍니다.
    ; 윈도우 계정 정보 수집 스크립트
    
    ; 세큐리티 템플릿 내보내기
    RunWait(@ComSpec & ' /c secedit /export /cfg C:\Path\To\SecurityTemplate.inf', '', @SW_HIDE)
    
    ; 로컬 사용자 목록 가져오기
    $output = Run(@ComSpec & ' /c Get-LocalUser', '', @SW_HIDE, $STDOUT_CHILD)
    ProcessWaitClose($output)
    $result = StdoutRead($output)
    MsgBox(0, "계정 정보", $result)
  2. 스크립트 실행 권한 및 권한 상승
    시스템 및 보안 정보를 가져오기 위해서는 스크립트가 관리자 권한으로 실행되어야 할 수 있습니다. AutoIt 스크립트를 실행하기 전에 UAC (User Account Control)로 인해 나타날 수 있는 권한 상승을 고려해야 합니다.
    #RequireAdmin ; 스크립트를 관리자 권한으로 실행
  3. 파일 또는 출력 처리
    스크립트가 생성한 결과를 적절한 형식으로 저장하거나 다른 프로세스로 전달해야 합니다. 파일에 저장하거나 네트워크를 통해 전송하는 방법을 선택할 수 있습니다.
  4. 보안 및 합법성 확인
    이러한 유형의 작업을 수행할 때는 항상 보안 정책과 법률적인 측면을 고려해야 합니다. 시스템 보안 및 개인 정보 보호 규정을 준수해야 하며, 법률적인 문제를 방지하기 위해 IT 정책을 준수해야 합니다.
  5. 테스트 및 디버깅
    스크립트를 작성한 후에는 테스트를 수행하고, 필요에 따라 디버깅하여 예기치 않은 문제를 해결해야 합니다.

자세한 내용은 AutoIt 공식 문서와 Windows PowerShell 문서 등을 참조하시기 바랍니다. 이러한 작업을 수행할 때는 항상 사용자 동의를 받아야 하며, 사용 목적이 합법적이어야 합니다.

 

AutoIt을 사용하여 윈도우 계정 정책을 수집하고 JSON 파일로 저장하는 환경을 구축하는 단계는 아래와 같을 것입니다.

  1. AutoIt 스크립트 작성
    AutoIt 스크립트를 작성하여 계정 정책 정보를 수집합니다. 아래 예제는 PowerShell을 사용하여 로컬 사용자 목록을 가져오고, 이 정보를 JSON 형식으로 가공하는 AutoIt 스크립트의 예입니다.
    ; #RequireAdmin ; 필요에 따라 관리자 권한 활성화
    
    ; PowerShell 스크립트 실행 및 결과를 JSON 형식으로 변환
    $powershellScript = '
        $users = Get-LocalUser | Select-Object Name, Enabled, LastLogon
        $users | ConvertTo-Json
    '
    
    ; PowerShell 스크립트 실행 및 결과 기다림
    $output = Run(@ComSpec & ' /c powershell.exe -ExecutionPolicy Bypass -NoProfile -Command "' & $powershellScript & '"', '', @SW_HIDE, $STDOUT_CHILD)
    ProcessWaitClose($output)
    
    ; PowerShell의 결과를 읽어와 JSON 파일에 저장
    $result = StdoutRead($output)
    FileWrite("UserPolicy.json", $result)
  2. JSON 파일 저장 경로 지정
    결과를 저장할 JSON 파일의 경로를 스크립트에 지정합니다. 위 예제에서는 현재 작업 디렉토리에 "UserPolicy.json" 파일을 저장합니다.
  3. 스크립트 실행 권한 및 관리자 권한 설정
    스크립트가 실행 권한을 필요로 하거나 관리자 권한이 필요한 경우 #RequireAdmin을 사용하여 관리자 권한으로 스크립트를 실행할 수 있도록 설정합니다.
  4. 스크립트 실행 및 결과 확인
    스크립트를 실행하여 결과를 확인합니다. 결과는 JSON 파일에 저장될 것이며, 파일을 열어 내용을 확인할 수 있습니다.
  5. 보안 및 합법성 고려
    이러한 유형의 작업을 수행할 때는 항상 보안 및 합법성을 고려해야 합니다. 사용자 동의를 받고, 시스템 보안 및 정책을 준수해야 합니다.
  6. 테스트 및 디버깅
    스크립트를 테스트하고 필요에 따라 디버깅하여 예기치 않은 문제를 해결합니다.

이러한 단계를 따라가면 AutoIt 스크립트를 사용하여 윈도우 계정 정책 정보를 수집하고 JSON 파일로 저장하는 간단한 환경을 구축할 수 있습니다.

 

계정 정책을 수집하고 기준 정책과 비교하여 위반 항목이 있는 경우 AutoIt을 사용하여 경고 창을 표시하는 부분을 추가할 수 있습니다. 아래는 그 예제 코드입니다.

#RequireAdmin ; 관리자 권한이 필요한 경우

; PowerShell 스크립트 실행 및 결과를 JSON 형식으로 변환
$powershellScript = '
    $users = Get-LocalUser | Select-Object Name,Enabled,LastLogon
    $users | ConvertTo-Json
'

$output = Run(@ComSpec & ' /c powershell.exe -ExecutionPolicy Bypass -NoProfile -Command "' & $powershellScript & '"', '', @SW_HIDE, $STDOUT_CHILD)
ProcessWaitClose($output)
$result = StdoutRead($output)

; JSON 파일에 결과 저장
Local $jsonFilePath = @ScriptDir & "\UserPolicy.json"
FileWrite($jsonFilePath, $result)

; 기준 정책과 비교
Local $baselinePolicy = '{"Name":"Administrator","Enabled":true,"LastLogon":null}' ; 기준 정책 예시
Local $decodedResult = JsonDecode($result)

For $i = 0 To UBound($decodedResult) - 1
    If $decodedResult[$i].Name = $baselinePolicy.Name And $decodedResult[$i].Enabled <> $baselinePolicy.Enabled Then
        ; 경고 창 표시
        MsgBox(48, "경고", "Administrator 계정의 활성화 상태가 기준 정책과 일치하지 않습니다!")
        Exit
    EndIf
Next

; 모든 항목이 기준 정책과 일치하면 성공 메시지 표시
MsgBox(64, "성공", "계정 정책이 기준 정책과 일치합니다.")

이 코드에서는 PowerShell을 사용하여 로컬 사용자 정보를 수집하고, 이를 JSON 파일로 저장한 다음, 기준 정책과 비교합니다. 만약 Administrator 계정이 활성화 상태가 기준 정책과 일치하지 않는 경우에는 경고 창이 표시됩니다. 이 코드를 사용할 때에는 기준 정책을 실제 환경에 맞게 수정하고, 필요한 항목에 대한 비교 로직을 추가하여 사용하시면 됩니다.

 

Windows에서 계정 정책 변경을 감시하고 모니터링하는 방법은 여러 가지가 있습니다. 이를 위해 Windows 이벤트 로그와 감시 도구를 활용할 수 있습니다. 아래는 이를 수행하는 간단한 방안을 설명합니다.

  1. 이벤트 로그 감시
    Windows 이벤트 로그는 계정 정책 변경과 관련된 이벤트를 기록합니다. 주로 Security 로그에서 해당 정보를 확인할 수 있습니다. AutoIt을 사용하여 해당 로그를 감시하고 변경 사항을 확인할 수 있습니다.위 AutoIt 스크립트는 이벤트 ID 4738에 해당하는 계정 정책 변경 로그를 감지하고 메시지 창으로 표시합니다.
    ; RequireAdmin: 관리자 권한이 필요한 경우
    #RequireAdmin
    
    ; 이벤트 쿼리를 정의
    Local $query = '*[System[Provider[@Name="Microsoft-Windows-Security-Auditing"] and (EventID=4738)]]'
    
    ; WMI 서비스 객체 생성
    Local $objWMIService = ObjGet("winmgmts:\\.\root\SecurityCenter2")
    
    ; 이벤트 쿼리를 실행하고 결과를 가져옴
    Local $colItems = $objWMIService.ExecQuery("Select * from __InstanceCreationEvent where TargetInstance ISA 'Win32_NTLogEvent' and TargetInstance.EventCode=4738")
    
    ; 결과 반복 처리
    For $objItem In $colItems
        ; 메시지 박스를 통해 변경된 계정 정보 표시
        MsgBox(0, "계정 정책 변경 감지", "계정 정책 변경 감지됨: " & $objItem.TargetInstance.Message)
    Next
  2. 감시 도구 활용
    서드파티 감시 도구를 활용하여 계정 정책 변경을 실시간으로 감시할 수 있습니다. 예를 들어, SolarWinds, ManageEngine 등의 감시 도구는 이벤트 로그를 모니터링하고 경고를 발생시키는 기능을 제공합니다.
  3. Audit Policy 설정
    Windows에서는 정책을 통해 특정 이벤트를 감시하도록 설정할 수 있습니다. 로컬 보안 정책 또는 그룹 정책 편집기를 사용하여 Audit Policy를 설정하고, 계정 관리에 대한 감사 이벤트를 포함시킬 수 있습니다.
    • 로컬 보안 정책 편집기: secpol.msc 실행 후 Advanced Audit Policy Configuration -> Account Management에서 설정 가능
    • 그룹 정책 편집기: gpedit.msc 실행 후 Computer Configuration -> Windows Settings -> Security Settings -> Advanced Audit Policy Configuration -> Account Management에서 설정 가능설정된 감사 정책에 따라 이벤트 로그에 해당 정보가 기록됩니다.

이러한 방법 중 하나 또는 여러 방법을 조합하여 사용하여 Windows 계정 정책 변경을 감시하고 모니터링할 수 있습니다.

 

일일 점검 결과를 구글 시트에 기록하려면 Google Sheets API를 사용하여 구글 시트에 데이터를 쓰는 방식을 사용할 수 있습니다. 아래는 Python을 사용하여 간단한 예제 코드를 제시하겠습니다. 이 코드는 Google Sheets API를 사용하기 때문에 먼저 Google API Console에서 프로젝트를 생성하고, Sheets API를 활성화한 후 인증 정보를 다운로드하여 사용해야 합니다.

  1. Google API Console에서 프로젝트 및 인증 정보 설정
    • https://console.developers.google.com/ 에서 새 프로젝트를 생성합니다.
    • 생성된 프로젝트로 이동하고 "Google Sheets API"를 활성화합니다.
    • "사용자 인증 정보" 탭으로 이동하여 "서비스 계정"을 만들고 JSON 키 파일을 다운로드합니다.
  2. 필요한 라이브러리 설치
    pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
  3. Python 스크립트 작성
    아래의 Python 스크립트는 간단한 예제로, 정책 설정 상태와 기준 충족 여부를 구글 시트에 기록하는 역할을 합니다. 이 스크립트를 특정 주기로 실행하여 일일 점검 결과를 기록할 수 있습니다.코드에서 spreadsheet_id, range_name, policy_status, compliance_status, timestamp 등을 실제 환경에 맞게 수정해야 합니다. 이 스크립트를 실행하면 구글 시트에 지정된 범위에 데이터가 추가됩니다.
    import os
    import pickle
    from google.auth.transport.requests import Request
    from google.oauth2.service_account import Credentials
    from googleapiclient.discovery import build
    
    def create_sheet_service():
        SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
        creds = None
        
        if os.path.exists('token.pickle'):
            with open('token.pickle', 'rb') as token:
                creds = pickle.load(token)
        
        if not creds or not creds.valid:
            if creds and creds.expired and creds.refresh_token:
                creds.refresh(Request())
            else:
                # Update the path to your credentials.json file
                creds = Credentials.from_service_account_file('path/to/your/credentials.json', scopes=SCOPES)
                
            with open('token.pickle', 'wb') as token:
                pickle.dump(creds, token)
        
        service = build('sheets', 'v4', credentials=creds)
        return service
    
    def write_to_sheet(service, spreadsheet_id, range_name, values):
        body = {
            'values': [values]
        }
        
        result = service.spreadsheets().values().append(
            spreadsheetId=spreadsheet_id,
            range=range_name,
            valueInputOption='RAW',
            body=body
        ).execute()
        
        print(f'Updated {result["updatedCells"]} cells.')
    
    def main():
        # Google Sheets API 서비스 객체 생성
        service = create_sheet_service()
        
        # 스프레드시트 ID와 기록할 범위 지정
        spreadsheet_id = 'your_spreadsheet_id'
        range_name = 'Sheet1!A1:C1'
        
        # 정책 설정 상태 및 기준 충족 여부 값을 기록할 데이터
        policy_status = 'Enabled'
        compliance_status = 'Compliant'
        
        # 여기에 실제 시간 정보 추가
        timestamp = '2023-12-01T12:00:00'
        
        # 시트에 기록할 데이터
        data_to_write = [timestamp, policy_status, compliance_status]
        
        # 구글 시트에 데이터 기록
        write_to_sheet(service, spreadsheet_id, range_name, data_to_write)
    
    if __name__ == '__main__':
        main()

주의: 보안상의 이유로 API 키, 시크릿 키, 스프레드시트 ID 등의 정보는 코드에 직접 포함하지 않도록 주의해야 합니다. 환경 변수나 별도의 설정 파일 등을 통해 안전하게 관리하는 것이 좋습니다.

728x90

댓글