이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

OS/Windows

secedit 명령 리서치

이쿠우우 2022. 1. 9. 11:22
반응형

 

 
 
 

secedit 명령 리서치

 
 

secedit 

 

secedit 란?

'로컬 보안 정책'을 설정, 조회할 수 있는 명령어
 

gpedit란?

로컬 컴퓨터 정책을 확인할 수 있는 명령어.
해당 명령으로 로컬 보안 정책도 확인 가능.
 

secedit 명령어

secedit /export /cfg .\test.inf /areas SECURITYPOLICY
내용은 
gpedit 의 컴퓨터 구성 > Windows 설정 > 보안 설정
내용과 일치함
 
secedit /export /cfg .\test.inf /areas USER_RIGHTS
내용은
gpedit 의 컴퓨터 구성 > Windows 설정 > 보안 설정 > 로컬 정책 > 사용자 권한 할당
내용과 일치함.
 
 
[/areas 설정 정리]
SECURITYPOLICY : This includes Account Policies, Audit Policy, Event Log settings, and Security Options.
GROUP_MGMT : This includes Restricted Groups settings.
USER_RIGHTS : This includes User Rights Assignment.
REGKEYS : This includes Registry permissions.
FILESTORE : This includes File System permissions.
SERVICES : This includes System Services settings.
 

secedit 와 gpedit 관계

secedit로 생성된 결과를 확인해보면
c:\windows\INF\Sceregvl.inf파일 내용과
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SeCEdit\Reg Values]
레지스트리의 내용과 동일 부분이 있음.
secedit는 해당 2가지 경와는 다른 점으로
gpedit.msc의 내용 중
컴퓨터 구성 > Windows 설정 > 보안 설정 > 로컬 정책 > 보안 옵션 
내용과 일치하고  
컴퓨터 구성 > Windows 설정 > 보안 설정 > 계정 정책 > 암호 정책 
등등 내용도 [System Access] 부분에서 확인가능함.
 
 

 
 

secedit와 gpedit 내용 매칭 리서치

[Unicode]
Unicode=yes
 
[System Access] = 암호 정책 및 계정 암호 정책
MinimumPasswordAge = 0  : 계정 정책 > 암호 정책 > 최소 암호 사용 기간
MaximumPasswordAge = 42 : 계정 정책 > 암호 정책 > 최대 암호 사용 기간
MinimumPasswordLength = 0  : 계정 정책 > 암호 정책 > 최소 암호 길이
PasswordComplexity = 0 : 계정 정책 > 암호 정책 > 암호는 복잡성을 만족해야 함
PasswordHistorySize = 0 : 계정 정책 > 암호 정책 > 최근 암호 기억
LockoutDuration = ? : 계정 정책 > 계정 잠금 정책 > 계정 잠금 기간 (참고 : 계정 잠금 임계값이 설정되어 있어야 해당 값이 보임)
LockoutBadCount = 0 : 계정 정책 > 계정 잠금 정책 > 계정 잠금 임계값
ResetLockoutCount = ? : 계정 정책 > 계정 잠금 정책 > 다음 시간 후 계정 잠금 수를 원래대로 설정 (참고 : 계정 잠금 임계값이 설정되어 있어야 해당 값이 보임)
RequireLogonToChangePassword = 0 
ForceLogoffWhenHourExpire = 0 : 로컬 정책 > 보안 옵션 > 네트워크 보안: 로그온 시간이 만료되면 강제로 로그오프
NewAdministratorName = "Administrator" : 로컬 정책 > 보안 옵션 > 계정:Administrator 계정 이름 바꾸기
NewGuestName = "Guest" : 로컬 정책 > 보안 옵션 > 계정:Guest 계정 이름 바꾸기
ClearTextPassword = 0 : 계정 정책 > 암호 정책 > 해독 가능한 암호화를 사용하여 암호 저장
LSAAnonymousNameLookup = 0 : 로컬 정책 > 보안 옵션 > 네트워크 액세스: 익명 SID/이름 변환 허용
EnableAdminAccount = 0 : 로컬 정책 > 보안 옵션 > 계정:Administrator 계정 상태
EnableGuestAccount = 0 : 로컬 정책 > 보안 옵션 > 계정:Guest 계정 상태
 
