2019. 4. 9. 00:21ㆍ해킹/System(Pwnable)
안녕하세요, 저희 Te@m $iL의 HappyBunny님의 시스템(포너블)의 레지스트리 강좌입니다^^
먼저 시작에 앞서, 이 강좌는 HappyBunny님께서 작성하시고, 제가 사진 및 부가설명을 추가한 강좌입니다.
아직 레지스트리에 대해 잘 모르실 수 있으신 분들을 대비하여, 레지스트리에 대한 기본적인 개념을 먼저 잡아드린 후 보안에 접목시키도록 하겠습니다.
레지스트리에 대하여
Q : 레지스트리가 뭔가요?
A : 레지스트리(Registry)는 윈도우 운영체제의 운영체제 설정과 선택 항목을 담고 있는 일종의 데이터베이스입니다. 쉽게 말씀드려서, 컴퓨터의 거의 모든 설정이 레지스트리에 저장됩니다.
Q : 레지스트리를 보거나, 수정하거나, 등록하고 싶어요. 어떻게 해야하나요?
A : 윈도우키(⊞ Win)+R을 누르신 후 regedit을 입력하셔서 레지스트리 편집키를 열어주세요. 다른 방법으로는 reg파일을 생성하셔서 실행시킴으로서 레지스트리를 수정/등록하실수 있으십니다.
이렇게 하시거나, 또는
이렇게 말이죠!ㅎㅎ
레지스트리는 잘못 건드리시면 컴퓨터의 작동에 문제가 생기실 수 있으니 주의바랍니다.
레지스트리와 시작프로그램
이제 본론으로 들어가도록 하죠.
<예시상황>
BlackJackson씨는 컴퓨터의 전원을 켜면(부팅), 카카오톡 pc버전이 뜹니다. BlackJackson씨가 실행시키지 않았는데 말이죠. 이 프로그램이 카카오톡 pc버전과 같이 안전한 프로그램이라면 문제가 없지만, 바이러스나 악의적인 목적으로 작성된 프로그램이면 위험할 수 있다는 생각이 든 BlackJackson씨는 컴퓨터를 켤 때, 프로그램이 자동으로 시작되는 이유가 궁금해졌습니다.
<본론(설명)>
흔히들 시작프로그램이라고 말씀하시는 부분에 대해 설명드리겠습니다. 시작프로그램도 실행시점에 따라 2가지 종류로 나뉘는데요, 하나는 로그온하기 전이고, 나머지는 로그온한 후 입니다.
로그온하기 전에 실행되는 경우는, 2가지 레지스트리를 사용합니다.
1. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
2. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
이렇게 2가지가 있습니다. 로그온 한 후에 실행되는 경우는 무려 6가지나 됩니다.
1. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
2. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
3. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
4. All Users Startup folder : Documents and Settings\All Users\Start Menu\Programs\Startup folder
5. Startup folder : Documents and Settings\user\Start Menu\Programs\Startup folder
NT 경우 : path is Profiles\user\Start Menu\Programs\Startup
6. HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
이렇게 말이죠^^
이중에서 시스템 유틸리티인 msconfig에 의해 실행되는 시작프로그램은 로그온 후의 2, 3, 4, 5번에 등록된 프로그램입니다. 위의 2, 3, 4, 5번의 순서대로 프로그램이 실행된다고 해요!
여기서 재미있는 사실! 로그온 전의 1번 레지스트리에 등록된 프로그램들은 순서 없이 동시에 실행된다고 해요. 잘못하면 메모리나 cpu등을 많이 잡아먹게 할 수도 있겠죠?
참고로, RunServicesOnce키와 RunServices키 이곳에 시작프로그램을 등록시키는경우는 백신프로그램 또는 로그인전에 자동실행시키고 싶은 프로그램이 있다면 여기에 경로 및 데이터를 작성하면 된다고 하는군요!
그리고 만약 다른프로그램에 종속되어 실행되는 시작프로그램이 있다면 어떤 일이 벌어질까요?
답은 매우 간단합니다. 부모 시작프로그램과 종속되어 실행되는 시작프로그램, 즉 자식 프로그램이 있다면 종속되어진 자식 프로그램은 선행된 부모 프로그램이 완전히 끝날때까 대기하게되며 이것을 제외한 것들은 위의 키들이 나열된 순으로 로드됩니다!
더욱 중요한 것은, 안전모드에서는 시작프로그램이 무시되는 것이 원칙이지만, RunOnce의 키의경우 값의 이름앞에 *를 붙여 안전모드에서도 관련 경로의 프로그램을 실행시킬 수 있다고 하는군요..무섭습니다;;
전원버튼 동작 설정
또한, 제어판의 전원설정에서 컴퓨터의 전원버튼(하드웨어)를 눌렀을 때 실행되는 동작을 설정할 수 있는데, 이것도 레지스트리에서 수정이 가능합니다! 못하는게 없네요^^
레지스트리 편집기에서 아래의 경로를 열어주세요. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\
여시면 하위폴더들이 보이시게 되실텐데요, 폴더 내에서 레지스트리 키 값을 자세히 보시면, 전원버튼이 눌렸을때의 동작을 수정할 수 있도록 돼있습니다!!
Power Setting GUID: 7648efa3-dd9c-4e3e-b566-50f929386280 (Power button action)
Possible Setting Index: 000
Possible Setting Friendly Name: Do nothing
Possible Setting Index: 001
Possible Setting Friendly Name: Sleep
Possible Setting Index: 002
Possible Setting Friendly Name: Hibernate
Possible Setting Index: 003
Possible Setting Friendly Name: Shut down
Current AC Power Setting Index: 0x00000003
Current DC Power Setting Index: 0x00000003
위의 값들을 잘 찾으셔서 수정해주시면 된다고 합니다!
UAC동작설정
다음으로, UAC라는것을 알고 계신가요?UAC는 User Account Control의 약자로, 사용자 계정 컨트롤입니다. UAC 권한이 없거나 허용되지 않은 프로그램이 상위권한에 접근하는 것을 통제하는 역할을 합니다. 제어판에서 매우낮음, 낮음, 높음, 매우높음으로 4가지 설정을 할 수 있습니다.
그런데, 이 UAC를 레지스트리에서 온오프 및 강도설정을 할 수 있다고 합니다! 한번 볼까요?
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
이 위치로 들어가시면, EnableLUA와ConsentPromptBehaviorAdmin 이렇게 2가지 키가 보이실겁니다. EnableLUA는 UAC를 온오프하는 키이고, ConsentPromptBehaviorAdmin은 UAC의 강도를 조절하는 키입니다. 만약 이 ConsentPromptBehaviorAdmin의 키값이 0이 된다면 UAC는 제기능을 하지 못하게 됩니다. 그러면 관리자 권한으로 실행할때 창도 안뜨고, 그래서 어떤 프로그램이 관리자 권한을 사용하는지도 모르게되죠. 거기다 EnableLUA의 키값을 0으로 하신다면...UAC가 꺼지게됩니다. 게다가 ConsentPromptBehaviorAdmin의 키값과 제어판의 UAC의 설정값이 다르게 되면, ConsentPromptBehaviorAdmin의 키값이 우선순위가 되어, 제어판의 UAC의 설정값이 ConsentPromptBehaviorAdmin의 키값에 맞게 돌아간다고 해요!
긴 글 읽어주셔서 감사합니다~^^