독까의 이야기

특정 고객사를 대상으로 침해 피해 발생. 

윈도우 구버전에서 사용되는 SAM 잠금 도구 (Syskey) 를 이용한 시스템 잠금. (ko.wikipedia.org/wiki/SAM_%EC%9E%A0%EA%B8%88_%EB%8F%84%EA%B5%AC)

고객사 관리자 계정 패스워드가 노출되어 원격 접속이 가능하게 된 상태에서 syskey 로  잠금 추정.

C:\Windows\System32\config\RegBack 폴더에 기존 레지스트리 정보 파일이 있을 경우에는 복구 가능. 

 

1. Windows 설치 CD 를 이용하여 부팅.

복구 모드 진입 후 문제 해결 선택.

고급 옵션 - 명령 프롬프트 선택

 

2. CMD 에서 레지스트리 파일 복사

copy c:\windows\system32\config\regback c:\windows\system32\config

복사 완료되었으면 리부팅으로 복구 작업 완료 됨. 

# 1

신규 고객사의 서버를 세팅하던 중, 로컬 보안 정책 일부 수정을 위해 프로그램을 실행했다.

시작 - secpol.msc - 로컬 정책 - 보안 옵션 을 클릭했는데, 아래와 같은 오류 창이 호출 됐다.


신규 설치 된 서버 2대 와 테스트용으로 사용하는 서버에서 동일 증상이 확인 됐다. 

해당 장비들의 OS 는 Windows Server 2016 STD 이다. 



# 2

오류가 발생 된 서버들의 wsecedit.dll 파일을 확인해 본다. 

C:\Windows\System32\wsecedit.dll

파일의 수정 날짜가 2020.09.02 로 확인 된다. 

2020년 9월 보안 업데이트 후 파일이 변경 된 것으로 확인되었다. 


9월 보안 업데이트를 진행하지 않은 서버에서 보안 옵션 호출 및 파일 수정 날짜를 확인 한다.


보안 옵션 호출 정상이며, 파일 수정 날짜는 2020.04.08 로 확인된다. 



# 3

이전 버전의 wsecedit.dll 파일로 교체를 진행한다. 

보안 옵션 호출이 정상 실행되는 서버에서 wsecedit.dll 을 복사해서 임의 경로에 저장한다. 

여기서 두 가지 방법으로 파일 교체가 가능하다.

1) 서버 전원 종료 후 복구 모드 진입해서 CMD 에서 파일 덮어쓰기

2) wsecedit.dll 파일 사용자 권한 변경 후 삭제 / 이전 버전 파일 복사


1) 의 경우 전원 종료가 불가피하므로 지양한다. 따라서 2) 의 방식으로 해결 한다. 


일반적으로 system32 폴더 안의 파일들은 권한 문제로 삭제 및 덮어쓰기가 불가하다. 



CMD 실행 후 아래의 작업을 순차 진행한다. 


wsecedit.dll 파일의 소유권을 가져온다.

takeown /f C:\Windows\System32\wsecedit.dll 


사용자 계정에 권한을 부여한다.

cacls C:\Windows\System32\wsecedit.dll /G 사용자계정:F 


wsecedit.dll 파일을 삭제하고, 이전 버전의 파일로 대체한다.

del C:\Windows\System32\wsecedit.dll 

copy c:\wsecedit.dll c:\Windows\System32\


대체 된 파일의 수정 일자를 확인한다.

 dir -filename wsecedit.dll


이전 버전 파일로 대체 후 보안 옵션 호출 정상 확인 되었다. 



# 4

해당 오류가 Windows Server 2016 버전에 한해서 발생되는 문제인지는 명백히 확인이 되지 않았으나, 

9월 보안 업데이트를 진행한 Windows Server 2012 R2 서버에서 확인 된 wsecedit.dll 파일의 수정 일자는 2020.08.04 이다. 


보안 옵션 호출도 정상 실행된다. 



# 5

Windows Server 2016 OS 가 설치 된 서버는 2020년 9월 보안 업데이트는 넘어가는게 좋겠다. 

동일 커널을 사용하는 2019 에서도 문제가 발생할 것 같긴한데 위험을 감수하고 테스트 하고 싶지는 않다. 

MS 에서 빨리 해당 문제를 확인하고 패치를 진행해야 할텐데. 


고객사에서 윈도우용 PHP v7.2 와 CakePHP 3.7.9 설치를 요청하여 테스트 한다.

CakePHP 가 뭔지 몰라서 검색을 좀 했다. PHP 로 만들어진 프레임워크라고 한다. (https://ko.wikipedia.org/wiki/CakePHP)



1. PHP v7.2 다운로드 및 설치

IIS 에 등록 된 웹 플랫폼 설치 관리자 실행해서 PHP v7.2 입력한다. 


만약 웹 플랫폼이 설치가 안되어 있으면, 아래 첨부파일 실행해서 설치한다. 

WebPlatformInstaller_x64_en-US.msi


phpmanager도 설치하면 관리가 용이하다. (https://www.iis.net/downloads/community/2018/05/php-manager-150-for-iis-10

PHPManagerForIIS_V1.5.0.msi


호출되는 리스트에서 원하는 버전 추가 후 설치 진행한다.


IIS 에 등록 된PHP Manager 들어가서, PHP Extensions 설정을 변경한다. 

 



아래의 확장 모듈이 Enabled 로 선택되어 있어야 CakePHP 설치가 정상 진행된다.

mbstring PHP extension

intl PHP extension

simplexml PHP extension (simplexml 은 PHP 5.4 이후부터 코어에 기본 포함되어 목록에 없다.)

PDO PHP extension 


php_intl.dll 은 기본이 Disabled 니깐 Enabled 로 변경한다.


PHP 설정은 이 정도면 끝이다. 



2. CakePHP 다운로드 및 설치


설치 안내 페이지로 이동한다. 

https://book.cakephp.org/4/en/installation.html


윈도우 버전은 아래의 경로에 가서 Composer 다운로드 및 설치하라고 한다.

 


https://github.com/composer/windows-setup/releases/

Composer-Setup.5.1.0.exe



PHP 가 설치 된 경로는 알아서 잡으니깐 그냥 Next 만 계속 누르면 끝난다. 


파워쉘이나 cmd 열어서 아래 명령어 입력한다. 


composer create-project --prefer-dist cakephp/app:4.* my_app_name


ex) composer create-project --prefer-dist cakephp/app:^3.7 D:\cakephp_gunnm 



지정한 경로에 설치가 진행된다. 


종료되기 직전에 Y, n 선택하라고 나오는데 그냥 엔터치면 된다. 


cmd 를 이용해서 지정 경로인 D:\cakephp_gunnm\bin 폴더로 이동한다.

cake --help 명령으로 옵션값 확인한다. 


D:\cakephp_gunnm\bin>cake --help


config 폴더 내부 설정 파일들을 본인의 환경에 맞게 수정해야 한다. DB 접속 설정은 app.php 파일을 수정한다.

 


더 자세한 설명 및 방법은 구글하고 유튜브에 있으니깐 잘 검색하면 될 것 같다.