위협 요소 및 취약성 완화(Reporting Services)

이 항목에서는 Reporting Services 배포에 대한 위협을 줄일 수 있는 기술 및 전략을 설명합니다.

개요

보고서 서버는 콘텐츠와 응용 프로그램 데이터를 외부에 저장하는 상태 비저장 서버입니다. 보고서 서버 설치에 대한 가장 큰 위협 중 하나는 보고서 서버 데이터베이스 및 구성 파일의 무단 액세스 또는 변조입니다. 눈에는 덜 띄지만 보고서를 어떻게 만드는지, 그리고 보고서 서버에 콘텐츠를 게시할 권한을 누가 가지고 있는지와 관련된 위협 역시 이에 못지않게 중요합니다. 보고서 정의는 서버 컴퓨터에서 완전 신뢰 수준으로 실행되는 어셈블리입니다. 보고서 정의에는 마찬가지로 서버에서 실행되는 다른 사용자 지정 어셈블리가 포함될 수 있습니다. 보고서 또는 사용자 지정 어셈블리에 악성 코드가 포함된 경우 이 코드는 보고서를 요청한 사용자의 자격 증명으로 보고서 서버 컴퓨터에서 실행됩니다. 의도하지 않게 중요한 데이터를 노출하는 보고서 디자인을 통해서도 포착하기 어려운 위협이 발생할 수 있습니다. 예를 들어 직원 ID를 매개 변수로 사용하는 보고서를 실행하는 직원이 보고서 URL에 무작위 ID를 넣는 방식으로 다른 직원에 대한 정보를 볼 수 있는 경우가 발생하면 안 됩니다. 마지막으로, 조직의 보고서 배포 방식을 검토해야 합니다. 보고서를 조직 외부에 전달할 가능성을 최소화하도록 보고서 서버를 구성할 수 있습니다. 또한 파일 시스템에 대한 사용 권한과 보고서 서버 권한을 통해 권한이 있는 사용자만 보고서를 열 수 있도록 하는 방법도 있습니다.

이 항목의 다음 섹션에서는 다른 추가적인 위협에 대해 알아보고 이러한 위협이 실제 악의적 공격으로 이어질 위험을 최소화하는 방법을 설명합니다.

보고서 서버에 대한 공격 완화

다음 표에서는 서버 구성 요소와 구성 설정에 영향을 미치는 위협과 이를 완화하는 방법에 대해 설명합니다.

기능 또는 작업

위협

완화 방법

구성 설정이 보고서 서버 컴퓨터의 응용 프로그램 구성 파일과 Web.config에 저장됩니다.

공격자가 컴퓨터에 대한 액세스 권한을 얻은 후 암호화되지 않거나 보호되지 않는 구성 파일을 찾아 변조할 수 있습니다.

파일에 대한 사용 권한을 설정합니다. 기본적으로 사용 권한은 설치 중에 만들어진 Reporting Services 보안 그룹에 부여됩니다.

보고서 서버 웹 서비스가 TCP/IP 연결을 통해 전송된 요청 시 실행 요청을 처리합니다.

공격자가 서비스 거부 공격을 실행할 수 있으며, 이때 공격의 형태는 다음과 같습니다.

여러 인증되지 않은 요청이 대상 서버로 전달됩니다.

완료되지 않은 요청이 대상 서버로 전달되지만 서버에서 요청이 완료되지 않습니다.

요청의 크기가 매우 큽니다. 공격자는 요청을 시작한 후 서버에 대용량 페이로드를 보냅니다.

보고서 서버에서 모든 인증되지 않은 요청을 2분 이내에 삭제합니다. 이렇게 하면 서비스 거부 공격이 미치는 일부 영향을 최소화할 수 있습니다. 2분 간격은 고정된 값이므로 더 줄일 수 없습니다.

공격이 보고서 서버로의 업로드 작업을 기반으로 하는 경우 Machine.config 파일의 maxRequestLength 요소에 대한 값을 낮출 수 있습니다. 기본적으로 ASP.NET은 서버 응용 프로그램에 업로드할 수 있는 항목에 1MB의 제한을 둡니다. maxRequestLength 값을 낮추는 것은 임시 방책입니다. 모델과 같이 크기가 큰 파일을 업로드하는 경우가 잦다면 이전 값으로 다시 변경해야 합니다. Reporting Services 설치의 maxRequestLength 설정에 대한 자세한 내용은 보고서 및 스냅숏 크기 제한을 참조하십시오.

Reporting Services는 타사 데이터 처리, 렌더링 및 배달 확장 프로그램을 배포할 수 있는 확장 가능한 아키텍처를 지원합니다. 또한 사용자 지정 쿼리 디자이너도 배포할 수 있습니다. 확장 프로그램은 완전 신뢰 수준으로 실행해야 합니다.

