내 컴퓨터에서 버퍼 오버 플로우 방지를 비활성화하는 방법이 있습니까?


11

데비안 6, 우분투 12.04, 페도라 16 등 다양한 가상 머신에서 버퍼 오버플로를 실험하고 싶지만 버퍼 오버플로 악용을 실행할 때마다 다음 메시지가 표시됩니다.

stack smashing detected (core dumped)

연구를 마친 후에 컴파일러에서 구현 된 버퍼 오버플로 방지 라는 기능을 읽었습니다 . GCC 인스턴스가 사용 GCC 스택 스매싱 보호기 (ProPolice)는 , 연타 / LLVM가 사용 두 버퍼 오버 플로우 검출기, 및 AddressSanitizer을 SafeCode .

내 질문은 : 실제로 내 컴퓨터에서 버퍼 오버플로 공격을 확인하고 싶기 때문에 버퍼 오버플로 방지를 비활성화하는 방법 (컴파일러 플래그, 아마도? 리눅스 구성 파일?)이 있습니까?

답변:


16

GCC

gcc ( man gcc)에서 확인은 다음을 통해 활성화됩니다.

  -fstack-protector
      Emit extra code to check for buffer overflows, such as stack smashing attacks.  >This is done by adding a guard variable to functions with
      vulnerable objects.  This includes functions that call alloca, and functions with >buffers larger than 8 bytes.  The guards are initialized when
      a function is entered and then checked when the function exits.  If a guard check >fails, an error message is printed and the program exits.

  -fstack-protector-all
      Like -fstack-protector except that all functions are protected.

no-옵션 이름 앞에 두어 모두 비활성화 할 수 있습니다

-fno-stack-protector -fno-stack-protector-all

LLVM / 클랑

AdressSanitizer를 활성화 / 비활성화하려면 LLVM / Clang ( http://clang.llvm.org/docs/UsersManual.html#commandline )에서 :

-f [no-] address-sanitizer : 메모리 오류 감지기 인 AddressSanitizer를 켭니다.

및 SAFECode ( http://safecode.cs.illinois.edu/docs/UsersGuide.html )

-f [no-] memsafety


2
프로그램이 SSP로 컴파일되었는지 여부를 감지하는 간단한 방법이 있습니까?
Michuelnik

2
@Michuelnik 당신은 바이너리에 어떤 참조가 포함되어 있는지 확인할 수있다 __stack_chk_fail(예 :strings /bin/mybinary | grep __stack_chk_fail
Matteo

6
난 그냥 GCC 4.7과 4.1을 테스트 : 옵션이 -fno-stack-protector-all인식되지 않습니다 ( -fstack-protector, -fstack-protector-all-fno-stack-protector인식)
마르신

gcc: error: unrecognized command line option ‘-fno-stack-protector-all’; did you mean ‘-fstack-protector-all’?
Clément
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.