본문 바로가기

프로그래밍/Security, Network

악성코드가 이용하는 Windows Registry

[탐색기 폴더 옵션의 파일 숨김 속성]
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\ShowSuperHidden  
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL\CheckedValue



 

[파일의 속성 부분에서 체크박스 활성/비활성]
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\HideFileExt\UncheckedValue
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\HideFileExt\CheckedValue
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\HideFileExt\DefaultValue



 

[오토런 설정]
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoDriveTypeAutoRun
- USB 같은 이동형 저장장치에 대해 Autorun 설정을 합니다. (0xFF로 설정 시 Block, 0x00으로 설정 시 모두 허용)



 

[윈도우 주요 설정 툴 실행 방지]
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableRegistryTools
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableTaskMgr
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableCMD



 

[Image File Execution Options 이용하여 프로그램 실행 방지]
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution\Options\calc.exe
Debugger = notepad.exe
- 계산기 실행 시 노트패드로 전환되어 실행. (AV 실행을 막거나, 포렌직 툴 실행을 막기위해 변조함)



 

[시작프로그램 관련]
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\userinit
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce

HKLM\Software\Microsoft\Windows\CurrentVersion\policies\Explorer
DisableLocalMachineRunOnce=1:DWORD
DisableLocalMachineRun=1:DWORD
DisableCurrentUserRunOnce=1:DWORD
DisableLocalMachineRun=1:DWORD
- 이러한 키가 설정되면 시작프로그램에 등록된 프로그램이 실행이 안됨.

HKLM\SOFTWARE\Classes\exefile\shell\open\command
@="soundmix \"%1\" %*"
- soundmix 프로세스를 KILL 하여도 계속적으로 재실행



 

[인터넷 익스플로러]
HKCU\Software\Policies\Microsoft\Internet Explorer\Control Panel
- 해당 키 안에 ResetWebSettings 값이나 HomePage 값이 있으면 시작 페이지 부분 비활성화. (재부팅이 필요 합니다) 

[HKEY_CURRENT_USER\Software\Policies\Microsoft\internet explorer\restrictions]
"NoBrowserOptions"=dword:00000001
- 인터넷 옵션 실행불가 관련 레지스트리

[HKCU\Software\Policies\Microsoft\Internet Explorer\Control Panel]
"AdvancedTab"=dword:00000001
"PrivacyTab"=dword:00000001
"ProgramsTab"=dword:00000001
"ConnectionsTab"=dword:00000001
"ContentTab"=dword:00000001
"SecurityTab"=dword:00000001
"GeneralTab"=dword:00000001
- 역시 인터넷 옵션 실행불가 관련 레지스트리



 

[네트워크 관련]
HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters\MaxUserPort
- 윈도우에서 허용하는 네트워크 연결 개수 수정(주로 Spamer가 변조)

[HKLM\SYSTEM\ControlSet001\Services\WinSock2\Parameters\Protocol_Catalog9\Catalog_Entries\00000000000*]
"PackedCatalogItem" 이진값 문자열에 악성코드가 삽입되어 있을 경우 네트워크가 정상적으로 동작하지 않음.
netsh winsock show catalog 명령어로 확인 가능, 복구툴 : http://www.cexx.org/lspfix.htm



 

[윈도우 보안 정책 관련]
HKLM\SYSTEM\ControlSet001\Services\wscsvc\Start
- wscsvc : 윈도우 시큐리티 보안센터, 윈도우 시큐리티 보안센터 시작을 꺼버립니다.

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system\EnableLUA
- 윈도우 VISTA UAC 기능 무효화

HKLM\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\EnableFirewall 
HKLM\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\DoNotAllowExceptions  
HKLM\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List
- 윈도우 방화벽 관련 정책 변경

HKLM\SOFTWARE\Microsoft\Ole\EnableDCOM
- 분산 컴포넌트 객체 모형에 해당하는 값을 변경 [DCOM, Distributed Component Object Model]

HKLM\SOFTWARE\Microsoft\Security Center\AntiVirusDisableNotify
- 보안센터 바이러스 백신 경보에 해당하는 값을 변경

HKLM\SOFTWARE\Microsoft\Security Center\FirewallDisableNotify
- 보안센터 바이러스 사용자지정 백신에 해당하는 값을 변경

HKLM\SOFTWARE\Microsoft\Security Center\AntiVirusOverride
- 보안센터 바이러스 방화벽 경보에 해당하는 값을 변경

HKLM\SYSTEM\ControlSet001\Services\SharedAccess\Start
- 연결공유서비스에 해당하는 값을 변경한다.

