카테고리 없음

레지스트리-11.28

yejiamoe 2025. 12. 3. 09:27

1. 레지스트리란?

→ 윈도우 운영체제의 거대한 저장소 데이터 베이스

  • 컴퓨터의 하드웨어, 설치된 소프트웨어, 사용자 설정 등 윈도우가 돌아가는데 필요한 모든 중요한 정보와 옵션 값이 모여 있음
  • 윈도우 부팅부터 프로그램 실행까지 이 레지스트리를 참조하여 어떻게 작동해야 할지 결정

→ 트리 구조로 모든 정보를 한 곳에 모아 관리

레지스트리가 중요한 이유?

사용자의 모든 흔적이 남으니까,

레지스트리 구조

    • 폴더 같은 개념
    • 트리 구조로 되어 있으며 하위 키를 가짐

HKEY_LOCAL이랑 HKEY_USERS에서 데이터를 가져와서

여기 이렇게 생김

이제 분석할꺼임

 

 

🗝️ 1. 지속성 유지 (Persistence) 메커니즘 악성코드가 재부팅 후에도 생존하기 위해 자동 실행을 등록하는 핵심 레지스트리 영역. 1.1 Run / RunOnce 키 (표준 자동 실행)개념: 윈도우 부팅 또는 사용자 로그온 시 프로그램 자동 실행. • 주요 경로: ◦ HKLM (Local Machine):

HKLM\Software\Microsoft\Windows\CurrentVersion\Run

특징: 모든 사용자에게 영향. 등록 시 관리자 권한 필요. 시스템 레벨 악성코드 상주. ◦ HKCU (Current User):

HKCU\Software\Microsoft\Windows\CurrentVersion\Run

특징: 현재 로그인한 사용자 계정만 영향. 권한 없이 등록 가능하여 악성코드 이용 빈도 최상.Run vs RunOnce 차이: ◦ Run: 매 부팅/로그온 시 지속적 실행. (백도어, C&C 연결 유지) ◦ RunOnce: 1회 실행 후 키 값 자동 삭제. (초기 침투 후 페이로드 설치, 자가 삭제 스크립트 구동) • RunOnce 예외 옵션: ◦

!

(Exclamation): 실행 후에도 값 삭제 방지 (잘 쓰이지 않으나 우회 기법으로 존재). ◦

*

(Asterisk): 안전 모드(Safe Mode) 부팅 시에도 실행 강제. 1.2 Wow6432Node (32-bit 호환성 은닉)경로:

HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Run

개념: 64비트 OS에서 32비트 애플리케이션 호환을 위한 리다이렉션 경로. • 분석 포인트: 분석가가 일반

Software\Microsoft\...

경로만 확인할 때, 이 경로에 악성코드를 숨겨 탐지를 우회하는 경우가 빈번함. 필수 점검 대상. 1.3 Policies (정책 기반 강제 실행)경로:

HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run

특징: 그룹 정책(GPO)에 의해 실행이 강제되는 항목. 일반적인 사용자는 이 키를 생성하지 않음. • 분석 포인트: 해당 경로에 값이 존재할 경우, 악성코드가 시스템 정책을 악용하여 삭제를 어렵게 만들었을 가능성 높음. 1.4 서비스형 실행 (Legacy & Services)RunServices / RunServicesOnce: ◦ 특징: 사용자가 로그온하기 전, 백그라운드 서비스 형태로 실행. ◦ 현황: Windows 9x 계열 호환성 잔재이나, 일부 레거시 악성코드에서 여전히 사용 시도. 🔍 2. 실행 흔적 (Execution Artifacts) 분석 삭제된 파일이라도 "실행되었다"는 증거를 남기는 레지스트리 및 아티팩트. 포렌식의 핵심. 2.1 UserAssist (GUI 실행 기록)경로:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist

특징: 윈도우 탐색기(GUI)를 통해 실행된 프로그램 기록 (아이콘 더블 클릭 등). • 데이터 구조: ◦ ROT13 인코딩: 프로그램 이름이 ROT13 알고리즘으로 난독화되어 저장됨 (예:

cmd.exe

pzq.rkr

). ◦ 포함 정보: 실행 횟수(Run Count), 마지막 실행 시간(Last Execution Time). • 활용: 사용자가 직접 악성 파일을 실행했는지 여부 판단 가능. 2.2 ShimCache (AppCompatCache) - 호환성 캐시경로:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache

특징: 프로그램 호환성 문제 해결을 위해 실행 파일 정보를 캐싱. • 분석 중요도(★): 1. 휘발성: 시스템 종료/재부팅 시에만 메모리에서 레지스트리로 기록됨. (라이브 포렌식 시 주의). 2. 존재 증명: 파일이 디스크에서 삭제되어도 캐시 기록은 유지됨. 3. 시간 정보: 파일의

