Wikipedia에 나와있는 내용을 토대로 WFP와 WRP가 뭔지 알아보겠습니다.
Windows 2000과 Windows XP의 sub-system에서는 WFP를 포함하고 있습니다. 이러한 WFP는 중요한 Windows 시스템 파일을 재정의 하는 행위를 막죠. 코어 시스템 파일을 보호하는 것은 프로그램이나 OS에 의해 발생되는 DLL 지옥 문제를 완화할 수 있습니다. 여기서 DLL 지옥이라는 말은 Windows 기반 프로그램에서 DLL을 사용할 경우 발생할 수 있는 복잡성을 뜻하는 말입니다. 발생될 수 있는 원인은 DLL 버전 충돌, 프로그램이 의존하는 DLL 파일을 찾을 때 어려움, 불필요한 DLL 파일 복사본 생성 등이 있습니다. 그리고 이러한 문제로 인해 잘 만들어진 프로그램도 뻑날 수 있습니다. 당연히 kernel32.dll 이 어떠한 이유로 인해 손상이 되었다면 kernel32.dll을 참조하는 모든 프로그램은 돌아갈 수 없을 것입니다.
Windows 2000과 Windows XP 그리고 Windows Server 2003은 Windows File Protection이라는 이름의 WFP를 포함하고 있고 Windows Me는 System File Protection을 포함하고 있습니다.
작동 방식입니다.
WFP가 작동중인 상태에서 락이 걸려있지 않은 파일을 교체 또는 삭제를 해버리면 Windows는 즉각적으로 조용히 원본 파일로 복구를 시킵니다. 원본 파일은 cached folder에 의해 복구되어 지는데 이러한 cached folder는 이러한 파일들의 복사본을 가지고 있고 Windows NT 계열은 "%WinDir%\System32\Dllcache" 를 cached folder로 사용합니다.
해당 폴더에 있는 내용을 봐보도록 하겠습니다.
위 그림의 환경은 Windows XP 환경입니다. 보시면 dllcache 폴더에 보면 WFP 를 받는 프로그램들 복사본이 쫙 있습니다. notepad.exe 도 보이는군요. 그리고 해당 폴더에 있는 파일들의 파일명을 보면 파란색으로 나와있는데 해당 파일이 압축되어서 저렇게 나옵니다. dllcache에 있는 모든 파일은 압축이 되어있군요. 그리고 폴더에 있는 총 파일 개수는 2485개 였습니다.
빨간색으로 네모쳐진 부분을 해제해 주시면 파일명이 검은색으로 나오게 됩니다.
계속 보도록 하겠습니다.
WFP는 DLL, EXE, SYS, OCX 등등 이러한 실행 파일들을 포함하고 있습니다. 이러한 파일들의 digital signatures는 code signing을 사용해 체크합니다. 그리고 signature 카테고리 파일은 "%Systemroot%\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}" 폴더에 저장되어 집니다. Package Installer(Update.exe) 또는 Windows Installer(Msiexec.exe)를 가지고 있는 특정 운영체제는 이러한 파일들을 사용해 재정의 할 수 있습니다.
이 부분도 한번 보도록 하겠습니다.
해당 폴더에는 보안 카탈로그라는 파일이 쭉 있습니다. 각각의 파일의 특성에 따라 나눠놨나보군요.
그중에 가장 용량이 큰 SP3 이라고 되어있는 보안 카탈로그를 더블클릭 해보았습니다.
보안 카탈로그 탭을 들어가면 카탈로그 항목들이 SHA1 해쉬값으로 쭉 저장이 되어 있습니다.
저 값이 단순 문자열을 SHA1으로 바꿔놓은 것 같진 않습니다. 아무튼.. dllcahe에 있는 파일을 삭제하거나 보안 카탈로그 파일들을 삭제해버리면 WFP가 무력화 됩니다. WFP 무력화 방법중 하나군요. 하지만 보안 카탈로그 파일을 삭제하는 방법으로는 특정 파일에 대한 WFP 무력화는 힘듭니다. 방법이 없는건 아니겠지요. 그리고 이러한 파일들을 모니터링 하고 복사하는 프로세스는 Winlogon.exe 프로세스가 처리해줍니다.
파일을 삭제하고 난 후 계속 모니터링을 하다보면 Winlogon 프로세스에 붙어있는 sfc_os.dll에 의해 WFP 처리가 이루어지게 되는 것을 알 수 있습니다.
Windows Vista는 WFP가 포함되어 있지 않습니다. 그러나 ACLs(Access Control Lists)를 사용하는 파일 보호 방식인 Windows Resource Protection을 포함하고 있습니다. Windows Resource Protection은 레지스트리 key와 value를 보호하고 시스템 구성에 잠재적인 데미지를 줄 수 있는 파일이 바뀌는 것을 막고 그 이외도 OS 파일에 대해서도 보호를 수행합니다.
대충 설명을 해보았는데 Windows XP까지는 Windows File Protection을 사용하고 Windows Vista 이후로는 Windows Resource Protection을 사용한다고 나와있습니다. 이번엔 그러면 Windows Resource Protection 기술을 좀더 자세히 살펴보겠습니다.
Windows Resource Protection은 Windows Vista에서 Windows File Protection을 대신할 수 있는 기술입니다. 이 기술은 WFP에서 사용하는 기술하고는 전적으로 다른 방법으로 보호를 하게 됩니다.
Windows Resource Protection 은 임의의 접근 제어 리스트(DACLs) 와 접근 제어 리스트(ACLs) 에 보호할 리소스를 셋팅합니다. WRP에 의해 보호를 받고 있는 리소스 수정에 대한 모든 접근은 Windows Modules Installer Service (TrustedInstaller.exe) 프로세스에 의해 제한을 받습니다. 관리자도 더이상 시스템 파일에 대한 모든 권한을 가지고 있는건 아닙니다. 보호를 받는 리소스는 관리자가 리소스에 대한 소유권을 가지고 있고 적당한 접근 제어 엔트리(ACEs)에 추가가 되어야만 수정 및 재정의를 할 수 있습니다. "Trusted Installer" 계정은 OS 파일과 레지스트리 키를 보호하는데 사용됩니다.
보호를 받는 리소스들
Windows Resource Protection은 많은 타입의 파일을 보호합니다.
*.acm *.ade *.adp *.app *.asa *.asp *.aspx *.ax *.bas *.bat *.bin *.cer *.chm *.clb *.cmd *.cnt *.cnv *.com *.cpl *.cpx *.crt *.csh *.dll *.drv *.dtd *.exe *.fxp *.grp *.h1s *.hlp *.hta *.ime *.inf *.ins *.isp *.its *.js *.jse *.ksh *.lnk *.mad *.maf *.mag *.mam *.man *.maq *.mar *.mas *.mat *.mau *.mav *.maw *.mda *.mdb *.mde *.mdt *.mdw *.mdz *.msc *.msi *.msp *.mst *.mui *.nls *.ocx *.ops *.pal *.pcd *.pif *.prf *.prg *.pst *.reg *.scf *.scr *.sct *.shb *.shs *.sys *.tlb *.tsp *.url *.vb *.vbe *.vbs *.vsmacros *.vss *.vst *.vsw *.ws *.wsc *.wsf *.wsh *.xsd *.xsl WRP은 또한 몇몇 중요한 폴더도 보호한다. 해당 폴더는 오직 WRP에 보호를 받고 있는 파일들만 포함하고 있다. Windows Vista에 의해 설치된 필수적인 레지스트리 키 또한 보호를 받습니다. 만약 해당 키가 WRP에 보호를 받는다면 그 아래 모든 서브키와 값 또한 보호를 받을 수 있습니다. 또한 WRP 에서 Windows cache 디렉토리인 "%WinSxS\Backup" 에 파일을 복사할 땐 Windows 재시작이 필요합니다. Windows 재시작을 필요로하지 않은 중요한 파일은 cache 디렉토리에 복사를 하지 않습니다. 캐시 디렉토리 크기와 파일의 리스트는 수정할 수 없습니다. Windows Resource Protection은 파일을 보호하기 위해 엄격한 조치를 적용합니다. 그 결과 Windows File Protection은 Windows Vista에선 이용할 수 없습니다. 어떠한 단일 파일을 재정의 하기 위해서 Windows File Protection은 완전히 disable 되어야합니다. 반면 Windows Resource Protction은 ACLs 셋팅에 의해 단일 파일에 작업할 수 있습니다. 그러므로, 나머지 다른 파일을 보호하는 동안 특정 파일 하나만 재정의를 할 수 있습니다. 일단은 대충 정리해보면 WFP는 관리자 권한이면 보호되고 있는 파일을 삭제할 수 있지만 Winlogon에 의해 복원되는 거고 WRP는 관리자 권한을 가지고 있어도 TrustedInstaller에서 사용권한을 부여받아야만 파일 수정이 가능한 것 같습니다. 그리고 중요한 점은 WFP는 파일 하나에 대해서 수정 및 삭제를 할 때 전체 보호를 풀어야하지만 WRP는 단일 파일 수정하더라도 다른 파일들은 그대로 보호를 적용받고 있다는 점에서 큰 차이가 있는 것 같습니다. Windows 7에서 메모장을 지우려고 했을 때 뜬 창입니다. ( Administrator 권한인 상태 ) 자세히 설명이 나와있습니다. 삭제 자체가 안되는군요. 인터넷에 찾아보니 해당 파일에 대한 사용권을 수정하면 된다는데.... 전 아에 체크박스가 disable 되어 있습니다. 흠.. TrustedInstaller 도 아래아래 보이는데 저 계정 권한은.. 허용 부분에 전부 체크되어 있습니다. 아무튼 일단은 안된다는 것..! 계정 만들어서 권한 수정 후.. 아무튼.. 방법은 있지만..; 내용도 심오하지도 않고 오래된 내용이고 식상한 내용이고 귀찮기도해서 여기까지만 포스팅하겠습니다. 발로 작성했네요; 다음 포스팅 때는 이러한 WFP와 WRP를 무력화 할 수 있는 기술에 대해서 알아보도록 하겠습니다. 이것 또한 심오하지도 않고 오래된 내용이고 식상한 내용 일것 같습니다.
'My Study > Programming&Theory' 카테고리의 다른 글
WRP 무력화 (5) | 2012.07.31 |
---|---|
WFP 무력화 - Close File Object (0) | 2012.07.30 |
Bluepill Sample Code Test (4) | 2012.07.17 |
Intel VT-x 와 BSOD.. ㅠㅠ (0) | 2012.07.16 |
PE 파일의 .reloc 섹션 (8) | 2012.06.06 |