본문 바로가기

메모장

카나리 ( canary ) 생성방식

일반적으로 네트워크 데몬들은 clone 또는 fork를 통해 새로운 접속에 대해 스레드를 생성

fork의 경우 child process가 execve를 호출 하느냐 안하느냐 2가지 경우로 구분

 

Using fork :

 

    fork 시스템 호출은 프로세스를 복제 =

    카나리가 함수 단위로 생성되는 것이 아니라 프로세스 단위로 생성되기 때문에 부모와 자식이 동일한 카나리를 공유

    몇번의 시도로 카나리를 추측할 수 있다는 의미 ( 요청할 때마다 동일한 카나리를 가지기 때문 )

    카나리는 총 4바이트이고 terminator 카나리라면 하위 바이트는 0x00으로 고정, 나머지 3바이트를 추측하는 것이기       때문에 최대 255 * 3의 시도로 카나리를 찾을 수 있다( by Ben Hawkes ).

 

Using execve :

 

    execve가 호출되면 자식 프로세스는 부모 프로세스의 text, data, bss, stack을 덮어쓴다

    생성된 자식 프로스들이 자신만의 카나리를 가진다는 것을 암시,  

    fork와 같이 추측하여 카나리를 찾는 방식은 통하지 않는다.

 

 

카나리에 생성방식이 있다는 걸 처음 알았다 나중에 참고가 될 수도 있을 것 같아 스크랩해두었다.

'메모장' 카테고리의 다른 글

특정 함수의 주소, offset 찾는 방법  (0) 2020.01.13
프로세스와 스레드_정리  (0) 2019.12.13
안티 익스플로잇 기술  (0) 2019.10.23
gdb 내에서의 명령어 메모  (0) 2019.09.16
objdump 명령어 메모  (0) 2019.09.16