2009-11-18 2 views
1

아시다시피 /GS은 Visual C++ 컴파일러 또는 링커 옵션입니다.[C#] C# 응용 프로그램에/GS 옵션 지정 방법?

  1. 내가 C# 컴파일러 또는 링커에서/GS를 지정할 수 있습니까?

  2. 이 플래그는 C# 응용 프로그램에서 기본적으로 활성화되어 있습니까?

    [편집] : 질문 내용을 변경하십시오.

    2a. 이러한 기능은 Visual C++ 에서처럼 이러한 컴파일러 옵션을 통해 사용 가능합니까? 기본적으로 C# 응용 프로그램에 있습니까?

  3. 이러한 플래그가있는 .exe/.dll 파일을 빌드하는 방법이 있습니까?

미리 감사드립니다.

답변

2

security/SDL best practices을 준수하도록 코드 분석/정적 분석 도구를 실행하려고하는 것으로 추측하고 있습니다. 계속 읽고있는 경우 ...

네이티브/C++ 바이너리가/GS,/SafeSEH,/NXCOMPAT 및/DYNAMICBASE로 컴파일되었는지 확인하는 데 사용할 수있는 Binscope이라는 도구가 있습니다. 이것들은 공격자가 버퍼 오버런을 악용하는 것을 더 어렵게 만드는 C++ 고유의 옵션입니다. (Binscope는 몇 가지 다른 것들도 검사합니다)

Binscope가 C#/managed 바이너리에서 확인하는 유일한 방법은 강력한 이름을 사용하는 것입니다. C# 용 binscope에 가장 가까운 것은 FxCop입니다. 관리되는 .Net 코드에서 잠재적 인 문제를 자세히 설명합니다. 보안을 위해 FxCop이 생산하는 보안 경고를 수정하십시오.

/analyze 플래그는 Visual Studio에서 네이티브 코드의 정적 분석을 수행하고 의심되는 항목이 있는지를 알려줍니다. C# /. Net 등가물은 FxCop의 보안 부분입니다.

+0

도움 주셔서 감사합니다. BinScope이 정말 도움이되었습니다. – whunmr

4

C#은 관리되는 코드를 생성하고 C++은 네이티브 코드 (기계어 코드)를 생성하므로 C#에는 이러한 옵션이 없습니다. 관리 코드는 C/C++보다 훨씬 엄격한 검사를 수행하고 C++ 및 원시 코드가 수행 할 수없는 방식으로 유형 안전성을 적용하기 때문에 '검증 가능'이라고합니다. 이러한 검사는 C++/CLI로 작성된 관리 코드와는 관련이 없습니다.

이 대부분은 네이티브 코드가 하드웨어에서 직접 실행되고 관리 코드가 .NET 런타임 (CLR) 내에서 실행되기 때문입니다.

나를 분석/하나

  1. 하여 옵션을 하나 이상 갈 허용 -이 옵션을 모두 익숙하지 해요,하지만 list of what it checks보고, 이러한 오류 중 어느 것도 가능하거나 문제에 없습니다 관리되는 코드. 예를 들어 첫 번째 경고 C6031은 관리 코드가 성공하지 못하면 무시할 수없는 예외를 throw하기 때문에 문제가되지 않습니다.
  2. /GS - 관리 코드 (unsafe 무시)는 메모리에 직접 액세스하지 않으며 버퍼 오버플로가 발생하지 않습니다. 다른 메모리로 넘치지 않고 예외가 발생합니다.
  3. /DynamicBase - 관리 코드는 런타임에 IL (Intermediate Language)이라고하는 바이트를 생성하고 동적으로 원시 코드 (JIT)로 컴파일되므로 임의화할 고정 주소 공간이 없습니다.
  4. /SafeSEH - 관리 코드에 자체 예외 메커니즘이 있으며 SEH를 사용하지 않습니다.
+0

깊은 분석에 감사드립니다. – whunmr