20160922

1. Rocket Chip에 대한 이해
이전https://github.com/ucb-bar/fpga-zynq 레포지토리에서 코드를 받아 rocket chip을 ZedBoard에 올렸었는데, 이해하지 못한 것이 많았다. 파일 시스템에 벤치마크를 추가하려면 어떻게 해야 하는지, rocket chip에서 커널을 실행하려면 어떻게 해야하는지 궁금했다. ZedBoard에서 rocket chip은 기본적을 host-target 구조로 동작한다. PS 영역의 ARM 코어는 host가 되고, PL 영역의 rocket 코어는 target이 되어 실행된다. ZedBoard를 부팅하면 rocket 코어가 아닌, ARM 코어를 사용해 부팅하게 된다. Rocket 코어에서 프로그램을 실행하려면 ARM 코어에서 fesvr-zynq라는 프록시 프로그램을 사용해야 한다. 만약에 rocket chip에서 리눅스 부팅을 하고싶다면, fesvr-zynq를 사용해 리눅스 이미지를 부팅해야 한다. 이러한 이유로 SD card에서도 리눅스 이미지와 루트 파일 시스템이 두 개씩 존재한다. uImage는 ARM 코어에 사용하는 linux kernel 이미지, uramdisk는 ARM 코어에서 사용하는 linux 루트 파일 시스템이다. ./riscv 디렉토리 아래에 있는 두 개의 파일이 rocket chip에서 사용하는 파일이다. root.bin은 rocket chip의 루트 파일 시스템, vmlinux는 rocket chip의 linux kernel이다. 이 점에 유의해 fpga-zynq 튜토리얼을 읽어본다면 훨씬 이해가 쉽게 될 것이다.


2. 시스템 보안 개론
* HW 3 소개
– pwnable.kr의 syscall 문제를 풀어야 함.
– QEMU에서 운영체제를 제공. 루트 권한은 없음.
– 취약한 시스템 콜을 분석해서 버그를 찾아야 한다.
– sys_upper는 문자열을 in으로 받아, out으로 대문자로 변환해 출력해준다.
sys_upper.PNG
– 포인터가 user memory인지 아닌지를 검증하지 않는 것이 문제이다. copy_from_user, copy_to_user와 같은 것을 사용해야 함.
– system call table을 덮어쓸 것이고, 이 때에는 드물게 쓰이는 system call을 덮어써야 한다.
– Kernel exploit에서는 쉘을 실행하는 것이 아니라, 현재 프로세스의 uid를 0으로 바꾼다. uid의 주소를 정확히 알고 바꿀 수도 있지만, 이는 어렵다. uid 변경 API를 호출해서 uid를 바꾸면 된다.
– commit_creds(prepare_kernel_creds(0)): init 프로세스의 credential을 내 프로세스로 복사해오는 작업.

Advertisements
Tagged with: , , , , , , , , , , ,
Posted in 1) Memo

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

누적 방문자 수
  • 98,563 hits
%d bloggers like this: