DAY37
DAY37

시나리오1 완성하기

문제상황)
관리자 실수로 악성코드가 침투되었다.
관리자 pc를 분석하여 어떤 사이트에서 어떤 파일을 통해 악성코드에 감염되었는지 확인해보자.

0) 관리자 pc의 해시값을 기록한다.
	file evidence item > managerpc.vmdk 파일 올리기
	(vmdk로 불러오는게 호환이 좋다.)
	verify drive/image > 해시값 확인
	=> 24a20e96a93b7582a3af4877080d4fb7
	   fd7737c706e6987d36ade3a764a9253ce96eac07
	   (md5 충돌 가능성 있으므로 sha1을 많이 사용한다.)

1) 관리자 pc의 윈도우 설치 시간을 기록한다.
	SOFTWARE 파일 분석
	root > windows > system32 > config > SOFTWARE
	microsoft > windows nt  > currentversion > installdate

2) 관리자 pc의 사용자를 특정한다.
	2-1) 관리자pc에 존재하는 계정 확인
		SAM 파일 분석
		SAM 오른쪽 마우스 > OPEN WITH ... > REGISTRY VIEW
		sam > account > users > 
		=> 000001F4(administrator)/000001F5(guest)/000003E8(manager)
		=> administrator / guest / manager 찾음

	2-2) 계정 중 소유자를 특정한다.
		SOFTWARE 파일 분석
		root > windows > system32 > config > SOFTWARE
		microsoft > windows nt  > currentversion >registeredowner
		=> manager 확인

  

F데이터 분석하기

SAM 오른쪽 마우스 > OPEN WITH ... > REGISTRY VIEW
SAM > Domains > Account > Users > manager

RID(Relative identifier : 비교 식별 값)
F(fixed format : 고정적 형식)
V(variable format : 유동적 형식)

F 데이터에 저장된 내용
02 00 01 00 00 00 00 00 AD 6D 
1B 2F F9 78 DB 01 00 00 00 00 
00 00 00 00 58 54 D7 7C E4 33 
D6 01 FF FF FF FF FF FF FF 7F 
00 00 00 00 00 00 00 00 E8 03 
00 00 01 02 00 00 14 02 00 00 
00 00 00 00 00 00 29 00 01 00 
00 00 00 00 21 01 00 00 00 00 

***레지스트리 뷰 툴 이용하기
오른쪽 마우스 > show hex interpreter windows

- 마지막 로그인 시각: 8~15자리
AD 6D 1B 2F F9 78 DB 01
01DB78F92F1B6DAD
=> 마지막 로그인 시간: 2025-02-07T09:42:37.007812+09:00
- 마지막 패스워드 변경 시각: 24~31자리
58 54 D7 7C E4 33 D6 01
01D633E47CD75458
=> 마지막 패스워드 변경 시각: 2020-05-27T14:05:49.405500+09:00
- 마지막 실패 로그인 시각: 40~47자리
00 00 00 00 00 00 00
=>F 키 값이 00으로만 채워져 있다면 해당 유저는 로그인을 실패한 적이 없음
- 로그온 횟수: 66~67자리
2F 00
=> 로그온 횟수: 47회

 

F분석.py

import datetime

def filetime_to_datetime(filetime_hex):
    """Windows FILETIME을 UTC 날짜로 변환"""
    filetime_int = int(filetime_hex, 16)  # 16진수 → 10진수 변환
    epoch_start = datetime.datetime(1601, 1, 1, tzinfo=datetime.timezone.utc)
    utc_time = epoch_start + datetime.timedelta(seconds=filetime_int / 10_000_000)

    # UTC → 한국 시간(KST) 변환
    kst_time = utc_time.astimezone(datetime.timezone(datetime.timedelta(hours=9)))
    return kst_time


def parse_f_data(f_data_hex):
    """SAM F 데이터 해석"""

    # 16진수 문자열 → 바이트 변환 후 Little Endian 변환
    last_login_bytes = bytes.fromhex(f_data_hex[16:32])  # 8바이트 Windows FILETIME
    last_login_time = filetime_to_datetime(last_login_bytes[::-1].hex())  # Little Endian 변환 후 처리

    last_password_change_bytes = bytes.fromhex(f_data_hex[48:64])
    last_password_time = filetime_to_datetime(last_password_change_bytes[::-1].hex())
    
    failed_login_count_bytes = bytes.fromhex(f_data_hex[56:64])  # 4바이트, 0x1C - 0x1F
    failed_login_count = int(failed_login_count_bytes[::-1].hex(), 16)  # Little Endian 변환 후 정수 변환
    
    # 결과 출력
    print("🔍 SAM F 데이터 분석 결과")
    print(f"📅 마지막 로그인 시간: {last_login_time}")
    print(f"🔑 마지막 비밀번호 변경 시간: {last_password_time}")
    print(f" 로그인 실패 횟수: {failed_login_count}")
    
# 테스트용 예제 데이터 (16진수 F 값 입력)
f_data_example = "0200010000000000AD6D1B2FF978DB0100000000000000005854D77CE433D601FFFFFFFFFFFFFF7F0000000000000000E803000001020000140200000000000000002900010000000000210100000000"
parse_f_data(f_data_example)
 
3) 접속한 사이트를 확인한다. NTUSER.DAT 파일 분석 리눅스의 경우 /home/.bashrc /etc/.profile users>manager >ntuser.dat 오른쪽 마우스 > open with ... registry view \Users\PC14\AppData\Local\Google\Chrome\UserData\Default\History > urls 테이블 클릭 => 2025-02-06 11:07:52 http://192.168.0.214 접속 기록 확인 4) 악성코드를 받은 기록을 확인한다. NTUSER.DAT 파일 분석 users>manager >ntuser.dat 오른쪽 마우스 > open with ... registry view \Users\PC14\AppData\Local\Google\Chrome\UserData\Default\History > downloads 테이블 클릭 => C:\Users\manager\Downloads\jyb.exe 2025-02-06, 11:08:01 다운로드 받은 파일명, 다운로드 일시 확인 5) 관리자가 악성코드를 실행했는지 확인한다. SOFTWARE 파일 분석 root > windows > system32 > config > SOFTWARE Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU => 악성코드를 실행시키지는 않았다

시나리오2 분석하기


시나리오2 틀 만들기
	해커가 업로드 기능을 이용하여 악성코드를 업로드 한 후 관리자가 파일을 다운로드 받은 경우 분석
	1) 컴퓨터 부팅은 언제인가?
	2) 누가 접속했는가?
		manager
	3) 어디에 접속을 했는가?
		st.kr
	4) 데이터베이스에  접속을 했는가?
	5) 해커가 사이트를 공격했는가?
	6) 공격했다면 무슨 흔적을 남겼는가?
	7) 흔적들을 관리자가 실시간으로 모니터링 했는가?

사용할 사이트인 web1.st.kr 구축하기
	web1.st.kr
	로그인 오류
	dbconfig.php 
	dbname webhack, user web1, passwd 123456으로 변경
	webhack.sql 내용을 mysql에 넣어줌

	su
	mysql
	create database webhack;
	create user web1@'%' identified by '123456';
	grant all on web1.* to webhack@'%';
	flush privileges;

	board_write_chk.php
		경로: udir = "/var/www/html/board/pds/"
		경로와 디렉토리가 일치해야 파일이 업로드 됨 !


***tripwire
기존 해시값을 저장해두고 비교해서 변경된 부분을 찾아냄