[Event Audit]
AuditSystemEvents = 0 : 로컬 정책 > 감사 정책 > 시스템 이벤트 감사
AuditLogonEvents = 0 : 로컬 정책 > 감사 정책 > 로그온 이벤트 감사
AuditObjectAccess = 0 : 로컬 정책 > 감사 정책 > 개체 액세스 감사
AuditPrivilegeUse = 0 : 로컬 정책 > 감사 정책 > 권한 사용 감사
AuditPolicyChange = 0 : 로컬 정책 > 감사 정책 > 정책 변경 감사
AuditAccountManage = 0 : 로컬 정책 > 감사 정책 > 계정 관리 감사
AuditProcessTracking = 0 : 로컬 정책 > 감사 정책 > 프로세스 추적 감사
AuditDSAccess = 0 : 로컬 정책 > 감사 정책 > 디렉터리 서비스 액세스 감사
AuditAccountLogon = 0 : 로컬 정책 > 감사 정책 > 계정 로그온 이벤트 감사
 
[Registry Values]
MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\CachedLogonsCount=1,"10" : 로컬 정책 > 보안 옵션 > 대화형 로그온:캐시할 로그온 횟수(도메인 컨트롤러를 사용할 수 없는 경우)
MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\ForceUnlockLogon=4,0 : 로컬 정책 > 보안 옵션 > 대화형 로그온:워크스테이션 잠금 해제를 위해 도메인 컨트롤러 인증 필요
MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\PasswordExpiryWarning=4,5 : 로컬 정책 > 보안 옵션 > 대화형 로그온:암호 만료 전에 암호 변경 여부 묻기
MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\ScRemoveOption=1,"0" : 로컬 정책 > 보안 옵션 > 대화형 로그온:스마트 카드 제거 동작
MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ConsentPromptBehaviorAdmin=4,5 : 로컬 정책 > 보안 옵션 > 사용자 계정 컨트롤:관리자 승인 모드에서 관리자에 대한 권한 상승 확인 방법
MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ConsentPromptBehaviorUser=4,3  : 로컬 정책 > 보안 옵션 > 사용자 계정 컨트롤:표준 사용자에 대한 권한 상승 확인 방법
MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\DontDisplayLastUserName=4,0 : 로컬 정책 > 보안 옵션 > 대화형 로그온:마지막 로그인 사용자 이름 표시 안함.
MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableInstallerDetection=4,1 : 로컬 정책 > 보안 옵션 > 사용자 계정 컨트롤: 응용 프로그램 설치 검색 및 권한 상승 확인
MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA=4,1 : 로컬 정책 > 보안 옵션 > 사용자 계정 컨트롤: 관리자 승인 모드에서 모든 관리자 실행
MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableSecureUIAPaths=4,1 : 로컬 정책 > 보안 옵션 > 사용자 계정 컨트롤: 보안 위치에 설치된 UIAccess 응용 프로그램만 권한 상승
MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableUIADesktopToggle=4,0 : 로컬 정책 > 보안 옵션 > 사용자 계정 컨트롤: UIAccess 응용 프로그램이 보안된 데스크톱을 사용하지 않고 권한 상승 메시지를 표시하도록 허용
MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableVirtualization=4,1  : 로컬 정책 > 보안 옵션 > 사용자 계정 컨트롤: 사용자별 위치로 파일 및 레지스트리 쓰기 오류 가상화
MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\LegalNoticeCaption=1,"" : 로컬 정책 > 보안 옵션 > 대화형 로그온:로그온을 시도하는 사용자에 대한 메시지 제목
MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\LegalNoticeText=7, : 로컬 정책 > 보안 옵션 > 대화형 로그온:로그온을 시도하는 사용자에 대한 메시지 텍스트
MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\PromptOnSecureDesktop=4,1 : 로컬 정책 > 보안 옵션 > 사용자 계정 컨트롤: 권한 상승 요청 시 보안된 데스크톱으로 전환
MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ScForceOption=4,0 : 로컬 정책 > 보안 옵션 > 대화형 로그온:스마트 카드 필요(Interactive logon: Require smart card)
MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ShutdownWithoutLogon=4,1 : 로컬 정책 > 보안 옵션 > 시스템 종료:로그온하지 않고 시스템 종료 허용
MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\UndockWithoutLogon=4,1 : 로컬 정책 > 보안 옵션 > 장치:로그온할 필요 없이 도킹 해제 허용
MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ValidateAdminCodeSignatures=4,0 : 로컬 정책 > 보안 옵션 > 사용자 계정 컨트롤: 유효성 검사를 통과한 서명된 실행 파일만 권한 상승
MACHINE\Software\Policies\Microsoft\Windows\Safer\CodeIdentifiers\AuthenticodeEnabled=4,0 : 로컬 정책 > 보안 옵션 > 시스템 설정:소프트웨어 제한 정책에 대한 Windows 실행 파일에서 인증서 규칙 사용
MACHINE\System\CurrentControlSet\Control\Lsa\AuditBaseObjects=4,0 : 로컬 정책 > 보안 옵션 > 감사:글로벌 시스템 개체에 대한 액세스 감사
MACHINE\System\CurrentControlSet\Control\Lsa\CrashOnAuditFail=4,0 : 로컬 정책 > 보안 옵션 > 감사:보안 감사를 로그할 수 없는 경우 즉시 시스템 종료
MACHINE\System\CurrentControlSet\Control\Lsa\DisableDomainCreds=4,0 : 로컬 정책 > 보안 옵션 > 네트워크 액세스:네트워크 인증에 대한 암호 및 자격 증명의 저장소 허용 안함
MACHINE\System\CurrentControlSet\Control\Lsa\EveryoneIncludesAnonymous=4,0 : 로컬 정책 > 보안 옵션 > 네트워크 액세스:Everyone 사용 권한을 익명 사용자에게 적용
MACHINE\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled=4,0 : 로컬 정책 > 보안 옵션 > 시스템 암호화:암호화, 해시, 서명에 FIPS 규격 알고리즘 사용
MACHINE\System\CurrentControlSet\Control\Lsa\ForceGuest=4,0 : 로컬 정책 > 보안 옵션 > 네트워크 액세스: 로컬 계정에 대한 공유 및 보안 모델
MACHINE\System\CurrentControlSet\Control\Lsa\FullPrivilegeAuditing=3,0 : 로컬 정책 > 보안 옵션 > 감사: 백업 및 복원 권한 사용 감사
MACHINE\System\CurrentControlSet\Control\Lsa\LimitBlankPasswordUse=4,1 : 로컬 정책 > 보안 옵션 > 계정: 콘솔 로그온 시 로컬 계정에서 빈 암호 사용 제한
MACHINE\System\CurrentControlSet\Control\Lsa\MSV1_0\NTLMMinClientSec=4,536870912 : 로컬 정책 > 보안 옵션 > 네트워크 보안: NTLM SSP 기반(보안 RPC 포함) 클라이언트에 대한 최소 세션 보안
MACHINE\System\CurrentControlSet\Control\Lsa\MSV1_0\NTLMMinServerSec=4,536870912 : 로컬 정책 > 보안 옵션 > 네트워크 보안: NTLM SSP 기반(보안 RPC 포함) 서버에 대한 최소 세션 보안
MACHINE\System\CurrentControlSet\Control\Lsa\NoLMHash=4,1 : 로컬 정책 > 보안 옵션 > 네트워크 보안: 다음 암호 변경 시 LAN Manager 해시 값 저장 안 함.
MACHINE\System\CurrentControlSet\Control\Lsa\RestrictAnonymous=4,0  : 로컬 정책 > 보안 옵션 > 네트워크 액세스: SAM 계정과 공유의 익명 열거 허용 안 함
MACHINE\System\CurrentControlSet\Control\Lsa\RestrictAnonymousSAM=4,1 : 로컬 정책 > 보안 옵션 > 네트워크 액세스: SAM 계정의 익명 열거 허용 안 함
MACHINE\System\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers\AddPrinterDrivers=4,0 : 로컬 정책 > 보안 옵션 > 장치: 사용자가 프린터 드라이버를 설치할 수 없게 함
MACHINE\System\CurrentControlSet\Control\SecurePipeServers\Winreg\AllowedExactPaths\Machine=7,System\CurrentControlSet\Control\ProductOptions,System\CurrentControlSet\Control\Server Applications,Software\Microsoft\Windows NT\CurrentVersion : 로컬 정책 > 보안 옵션 > 네트워크 액세스: 원격으로 액세스할 수 있는 레지스트리 경로
MACHINE\System\CurrentControlSet\Control\SecurePipeServers\Winreg\AllowedPaths\Machine=7,System\CurrentControlSet\Control\Print\Printers,System\CurrentControlSet\Services\Eventlog,Software\Microsoft\OLAP Server,Software\Microsoft\Windows NT\CurrentVersion\Print,Software\Microsoft\Windows NT\CurrentVersion\Windows,System\CurrentControlSet\Control\ContentIndex,System\CurrentControlSet\Control\Terminal Server,System\CurrentControlSet\Control\Terminal Server\UserConfig,System\CurrentControlSet\Control\Terminal Server\DefaultUserConfiguration,Software\Microsoft\Windows NT\CurrentVersion\Perflib,System\CurrentControlSet\Services\SysmonLog : 로컬 정책 > 보안 옵션 > 네트워크 액세스: 원격으로 액세스할 수 있는 레지스트리 경로 및 하위 경로
MACHINE\System\CurrentControlSet\Control\Session Manager\Kernel\ObCaseInsensitive=4,1 : 로컬 정책 > 보안 옵션 > 시스템 개체: 비 Windows 하위 시스템에 대한 대/소문자 구분 사용 안 함 필요
MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management\ClearPageFileAtShutdown=4,0 : 로컬 정책 > 보안 옵션 > 시스템 종료: 가상 메모리 페이지 파일 지움
MACHINE\System\CurrentControlSet\Control\Session Manager\ProtectionMode=4,1 : 로컬 정책 > 보안 옵션 > 시스템 개체: 내부 시스템 개체(예: 심볼 링크)에 대한 기본 사용 권한 강화
MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\optional=7, : 로컬 정책 > 보안 옵션 > 시스템 설정: 하위 시스템(옵션)
MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\EnableForcedLogOff=4,1 : 로컬 정책 > 보안 옵션 > Microsoft 네트워크 서버: 로그온 시간 만료 시 클라이언트 연결 끊기
MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\EnableSecuritySignature=4,0 : 로컬 정책 > 보안 옵션 > Microsoft 네트워크 서버: 디지털 서명 통신(클라이언트가 동의하는 경우)
MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\NullSessionPipes=7, : 로컬 정책 > 보안 옵션 > 네트워크 액세스: 익명으로 액세스할 수 있는 명명된 파이프
MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\RequireSecuritySignature=4,0 : 로컬 정책 > 보안 옵션 > Microsoft 네트워크 클라이언트: 디지털 서명 통신(항상)
MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\RestrictNullSessAccess=4,1 : 로컬 정책 > 보안 옵션 > 네트워크 액세스: 명명된 파이프와 공유에 대한 익명 액세스 제한
MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\EnablePlainTextPassword=4,0  : 로컬 정책 > 보안 옵션 > Microsoft 네트워크 클라이언트: 타사 SMB 서버에 암호화되지 않은 암호 보내기
MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\EnableSecuritySignature=4,1 : 로컬 정책 > 보안 옵션 > Microsoft 네트워크 서버:디지털 서명 통신(클라이언트에서 동의한 경우)
MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\RequireSecuritySignature=4,0 : 로컬 정책 > 보안 옵션 > Microsoft 네트워크 클라이언트:디지털 서명 통신(항상)
MACHINE\System\CurrentControlSet\Services\LDAP\LDAPClientIntegrity=4,1 : 로컬 정책 > 보안 옵션 > 네트워크 보안:LDAP 클라이언트 서명 필요
MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange=4,0 : 로컬 정책 > 보안 옵션 > 도메인 구성원:컴퓨터 계정 암호 변경 사항 사용 안함
MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\MaximumPasswordAge=4,30 : 로컬 정책 > 보안 옵션 > 도메인 구성원:컴퓨터 계정 암호의 최대 사용 기간
MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\RequireSignOrSeal=4,1 : 로컬 정책 > 보안 옵션 > 도메인 구성원:보안 채널 데이터를 디지털 암호화 또는 서명(항상)
MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\RequireStrongKey=4,1 : 로컬 정책 > 보안 옵션 > 도메인 구성원:고급 세션 키 요청(Windows 2000 이상)
MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\SealSecureChannel=4,1 : 로컬 정책 > 보안 옵션 > 도메인 구성원:보안 채널 데이터를 디지털 서명(가능한 경우)
MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\SignSecureChannel=4,1 : 로컬 정책 > 보안 옵션 > 도메인 구성원:보안 채널 데이터를 디지털 암호화(가능한 경우)
 