공격자가 사용자 지정 확장 프로그램에 악성 코드를 넣을 수 있습니다.

신뢰할 수 있는 사용자 또는 조직의 확장 프로그램만 배포하십시오.

보고서 정의 및 보고서 모델에 대한 위협 완화

다음 표에서는 보고서 정의와 모델 파일에 영향을 미치는 위협과 이를 완화하는 방법에 대해 설명합니다.

기능 또는 작업

위협

완화 방법

보고서, 모델 및 공유 데이터 원본을 보고서 서버에 게시합니다.

보고서와 모델이 외부 데이터 원본에 연결하여 이를 쿼리합니다.

게시 작업 중에 보고서, 모델 및 공유 데이터 원본을 가로챕니다.

외부 컴퓨터로 전송 중인 요청을 가로챕니다.

SSL/TLS/IPSec과 같은 암호화된 보안 채널을 사용하여 연결합니다. 암호화 기술을 사용하여 채널을 보호해야 합니다.

전송하기 전에 사용자에게 채널에 보안이 설정되지 않았음을 알립니다.

인증 토큰 또는 자격 증명은 원격 컴퓨터 및 데이터 원본에 연결하는 데 사용됩니다.

요청을 처리할 때 인증 데이터를 가로챕니다.

암호화된 보안 채널을 사용합니다.

채널에 보안이 설정되지 않은 경우 사용자에게 알립니다.

최소 사용 권한 원칙을 따릅니다. 보고서에 사용된 데이터를 검색하려면 데이터 원본에 대한 읽기 전용 권한만 있으면 됩니다.

보고서 URL은 브라우저 창의 주소 표시줄에 매개 변수 값을 표시합니다.

보고서에 기밀 데이터가 포함된 경우 변조될 수 있는 매개 변수 값을 URL에 추가하지 마십시오. 예를 들어 매개 변수가 있는 보고서에 직원 ID가 포함된 경우 사용자는 URL에 무작위 직원 ID를 입력하여 다른 사용자를 위한 데이터를 볼 수 있게 됩니다.

최종 배포를 위해 보고서를 게시하기 전에 보고서 URL을 점검하여 매개 변수 값을 무작위 값으로 대체할 수 있는지 여부를 확인하십시오.

보고서를 디자인할 때는 매개 변수 설정과 관련된 사용 권한은 없다는 점을 유의해야 합니다. 완화할 수 있는 방법은 두 가지입니다.

  • 사용자별 정보를 수집하기 위한 사용자 ID와 보고서를 다시 디자인합니다.

  • 링크된 보고서를 사용하여 마스터 보고서를 잠급니다. 그런 다음 특정 매개 변수를 링크된 보고서에 대한 내부 매개 변수로 만듭니다. 링크된 보고서는 SharePoint 통합 모드에서 지원되지 않으므로 이 모드를 사용하도록 구성된 보고서 서버에 대해서는 이 방법이 지원되지 않습니다.

보고서와 모델에 데이터 원본 정보와 쿼리가 포함됩니다.

데이터 원본 또는 이 원본의 구조에 대한 정보가 노출되면 공격자는 공격에 이용할 수 있는 내부 정보를 얻을 수 있습니다.

사용자가 보고서 모델을 수정하도록 허용하기 전에 모델 항목 보안을 설정하여 모델 디자이너에서 사용자가 볼 수 없도록 하려는 모델 항목에 대한 액세스를 제한합니다.

파일에 대한 사용 권한을 설정합니다. 파일에는 .rdl, .rds, .smdl, .ds, .dsv 및 .smgl 파일이 포함됩니다.

운영 체제가 Windows XP 이상인 경우 기본적으로 사용자의 폴더에 로컬로 저장된 파일에는 로컬 컴퓨터에 정의된 사용자 그룹 및 계정만 액세스할 수 있습니다.

보고서 정의와 공유 데이터 원본에 데이터 원본 연결 문자열이 포함됩니다. 연결 문자열에 자격 증명을 포함할 수 있습니다.

보고서 파일이 노출될 경우 공격자가 데이터베이스 연결 문자열에 저장된 데이터베이스 자격 증명에 액세스할 수 있습니다.

자격 증명은 연결 문자열과 따로 저장합니다. 데이터 원본 속성 페이지의 저장된 자격 증명 옵션을 사용하여 사용자 계정 및 암호를 암호화하고 저장할 수 있습니다.

보고서와 모델은 요청 시 처리됩니다.

보고서는 사용자 지정 어셈블리를 참조하거나 포함할 수 있습니다.

보고서는 사용자 지정 보고서 항목 또는 타사 컨트롤을 포함할 수 있습니다. 사용자 지정 보고서 항목 컨트롤을 사용하려면 완전 신뢰가 필요합니다.

공격자는 포함 Visual Basic 코드 또는 데이터베이스 쿼리를 이용하는 보고서를 실행하도록 사용자를 유도하여 사용자의 권한으로 임의의 코드를 실행합니다.

변조된 보고서 또는 모델을 실행할 경우 버퍼 오버런, 서버 충돌 또는 이보다 더 나쁜 상황도 일어날 수 있습니다.

보고서 및 모델을 게시할 권한을 가진 사용자의 수를 제한합니다.

인증된 사용자만 파일을 업로드할 권한을 가지도록 합니다.

보고서를 작성한 사용자가 SQL 삽입, 스크립트 삽입 및 HTML 삽입 공격을 막을 수 있는 스크립트를 만드는 방법을 알고 있는지 확인합니다.

신뢰할 수 있는 사용자가 제공한 보고서와 모델만 업로드 또는 게시합니다.

신뢰할 수 있는 사용자가 제공한 사용자 지정 보고서 항목 컨트롤만 설치 또는 사용합니다.

파일을 업로드하기 전에 검토하여 사용자 지정 어셈블리에 대한 참조가 유효한지 확인합니다.

어셈블리에 파일 사용 권한을 설정하여 악의적인 사용자가 덮어쓰지 못하도록 합니다.

보고서 디자이너의 미리 보기 탭에서 보고서 또는 모델을 미리 보면 작성자의 자격 증명을 사용하여 검색되는 캐시된 데이터가 생성됩니다.

다른 사용자가 보고서 작성자의 컴퓨터에서 보고서를 미리 보는 경우 원래는 볼 수 없는 보고서 데이터를 볼 수 있습니다.

보고서 디자인을 마치면 테스트 서버 또는 테스트 위치에 보고서를 배포합니다.

자세한 내용은 보고서 및 리소스 보안을 참조하십시오.

위협 및 취약성 완화를 위한 일반적인 단계

다음과 같은 권장되는 최선의 방법을 적용하여 보고서 서버 배포의 전반적인 보안을 강화합니다.

  • 사용되지 않는 기능을 해제하여 공격 노출 영역을 줄입니다. 자세한 내용은 방법: Reporting Services 설정 또는 해제를 참조하십시오.

  • 보고서 서버 연결에 SSL을 사용합니다. 자세한 내용은 SSL(Secure Sockets Layer) 연결에 대한 보고서 서버 구성을 참조하십시오.

  • 제한된 사용자 집합이 액세스할 수 있는 폴더의 폴더 계층에서 가장 끝단의 폴더에 중요한 보고서 또는 기밀 보고서를 배치함으로써 강력한 사용 권한 정책을 지원하는 폴더 계층을 만듭니다. 보고서 서버에 게시하는 보고서, 모델, 공유 데이터 원본 및 리소스는 보고서 서버 사이트의 폴더 및 특정 항목에 대해 만든 역할 할당에 의해 보호됩니다. 폴더 계층은 완전한 사용자 정의가 가능하므로 원하는 경우 비슷한 사용자 액세스 권한을 가진 모든 항목을 그룹화하는 폴더 계층을 만들 수 있습니다. 자세한 내용은 폴더 보안 설정을 참조하십시오.

  • 요청 시 실행 보고서는 보고서 서버에서 보고서를 연 사용자의 자격 증명으로 완전 신뢰 수준에서 실행되는 컴파일된 어셈블리입니다. 로컬 또는 도메인 관리자 자격 증명을 사용하여 로그인한 후 악의적인 스크립트가 포함된 보고서를 여는 보고서 사용자는 의도하지 않게 이 스크립트를 관리자 권한으로 실행하게 됩니다. 사용자가 보고서를 볼 때 최소 권한 계정을 사용하도록 하십시오. 자세한 내용은 통합 보안 및 승격 권한을 참조하십시오.

  • 보고서에서 데이터가 검색되고 사용되는 방식을 파악합니다. 보고서에 중요한 데이터가 포함된 경우 보안 필터와 모델 항목 보안을 적용할 수 있도록 모델을 데이터 원본으로 사용하는 방법을 고려하십시오. 자세한 내용은 자습서: 보안 필터를 보고서 모델 항목에 적용을 참조하십시오.

  • 보고서가 배포되는 방식을 파악합니다. 구독 및 배달 기능은 보고서 처리를 자동화하고 생성된 보고서를 배포하기 위한 강력한 기술이지만 무단 액세스를 방지하려면 네트워크에서 공유 권한을 갖고 있는 사용자를 모니터링하고, 보고서 서버 전자 메일 구성 설정을 검토하여 전자 메일 배포를 제한해야 하는지 여부를 판단해야 합니다. 자세한 내용은 보고서 배포 제어를 참조하십시오.