분류 전체보기 78

[디지털 포렌식] NTFS의 MFT(마스트 파일 테이블)란?

$MFT 파일?MFT(Master File Table)는 NTFS 파일 시스템의 핵심 구성 요소로, 파일 메타데이터를 추적하는 데 사용된다.$MFT 파일에는 MFT 자체를 포함한 모든 파일의 레코드가 포함되어 있다.  마치 회사의 인사 데이터베이스와 같은 역할을 하는데, 각 직원(파일)에 대한 이름, 부서, 입사일, 성과 기록 등의 중요 정보를 모두 한곳에 체계적으로 저장하고, 필요할 때 빠르게 검색할 수 있게 해주는 것고 비슷함.구조 및 공간 관리MFT는 각 파일 레코드에 일반적으로 1024바이트를 할당한다디렉토리도 MFT 내에 레코드를 가지며, 데이터 대신 인덱스 정보를 포함한다NTFS는 MFT 조각화 방지를 위해 'MFT 영역'이라는 공간을 예약한다MFT 영역은 다른 모든 볼륨 공간이 할당된 후에만..

[디지털 포렌식] NTFS 파일 시스템의 구조와 특징

NTFS 파일 시스템이 뭐양NTFS(New Technology File System)는 1993년 Microsoft가 개발한 파일 시스템으로 Windows의 표준이 되었다. 주로 어디에 사용됨?내부 및 외부 하드 드라이브Windows 컴퓨터서버 및 NAS 장치고성능 워크스테이션가상 머신구성 요소파티션 부트 섹터(PBS):$Boot 레코드에 저장운영 체제 부팅 정보와 파일 시스템 레이아웃 포함데이터 영역:실제 파일과 디렉토리 저장$Bitmap 파일이 클러스터 할당 상태 추적마스터 파일 테이블(MFT):$MFT 파일에 저장된 중앙 데이터베이스모든 파일과 디렉토리의 정보 관리$MFTMirr가 MFT 첫 부분 백업중요 파일과 기능$AttrDef: 파일 속성 유형 정의$Secure: 보안 설명자와 액세스 제어 목..

[디지털 포렌식] FAT 파일 시스템의 구조와 특징

FAT 파일 시스템이 뭐양FAT 파일 시스템은 디지털 장치가 정보를 저장하고 관리하는 방식을 결정하는 중요한 기술이다.요즘 컴퓨터의 주 저장장치에서는 역할이 많이 줄어들었지만, 여전히 일상에서 사용하는 많은 디지털 기기에서 중요한 위치를 차지하고 있음. FAT는 'File Allocation Table'의 약자로, 말 그대로 파일이 저장 매체의 어디에 위치하는지를 알려주는 '표'라고 생각하면 된다. 시간이 흐르며 FAT12, FAT16, FAT32, 그리고 가장 최신 버전인 exFAT까지 여러 버전으로 발전해왔다. 각 버전은 이전 버전의 한계를 개선하며 더 큰 저장 공간과 파일을 지원하도록 설계되었다.  주로 어디에 사용됨?USB 메모리, 디지털 카메라의 SD 카드, 휴대용 미디어 플레이어, 심지어 가정..

[Dreamhack] Return Address Overwrite

Return address overwrite 스택 프레임의 반환 주소를 조작함으로써 프로세스의 실행 흐름을 바꾸는 공격 기법이다. 소스코드// Name: rao.c#include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0);}void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL);}int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf); return 0;}포맷스트링인 scanf("%s", buf) 부분을 보면 "%s"..

[Linux] Coredump 파일 없을 때 해결 방법/ Segmentation fault (core dumped)

버퍼 오버플로우를 발생 시킨 후 Segmentation fault (core dumped) 가 출력됐는데, 코어파일이 생성되어 있지 않음.그래서 해결한 방법을 정리해봄. 1. Ulimit 확인ulimit -c 0 상태라면 코어 덤프가 생성되지 않음.#현재 설정 확인ulimit -c#0이면 무제한을 변경ulimit -c unlimited 2. 코어 덤프 저장 위치 확인저장 경로가 다르면 core파일 찾을 수 없음.#현재 디렉토리에 저장될 수도 있으므로 확인.ls -l core.*#저장 경로를 /var/core/core.%e로 지정.sudo sysctl -w kernel.core_pattern=/var/core/core.%e 3. fs.suid_dumpable 확인Core Dump(코어 덤프) 허용 여부를 ..

메모리를 지키는 방법: C/C++ 포맷 스트링 취약점과 버퍼 오버플로우