HKLM\SYSTEM\CurrentControlSet\Control\Lsa\restrictanonymous
- 익명연결(널세션)에 해당 하는 값을 변경



 

[제어판 관련]
HKCU\Control Panel\don't load\"access.cpl" = "No"
HKCU\Control Panel\don't load\"appwiz.cpl" = "No"
HKCU\Control Panel\don't load\"hdwwiz.cpl" = "No"
HKCU\Control Panel\don't load\"inetcpl.cpl" = "No"
HKCU\Control Panel\don't load\"intl.cpl" = "No"
HKCU\Control Panel\don't load\"joy.cpl" = "No"
HKCU\Control Panel\don't load\"main.cpl" = "No"
HKCU\Control Panel\don't load\"ncpa.cpl" = "No"
HKCU\Control Panel\don't load\"netcpl.cpl" = "No"
HKCU\Control Panel\don't load\"nusrmgr.cpl" = "No"
HKCU\Control Panel\don't load\"timedate.cpl" = "No"
HKCU\Control Panel\don't load\"joy.cpl" = "No"

- 제어판에서 메뉴를 보이지 않도록 한다.



 

[바탕화면 배경화면 관련]
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\ActiveDesktop\


 

윈도우 시작시 자동실행 - Run

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\

”Attack” = “%System%\Attack.exe” 
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\

”Attack” = “%System%\Attack.exe”

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

==> 윈도우가 시작할때 동작할 수 있는 레지스트리.

 

윈도우 시작시 자동실행 - RunOnce

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\

”Attack” = “%System%\Attack.exe”

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

==> 윈도우가 시작할때 동작할 수 있는 레지스트리.

 

윈도우 시작시 자동실행 - RunServices

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices\

”Attack” = “c:\windows\Attack.exe”

 

 

윈도우 시작시 자동실행 - Winlogon 

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\

"Shell" = "Explorer.exe %System%\attack.exe"

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\"Shell"

원래는 Explorer.exe 만 있는게 정상이다. explorer.exe 로 사용자와 컴퓨터간의 대화를 할 수 있게 한다.

 여기에 악성코드 경로를 넣어주면, 사용자가 명령을 할 때마다 악성코드가 실행되는 것이다.

 

윈도우 시작시 자동실행 - Userinit

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\

"Userinit" = "%System%\userinit.exe, %System%\attack.exe"

 원래는 "%System%\userinit.exe만 있는게 정상이다. 

부팅이 되고,, winlogon 이 실행되서 로그인을 하고 들어가면, userinit 가 실행이 되서 explorer.exe 를 실행하는 것이다.

요런 흐름인데 explorer.exe 가 실행되기 전에 악성코드가 실행되어 버리니..

백신도 진단을 못할 수도 있는법이다~

 

윈도우 시작시 자동실행 - Taskman

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\

"Taskman" = "%SystemDrive%\RECYCLER\[SID]\attack.exe"

 원래는 Taskman 이라는 값이 없다.

 

윈도우 시작시 자동실행 - Active Setup

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\
{5Y99AE78-58TT-11dW-BE53-Y67078979Y}\

 정상파일 :  system32 폴더 ==>  iedkcs32.dll /ie4uinit.exe / ieuddinit.exe / shmgrate.exe

                advpack.dll / mscories.dll / themeui.dll / shell32.dll

                c:\program files\outlook express\setup50.exe

                c:\windows\inf\unregmp2.exe

{5Y99AE78-58TT-11dW-BE53-Y67078979Y} 는 악성코드..

 

DLL Injection 을 위한 변경 - AppInit_DLLs

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\

"AppInit_DLLs" = "악성코드경로\attack.dll"

DLL Injection 이라는 것은 여러가지 방법이 있는데 그중 한 방법이다.

레지스트리에 위와 같이 등록이 된다면, 어떠한 프로세스에서 user32.dll (실행시 필요) 을 호출할 시에 user32.dll 은 LoadLibrary() 함수를 이용할 것이고, AppInit_DLLs 안에 지정된 DLL 들을 호출할 것이다.

LoadLibrary() 함수에는 인자값이 DLL_PROCESS_ATTACH 를 지정해 준다. 그러므로 중간에 끼어들어갈 수 있다.

 

DLL Injection - InprocServer32

 HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000000}\InprocServer32\

"기본값" = "....\attack.dll"

이것은 attack.dll 에 있는 값을 얻어 컴포넌트 파일의 경로를 알아낸다.

즉.. LoadLibrary() 를 호출하면 (user32.dll 사용시) 클라이언트 프로세스 안에 DLL 컴포넌트를 로드시킨다.

 

