서비스 거부

서비스 거부는 특정 서비스에 대한 액세스 권한을 부여해야 하지만 실제로 부적절하게 거부되었을 때 발생합니다. 예를 들어 시스템을 사용할 수 없게 만드는 권한 없는 애플리케이션이 수행할 수 있는 작업은 사실상 서비스 거부입니다. 여기에는 다음과 같은 작업 또는 일련의 작업이 포함됩니다.

  • 시스템이 충돌합니다.

  • 스레드 또는 프로세스의 조기 종료를 발생합니다.

  • 교착 상태 조건을 만듭니다. 교착 상태는 두 개 이상의 스레드가 교착 상태의 영구 상태에서 대기를 중지할 때 발생합니다. 각 스레드는 다른 스레드 중 하나가 보유한 리소스를 기다리고 있습니다.

  • 라이브 잠금 조건을 만듭니다. 라이브 잠금은 두 개 이상의 프로세서가 리소스(일반적으로 큐에 대한 잠금)를 획득하기 위해 대기하고 해당 리소스를 소유하는 스레드가 비슷한 진행되지 않는 상태에 있기 때문에 진행할 수 없는 경우에 발생할 수 있습니다.

이러한 문제는 일반적인 애플리케이션에서 악용할 수 있는 잠재적 버그를 포함하기 때문에 드라이버 내에서 자주 발생합니다. 이 유형의 악용은 간단할 수 있으며 보호하기가 어렵습니다. 드라이버에서 이러한 문제의 일반적인 원인은 다음과 같습니다.

  • 부적절한 사용자 버퍼 유효성 검사.

  • 버퍼 오버플로 또는 언더플로.

파일 시스템 및 파일 시스템 필터 드라이버의 경우 이러한 문제의 경우가 많습니다. 예를 들어 MAX_PATH 값은 Win32 하위 시스템의 기록상의 이유로 260으로 정의됩니다. 많은 드라이버 구성 요소에서는 이것이 가장 큰 경로의 크기를 나타내는 것으로 가정합니다. 아쉽게도 NTFS 파일 시스템의 최대 경로는 유니코드 문자 32,767자(65,534바이트)이므로 그렇지 않습니다. 필터 드라이버가 MAX_PATH 길이 가정을 코드 베이스로 인코딩하는 경우 필터 드라이버에서 관리하는 경로 내에서 이보다 큰 경로를 만드는 애플리케이션에서 간단한 서비스 거부 공격이 발생합니다.

또 다른 일반적인 문제는 애플리케이션이 종종 개인 FSCTL 요청에 사용자 모드 포인터를 포함한다는 것입니다. 파일 시스템에는 서비스 거부 공격의 세 가지 범주가 적용됩니다.

  • 사용 가능한 모든 디스크 공간 사용.

  • 사용 가능한 모든 디스크 대역폭 사용.

  • 사용자에게 액세스 권한이 있어야 하는 파일에 대한 액세스를 차단합니다.

일반적으로 파일 시스템 개발자가 이러한 유형의 공격을 방지하기 위해 수행할 수 있는 작업은 거의 없습니다. 그러나 관리자가 이러한 유형의 서비스 거부 공격을 제한할 수 있도록 개발자가 수행할 수 있는 단계가 있습니다.

파일 시스템과 관련된 가장 간단한 서비스 거부 공격은 사용 가능한 디스크 공간을 모두 사용하는 것입니다. 이 작업을 수행하는 애플리케이션을 작성하는 것은 간단하며 그 결과는 매우 광범위합니다. 더 이상 디스크에 쓸 수 없는 경우 시스템의 많은 애플리케이션과 서비스가 작동하지 않습니다. 완화 기술은 디스크 할당량으로, 관리자가 제대로 사용할 때 사용자가 소유한 파일에 사용할 수 있는 디스크 공간의 양을 제한할 수 있습니다. 따라서 파일 시스템을 개발할 때 디스크 할당량에 대한 지원을 포함하는 것이 좋습니다.

악의적이거나 잘못 작성된 애플리케이션은 모든 디스크 대역폭을 사용하려고 시도할 수도 있습니다. 이러한 유형의 공격을 받는 일반 사용자에 대한 결과는 느리거나 응답하지 않는 시스템입니다. 현재 운영 체제에는 애플리케이션에서 사용하는 대역폭을 제한하는 메커니즘이 없습니다. 또한 파일 시스템은 열려 있는 각 파일 개체 및 파일 핸들에 커널 메모리를 사용합니다. 악의적인 애플리케이션은 계속해서 많은 수의 파일을 열고 메모리가 소진될 때까지 열어 두려고 할 수 있습니다. 이러한 문제에 대한 주요 완화 기술은 관리자가 대량의 I/O를 수행하거나 많은 양의 다른 리소스를 사용하는 애플리케이션에 대해 컴퓨터를 모니터링할 수 있도록 감사 및 로깅입니다. 다시 말하지만, 이러한 유형의 서비스 거부를 최소화할 수 있도록 파일 시스템 및 파일 시스템 필터 드라이버에 감사 지원을 포함하는 것이 현명할 것입니다.

악의적인 애플리케이션은 다른 사용자가 정상적인 사용에 필요한 파일에 액세스하지 못하도록 할 수 있습니다. 이러한 문제를 최소화하기 위한 중요한 전략은 파일 시스템을 개발할 때 파일 개체와 연결된 보안 정보가 제대로 구현되도록 하는 것입니다.

마지막으로, 모든 드라이버는 악의적이거나 비정상적인 애플리케이션의 요청에 대한 응답으로 사용 가능한 모든 메모리 또는 기타 리소스를 사용하는 것에 대해 염려해야 합니다.