다음을 통해 공유


Office 솔루션에 대한 특정 보안 고려 사항

Microsoft .NET Framework와 Microsoft Office에서 제공하는 보안 기능을 사용하면 잠재적인 보안 위협으로부터 Office 솔루션을 보호할 수 있습니다. 이 항목에서는 이 중 몇 가지 위협에 대해 설명하고 이들로부터 보호하기 위한 몇 가지 권장 사항을 제시합니다. Microsoft Office 보안 설정이 Office 솔루션에 어떤 식으로 영향을 주는지에 대해서도 설명합니다.

적용 대상: 이 항목의 정보는 Microsoft Office 2010 및 2007 Microsoft Office system의 문서 수준 프로젝트 및 응용 프로그램 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.

신뢰되는 코드가 악의적인 다른 문서에서 다른 용도로 사용된다

공격자는 특정한 목적(예: 입사 지원용 개인 정보 다운로드)을 위해 작성된 신뢰되는 코드를 가로채서 워크시트 같은 다른 문서에서 이를 다시 사용할 수 있습니다. 코드는 원래 문서가 실행되고 있지 않다는 사실을 알 수 없으므로 다른 사용자가 코드를 열었을 때 개인 정보가 노출되거나 더 높은 권한으로 코드가 실행되는 등 다른 위협이 발생할 수 있습니다. 또는 공격자가 워크시트의 데이터를 간단히 수정하여 이 데이터가 공격 대상에 전달될 때 예기치 않은 방식으로 작동하도록 만들 수 있습니다. 악의적인 사용자는 코드에 연결된 워크시트의 값, 수식 또는 표시 특성을 바꿈으로써 변경된 파일을 전달하여 다른 사용자를 공격할 수 있습니다. 워크시트의 값을 수정함으로써 특정 정보를 볼 권한이 없는 사용자가 그러한 정보에 액세스하게 되는 문제가 생길 수도 있습니다.

  • 실행에 필요한 충분한 증명이 어셈블리 위치와 문서 위치 모두에 있어야 하므로 이러한 공격을 수행하기는 쉽지 않습니다. 예를 들어, 전자 메일에 첨부된 문서 또는 신뢰되지 않는 인트라넷 서버에 있는 문서에는 실행을 위한 충분한 권한이 없습니다.

  • 이러한 공격이 가능하려면 신뢰할 수 없는 데이터를 기반으로 결정을 내릴 수 있도록 코드 자체가 작성되어야 합니다. 예제에서는 데이터베이스 서버 이름을 포함하는 숨김 셀이 있는 워크시트를 만듭니다. 사용자는 워크시트를 ASPX 페이지에 제출하여 SQL 인증과 하드 코드된 SA 암호를 사용하여 해당 서버에 연결하려고 시도합니다. 공격자는 숨김 셀의 내용을 다른 컴퓨터 이름으로 바꾼 다음 SA 암호를 가져올 수 있습니다. 이 문제를 방지하려면 암호를 하드 코드로 작성하지 마십시오. 서버에 액세스하기 전에 알려진 내부 서버 목록에 대해 서버 ID를 확인합니다.

권장 사항

  • 사용자, 문서, 데이터베이스, 웹 서비스 또는 기타 모든 소스에서 가져온 입력 내용과 데이터에 대해 항상 유효성을 확인하는 것이 좋습니다.

  • 특별한 유형의 기능이 노출되는 경우를 주의하십시오. 예를 들어 특정한 권한을 필요로 하는 데이터를 허가된 사용자 대신 액세스하여 보호되지 않은 워크시트에 입력할 수 있습니다.

  • 응용 프로그램의 유형에 따라서는 코드를 실행하기 전에 원래의 문서가 실행되고 있는지 여부를 확인하는 것이 좋을 수도 있습니다. 예를 들어, 현재의 코드가 알려진 안전한 위치에 저장된 문서에서 실행되고 있는지 여부를 확인합니다.

  • 응용 프로그램에서 권한이 부여된 작업을 수행하려는 경우 문서가 열려 있으면 경고를 표시하도록 만드는 것도 좋은 방법입니다. 예를 들어, 응용 프로그램에서 개인 정보에 액세스할 것이라는 메시지가 표시되는 시작 화면 또는 시작 대화 상자를 만들어 사용자가 작업을 계속할 것인지 또는 취소할 것인지 선택하도록 할 수 있습니다. 정상적인 것처럼 보이는 문서를 사용하려고 할 때 이러한 경고가 발생하면 최종 사용자는 위험에 노출되기 전에 응용 프로그램을 종료할 수 있습니다.

