버퍼 오버플로우 방지기법들
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 |