osforensic 무료판(30일) > 케이스 3개까지만 생성 가능 기존 3개 차면 삭제하는 식으로 진행 계속 사용하고 싶으면 autopsy 사용하기(무료) -------------------------------------- 관리자 실수로 악성코드가 침투되었다. 0) stManager 해시값은 무엇인가? file evidence item > managerpc.vmdk 파일 올리기 (vmdk로 불러오는게 호환이 좋다.) verify drive/image > 해시값 확인! => 24a20e96a93b7582a3af4877080d4fb7 fd7737c706e6987d36ade3a764a9253ce96eac07 (md5 충돌 가능성 있으므로 sha1을 많이 사용한다.) 리눅스 > 로그 분석 /var/log 윈도우 > 이벤트, 레지스트리, 약간의 로그 경로 root > windows > system32 > config에서 5개의 레지스트리 파일 확인 => SAM/ SECURITY/ SOFTWARE/ SYSTEM/ DEFAULT 1) 컴퓨터 부팅 및 셧다운 시간은? SYSTEM 파일 분석 경로 C:\Windows\System32\config\SYSTEM ControlSet001\Control\Windows\ShutdownTime 2) 사용자는 누구인가? SAM 파일 분석 SAM 오른쪽 마우스 > OPEN WITH ... > REGISTRY VIEW sam > account > users > => 000001F4(administrator)/000001F5(guest)/000003E8(manager) => administrator / guest / manager 찾음 3) 무슨 사이트에 접속했나? 4) 무슨 파일을 받았나? users > manager > downloads > jyb.exe 찾기 가져오자마자 방화벽이 지움 !! 5) 파일을 실행했나?
*forensic.py*기본 구조
import regipy class Forensic: pass def main(): sam_path = r'C:\Users\PC1\Desktop\export\SAM' print("start program") # SAM 파일을 Hive 객체로 로드 hive = regipy.RegistryHive(sam_path) #hive = regipy.Hive(sam_path) print(hive,dir(hive)) if __name__=="__main__": main()
레지스트리 구조 파악하기
import regipy class Forensic: pass def main(): sam_path = r'C:\Users\PC13\Desktop\export\SAM' print("start program") hive = regipy.RegistryHive(sam_path) root_key = hive.get_key('SAM') domains_key = root_key.get_subkey('Domains') account_key = domains_key.get_subkey('Account') users_key = account_key.get_subkey('Users') names_key = users_key.get_subkey('Names') print(users_key,dir(users_key)) for user in names_key.iter_subkeys(): print(user.name) if __name__=="__main__": main()
반복문 이해하기
import regipy import binascii def extract_ntlm_hash(key): """ 특정 레지스트리 키에서 NTLM 해시를 추출합니다. """ try: # 'user' 키에서 NTLM 해시 정보 추출 (주로 'F' 값에 있음) values = key.iter_values() for value in values: if 'F' in value.name: # F 값이 패스워드 해시를 포함하는 경우 print(f"NTLM Hash Found: {binascii.hexlify(value.value).decode()}") return binascii.hexlify(value.value).decode() # 해시 값을 리턴 except Exception as e: print(f"Error extracting NTLM hash: {e}") return None def explore_user_info(hive, path): try: # 해당 경로가 존재하는지 확인 key = hive.get_key(path) print(f"Found key at: {path}") # 서브키가 있을 경우, 서브키 탐색 (사용자 계정 정보는 이곳에 있을 가능성이 있음) subkeys = key.iter_subkeys() if subkeys: for subkey in subkeys: print(f"User SID: {subkey.name}") # SID를 사용자 계정 식별자로 표시 user_subkey_path = f"{path}\\{subkey.name}" # 각 SID에 해당하는 사용자 정보 출력 explore_user_info(hive, user_subkey_path) else: print("No subkeys found for user info.") # 값을 확인하여 사용자 정보 출력 (값이 존재하면 사용자 관련 정보일 가능성 있음) values = key.iter_values() if values: for value in values: print(f"Value Name: {value.name}") if hasattr(value, 'value'): print(f"Value Data: {value.value}") # 값 데이터 출력 else: print("No value attribute found for this value.") if hasattr(value, 'value_type'): print(f"Value Type: {value.value_type}") else: print("No value_type attribute found for this value.") # 비밀번호 해시 추출 if 'F' in value.name: # 'F' 필드에서 해시가 추출될 수 있음 print(f"NTLM Hash Found: {binascii.hexlify(value.value).decode()}") else: print("No values found for user info.") except Exception as e: print(f"Error exploring {path}: {e}") def main(): sam_path = r'C:\Users\PC11\Desktop\export\SAM' print("start program") # SAM 파일을 Hive 객체로 로드 hive = regipy.RegistryHive(sam_path) print("Exploring user information in SAM file...") # 'SAM\Domains\Account\Users' 경로에서 사용자 정보 탐색 explore_user_info(hive, r'HKEY_LOCAL_MACHINE\SAM\Domains\Account\Users') if __name__ == "__main__": main()
1.지금 실행중인 윈도우 레지스트리 system 파일 분석 import winreg from datetime import datetime, timedelta def filetime_to_datetime(filetime): """Windows FILETIME (100ns 단위) 값을 datetime 형식으로 변환""" windows_epoch = datetime(1601, 1, 1) return windows_epoch + timedelta(microseconds=filetime // 10) def get_last_boot_time(): try: # 레지스트리 경로 reg_path = r"SYSTEM\ControlSet001\Control\Windows" reg_key = "ShutdownTime" # 관리자 권한으로 레지스트리 읽기 with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, reg_path, 0, winreg.KEY_READ) as key: last_boot_time, reg_type = winreg.QueryValueEx(key, reg_key) # 바이트 데이터를 정수로 변환 (리틀 엔디안) last_boot_time_int = int.from_bytes(last_boot_time, byteorder='little') # FILETIME 값을 실제 날짜로 변환 boot_time = filetime_to_datetime(last_boot_time_int) print(f" 마지막 부팅 시간: {boot_time}") except PermissionError: print(" 오류: 관리자 권한으로 실행해야 합니다.") except Exception as e: print(f" 오류 발생: {e}") # 실행 get_last_boot_time() => 결과값:마지막 부팅 시간: 2025-01-15 12:00:20.797606 2. 경로 변경..
스위치 버튼 2로 변경 후 http://125.246.95.253으로 접속 칼리 활성화 후 서버에 각 조 별로 악성코드 만들어서 올리기 4조: 4.exe ***TIP kali apache2 000-default 파일 설정한 뒤에 a2enmod userdir 해야함!!