코드가 Outlook 개체 모델 가드에 의해 차단된다

Microsoft Office에서는 코드에서 개체 모델의 특정 속성, 메서드 및 개체를 사용할 수 없도록 제한될 수 있습니다. Outlook에서 이러한 개체에 대한 액세스를 제한하여 전자 메일 웜과 바이러스가 악의적인 목적으로 개체 모델을 사용하지 못하도록 할 수 있습니다. 이 보안 기능을 Outlook 개체 모델 가드라고 합니다. 개체 모델 가드가 활성화된 상태에서 추가 기능이 제한된 속성이나 메서드를 사용하려고 시도하면 Outlook에서는 사용자가 작업을 중지하거나 제한된 시간 동안 속성이나 메서드에 대한 액세스를 허용할 수 있도록 보안 경고를 표시합니다. 사용자가 작업을 중지하면 Visual Studio Tools for Office를 사용하여 만든 Outlook 추가 기능에서는 COMException을 throw합니다.

개체 모델 가드는 Outlook을 Microsoft Exchange Server와 함께 사용하는지에 따라 여러 가지 방식으로 추가 기능에 영향을 줄 수 있습니다.

  • Outlook을 Exchange와 함께 사용하지 않을 경우 관리자는 컴퓨터의 모든 추가 기능에 대해 개체 모델 가드를 활성화하거나 비활성화할 수 있습니다.

  • Outlook을 Exchange와 함께 사용할 경우 관리자는 컴퓨터의 모든 추가 기능에 대해 개체 모델 가드를 활성화/비활성화하거나, 특정 추가 기능이 개체 모델 가드를 만나지 않고 실행될 수 있도록 지정할 수 있습니다. 관리자는 개체 모델의 특정 영역에 대해 개체 모델 가드의 동작을 수정할 수도 있습니다. 예를 들어, 관리자는 개체 모델 가드가 활성화되어 있더라도 자동으로 추가 기능이 프로그래밍 방식으로 전자 메일을 보내도록 할 수 있습니다.

Outlook 2007에서는 Outlook 보안을 유지하면서 개발자와 사용자의 환경을 개선하기 위해 개체 모델 가드의 동작이 변경되었습니다. 자세한 내용은 Code Security Changes in Outlook 2007을 참조하십시오.

개체 모델 가드 경고 최소화

제한된 속성과 메서드를 사용할 때 보안 경고가 표시되지 않도록 하려면 추가 기능이 프로젝트 ThisAddIn 클래스의 Application 필드에서 Outlook 개체를 가져오도록 설정합니다. 이 필드에 대한 자세한 내용은 응용 프로그램 수준 추가 기능 프로그래밍을 참조하십시오.

이 개체에서 가져온 Outlook 개체만 개체 모델 가드에서 신뢰할 수 있습니다. 이와 반대로 새 Microsoft.Office.Interop.Outlook.Application 개체에서 가져온 개체는 신뢰되지 않으며, 개체 모델 가드가 활성화된 경우 제한된 속성과 메서드를 사용하면 보안 경고가 발생합니다.

다음 코드 예제에서는 개체 모델 가드가 활성화된 경우 보안 경고를 표시합니다. Microsoft.Office.Interop.Outlook.MailItem 클래스의 To 속성은 개체 모델 가드에 의해 제한됩니다. 이 코드에서는 Microsoft.Office.Interop.Outlook.MailItem 개체를 Application 필드에서 가져오는 대신 new 연산자를 사용하여 만들어지는 Microsoft.Office.Interop.Outlook.Application에서 가져오므로 해당 개체가 신뢰되지 않습니다.

