Security/뭐했니2017. 2. 22. 02:42

버퍼 오버플로우 방지기법들


stack canary : 


GCC에서 SSP(stack-smashing protector) 기능에서 사용된다.

스택 return 주소 앞에 랜덤한 정수(canary)를 기록해 둬서, 그 수가 변경되었음을 체크하는 방식이다.

GCC SSP 기능에서는 canary는 난수+문자열 종결값("\n","\0", -1 같은 값들) 의 형태로 되어 있어서

문자열 덮어쓰기는 불가능함. 카나리값은 각 task_struct에 별도로 저장된다(task마다 다른 값)



메모리디버거 : 메모리 할당/해재 등을 감시. GC에서 필요로 함


실행 가능 공간 보호 : 특정 메모리 공간에서의 실행을 불가능하게 함. NX비트라는 기술 이용

CPU기술


UAF 취약점 : malloc()이 어떻게 돌아가는지

완전 기본적인 코드만 작성하고 끝남


Return to libc 공격 : ret을 libc에 있는 함수(시스템콜?)주소로 바꿔서 권한 따기


배열 초기화(?) 


어떤분이 열심히 작성해둔 글을 읽음. 컴파일러 공부의 필요성을 느낌(...)


함수 프롤로그, 에필로그


프롤로그 : 스택 프레임 포인터생성(호출한 함수의 프레임포인터 저장), 공간창출,

 사용할 범용 레지스터 백업(실행상태 보존)

에필로그 : 위에꺼 거꾸로...

레지스터 실행상태 복구, 스택복구, 프레임포인터 복구.


함수의 프롤로그 단계를 건너뛸 때, 함수 주소에 얼마를 더해주면(+3?) 됨. BOF나 다른 공격기법에

사용되지 않을까


64bit 체제에서는 __fastcall 이 아니여도 파라미터를 레지스터로 전달한다고 한다

옛날 자료들만 봐와서 64bit는 잘 모름. 역시 공부를..



PLT와 GOT : 리눅스에서는 동적 라이브러리 방식을 사용할땐 이렇게 함.

윈도우 PE의 IAT랑 비슷한 역할을 하는거같음. 자세한건 나중에 더..




vm 키기 너무 귀찮음..

맥이 있었으면..

살껄

'Security > 뭐했니' 카테고리의 다른 글

toc-tou (time of check to time of use) - 1  (0) 2017.05.30
20170305  (0) 2017.03.05
20170302..3  (0) 2017.03.03
20170301..2  (0) 2017.03.02
ㅁㅇㅇ 170223  (0) 2017.02.23
Posted by Palette14