master canary leak & overwrite

리눅스 시스템은 master canary값으로 부터 스레드의 스택을 보호하게 된다.

이 master canary값은 스레드가 생길때 해당 스레드에서 복사해 가서 TLS상에 복사된다. 즉, 스레드 상에서도 같은 값으로 보호를 하게 된다.

그렇다면 우리는 어떤 방식으로 공격을 할 수 있을까?

  1. 스레드에서 $rbp - 0x8에 위치한 canary leak 하기
  2. 스레드에서 BOF를 통해 master canary Leak 하기 ( TLS와 스택이 같은 영역에 있어서 가능 )
  3. 스레드에서 master canary를 overwrite 해서 canary_check 함수를 bypass 하기

다음과 같은 방법들이 있다.

1,2 번을 한뒤에 메인 스레드에 존재하는 bof를 통해 RA overwrite를 할 수도 있고

3번을 통해 아예 스레드에서 존재하는 RA를 Overwrite 할 수도 있다.