[Version]
signature="$CHICAGO$"
Revision=1
 
 

 
 

C++ 개발 시 secedit 인코딩 이슈

 
 

인코딩 오류 상황

 
secedit 로 생성한 파일을 Windows Visual Studio 환경의 c++에서
file read getline으로 읽어들이면 
문자열이 정상적으로 읽히지 않는 오류가 있음.
문자열을 확인해보면 아래와 같이 각 문자 하나 이후 "\0" 값이 포함되어있는 것을 확인 할 수 있음.

 
 

원인

secedit 명령으로 생성되는 파일은 인코딩이 UTF-16 LE로 생성됨.

 

 
[더 자세한 원인 분석]
secedit 명령으로 생성되는 파일은 인코딩이 UTF-16 LE로 생성되어있는것을 확인할 수 있음.
secedit 명령으로 생성되는 파일의 경우 실제로 16진수 값이 포함되어 있어서 인코딩이 UTF-16으로 생성됨.

하지만 Visual studio 프로젝트의 인코딩 설정이 아래와 같이 Multi-Byte로 설정되어있을 경우

프로젝트에서는 한글자를 1Byte로 인식하는데
secedit로 생성한 파일을 인코딩이 UTF-16임으로 한글자는 2Byte로 인식해서
C++에서 파일을 읽어들이면 1Byte로 읽어야하는데 파일이 2Byte라
1Byte는 "\0"값으로 채우게 됨.
 
 