DLL Injection - RemoteAccess

 HKEY_LOCAL_MACHINE\System\CurrentControlSet\RemoteAccess\Parameters

"ServiceDLL" = "....\attack.dll"

서비스에서 Routing and Remote Access 를 가로챈다.

정상적인 값은 %SystemRoot%System32\mprdim.dll 이다.

 

 

윈도우 시작시 자동실행 - Active Setup

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\{12345678-1234-1234-1234-123456789101(임의의번호)}\

"StubPath" = "%SystemDrive%\RESTORE\[SID]\악성코드.exe"

 위의 경로에서 c:\RESTORE\[SID]\ 에는 Desktop.ini 가 같이 존재하여 두개가 유기적으로 동작한다.

 

서비스 변경

HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\[Service Name]\

"Start" = 3

2 = 자동 /  3 =  수동 / 4 = 사용안함

정상적인 서비스의 레지스트리 값을 조정한다.

 

IFEO 값 변경

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\악성코드.exe\"Debugger" = "ntsd -d"

프로그램이 실행되면 위 경로로 가기 때문에 파일들이 실행이 되지 않는다.

정상적인 것은 c:\windows\system32\ntsd.exe ..

나머지는 Debugger 값이 없다.

 

BHO 값 변경 - Browser Helper Objects

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\

[Random CLSID]\"기본값" = "%Windir%\attack.dll"

 

 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\

[Random CLSID]\"기본값" = "%Windir%\attack.dll"

BHO 는 개발자들이 인터넷 익스플로어를 제어하고 사용자가 원하는대로 바꾸도록 지원해 주는 것이다.

인터넷 익스플로어가 시작될 때, 레지스트리에서 BHO 를 찾고 자동으로 생성한다. 그러므로 이 특징을 이용해 악의적인 행위를 한다.

  

안전모드에서 부팅 못하게..

 HKEY_LOCAL_MACHINE\system\CurrentControlSet\Control\SafeBoot\

악성코드는 위의 키를 아예 삭제해 버린다.

 

방화벽 우회 - 방화벽 내리기 

 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001(&ControlSet002&CurrentControlSet)Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile

"EnableFirewall" = 0

 EnableFirewall 의 값은 원래부터 있는 값은 아니고, 윈도우 방화벽을 내리면 생기는 키값이다.

위의 방법으로 윈도우 방화벽을 우회한다.

다른 우회 방법도 있다.   아래를 참고하자.

 

방화벽 우회 - 악성코드 권한주기  

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\DomainProfile\AuthorizedApplications\List\

%Windir%\system32\"attack.exe" = "%Windir%\system32\attack.exe:*:Enabled:@xpsp2res.dll,-22019" = "Explorer.exe %System%\attack_1.exe"

 ControlSet002 / CurrentControlSet 도 마찬가지 이다.

그리고 위에서는 보라색 글자와 같이 DomainProfile 에서 바꾸어 주었는데 이곳이 아닌 StandardProfile 에서도 바꾸어 준다.

뭐.... 워낙 영어에 취약한 지라..  한글로 풀어써서 이해를 하였다.

서비스\공유접근\매개변수\방화벽정책\사용자프로파일\권한응용프로그램\목록\

오호~  방화벽 정책에서 악성코드에 권한을 주는구만?    이라고.. 난 해석하였다.ㅋ

 

 트레이의 말풍선 도움말 설정

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\

"EnableBalloonTips" = "1"

 위의 내용은 허위로 안내 도움말을 하기 위해 켜놓은 것이다. 원래의 값은 0이다. 보통 허위안티바이러스에서 많이 사용을 한다.

사용자에게 지속적으로 감염되었다고 알려주어 겁주고 결제 요구한다...

EnableBalloonTips  ==> 표시줄 트레이의 풍선 도움말

HKEY_LOCAL_MACHINE 이외에 HKEY_CURRENT_USER 도 수정한다.

 

작업관리자 사용금지하게 하는 것

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system\

"DisableTaskMgr" = "1"

Task Manager 를 비활성화 시킨다. 이것은 우리가 흔히 알고 있는 작업관리자이다.

작업관리자(Ctrl+Alt+Del)가 뜨지 않는다면 요 레지스트리가 1로 되어있기 때문에 뜨지 않는 것이다.

악성코드들은 자기자신을 은폐하려 들기 때문에 작업관리자를 사용하지 못하도록 한다.

HKEY_LOCAL_MACHINE 이외에 HKEY_CURRENT_USER 도 수정한다.

 

제어판 사용 금지

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\

"NoControlPanel" = "1"

