본문 바로가기

project

5. RTL공격 더보기
4. 쉘코드를 이용한 간단한 BOF공격 랜덤스택을 해제 하고, LANG환경변수 설정을 해 주었다. argv2를 이용한 많은 NOP sled를 통해서 공격하였다. 주의할 점은, shellcode가 35바이트 이기 때문에 RISC구조라서, 명령어가 깨지니, NULL을 넣을 수 있는 취약점이라면 NULL을 넣어주고, 아니라면, "/bin//sh"도 유효함을 이용해서 36바이트로 4의 배수를 맞춰준다. 더보기
3. 쉘코드 제작 간단한 프로그램을 통한 system call을 어떤식으로 하는지 보았다. gdb로 open해서 mkdir함수를 따라서 들어가 보면, 시스템 콜 번호를 가지고 있는 헤더는 /usr/include/mipsel-linux-gnu/asm/unistd.h 에 있다. 특이한 점은 기준점이 4000이고 그걸 기준으로 시스템 콜 번호가 매겨진다. 그럼 v0에는 시스템 콜 번호를 넣으면 되고, a0에는 "sanguine"문자열 주소가 들어 가 있다. 그럼 이제 execve를 하는 쉘코드를 만들어 보자. execve의 시스콜 번호는 4011이다. 간단히 코딩해서 execve가 불릴당시 레지스터를 확인해보면 MIPS system call table을 쉽게 확인할 수 있다. 이처럼 3가지 인자는 a0, a1, a2를 통해서 .. 더보기
2. 프로그램 분석 스터디의 목표가 임베디드에 대한 어플리케이션 레벨에 대한 공격인 만큼, 원래 간단한 바이너리 부터 흐름을 천천히 분석 해 보면서, 변수선언 / 값 대입 / 함수호출 / 다양한 데이터형 에 관한 주제로 분석을 해 볼려고 했지만, 진도를 좀더 빠르게 빼기 위해서 실제 bof취약점이 있는 코드를 컴파일 해서 분석 해 보기로 하였다. 예제코드는 다음과 같다. /**************************** leaveret embedded study disable NX Make shellcode and attack!*****************************/#include #include int main(int argc,char *argv[]){char buf[100];strcpy(buf,argv.. 더보기
1. 환경구성 qmeu로 ubuntu에 에뮬레이팅을 통해서 시스템 구축을 했다.일단https://people.debian.org/~aurel32/qemu/ 에서 image와 해당 커널을 받을 수 있다. 나는 MIPSEL wheezy계열 이미지를 받고 32비트용 커널을 받았다.해당 사이트에 아래쪽에 설정하는 법이 잘 설명 되어 있으니 쉽게 설정 할 수 있다.그 다음에 할 있은 MIPS용 qemu를 받는것인데, apt-get install qemu-system-mips을 입력하면 시스템에 mips용 qemu가 설치된다. 그다음 매번 이미지와 커널을 인자로 주고 qemu를 설정 시키면 귀찮으니, 스크립트를 통해 실행시킬 수 있도록 만들어 준다. root@ubuntu:~/MIPS# cat > MIPSEL-qemu #!/bin.. 더보기
[pin] 기본 구조 pin tool은 dynamic binary instrumentation (줄여서 DBI) 라는 기술을 사용하기 위한 intel에서 개발한 툴로서 대표적인 DBI Tool은 Pin Tool뿐만 아니라 DynamoRIO와 리눅스 기반의 Valgrind 가 있다. DBI는 run time시에 코드삽입이 가능하게 만들어 주는 기술을 말하며, 이를 통해 얻을 수 있는 장점은 Recomplie과 Relink가 필요없기 때문에 작업의 효율성이 높고, 실행중에 발생하는 특정 동작이나 코드를 처리할 수 있는 장점이 있다. pin은 그중에서도 다양한 기능을 지원하고, ARM과 x86에서도 사용가능하고, 리눅스와 윈도우에서도 사용이 가능하기 때문에 그중 가장 사랑받는 툴이라 할 수 있겟다. 나는 이번 프로젝트에서 pin을.. 더보기
[p.261] IA-32e 모드 4단계 페이징시 페이지 디렉토리 생성 코드 분석 64비트 페이지 디렉터리를 생성해야 하는데, 보호모드에서는 단일 레지스터로는 최대 32비트 값까지만 표현할 수 있기 때문에, 페이지 디렉터리가 맵핑하는 주소를 계산할 때, 상위 8바이트와 하위 8바이트를 나누어서 구조체로 주소를 표현하는 방법을 사용한다. [예제코드 - 64GB까지 매핑하는 페이지 디렉터리를 생성하는 코드]psdPDEntry = ( PDENTRY * ) 0x102000;dwMappingAddress = 0;for( i = 0 ; i > 20 ) ) >> 12,dwMappingAddress, PAGE_FLAGS_DEFAULT | PAGE_FLAGS_PS.. 더보기