Private Sub UntrustedCode()
    Dim application As New Microsoft.Office.Interop.Outlook.Application
    Dim mailItem1 As Microsoft.Office.Interop.Outlook.MailItem = _
        TryCast(application.CreateItem( _
        Microsoft.Office.Interop.Outlook.OlItemType.olMailItem),  _
        Microsoft.Office.Interop.Outlook.MailItem)
    mailItem1.To = "someone@example.com"
    MessageBox.Show(mailItem1.To)
End Sub
private void UntrustedCode()
{
    Microsoft.Office.Interop.Outlook.Application application =
        new Microsoft.Office.Interop.Outlook.Application();
    Microsoft.Office.Interop.Outlook.MailItem mailItem1 =
        application.CreateItem(
        Microsoft.Office.Interop.Outlook.OlItemType.olMailItem) as
        Microsoft.Office.Interop.Outlook.MailItem;
    mailItem1.To = "someone@example.com";
    MessageBox.Show(mailItem1.To);
}

다음 코드 예제에서는 개체 모델 가드에서 신뢰되는 Microsoft.Office.Interop.Outlook.MailItem 개체의 제한된 To 속성을 사용하는 방법을 보여 줍니다. 이 코드에서는 신뢰되는 Application 필드를 사용하여 Microsoft.Office.Interop.Outlook.MailItem을 가져옵니다.

Private Sub TrustedCode()
    Dim mailItem1 As Microsoft.Office.Interop.Outlook.MailItem = _
        TryCast(Me.Application.CreateItem( _
        Microsoft.Office.Interop.Outlook.OlItemType.olMailItem),  _
        Microsoft.Office.Interop.Outlook.MailItem)
    mailItem1.To = "someone@example.com"
    MessageBox.Show(mailItem1.To)
End Sub
private void TrustedCode()
{
    Microsoft.Office.Interop.Outlook.MailItem mailItem1 =
        this.Application.CreateItem(
        Microsoft.Office.Interop.Outlook.OlItemType.olMailItem) as
        Microsoft.Office.Interop.Outlook.MailItem;
    mailItem1.To = "someone@example.com";
    MessageBox.Show(mailItem1.To);
}

참고

Outlook을 Exchange와 함께 사용하는 경우 모든 Outlook 개체를 ThisAddIn.Application에서 가져오더라도 추가 기능에서 전체 Outlook 개체 모델에 액세스할 수 있다고 보장할 수 없습니다. 예를 들어 Exchange 관리자가 Outlook 개체 모델을 사용하여 주소 정보에 액세스하려는 모든 시도를 자동으로 거부하도록 설정하는 경우 이전 코드 예제에서는 신뢰되는 ThisAddIn.Application 필드를 사용하더라도 To 속성에 액세스할 수 없습니다.

Exchange 사용 시 신뢰할 추가 기능 지정

Outlook을 Exchange와 함께 사용할 경우 관리자는 특정 추가 기능이 개체 모델 가드를 만나지 않고 실행될 수 있도록 지정할 수 있습니다. Visual Studio Tools for Office를 사용하여 만들어진 Outlook 추가 기능은 개별적으로 신뢰될 수 없고 그룹으로만 신뢰될 수 있습니다.

Outlook에서는 추가 기능의 진입점 DLL 해시 코드를 기반으로 추가 기능을 신뢰합니다. Microsoft Visual Studio Tools for Office Runtime을 대상으로 하는 모든 Outlook 추가 기능은 동일한 진입점 DLL(VSTOLoader.dll)을 사용합니다. 즉, 관리자가 개체 모델 가드를 만나지 않고 실행되도록 Microsoft Visual Studio Tools for Office Runtime을 대상으로 하는 추가 기능을 신뢰하면 Microsoft Visual Studio Tools for Office Runtime을 대상으로 하는 다른 모든 추가 기능도 신뢰됩니다. 개체 모델 가드를 만나지 않고 실행되도록 특정 추가 기능을 신뢰하는 방법에 대한 자세한 내용은 Outlook에서 바이러스 예방 기능을 관리하는 데 사용되는 방법 지정을 참조하십시오.

