1. 레지스트리란?
→ 윈도우 운영체제의 거대한 저장소 데이터 베이스
- 컴퓨터의 하드웨어, 설치된 소프트웨어, 사용자 설정 등 윈도우가 돌아가는데 필요한 모든 중요한 정보와 옵션 값이 모여 있음
- 윈도우 부팅부터 프로그램 실행까지 이 레지스트리를 참조하여 어떻게 작동해야 할지 결정
→ 트리 구조로 모든 정보를 한 곳에 모아 관리
레지스트리가 중요한 이유?
사용자의 모든 흔적이 남으니까,
레지스트리 구조
- 키
- 폴더 같은 개념
- 트리 구조로 되어 있으며 하위 키를 가짐
- 값

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



여기 이렇게 생김
이제 분석할꺼임



🗝️ 1. 지속성 유지 (Persistence) 메커니즘 악성코드가 재부팅 후에도 생존하기 위해 자동 실행을 등록하는 핵심 레지스트리 영역. 1.1 Run / RunOnce 키 (표준 자동 실행) • 개념: 윈도우 부팅 또는 사용자 로그온 시 프로그램 자동 실행. • 주요 경로: ◦ HKLM (Local Machine):
▪ 특징: 모든 사용자에게 영향. 등록 시 관리자 권한 필요. 시스템 레벨 악성코드 상주. ◦ HKCU (Current User):
▪ 특징: 현재 로그인한 사용자 계정만 영향. 권한 없이 등록 가능하여 악성코드 이용 빈도 최상. • Run vs RunOnce 차이: ◦ Run: 매 부팅/로그온 시 지속적 실행. (백도어, C&C 연결 유지) ◦ RunOnce: 1회 실행 후 키 값 자동 삭제. (초기 침투 후 페이로드 설치, 자가 삭제 스크립트 구동) • RunOnce 예외 옵션: ◦
(Exclamation): 실행 후에도 값 삭제 방지 (잘 쓰이지 않으나 우회 기법으로 존재). ◦
(Asterisk): 안전 모드(Safe Mode) 부팅 시에도 실행 강제. 1.2 Wow6432Node (32-bit 호환성 은닉) • 경로:
• 개념: 64비트 OS에서 32비트 애플리케이션 호환을 위한 리다이렉션 경로. • 분석 포인트: 분석가가 일반
경로만 확인할 때, 이 경로에 악성코드를 숨겨 탐지를 우회하는 경우가 빈번함. 필수 점검 대상. 1.3 Policies (정책 기반 강제 실행) • 경로:
• 특징: 그룹 정책(GPO)에 의해 실행이 강제되는 항목. 일반적인 사용자는 이 키를 생성하지 않음. • 분석 포인트: 해당 경로에 값이 존재할 경우, 악성코드가 시스템 정책을 악용하여 삭제를 어렵게 만들었을 가능성 높음. 1.4 서비스형 실행 (Legacy & Services) • RunServices / RunServicesOnce: ◦ 특징: 사용자가 로그온하기 전, 백그라운드 서비스 형태로 실행. ◦ 현황: Windows 9x 계열 호환성 잔재이나, 일부 레거시 악성코드에서 여전히 사용 시도. 🔍 2. 실행 흔적 (Execution Artifacts) 분석 삭제된 파일이라도 "실행되었다"는 증거를 남기는 레지스트리 및 아티팩트. 포렌식의 핵심. 2.1 UserAssist (GUI 실행 기록) • 경로:
• 특징: 윈도우 탐색기(GUI)를 통해 실행된 프로그램 기록 (아이콘 더블 클릭 등). • 데이터 구조: ◦ ROT13 인코딩: 프로그램 이름이 ROT13 알고리즘으로 난독화되어 저장됨 (예:
→
). ◦ 포함 정보: 실행 횟수(Run Count), 마지막 실행 시간(Last Execution Time). • 활용: 사용자가 직접 악성 파일을 실행했는지 여부 판단 가능. 2.2 ShimCache (AppCompatCache) - 호환성 캐시 • 경로:
• 특징: 프로그램 호환성 문제 해결을 위해 실행 파일 정보를 캐싱. • 분석 중요도(★): 1. 휘발성: 시스템 종료/재부팅 시에만 메모리에서 레지스트리로 기록됨. (라이브 포렌식 시 주의). 2. 존재 증명: 파일이 디스크에서 삭제되어도 캐시 기록은 유지됨. 3. 시간 정보: 파일의
을 기록하므로, Time Stomping(시간 조작) 여부 탐지에 핵심적 역할. 2.3 MUICache (프로그램 이름 캐시) • 경로:
(버전별 상이) • 특징: 실행 파일 경로와 그 파일이 내부에 가지고 있는 '프로그램 이름(Description)'을 매핑. • 활용: 악성코드가 파일명을
로 위장했더라도, 내부 속성 이름이
등으로 되어 있다면 이곳에 기록되어 발각됨. 2.4 Prefetch (프리패치) - 비(非) 레지스트리 핵심 아티팩트 • 경로:
• 생성 원리: 실행 속도 향상을 위해 실행 시 로드되는 코드/데이터 정보를 파일로 저장. • 분석 포인트: ◦ 파일명 형식:
◦ 정보: 실행 횟수, 최초/최근 실행 시각(최대 8개까지 기록), 참조한 DLL 목록. ◦ 의의: 특정 악성 도구의 정확한 실행 시점과 빈도 증명. 📑 3. 종합 요약 및 분석 체크리스트 레지스트리 키별 요약표 구분주요 키(Key)역할 및 특징포렌식 관점지속성Run / RunOnce로그온 시 자동 실행악성코드 생존 여부 1순위 확인지속성Wow6432Node32비트 호환 실행은닉된 악성코드 탐지지속성Policies/Explorer정책 기반 강제 실행시스템 설정 조작 및 강제성 확인흔적UserAssistGUI 실행 기록 (ROT13)사용자의 인지 및 직접 실행 여부흔적ShimCache호환성 데이터 (Shutdown 시 기록)삭제된 파일의 실행 이력, 타임라인 구성흔적MUICache프로그램 이름 매핑위장 파일(Masquerading) 식별흔적RecentDocs최근 문서 기록데이터 유출/문서 열람 흔적 분석 프로세스 제안 1. 지속성 확인:
,
,
폴더 확인 → 악성코드 식별. 2. 교차 분석: 식별된 의심 파일명으로
,
검색. 3. 타임라인 구성:
와
의 실행 시간을 조합하여 침해 사고 발생 시점 재구성. 4. 은닉 탐지:
및 숨김 파일 속성 확인.

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)에서 작업 중이구나"**라고 상황 파악을 하는 모습입니다.