NoControlPanel 은 제어판에 사용자가 접근하는 것을 제한하는 것이다.

이것을 1로 설정해 놓으면 제어판을 열수가 없다.

HKEY_LOCAL_MACHINE 이외에 HKEY_CURRENT_USER 도 수정한다.

 

레지스트리 사용 금지

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system\

"DisableRegistryTools" = "1"

Disable (무능력하게 하다) RegistryTools (레지스트리툴을)

레지스트리 툴 사용을 무능력하게 하여, 사용자의 접근을 막는다.

 

업데이트 사용 금지 - HKLM

HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate\AU\

"NoAutoUpdate" = "1"

 자동 업데이트를 막는다.

 

 업데이트 사용 금지 - HKCU

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\

"NoWindowsUpdate" = "1"

 

보호된 운영체제 파일 숨기기  - 폴더 옵션

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\SuperHidden

"Type" = "nonprintable characters"

 악성코드 자신을 보호하고 파일을 숨기면 사용자는 악성코드에 접근할 수 없다.  그러므로 이 레지스트리 값을 이용하여 자신에게 접근을 보호한다.

Type 값에 이상한 글자를 넣게 된다면..  폴더 옵션에서 아예 메뉴가 나오지 않는다.

 

다운시 보안 팝업창 무력화

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Download

"CheckExeSignatures" = "no"

인터넷에서 다운로드를 해 실행을 하면 경고창을 띄우는 것을 우리는 알고 있다.

그러나 위의 레지값을 변경하면 경고창 없이 설치가 되버린다.

 

 exe 파일이 열리지 않을때 - 프로그램 선택하라는 창이 나올 때  

 HKEY_CLASSES_ROOT\exefile\shell\open\command\

"기본값" = ""악성코드경로" /START "%1" %*"

 HKEY_CLASSES_ROOT\exefile\shell\open\command\

"기본값" = "%1" %* 

위와 같이 기본값을 변경해 주어야 한다. 

 

 HKEY_CLASSES_ROOT\.exe\

"기본값" = "secfile"

 HKEY_CLASSES_ROOT\.exe\

"기본값" = "exefile"

 secfile 값을 exefile 로 고쳐준다.

 

 HKEY_CLASSES_ROOT\.exe\shell\open\command\

"기본값" = ""악성코드경로" /START "%1" %*"

 HKEY_CLASSES_ROOT\.exe\shell\open\command\

"기본값" = "%1" %* 

 키를 삭제해주어도 무방.

 

 HKEY_CLASSES_ROOT\secfile\shell\open\command\

"기본값" = ""악성코드경로" /START "%1" %*"

 HKEY_CLASSES_ROOT\secfile\shell\open\command\ 

"기본값" = "%1" %*

키를 삭제해주어도 무방.

 악성코드는 secfile 이라는 것을 만들어 exe 가 실행되면 자신이 만들어 놓은 레지스트리 대로 행동하게 한다.

오른쪽 값들처럼 복구를 해주어야 한다.

 

아래 표와 같이 레지스트리를 생성하는 경우도 있다. 그럴 때는 이 키들을 삭제해주어야 한다.

HKEY_CURRENT_USER\Software\Classes\.exe\shell\open\Command\

"기본값" = "악성코드 경로" /START "%1" %*

 

HKEY_CURRENT_USER\Software\Classes\secfile\shell\open\Command\

"기본값" = "악성코드 경로" /START "%1" %*

 

 간혹,,, 아래 표와같은 레지스트리 변경건도 있을 수 있다.

HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\FIREFOX.EXE\shell\open\Command\

"기본값" = "악성코드 경로" /START "C:\Program File\MozillaFirefox\firefox.exe"

 

HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\FIREFOX.EXE\shell\safemode\Command\

"기본값" = "악성코드 경로" /START "C:\Program File\MozillaFirefox\firefox.exe"  -safe-mode

 

HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\IEXPLORE.EXE\shell\open\Command\

"기본값" = "악성코드 경로" /START "C:\Program File\InternetExplorer\iexplore.exe"  -safe-mode

 위 레지스트리 값은 삭제해준다.

 

 익스플로어 검색 기본값 변경

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\

"Default_Search_URL" = "정상적인 것은 microsoft 주소가 적혀 있어야함"

 

익스플로어 검색 페이지 변경 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\

"Search page" = "정상적인 것은 microsoft 주소가 적혀 있어야함"

 

익스플로어 시작 페이지 변경 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\

"Start Page" = "정상적인 것은 microsoft 주소가 적혀 있어야함"

 


출처 : http://yeoungpc.tistory.com/18