포맷 스트링프로그래밍에서 텍스트의 형식을 지정하는 데 사용되는 문자열이다.포맷 스트링은 일반 텍스트와 특수 형식 지정자(format specifiers)로 구성됨.형식 지정자는 '%'로 시작하고 출력할 데이터의 유형과 형식을 지정한다. 그 중에도 버퍼 오버플로우 공격에 취약한 주요 포맷스트링은 이렇다.위험 함수들strcpy(dest, src):대상 버퍼(dest)의 크기를 확인하지 않고 소스 문자열(src)을 복사.src가 dest보다 크면 오버플로우가 발생.strcat(dest, src):대상 문자열(dest)의 끝에 src를 추가하지만 결과 문자열이 버퍼 크기를 초과하는지 확인하지 않음.sprintf(buffer, format, ...):형식화된 문자열을 버퍼에 기록하지만 버퍼 크기를 검사하지 않음...

[시스템 해킹] Memory Corruption / Stack Buffer Overflow

Memory Corruption?프로그램이 메모리를 부적절하게 접근하거나 수정하여 발생하는 문제임.프로그램이 의도하지 않은 방식으로 메모리 변경, 메모리 접근, 이미 해제된 메모리를 사용 할 때 발생한다. 종류?버퍼 오버플로우힙 오버플로우포맷 스트링 취약점정수 오버플로우등등.. 이 중에서 버퍼 오버플로우를 알아볼거임.Stack Buffer Overflow할당된 버퍼의 크기를 넘은 데이터가 입력되어 다른 값들에 대해 영향을  줌.스택 버퍼 오버플로우를 통해 데이터 변조, 데이터 유출, 실행 흐름 조작 등이 가능해질 수 있음. * 버퍼(buffer)가 뭐야데이터가 한 위치에서 다른 위치로 이동하는 동안 임시로 저장되는 메모리 공간.물리적인 완충 지대와 같은 역할을 한다.버퍼 오버플로우 공격 예시▼ 데이터 변..

[시스템 해킹] 함수 호출 규약/ x86, x86-64

함수 호출 규약함수의 호출 및 반환에 대한 약속.함수를 호출할 때는 반환된 이후를 위해 호출자(Caller)의 상태(Stack frame) 및 반환 주소(Return Address)를 저장해야함.또한, 호출자는 피호출자(Callee)가 요구하는 인자를 전달해줘야하고, 피호출자의 실행이 종료될 때 반환 값을 전달 받아야한다. 함수 호출 규약 종류컴파일러는 지원하는 호출 규약 중, CPU아키텍처에 적합한 것을 선택한다.하지만 CPU의 아키텍처가 같아도, 컴파일러가 다르면 적용하는 호출 규약이 다를 수 있다. ex) C언어를 컴파일 하는 경우에 윈도우에서는 MSVC를, 리눅스에서는 gcc를 사용.여기서 MSVC는 MSx64호출 규약을 적용하고, gcc는 SYSTEM V호출 규약을 적용한다.  리눅스 gcc에서..

[Dreamhack] shell_basic

Description입력한 셸코드를 실행하는 프로그램이 서비스로 등록되어 작동하고 있습니다.main 함수가 아닌 다른 함수들은 execve, execveat 시스템 콜을 사용하지 못하도록 하며, 풀이와 관련이 없는 함수입니다.flag 파일의 위치와 이름은 /home/shell_basic/flag_name_is_loooooong입니다.감 잡기 어려우신 분들은 아래 코드를 가지고 먼저 연습해보세요!플래그 형식은 DH{...} 입니다. DH{와 }도 모두 포함하여 인증해야 합니다.  어셈블리어로 먼저 shellcode 파일을 생성해줌.nano write.asm //write.asm 파일 생성  먼저 문제를 보면 flag위치는 '/home/shell_basic/flag_name_is_loooooong'라고 함...

[시스템 해킹] 셸코드(Shellcode) 3- execve 셸코드/ execve shellcode와 orw shellcode 차이점

execve 셸코드? 임의의 프로그램을 실행하는 셸코드이다.execve를 이용하면 서버의 셸을 획득할 수 있음.특징으론 execve 시스템 콜만으로 구성이 됨. syscall rax arg0 (rdi) arg1 (rsi) arg2 (rdx) execve0x3bconst char *filenameconst char *const *argvconst char *const *envp*argv: 실행파일에 넘겨줄 인자, envp: 환경변수우리는 sh만 실행하면 되기 때문에 execve("/bin/sh", null, null)을 실행하는 것을 목표로 셸코드를 작성해볼거임. # execve.c 파일 생성nano execve.c# execve.c 파일 컴파일gcc -o execve execve.c -masm=i..