20160927

1. 시스템 보안 개론
* Code Reuse Attack
– DEP는 공격자가 삽입한 코드의 실행을 방지하므로, code reuse 방식으로 공격하면 된다.
– JIT CRA는 실행 시점에서 gadget의 위치를 파악한다.
– Stack pointer가 올바른 위치에 있는지 확인하는 방식도 있음.
– Return하는 시점에 올바른 주소로 돌아가는지 확인하는 방식도 있음.

* ROPGuard
– 2012년에 Microsoft BlueHat에서 수상함.
– 실제 Microsoft EMET에 구현됨.
– 중요 위치에 스택이 정상인지 확인하겠다는 것.
– Compile 시점에 명령어를 삽입하거나, 동적으로 바이너리를 수정한다.
– 보호하고자 하는 6가지: stack pointer가 올바른 주소 범위 안에 있는지, address of critical function이 수상하게 많이 쓰이는지, return address가 가능한 return address set 이내에 있는지(해당 함수를 호출하는 모든 주소), call stack, stack frame, function-specific.
– CET는 돌아와야 하는 주소를 정확히 지정해준다는 점에서 ROPGuard와 다르다(fine-grained vs coarse-grained).
– ret하는 시점에 코드 검증할 수 있을 것. ret 명령어의 의미를 바꾸는 것과 같음. dynamic binary instrumentation을 수행한다.

* fat pointer: 원래 pointer는 주소만 저장하는데, fat pointer는 할당된 메모리 영역에 대한 정보까지 담고 있다.

* kBouncer
– LBR은 최근에 실행된 branch에 대한 정보를 담고 있다(16개)
– 원래는 디버깅을 위해 사용하던 것.
– kBouncer에서는 LBR을 사용해 ROP를 막는 방법.
– 중요 함수 호출 이전에 LBR을 검토하여 정상적인 모습인지 아닌지 확인한다.
– illegal return이 존재하는지 아닌지 확인해야 한다.
– 하지만 여전히 소프트웨어가 LBR을 읽어야 하므로, 중요 함수가 호출되는 시점에서만 이를 확인한다.
– compiler-level 방어 기법은 소스 코드가 있어야 한다는 한계가 있고, 이 때문에 실제 적용이 어렵다는 문제점이 있다. Binary rewrite는 실행 바이너리를 수정하는 것. 5-byte 정도의 여유 공간이 있으면 이를 사용해 원하는 코드로 뛰도록 하는 것. Compiler-level보다 적용이 쉽다. Dynamic instrumentation은 명령어의 해석을 바꾸도록 하는 것. 하지만 오버헤드가 크다는 것이 문제. LBR 모니터링은 적은 오버헤드로 쉽게 적용할 수 있다.
– illegal return이 있는지, short return gadget이 연속되어 있는지 확인한다.


2. Scala 튜토리얼
https://www.tutorialspoint.com/scala/index.htm

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

누적 방문자 수
  • 103,570 hits
%d bloggers like this: