다음을 통해 공유


Microsoft 보안 규칙 코드 분석 규칙 집합

보고되는 잠재적 보안 문제의 수를 최대화하려면 Microsoft 보안 규칙이라는 규칙 집합을 포함해야 합니다.

규칙

설명

CA2116: APTCA 메서드는 APTCA 메서드만 호출해야 합니다.

완전히 신뢰할 수 있는 어셈블리에 APTCA(AllowPartiallyTrustedCallers) 특성이 있고 이 어셈블리가 부분적으로 신뢰할 수 있는 호출자를 허용하지 않는 다른 어셈블리의 코드를 실행하면 보안상 위험할 수 있습니다.

CA2117: APTCA 형식은 APTCA 기본 형식만 확장해야 합니다.

완전히 신뢰할 수 있는 어셈블리에 APTCA(AllowPartiallyTrustedCallers) 특성이 있고 이 어셈블리의 형식이 부분적으로 신뢰할 수 있는 호출자를 허용하지 않는 형식에서 상속되면 보안상 위험할 수 있습니다.

CA2105: 배열 필드는 읽기 전용이면 안 됩니다.

배열이 들어 있는 필드에 read-only(Visual Basic의 경우 ReadOnly) 한정자를 적용하면 필드를 변경하여 다른 배열을 참조할 수 없습니다. 그러나 읽기 전용 필드에 저장된 배열의 요소는 변경할 수 있습니다.

CA2210: 어셈블리에는 올바른 강력한 이름을 사용해야 합니다.

강력한 이름은 클라이언트에서 무단으로 변경된 어셈블리를 모르는 사이에 로드하지 못하도록 보호합니다. 강력한 이름이 없는 어셈블리는 극히 제한된 시나리오 이외에는 배포하면 안 됩니다. 제대로 서명되지 않은 어셈블리를 공유하거나 배포하면 어셈블리가 무단으로 변경되거나, 공용 언어 런타임에서 어셈블리를 로드할 수 없거나, 사용자가 자신의 컴퓨터에서 확인을 사용하지 못하게 될 수 있습니다.

CA2115: 네이티브 리소스를 사용하는 경우에는 GC.KeepAlive를 호출하십시오.

이 규칙에서는 관리되지 않는 리소스가 비관리 코드에서 여전히 사용되고 있는데 종료되려고 할 경우 발생할 수 있는 오류를 감지합니다.

CA2102: 일반 처리기에서 비 CLSCompliant 예외를 catch하십시오.

RuntimeCompatibilityAttribute로 표시되지 않거나 RuntimeCompatibility(WrapNonExceptionThrows = false)로 표시된 어셈블리의 멤버에는 System.Exception을 처리하는 catch 블록이 포함되며 바로 뒤의 일반 catch 블록은 포함되지 않습니다.

CA2104: 변경 가능한 읽기 전용 참조 형식을 선언하지 마십시오.

외부에서 볼 수 있는 형식에 변경 가능한 참조 형식인, 외부에서 볼 수 있는 읽기 전용 필드가 포함되었습니다. 변경 가능한 형식은 해당 인스턴스 데이터를 수정할 수 있는 형식을 말합니다.

CA2122: 링크 요청이 있는 메서드를 간접적으로 노출하지 마십시오.

public 또는 protected 멤버에 링크 요청이 있으며 해당 멤버가 보안 검사를 수행하지 않는 멤버에 의해 호출됩니다. 링크 요청은 직접 실행 호출자의 권한만 검사합니다.

CA2114: 메서드 보안은 형식의 상위 집합이어야 합니다.

메서드에는 같은 동작에 대해 메서드 수준과 형식 수준의 선언적 보안이 모두 있으면 안 됩니다.

CA2123: 재정의 링크 요청은 기본 형식의 링크 요청과 같아야 합니다.

이 규칙에서는 메서드를 다른 형식의 인터페이스이거나 가상 메서드인 기본 메서드에 일치시킨 다음 각각에 대해 링크 요청을 비교합니다. 이 규칙이 위반되면 악의적인 호출자가 보안되지 않은 메서드를 호출함으로써 링크 요청을 우회할 수 있습니다.

CA2111: 포인터는 노출되면 안 됩니다.

포인터가 전용, 내부 또는 읽기 전용이 아닙니다. 악의적인 코드에서는 해당 포인터 값을 변경하여 메모리 내 임의의 위치에 액세스할 수 있게 되거나 응용 프로그램 또는 시스템 오류를 발생시킬 수 있습니다.

CA2108: 값 형식에서 선언적 보안을 검토하십시오.

public 또는 protected 값 형식이 데이터 액세스 또는 링크 요청에 의해 보안됩니다.

CA2107: Deny 및 PermitOnly 사용을 검토하십시오.

PermitOnly 메서드와 CodeAccessPermission.Deny 보안 동작은 .NET Framework 보안에 대해 잘 알고 있는 경우에만 사용해야 합니다. 이러한 보안 동작을 사용하는 코드는 보안 검토를 거쳐야 합니다.

CA2103: 명령적 보안을 검토하십시오.

