20160901

시스템 보안 개론
메모리 취약점은 크게 두 가지로 분류할 수 있음.
(1) Spatial vulnerability
– stack buffer overflow: stack에 있는 buffer를 오버플로우시키는 것.
– heap buffer overflow
– stack overflow: stack으로 사용할 수 있는 메모리 공간 자체를 오버플로우시키는 것. Guard page를 두어 방어할 수 있다.
(2) Temporal vulnerability
– use-after-free: free한 이후에 사용하는 것. free한 블록에 공격자가 데이터를 쓰면, 그 데이터를 사용해 프로그램이 실행되므로 문제가 됨.
– uninitialized access

왜 stack frame을 사용하는가? stack을 사용하지 않는다면 함수 호출 이후에 돌아갈 지점을 compiler가 알아야 한다 (jmp location1과 같은 방식으로 리턴). 함수가 호출되는 지점에 따라 돌아갈 지점이 달라진다. 리턴하는 위치가 달라지기 때문이다. 레지스터에 있는 값을 사용해 리턴할 수도 있을 것. 이렇게 하면 recursive한 호출을 해결할 수 없다. stack을 사용하면 이 문제를 해결할 수 있다. Recursive call이 없다면 레지스터에 반환 지점을 넣고 리턴해도 됨. 해당 레지스터는 함수 호출 시점부터 반환 시점까지 사용되지 않아야 함. 이러한 호출 규약을 깨는 것이 ROP 공격이다. Code hardening 위해 stack을 사용하지 않고 register만 사용하도록 호출 규약을 강제할 수 있다.

BOF exploit techniques
* partial-bp overwrite
* GOT overwriting
* SEH overwriting
* Heap overflow

BOF 공격 확인 기법으로 canary 기법을 적용할 수 있음. Canary를 넣도록 컴파일러가 프로그램을 컴파일하고, 커널이 canary를 넣고 확인한다.

Advertisements
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

누적 방문자 수
  • 93,200 hits
%d bloggers like this: