보안 규칙

보안 규칙은 더 안전한 라이브러리 및 애플리케이션을 지원합니다. 해당 규칙을 통해 프로그램에서 보안 결함을 방지할 수 있습니다. 이러한 규칙을 사용하지 않도록 설정하는 경우 코드에 이유를 명시하고 개발 프로젝트의 지정된 보안 책임자에게 알려야 합니다.

이 섹션의 내용

규칙 설명
CA2100: 보안상 취약한 부분이 있는지 SQL 쿼리를 검토하십시오. 메서드가 메서드에 대한 문자열 인수로부터 만들어진 문자열을 사용하여 System.Data.IDbCommand.CommandText 속성을 설정합니다. 이 규칙에서는 문자열 인수에 사용자 입력이 포함된 것으로 가정합니다. 사용자 입력으로부터 만들어진 SQL 명령 문자열은 SQL 삽입 공격에 취약합니다.
CA2109: 표시되는 이벤트 처리기를 검토하십시오. public 또는 protected 이벤트 처리 메서드를 발견했습니다. 이벤트 처리 메서드는 반드시 필요한 경우를 제외하고 노출하면 안 됩니다.
CA2119: private 인터페이스를 만족하는 메서드를 봉인하십시오. 상속할 수 있는 public 형식에서는 internal(Visual Basic의 경우 Friend) 인터페이스의 재정의 가능한 메서드 구현을 제공합니다. 이 규칙 위반 문제를 해결하려면 어셈블리 외부에서 메서드가 재정의되지 않도록 합니다.
CA2153: 손상된 상태 예외 처리 방지 CSE(손상된 상태 예외) 는 프로세스에 메모리 손상이 있음을 나타냅니다. 프로세스 충돌을 허용하는 대신 catch하면 공격자가 손상된 메모리 영역에 익스플로잇을 배치할 수 있는 경우 보안 취약점이 발생할 수 있습니다.
CA2300: 안전하지 않은 역직렬 변환기 BinaryFormatter를 사용하지 마세요. 안전하지 않은 역직렬 변환기는 신뢰할 수 없는 데이터를 역직렬화할 때 취약합니다. 공격자는 예기치 않은 형식을 포함하도록 직렬화된 데이터를 수정하여 악의적인 부작용을 개체에 주입할 수 있습니다.
CA2301: BinaryFormatter.Binder를 먼저 설정하지 않고 BinaryFormatter.Deserialize를 호출하지 마세요. 안전하지 않은 역직렬 변환기는 신뢰할 수 없는 데이터를 역직렬화할 때 취약합니다. 공격자는 예기치 않은 형식을 포함하도록 직렬화된 데이터를 수정하여 악의적인 부작용을 개체에 주입할 수 있습니다.
CA2302: BinaryFormatter.Deserialize를 호출하기 전에 BinaryFormatter.Binder가 설정되어 있는지 확인합니다. 안전하지 않은 역직렬 변환기는 신뢰할 수 없는 데이터를 역직렬화할 때 취약합니다. 공격자는 예기치 않은 형식을 포함하도록 직렬화된 데이터를 수정하여 악의적인 부작용을 개체에 주입할 수 있습니다.
CA2305: 안전하지 않은 역직렬 변환기 LosFormatter를 사용하지 마세요. 안전하지 않은 역직렬 변환기는 신뢰할 수 없는 데이터를 역직렬화할 때 취약합니다. 공격자는 예기치 않은 형식을 포함하도록 직렬화된 데이터를 수정하여 악의적인 부작용을 개체에 주입할 수 있습니다.
CA2310: 안전하지 않은 역직렬 변환기 NetDataContractSerializer를 사용하지 마세요. 안전하지 않은 역직렬 변환기는 신뢰할 수 없는 데이터를 역직렬화할 때 취약합니다. 공격자는 예기치 않은 형식을 포함하도록 직렬화된 데이터를 수정하여 악의적인 부작용을 개체에 주입할 수 있습니다.
CA2311: 먼저 NetDataContractSerializer.Binder를 설정하지 않고 역직렬화하지 마세요. 안전하지 않은 역직렬 변환기는 신뢰할 수 없는 데이터를 역직렬화할 때 취약합니다. 공격자는 예기치 않은 형식을 포함하도록 직렬화된 데이터를 수정하여 악의적인 부작용을 개체에 주입할 수 있습니다.
CA2312: 역직렬화하기 전에 NetDataContractSerializer.Binder가 설정되어 있는지 확인합니다. 안전하지 않은 역직렬 변환기는 신뢰할 수 없는 데이터를 역직렬화할 때 취약합니다. 공격자는 예기치 않은 형식을 포함하도록 직렬화된 데이터를 수정하여 악의적인 부작용을 개체에 주입할 수 있습니다.
CA2315: 안전하지 않은 역직렬 변환기 ObjectStateFormatter를 사용하지 마세요. 안전하지 않은 역직렬 변환기는 신뢰할 수 없는 데이터를 역직렬화할 때 취약합니다. 공격자는 예기치 않은 형식을 포함하도록 직렬화된 데이터를 수정하여 악의적인 부작용을 개체에 주입할 수 있습니다.
CA2321: SimpleTypeResolver를 사용하여 JavaScriptSerializer로 역직렬화하지 마세요. 안전하지 않은 역직렬 변환기는 신뢰할 수 없는 데이터를 역직렬화할 때 취약합니다. 공격자는 예기치 않은 형식을 포함하도록 직렬화된 데이터를 수정하여 악의적인 부작용을 개체에 주입할 수 있습니다.
CA2322: 역직렬화하기 전에 JavaScriptSerializer가 SimpleTypeResolver로 초기화되지 않았는지 확인합니다. 안전하지 않은 역직렬 변환기는 신뢰할 수 없는 데이터를 역직렬화할 때 취약합니다. 공격자는 예기치 않은 형식을 포함하도록 직렬화된 데이터를 수정하여 악의적인 부작용을 개체에 주입할 수 있습니다.
CA2326: None 이외의 TypeNameHandling 값을 사용하지 마세요. 안전하지 않은 역직렬 변환기는 신뢰할 수 없는 데이터를 역직렬화할 때 취약합니다. 공격자는 예기치 않은 형식을 포함하도록 직렬화된 데이터를 수정하여 악의적인 부작용을 개체에 주입할 수 있습니다.
CA2327: 안전하지 않은 JsonSerializer를 사용하지 마세요설정 안전하지 않은 역직렬 변환기는 신뢰할 수 없는 데이터를 역직렬화할 때 취약합니다. 공격자는 예기치 않은 형식을 포함하도록 직렬화된 데이터를 수정하여 악의적인 부작용을 개체에 주입할 수 있습니다.
CA2328: JsonSerializer설정가 안전한지 확인합니다. 안전하지 않은 역직렬 변환기는 신뢰할 수 없는 데이터를 역직렬화할 때 취약합니다. 공격자는 예기치 않은 형식을 포함하도록 직렬화된 데이터를 수정하여 악의적인 부작용을 개체에 주입할 수 있습니다.
CA2329: 안전하지 않은 구성을 사용하여 JsonSerializer로 역직렬화하지 마세요. 안전하지 않은 역직렬 변환기는 신뢰할 수 없는 데이터를 역직렬화할 때 취약합니다. 공격자는 예기치 않은 형식을 포함하도록 직렬화된 데이터를 수정하여 악의적인 부작용을 개체에 주입할 수 있습니다.
CA2330: 역직렬화할 때 JsonSerializer에 보안 구성이 있는지 확인합니다. 안전하지 않은 역직렬 변환기는 신뢰할 수 없는 데이터를 역직렬화할 때 취약합니다. 공격자는 예기치 않은 형식을 포함하도록 직렬화된 데이터를 수정하여 악의적인 부작용을 개체에 주입할 수 있습니다.
CA2350: DataTable.ReadXml()의 입력을 신뢰할 수 있는지 확인합니다. 신뢰할 수 없는 입력으로 DataTable을 역직렬화하면 공격자는 악의적인 입력을 만들어 서비스 거부 공격을 수행할 수 있습니다. 알 수 없는 원격 코드 실행 취약성이 있을 수 있습니다.
CA2351: DataSet.ReadXml()의 입력을 신뢰할 수 있는지 확인합니다. 신뢰할 수 없는 입력으로 DataSet을 역직렬화하면 공격자는 악의적인 입력을 만들어 서비스 거부 공격을 수행할 수 있습니다. 알 수 없는 원격 코드 실행 취약성이 있을 수 있습니다.
CA2352: 직렬화 가능 형식의 안전하지 않은 DataSet 또는 DataTable은 원격 코드 실행 공격에 취약할 수 있음 SerializableAttribute로 표시된 클래스 또는 구조체에 DataSet 또는 DataTable 필드나 속성이 포함되어 있으며 GeneratedCodeAttribute가 없습니다.
CA2353: 직렬화 가능 형식의 안전하지 않은 DataSet 또는 DataTable XML serialization 특성 또는 데이터 계약 특성으로 표시된 클래스 또는 구조체에 DataSet 또는 DataTable 필드나 속성이 포함되어 있습니다.
CA2354: 역직렬화된 개체 그래프의 안전하지 않은 DataSet 또는 DataTable은 원격 코드 실행 공격에 취약할 수 있습니다. 직렬화된 System.Runtime.Serialization.IFormatter로 역직렬화하고 캐스트된 형식의 개체 그래프에 DataSet 또는 DataTable이 포함될 수 있습니다.
CA2355: 역직렬화된 개체 그래프의 안전하지 않은 DataSet 또는 DataTable 캐스팅되거나 지정된 형식의 개체 그래프에 DataSet 또는 DataTable이 포함될 수 있는 경우 역직렬화합니다.
CA2356: 웹 역직렬화된 개체 그래프의 안전하지 않은 DataSet 또는 DataTable System.Web.Services.WebMethodAttribute 또는 System.ServiceModel.OperationContractAttribute를 사용하는 메서드에 DataSet 또는 DataTable을 참조할 수 있는 매개 변수가 있습니다.
CA2361: DataSet.ReadXml()을 포함하는 자동 생성된 클래스가 신뢰할 수 없는 데이터와 함께 사용되지 않도록 하기 신뢰할 수 없는 입력으로 DataSet을 역직렬화하면 공격자는 악의적인 입력을 만들어 서비스 거부 공격을 수행할 수 있습니다. 알 수 없는 원격 코드 실행 취약성이 있을 수 있습니다.
CA2362: 자동 생성된 직렬화 가능 형식의 안전하지 않은 DataSet 또는 DataTable은 원격 코드 실행 공격에 취약할 수 있음 BinaryFormatter를 사용하여 신뢰할 수 없는 입력을 역직렬화할 때 역직렬화된 개체 그래프에 DataSet 또는 DataTable이 포함되어 있으면 공격자가 악의적인 페이로드를 만들어 원격 코드 실행 공격을 수행할 수 있습니다.
CA3001: SQL 삽입 취약성에 대한 코드 검토 신뢰할 수 없는 입력 및 SQL 명령으로 작업하는 경우 SQL 삽입 공격에 유의해야 합니다. SQL 삽입 공격은 악성 SQL 명령을 실행하여 애플리케이션의 보안 및 무결성을 손상시킬 수 있습니다.
CA3002: XSS 취약성에 대한 코드 검토 웹 요청의 신뢰할 수 없는 입력을 사용하여 작업하는 경우 XSS(사이트 간 스크립팅) 공격에 주의해야 합니다. XSS 공격은 신뢰할 수 없는 입력을 원시 HTML 출력에 삽입하여 공격자가 악성 스크립트를 실행하거나 웹 페이지의 콘텐츠를 악의적으로 수정할 수 있습니다.
CA3003: 파일 경로 삽입 취약성에 대한 코드 검토 웹 요청의 신뢰할 수 없는 입력을 사용하여 작업하는 경우 사용자가 제어하는 입력을 사용한 파일 경로 지정에 유의해야 합니다.
CA3004: 정보 공개 취약성에 대한 코드 검토 예외 정보를 공개하면 공격자가 애플리케이션의 내부 정보를 파악할 수 있으므로 공격자가 다른 취약성을 악용할 수 있습니다.
CA3006: 프로세스 명령 삽입 취약성에 대한 코드 검토 신뢰할 수 없는 입력을 사용하여 작업하는 경우 명령 삽입 공격에 유의해야 합니다. 명령 삽입 공격은 기본 운영 체제에서 서버의 보안 및 무결성을 손상하는 악성 명령을 실행할 수 있습니다.
CA3007: 공개 리디렉션 취약성에 대한 코드 검토 신뢰할 수 없는 입력을 사용하는 경우 오픈 리디렉션 취약성에 유의해야 합니다. 공격자가 오픈 리디렉션 취약성을 악용해 사용자의 웹 사이트를 사용하여 합법적인 URL의 모양을 제공하지만 방문자를 피싱 또는 기타 악성 웹 페이지로 리디렉션할 수 있습니다.
CA3008: XPath 삽입 취약성에 대한 코드 검토 신뢰할 수 없는 입력을 사용하는 경우 XPath 삽입 공격에 유의해야 합니다. 신뢰할 수 없는 입력을 사용하여 XPath 쿼리를 생성하면 공격자가 쿼리를 악의적으로 조작하여 의도하지 않은 결과를 반환하고 쿼리된 XML의 내용을 공개할 수 있습니다.
CA3009: XML 삽입 취약성에 대한 코드 검토 신뢰할 수 없는 입력을 사용하는 경우 XML 삽입 공격에 유의해야 합니다.
CA3010: XAML 삽입 취약성에 대한 코드 검토 신뢰할 수 없는 입력을 사용하여 작업하는 경우 XAML 삽입 공격에 유의해야 합니다. XAML은 개체 인스턴스화 및 실행을 직접적으로 나타내는 태그 언어입니다. 즉, XAML로 생성된 요소는 시스템 리소스(예: 네트워크 액세스 및 파일 시스템 IO)와 상호 작용할 수 있습니다.
CA3011: DLL 삽입 취약성에 대한 코드 검토 신뢰할 수 없는 입력을 사용하는 경우 신뢰할 수 없는 코드 로딩에 유의해야 합니다. 웹 애플리케이션이 신뢰할 수 없는 코드를 로드하는 경우 공격자가 프로세스에 악성 DLL을 삽입하고 악성 코드를 실행할 수 있습니다.
CA3012: regex 삽입 취약성에 대한 코드 검토 신뢰할 수 없는 입력을 사용하는 경우 regex 삽입 공격에 유의해야 합니다. 공격자가 regex 삽입을 사용하여 정규식을 악의적으로 수정하거나 regex를 의도하지 않은 결과와 일치시키거나 regex가 CPU를 과도하게 소비하여 서비스 거부 공격을 일으킬 수 있습니다.
CA3061: URL로 스키마를 추가하지 마세요. 위험한 외부 참조를 유발할 수 있으므로 Add 메서드의 안전하지 않은 오버로드를 사용하지 마세요.
CA3075: 안전하지 않은 DTD 처리 안전하지 않은 DTDProcessing 인스턴스를 사용하거나 외부 엔터티 소스를 참조하면 파서는 신뢰할 수 없는 입력을 허용하고 공격자에게 중요 한 정보를 공개할 수 있습니다.
CA3076: 안전하지 않은 XSLT 스크립트 실행 .NET 애플리케이션에서 안전하지 않게 XSLT(Extensible StyleSheet Language Transformations)를 실행하는 경우 프로세서는 신뢰할 수 없는 URI 참조를 확인할 수 있습니다. 이 참조는 공격자에게 중요한 정보를 노출하여 서비스 거부 및 교차 사이트 공격을 유발할 수도 있습니다.
CA3077: API 디자인, XML 문서 및 XML 텍스트 판독기의 안전하지 않은 처리 XMLDocument 및 XMLTextReader에서 파생된 API를 디자인할 경우 DtdProcessing에 주의해야 합니다. 외부 엔터티 소스를 참조하거나 확인할 때 안전하지 않은 DTDProcessing 인스턴스를 사용하거나 XML에서 안전하지 않은 값을 설정하면 정보가 공개될 수 있습니다.
CA3147: ValidateAntiForgeryToken으로 동사 처리기 표시 ASP.NET MVC 컨트롤러를 설계할 때 교차 사이트 요청 위조 공격에 유의해야 합니다. 교차 사이트 요청 위조 공격은 인증된 사용자의 악의적인 요청을 ASP.NET MVC 컨트롤러로 보낼 수 있습니다.
CA5350: 취약한 암호화 알고리즘 사용 안 함 오늘날 여러 가지 이유로 약한 암호화 알고리즘 및 해시 함수가 사용되지만 데이터의 무결성과 기밀성을 보장하기 위해서는 이 방법을 사용하지 않아야 합니다. 이 규칙은 코드에 TripleDES, SHA1 또는 RIPEMD160 알고리즘이 있을 때 발생합니다.
CA5351: 손상된 암호화 알고리즘을 사용하지 마세요 끊어진 암호화 알고리즘은 안전하지 않은 것으로 간주되므로 사용해서는 안 됩니다. 이 규칙은 코드에 MD5 해시 알고리즘 또는 DES나 RC2 암호화 알고리즘이 있을 때 트리거됩니다.
CA5358: 안전하지 않은 암호화 모드를 사용하지 마세요. 안전하지 않은 암호화 모드를 사용하지 마세요.
CA5359: 인증서 유효성 검사를 사용하지 않도록 설정하지 마세요. 인증서는 서버의 ID를 인증하는 데 도움이 될 수 있습니다. 클라이언트는 서버 인증서의 유효성을 검사하여 요청이 의도한 서버로 전송되도록 해야 합니다. ServerCertificateValidationCallback이 항상 true를 반환하는 경우 모든 인증서가 유효성 검사를 통과합니다.
CA5360: 역직렬화에서 위험한 메서드를 호출하지 마세요. 안전하지 않은 deserialization은 신뢰할 수 없는 데이터를 사용하여 애플리케이션의 논리를 남용하거나 DoS(서비스 거부) 공격을 가하거나 역직렬화될 때 임의 코드를 실행하는 경우 발생하는 취약성입니다. 악의적인 사용자가 제어하는 신뢰할 수 없는 데이터를 애플리케이션에서 역직렬화할 때 이러한 deserialization 기능을 남용하는 경우가 많습니다. 특히 deserialization 중에 위험한 메서드를 호출합니다. 안전하지 않은 deserialization 공격에 성공하면 공격자가 DoS 공격, 인증 바이패스, 원격 코드 실행과 같은 공격을 수행할 수 있습니다.
CA5361: 강력한 암호화의 SChannel 사용을 비활성화하지 마세요 Switch.System.Net.DontEnableSchUseStrongCryptotrue로 설정하면 나가는 TLS(전송 계층 보안) 연결에서 사용되는 암호화를 약하게 합니다. 더 취약한 암호화는 애플리케이션과 서버 간 통신의 기밀성을 손상해 공격자가 중요한 데이터를 더 쉽게 도청할 수 있도록 합니다.
CA5362: 역직렬화된 개체 그래프의 잠재적 참조 주기 신뢰할 수 없는 데이터를 역직렬화하는 경우 역직렬화된 개체 그래프를 처리하는 모든 코드가 무한 루프로 이동하지 않고 참조 주기를 처리해야 합니다. 여기에는 deserialization 콜백의 일부인 코드와 deserialization 완료 후 개체 그래프를 처리하는 코드가 모두 포함됩니다. 그렇지 않으면 공격자가 참조 주기를 포함하는 악성 데이터를 사용하여 서비스 거부 공격을 수행할 수 있습니다.
CA5363: 요청 유효성 검사를 사용하지 않도록 설정하지 마세요. 요청 유효성 검사는 HTTP 요청을 검사하고 교차 사이트 스크립팅 등 삽입 공격으로 이어질 수 있는 잠재적으로 위험한 콘텐츠가 포함되어 있는지 확인하는 ASP.NET의 기능입니다.
CA5364: 사용되지 않는 보안 프로토콜을 사용하지 마세요. TLS(전송 계층 보안)는 가장 일반적으로 HTTPS(Hypertext Transfer Protocol Secure)를 사용하여 컴퓨터 간의 통신을 보호합니다. TLS의 이전 프로토콜 버전은 TLS 1.2 및 TLS 1.3보다 안전하지 않으며 새로운 취약성이 있을 가능성이 큽니다. 위험을 최소화하려면 이전 프로토콜 버전을 사용하지 마세요.
CA5365: HTTP 헤더 검사를 사용하지 않도록 설정 안 함 HTTP 헤더 검사는 응답 헤더에 있는 캐리지 리턴 및 줄 바꿈 문자(\r 및 \n)의 인코딩을 사용하도록 설정합니다. 이 인코딩 헤더에 포함 된 신뢰할 수 없는 데이터를 표시 하는 애플리케이션을 악용 하는 삽입 공격을 방지 하는 데 도움이 됩니다.
CA5366: 데이터 세트 읽기 XML에 XmlReader 사용 DataSet를 사용하여 신뢰할 수 없는 데이터가 있는 XML을 읽으면 위험한 외부 참조가 로드될 수 있으며 XmlReader를 안전한 확인자와 함께 사용하거나 DTD 처리를 사용하지 않도록 설정한 상태로 사용하여 이를 제한해야 합니다.
CA5367: 포인터 필드를 사용하여 형식을 직렬화하지 마세요. 이 규칙은 포인터 필드 또는 속성이 있는 직렬화 가능한 클래스가 있는지를 확인합니다. NonSerializedAttribute로 표시된 정적 멤버 또는 필드와 같이 직렬화할 수 없는 멤버는 포인터가 될 수 있습니다.
CA5368: 페이지에서 파생된 클래스에 대해 ViewStateUserKey 설정 ViewStateUserKey 속성을 설정하면 공격자가 공격을 생성하는 데 변수를 사용할 수 없도록 개별 사용자의 뷰 상태 변수에 식별자를 할당할 수 있어 애플리케이션에 대한 공격을 방지할 수 있습니다. 그렇지 않으면 교차 사이트 요청 위조 취약성이 발생합니다.
CA5369: 역직렬화에 XmlReader 사용 신뢰할 수 없는 DTD 및 XML 스키마를 처리하면 위험한 외부 참조가 로드될 수 있으며 XmlReader를 안전한 확인자와 함께 사용하거나 DTD 및 XML 인라인 스키마 처리를 사용하지 않도록 설정한 상태로 사용하여 이를 제한해야 합니다.
CA5370: 판독기 유효성 검사에 XmlReader 사용 신뢰할 수 없는 DTD 및 XML 스키마를 처리하면 위험한 외부 참조가 로드될 수 있습니다. 이 위험한 로드는 XmlReader를 안전한 확인자와 함께 사용하거나 DTD 및 XML 인라인 스키마 처리를 사용하지 않도록 설정한 상태로 사용하여 제한해야 합니다.
CA5371: 스키마 읽기에 XmlReader 사용 신뢰할 수 없는 DTD 및 XML 스키마를 처리하면 위험한 외부 참조가 로드될 수 있습니다. XmlReader를 안전한 확인자와 함께 사용하거나 DTD 및 XML 인라인 스키마 처리를 사용하지 않도록 설정한 상태로 사용하여 이를 제한해야 합니다.
CA5372: XPathDocument에 XmlReader 사용 신뢰할 수 없는 데이터의 XML을 처리하면 위험한 외부 참조가 로드될 수 있으며 XmlReader를 안전한 확인자와 함께 사용하거나 DTD 처리를 사용하지 않도록 설정한 상태로 사용하여 이를 제한할 수 있습니다.
CA5373: 사용되지 않는 키 파생 함수를 사용하지 마세요. 이 규칙은 취약한 키 파생 메서드 System.Security.Cryptography.PasswordDeriveBytesRfc2898DeriveBytes.CryptDeriveKey의 호출을 탐지합니다. System.Security.Cryptography.PasswordDeriveBytes에서 취약한 알고리즘 PBKDF1을 사용했습니다.
CA5374: XslTransform 사용 안 함 이 규칙은 System.Xml.Xsl.XslTransform이 코드에서 인스턴스화되는지 확인합니다. System.Xml.Xsl.XslTransform은 이제 사용되지 않으며 사용할 수 없습니다.
CA5375: 계정 공유 액세스 서명을 사용하지 마세요. 계정 SAS는 서비스 SAS에서 허용되지 않는 Blob 컨테이너, 테이블, 큐, 파일 공유에서 읽기, 쓰기, 삭제 작업에 대한 액세스 권한을 위임할 수 있습니다. 그러나 컨테이너 수준 정책을 지원하지 않으며 유연성이 적고 부여된 사용 권한에 대한 제어 수준이 낮습니다. 악의적인 사용자가 사용할 경우 스토리지 계정이 쉽게 손상됩니다.
CA5376: SharedAccessProtocol HttpsOnly 사용 SAS는 HTTP에서 일반 텍스트로 전송할 수 없는 중요한 데이터입니다.
CA5377: 컨테이너 수준 액세스 정책 사용 컨테이너 수준 액세스 정책은 언제든지 수정하거나 철회할 수 있습니다. 이 정책은 향상된 유연성을 제공하며 부여된 사용 권한에 대한 제어 수준도 높습니다.
CA5378: ServicePointManagerSecurityProtocols를 사용하지 않도록 설정하지 마세요. DisableUsingServicePointManagerSecurityProtocolstrue로 설정하면 WCF(Windows Communication Framework)의 TLS(전송 계층 보안) 연결이 TLS 1.0 사용으로 제한됩니다. 해당 버전의 TLS는 사용되지 않습니다.
CA5379: 키 파생 함수 알고리즘이 충분히 강력한지 확인하세요 Rfc2898DeriveBytes 클래스는 기본적으로 SHA1 알고리즘을 사용하도록 설정됩니다. SHA256 이상을 사용하는 생성자의 일부 오버로드에서 사용할 해시 알고리즘을 지정해야 합니다. HashAlgorithm 속성에는 get 접근자만 있고 overridden 한정자는 없습니다.
CA5380: 루트 저장소에 인증서를 추가하지 마세요. 이 규칙은 신뢰할 수 있는 루트 인증 기관 인증서 저장소에 인증서를 추가하는 코드를 탐지합니다. 기본적으로 신뢰할 수 있는 루트 인증 기관 인증서 저장소는 Microsoft 루트 인증서 프로그램의 요구 사항을 충족하는 퍼블릭 CA 세트로 구성됩니다.
CA5381: 인증서가 루트 저장소에 추가되지 않았는지 확인 이 규칙은 신뢰할 수 있는 루트 인증 기관 인증서 저장소에 인증서를 잠재적으로 추가하는 코드를 탐지합니다. 기본적으로 신뢰할 수 있는 루트 인증 기관 인증서 저장소는 Microsoft 루트 인증서 프로그램의 요구 사항을 충족하는 퍼블릭 CA(인증 기관) 세트로 구성됩니다.
CA5382: ASP.NET Core에서 보안 쿠키 사용 HTTPS를 통해 사용할 수 있는 애플리케이션은 보안 쿠키를 사용해야 하며 이러한 쿠키는 TLS(전송 계층 보안)를 통해서만 쿠키를 전송해야 함을 브라우저에 표시합니다.
CA5383: ASP.NET Core에서 보안 쿠키 사용 확인 HTTPS를 통해 사용할 수 있는 애플리케이션은 보안 쿠키를 사용해야 하며 이러한 쿠키는 TLS(전송 계층 보안)를 통해서만 쿠키를 전송해야 함을 브라우저에 표시합니다.
CA5384: DSA(디지털 서명 알고리즘)를 사용하지 마세요. DSA는 취약한 비대칭형 암호화 알고리즘입니다.
CA5385: 충분한 키 크기로 Rivest–Shamir-Adleman(RSA) 알고리즘 사용 2048비트보다 작은 RSA 키는 무차별 암호 대입 공격(brute force attack)에 더 취약합니다.
CA5386: SecurityProtocolType 값 하드코딩 방지 TLS(전송 계층 보안)는 가장 일반적으로 HTTPS(Hypertext Transfer Protocol Secure)를 사용하여 컴퓨터 간의 통신을 보호합니다. 프로토콜 버전 TLS 1.0 및 TLS 1.1은 사용되지 않으며 TLS 1.2 및 TLS 1.3은 최신 상태입니다. 나중에는 TLS 1.2 및 TLS 1.3도 사용되지 않을 수 있습니다. 애플리케이션을 안전하게 유지하려면 프로토콜 버전을 하드 코드하지 말고 .NET Framework v4.7.1 이상을 대상으로 지정합니다.
CA5387: 반복 수가 부족한 약한 키 파생 함수를 사용하지 마세요. 이 규칙은 반복 횟수가 100,000보다 작은 Rfc2898DeriveBytes에 의해 암호화 키가 생성되었는지 확인합니다. 반복 횟수를 높이면 생성된 암호화 키를 추측하려고 시도하는 사전 공격을 완화할 수 있습니다.
CA5388: 약한 키 파생 함수를 사용할 때 충분한 반복 횟수 확인 이 규칙은 반복 횟수가 100,000보다 작을 수 있는 Rfc2898DeriveBytes에 의해 암호화 키가 생성되었는지 확인합니다. 반복 횟수를 높이면 생성된 암호화 키를 추측하려고 시도하는 사전 공격을 완화할 수 있습니다.
CA5389: 대상 파일 시스템 경로에 보관 항목의 경로를 추가하지 마세요. 파일 경로는 상대적일 수 있고 예상 파일 시스템 대상 경로 외부의 파일 시스템 액세스를 초래하여 lay-and-wait 기법을 통해 악의적으로 구성이 변경되고 원격 코드 실행이 이루어질 수 있습니다.
CA5390: 암호화 키를 하드 코드하지 마세요. 대칭 알고리즘이 성공하려면 비밀 키가 발신자와 수신자에게만 알려져야 합니다. 키가 하드 코드되면 쉽게 검색됩니다. 컴파일된 이진 파일인 경우에도 악의적인 사용자가 쉽게 추출할 수 있습니다. 프라이빗 키가 손상되면 암호화 텍스트를 직접 암호 해독할 수 있으며 더 이상 보호되지 않습니다.
CA5391: ASP.NET Core MVC 컨트롤러에서 위조 방지 토큰 사용 위조 방지 토큰의 유효성을 검사하지 않고 POST, PUT, PATCH 또는 DELETE 요청을 처리하면 교차 사이트 요청 위조 공격에 취약할 수 있습니다. 교차 사이트 요청 위조 공격은 인증된 사용자의 악의적인 요청을 ASP.NET Core MVC 컨트롤러로 보낼 수 있습니다.
CA5392: P/Invokes에 DefaultDllImportSearchPaths 특성 사용 기본적으로 DllImportAttribute를 사용하는 P/Invoke 함수는 로드할 라이브러리의 현재 작업 디렉터리를 포함하여 많은 디렉터리를 검색합니다. 이는 특정 애플리케이션에서 DLL 하이재킹으로 이어지는 보안 문제가 될 수 있습니다.
CA5393: 안전하지 않은 DllImportSearchPath 값을 사용하지 마세요. 기본 DLL 검색 디렉터리 및 어셈블리 디렉터리에 악성 DLL이 있을 수 있습니다. 또는 애플리케이션이 실행되는 위치에 따라 애플리케이션의 디렉터리에 악성 DLL이 있을 수 있습니다.
CA5394: 안전하지 않은 임의성을 사용하지 마세요. 암호화가 취약한 의사 난수 생성기를 사용하면 공격자가 생성되는 보안에 중요한 값을 예측할 수 있습니다.
CA5395: 작업 메서드에 대한 HttpVerb 특성 누락 데이터를 생성, 편집, 삭제 또는 수정하는 모든 작업 메서드는 위조 방지 특성을 사용하여 교차 사이트 요청 위조 공격으로부터 보호되어야 합니다. GET 작업 수행은 부작용이 없고 영구 데이터를 수정하지 않는 안전한 작업이어야 합니다.
CA5396: HttpCookie에 대해 HttpOnly를 true로 설정 심층 방어 수단으로 보안에 중요한 HTTP 쿠키가 HttpOnly로 표시되어 있는지 확인합니다. 이는 웹 브라우저에서 스크립트가 쿠키에 액세스하는 것을 허용하지 않아야 함을 나타냅니다. 삽입된 악성 스크립트는 쿠키를 도용하는 일반적인 방법입니다.
CA5397: 사용되지 않는 SslProtocols 값을 사용하지 마세요. TLS(전송 계층 보안)는 가장 일반적으로 HTTPS(Hypertext Transfer Protocol Secure)를 사용하여 컴퓨터 간의 통신을 보호합니다. TLS의 이전 프로토콜 버전은 TLS 1.2 및 TLS 1.3보다 안전하지 않으며 새로운 취약성이 있을 가능성이 큽니다. 위험을 최소화하려면 이전 프로토콜 버전을 사용하지 마세요.
CA5398: 하드 코딩된 SslProtocols 값 방지 TLS(전송 계층 보안)는 가장 일반적으로 HTTPS(Hypertext Transfer Protocol Secure)를 사용하여 컴퓨터 간의 통신을 보호합니다. 프로토콜 버전 TLS 1.0 및 TLS 1.1은 사용되지 않으며 TLS 1.2 및 TLS 1.3은 최신 상태입니다. 나중에는 TLS 1.2 및 TLS 1.3도 사용되지 않을 수 있습니다. 애플리케이션을 안전하게 유지하려면 프로토콜 버전을 하드 코드하지 마세요.
CA5399: HttpClient 인증서 해지 목록 검사 사용하지 않도록 설정 해지된 인증서를 더 이상 신뢰할 수 없습니다. 공격자가 HTTPS 통신에서 악성 데이터를 전달하거나 중요한 데이터를 도용하는 데 사용할 수 있습니다.
CA5400: httpClient 인증서 해지 목록 검사 사용하지 않도록 설정되지 않았는지 확인합니다. 해지된 인증서를 더 이상 신뢰할 수 없습니다. 공격자가 HTTPS 통신에서 악성 데이터를 전달하거나 중요한 데이터를 도용하는 데 사용할 수 있습니다.
CA5401: 기본값이 아닌 IV와 함께 CreateEncryptor를 사용하지 마세요. 대칭형 암호화는 항상 반복할 수 없는 초기화 벡터를 사용하여 사전 공격을 방지해야 합니다.
CA5402: 기본 IV와 함께 CreateEncryptor 사용 대칭형 암호화는 항상 반복할 수 없는 초기화 벡터를 사용하여 사전 공격을 방지해야 합니다.
CA5403: 인증서를 하드 코딩하지 마세요. X509Certificate 또는 X509Certificate2 생성자의 data 또는 rawData 매개 변수가 하드 코드됩니다.
CA5404: 토큰 유효성 검사를 사용하지 않도록 설정하지 않음 토큰 유효성 검사를 제어하는 TokenValidationParameters 속성은 false로 설정하면 안 됩니다.
CA5405: 항상 대리자에서 토큰 유효성 검사를 건너뛰지 않음 할당되거나 항상 반환trueAudienceValidatorLifetimeValidator 콜백입니다.