권한 변경이 즉시 적용되지 않는다

관리자가 문서 또는 어셈블리에 대한 권한을 조정한 경우 변경 사항이 적용되려면 사용자가 모든 Office 응용 프로그램을 종료한 다음 다시 시작해야 합니다.

Microsoft Office 응용 프로그램을 호스팅하는 다른 응용 프로그램으로 인해 새로운 권한이 적용되지 않을 수도 있습니다. 보안 정책이 변경되면 사용자는 Office를 사용하는 호스팅 또는 독립 실행형 응용 프로그램을 모두 종료해야 합니다.

Microsoft Office System의 보안 센터 설정은 추가 기능 또는 문서 수준 사용자 지정에 영향을 주지 않는다

사용자는 보안 센터에서 옵션을 설정하여 추가 기능이 로드되지 않게 할 수 있습니다. 그러나 Visual Studio Tools for Office를 사용하여 만든 응용 프로그램 수준 추가 기능과 문서 수준 사용자 지정은 이러한 신뢰 설정의 영향을 받지 않습니다.

사용자가 보안 센터를 사용하여 추가 기능이 로드되지 않게 하면 다음과 같은 형식의 추가 기능이 로드되지 않습니다.

  • 관리되는 COM 추가 기능 및 관리되지 않는 COM 추가 기능

  • 관리되는 스마트 태그 및 관리되지 않는 스마트 태그

  • 관리되는 스마트 문서 및 관리되지 않는 스마트 문서

  • 관리되는 자동화 추가 기능 및 관리되지 않는 자동화 추가 기능

  • 관리되는 실시간 데이터 구성 요소 및 관리되지 않는 실시간 데이터 구성 요소

참고

Excel 2010 및 Word 2010에서 스마트 태그는 더 이상 사용되지 않습니다. 자세한 내용은 스마트 태그 개요를 참조하십시오.

다음 절차에서는 2007 Microsoft Office System에서 보안 센터를 사용하여 추가 기능이 로드되지 않도록 제한하는 방법을 보여 줍니다. 이 절차를 수행하더라도 Visual Studio Tools for Office를 사용하여 만든 추가 기능이나 사용자 지정은 영향을 받지 않습니다.

Microsoft Office 2010 응용 프로그램, Excel 2007, PowerPoint 2007 또는 Word 2007에서 추가 기능을 사용하지 않도록 설정하려면

  1. 파일 탭(Microsoft Office 2010 응용 프로그램의 경우) 또는 Microsoft Office 단추(2007 Microsoft Office 응용 프로그램의 경우)를 클릭합니다.

  2. ApplicationName 옵션 단추를 클릭합니다.

  3. 범주 창에서 보안 센터를 클릭합니다.

  4. 세부 정보 창에서 보안 센터 설정을 클릭합니다.

  5. 범주 창에서 추가 기능을 클릭합니다.

  6. 세부 정보 창에서 응용 프로그램 추가 기능에 신뢰할 수 있는 게시자의 서명 필요 또는 모든 응용 프로그램 추가 기능 사용 안 함을 선택합니다.

InfoPath 2007, Outlook 2007, Project 2007 또는 Visio 2007에서 추가 기능을 사용하지 않도록 설정하려면

  1. 도구 메뉴에서 보안 센터를 클릭합니다.

  2. 범주 창에서 매크로 보안을 클릭합니다.

  3. 세부 정보 창에서 경고를 표시하지 않고 모든 매크로를 실행하지 않음 또는 서명한 매크로에 대해 경고 표시, 서명이 없는 모든 매크로를 실행하지 않음을 선택합니다.

  4. 범주 창에서 추가 기능을 클릭합니다.

  5. 세부 정보 창에서 설치된 추가 기능에 대해 매크로 보안 설정 적용을 선택합니다.

참고 항목

기타 리소스

Office 솔루션 보안