Last Modified Time

을 기록하므로, Time Stomping(시간 조작) 여부 탐지에 핵심적 역할. 2.3 MUICache (프로그램 이름 캐시)경로:

HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache

(버전별 상이) • 특징: 실행 파일 경로와 그 파일이 내부에 가지고 있는 '프로그램 이름(Description)'을 매핑. • 활용: 악성코드가 파일명을

svchost.exe

로 위장했더라도, 내부 속성 이름이

Keylogger

등으로 되어 있다면 이곳에 기록되어 발각됨. 2.4 Prefetch (프리패치) - 비(非) 레지스트리 핵심 아티팩트경로:

C:\Windows\Prefetch\*.pf

생성 원리: 실행 속도 향상을 위해 실행 시 로드되는 코드/데이터 정보를 파일로 저장. • 분석 포인트: ◦ 파일명 형식:

실행파일명-해시값.pf

정보: 실행 횟수, 최초/최근 실행 시각(최대 8개까지 기록), 참조한 DLL 목록. ◦ 의의: 특정 악성 도구의 정확한 실행 시점과 빈도 증명. 📑 3. 종합 요약 및 분석 체크리스트 레지스트리 키별 요약표 구분주요 키(Key)역할 및 특징포렌식 관점지속성Run / RunOnce로그온 시 자동 실행악성코드 생존 여부 1순위 확인지속성Wow6432Node32비트 호환 실행은닉된 악성코드 탐지지속성Policies/Explorer정책 기반 강제 실행시스템 설정 조작 및 강제성 확인흔적UserAssistGUI 실행 기록 (ROT13)사용자의 인지 및 직접 실행 여부흔적ShimCache호환성 데이터 (Shutdown 시 기록)삭제된 파일의 실행 이력, 타임라인 구성흔적MUICache프로그램 이름 매핑위장 파일(Masquerading) 식별흔적RecentDocs최근 문서 기록데이터 유출/문서 열람 흔적 분석 프로세스 제안 1. 지속성 확인:

Run

,

RunOnce

,

Startup

폴더 확인 → 악성코드 식별. 2. 교차 분석: 식별된 의심 파일명으로

Prefetch

,

ShimCache

검색. 3. 타임라인 구성:

UserAssist

Prefetch

의 실행 시간을 조합하여 침해 사고 발생 시점 재구성. 4. 은닉 탐지:

Wow6432Node

및 숨김 파일 속성 확인.

 

1. sshd 프로세스와 PID 파일 대조 (교차 검증)

가장 핵심적인 행동은 첫 번째와 두 번째 명령어입니다.

  • ps -ef | grep ssh[d]
    • 행동: 현재 실행 중인 프로세스 목록(ps)에서 sshd(SSH 데몬)를 찾습니다.
    • 결과: root 권한으로 실행된 sshd 프로세스가 보이고, 프로세스 ID(PID)가 1124번인 것을 확인했습니다.
    • 참고: grep ssh[d]라고 쓴 것은 grep 명령어 자기 자신을 결과에서 제외하기 위한 리눅스 고수들의 습관(Tip)입니다.
  • cat /var/run/sshd.pid
    • 행동: 시스템이 관리하는 sshd의 PID 파일 내용을 읽습니다.
    • 결과: 1124가 출력되었습니다.
    • 의도: "실제로 메모리에 떠 있는 프로세스 번호(1124)"와 "시스템이 기록해둔 번호(1124)"가 일치하는지 확인하는 것입니다. 이 두 숫자가 다르면 서비스가 비정상 종료되었거나 꼬인 상태(Stale)일 수 있는데, 여기서는 완벽하게 일치하므로 정상입니다.

2. 현재 내 접속 환경 확인 (tty, echo $$)

나머지 명령어는 현재 내가 작업 중인 터미널 세션에 대한 정보 확인입니다.

  • tty
    • 결과: /dev/pts/0
    • 의미: 현재 사용자가 물리적인 서버 콘솔 앞에 있는 것이 아니라, SSH 등을 통해 원격으로 접속했거나 GUI 환경의 터미널 창을 쓰고 있다는 뜻입니다. (가상 터미널)
  • echo $$
    • 결과: 6451
    • 의미: 지금 명령어를 입력하고 있는 현재 쉘(Shell)의 PID를 확인하는 것입니다.
    • 의도: 위에서 확인한 sshd 데몬(1124)과, 내 쉘(6451)은 별개의 프로세스라는 것을 인지하거나, 추후 로그 분석 등을 위해 내 세션 ID를 미리 알아두려는 목적입니다.

요약

한마디로 **"SSH 서버가 1124번으로 잘 돌고 있는지 확실히 체크하고(PID 대조), 나는 가상 터미널(/dev/pts/0)에서 작업 중이구나"**라고 상황 파악을 하는 모습입니다.