메서드가 명령적 보안을 사용하고, 요청이 활성 상태인 동안 변경될 수 있는 반환 값 또는 상태 정보를 사용하여 권한을 구성하고 있습니다. 가능하면 선언적 보안을 사용합니다.

CA2100: 보안상 취약한 부분이 있는지 SQL 쿼리를 검토하십시오.

메서드가 메서드에 대한 문자열 인수로부터 만들어진 문자열을 사용하여 System.Data.IDbCommand.CommandText 속성을 설정합니다. 이 규칙에서는 문자열 인수에 사용자 입력이 포함된 것으로 가정합니다. 사용자 입력으로부터 만들어진 SQL 명령 문자열은 SQL 삽입 공격에 취약합니다.

CA2118: SuppressUnmanagedCodeSecurityAttribute 사용을 검토하십시오.

SuppressUnmanagedCodeSecurityAttribute는 COM interop 또는 플랫폼 호출을 사용하는 비관리 코드를 실행하는 멤버에 대해 기본 보안 시스템 동작을 변경합니다. 이 특성은 기본적으로 성능 향상을 위해 사용되지만 성능이 향상되는 대신 중대한 보안 위험이 발생합니다.

CA2109: 표시되는 이벤트 처리기를 검토하십시오.

public 또는 protected 이벤트 처리 메서드를 발견했습니다. 이벤트 처리 메서드는 반드시 필요한 경우를 제외하고 노출하면 안 됩니다.

CA2119: private 인터페이스를 만족하는 메서드를 봉인하십시오.

상속할 수 있는 public 형식에서는 internal(Visual Basic의 경우 Friend) 인터페이스의 재정의 가능한 메서드 구현을 제공합니다. 이 규칙 위반 문제를 해결하려면 어셈블리 외부에서 메서드가 재정의되지 않도록 합니다.

CA2106: 어설션을 안전하게 하십시오.

메서드에서 권한을 어설션하는데 호출자에 대해 보안 검사가 수행되지 않습니다. 보안 검사를 수행하지 않고 보안 권한을 어설션하면 코드에 보안상 취약한 부분이 남아 있을 수 있습니다.

CA2120: serialization 생성자를 안전하게 하십시오.

이 형식에는 System.Runtime.Serialization.SerializationInfo 개체와 System.Runtime.Serialization.StreamingContext 개체(serialization 생성자 시그니처)를 사용하는 생성자가 있습니다. 이 생성자는 보안 검사를 통해 보안되지 않지만 형식에 있는 하나 이상의 정규 생성자가 보안됩니다.

CA2112: 보안 형식은 필드를 노출하면 안 됩니다.

public 또는 protected 형식이 public 필드를 포함하고 링크 요청에 의해 보안됩니다. 코드에 링크 요청으로 보안된 형식의 인스턴스에 대한 액세스 권한이 있으면 코드에서 링크 요청을 만족하지 않아도 해당 형식의 필드에 액세스할 수 있습니다.

CA2136: 멤버는 충돌하는 투명도 주석을 가져서는 안 됩니다.

100% 투명 어셈블리에서는 중요 코드가 나타날 수 없습니다. 이 규칙은 형식, 필드 및 메서드 수준에서 100% 투명 어셈블리의 SecurityCritical 주석을 분석합니다.

CA2147: 투명 메서드는 보안 어설션을 사용할 수 없습니다.

이 규칙은 100% 투명 어셈블리나 투명/중요 혼합 어셈블리의 모든 메서드와 형식을 분석하고 선언적이거나 명령적인 어설션 사용에 플래그를 지정합니다.

CA2140: 투명 코드는 보안에 중요한 항목을 참조해서는 안 됩니다.

SecurityTransparentAttribute로 표시된 메서드가 SecurityCritical로 표시된 public이 아닌 멤버를 호출합니다. 이 규칙은 투명/중요 혼합 어셈블리의 모든 메서드와 형식을 분석하고 투명 코드에서 SecurityTreatAsSafe로 표시되지 않은 public이 아닌 중요 코드를 대상으로 하는 모든 호출을 플래그합니다.

CA2121: static 생성자는 private이어야 합니다.

시스템에서는 형식의 첫 번째 인스턴스가 만들어지거나 static 멤버가 참조되기 전에 static 생성자를 호출합니다. static 생성자가 private이 아니면 시스템 이외의 코드에서 이를 호출할 수 있습니다. 이렇게 되면 생성자에서 수행하는 작업에 따라 예기치 않은 동작이 발생할 수 있습니다.

CA2126: 형식 링크 요청에는 상속 요청이 필요합니다.

public unsealed 형식이 링크 요청으로 보호되며 재정의 가능한 메서드를 포함합니다. 형식이나 메서드는 모두 상속 요청으로 보호됩니다.

CA2124: 취약한 finally 절을 외부 try에 래핑하십시오.

public 또는 protected 메서드에 try/finally 블록이 들어 있습니다. finally 블록이 보안 상태를 다시 설정하는 것으로 나타나며 finally 블록에 포함되어 있지 않습니다.