해결책

해결책으로 c++에서 UTF-16파일을 정상적으로 읽어오는 file read코드를 공유하겠음.
// 참고)
// secedit 명령으로 생성되는 파일은 인코딩이 UTF-16 LE로 설정되어있음.
// 이런 경우 File read 시 프로젝트에서는 한 문자를 1Byte로 인식하기 때문에 한 문자 사이에 "\0" 가 추가되는 이슈가 있음.
// 해당 문제를 해결하기 위해 UTF-16을 UTF-8로 읽어옴.
std::fstream seceditFile;
seceditFile.open(seceditFilePath, std::ios::in, std::ios::binary);
seceditFile.seekg(2); // 인코딩 변환 시 read 시작점을 앞에서 부터 2 이후부터 해야함.
while (!seceditFile.eof()) {
    std::wbuffer_convert<std::codecvt_utf16<wchar_t, 0x10ffff, std::little_endian >> cvt1(seceditFile.rdbuf());
    std::wistream wide_f(&cvt1);
    std::wstring wstr;
    std::getline(wide_f, wstr);
    std::wstring_convert<std::codecvt_utf8<wchar_t>> cvt2;
    std::string u8str = cvt2.to_bytes(wstr);
    std::cout << u8str << std::endl;
}
seceditFile.close();
 
 
 
 
 
 
 

참고
 
 
 

 

반응형

'OS > Windows' 카테고리의 다른 글

유니코드, 멀티바이트 차이점 리서치  (1) 2022.01.09
Windows SID란?  (0) 2022.01.09
auditpol 사용법  (0) 2022.01.09
Windows 폴더 경로가 길 경우 단축 시키는 방법  (0) 2022.01.09
NSIS (Nullsoft Scriptable Install System)  (0) 2022.01.09