자동화 보안을 위한 최선의 방법
업데이트: 2007년 11월
Visual Studio 자동화 개발자는 보안과 관련하여 발생할 수 있는 문제를 파악하고 안전한 응용 프로그램을 만드는 데 최선을 다해야 합니다. 안전한 응용 프로그램은 고객 정보의 기밀성, 무결성 및 가용성을 보호하는 응용 프로그램입니다. 또한 안전한 응용 프로그램은 시스템 소유자나 관리자가 제어하는 프로세스 리소스의 무결성과 가용성을 보호해야 합니다.
이 설명에서 말하는 보안상의 취약점이란 제품을 올바르게 사용하는 경우라 하더라도 공격자가 다음과 같은 작업을 수행할 수 있도록 빌미를 제공하는 제품의 결함을 의미합니다.
사용자의 시스템에 대한 적절한 권한 획득
작업 통제, 변경 또는 리디렉션
데이터 손상
- 또는 -
허가되지 않은 신뢰 수준 획득
중요: |
---|
응용 프로그램이 몇 가지 특정 환경에서만 실행되리라는 기대는 하지 말아야 합니다. 특히 응용 프로그램이 널리 사용되는 경우에 대비해야 합니다. 미리 예측하지 못했던 다른 설정에서 응용 프로그램이 사용될 가능성은 얼마든지 있습니다. 오히려 해당 코드가 최악의 환경에서 실행되는 경우를 가정해 보는 것이 좋습니다. 코드를 디자인하고 작성 및 테스트할 때는 이러한 자세를 유지할 필요가 있습니다. |
안전한 응용 프로그램을 만들면 몇 가지 이점을 얻을 수 있습니다. 처음부터 보안을 염두에 두고 디자인하여 빌드한 코드는 뒤늦게 보안 문제를 파악하고 관련 부분을 새로 작성하여 추가한 코드보다 더 강력합니다. 안전을 우선 과제로 설정하여 디자인한 응용 프로그램은 언론의 매서운 비평 속에서 살아남을 수 있고 사용자에게 더 매력적으로 다가갈 수 있으며 문제 해결이나 지원에 드는 비용을 줄일 수 있습니다.
위험한 API
일부 API 함수는 보안이라는 측면에서 볼 때 다른 API보다 훨씬 더 위험할 수 있습니다. 어떤 API 함수는 해당 기능의 작동 방식으로 인해 본질적으로 위험한 것일 수 있고, 어떤 API 함수는 이를 잘못 호출하거나 처리하여 위험해질 수 있습니다. 요점은 호출하려는 여러 가지 API 함수의 숨겨진 위험과 불확정 요소에 대해 잘 알고 있어야 한다는 것입니다. 이러한 API 함수로 인해 보안에 어떠한 종류의 위험이라도 발생할 수 있다면 이를 올바르게 사용하도록 주의해야 합니다.
또한 코드에서 "안전"한 것으로 간주되는 API 함수만 사용한다고 해서 응용 프로그램도 마찬가지로 보안이 보장되고 안전하리라는 생각은 버려야 합니다. 타성에 젖은 프로그래밍 습관으로 인해 응용 프로그램이 위험에 노출될 가능성은 "위험"한 것으로 간주되는 함수를 사용하는 경우 못지않게 높습니다. 이러한 습관으로는 다음과 같은 예를 들 수 있습니다.
잘못된 예외 처리
하드 코드로 작성한 경로 사용
하드 코드로 작성한 연결 문자열 사용
- 또는 -
적절한 사용자 자격 증명 또는 권한 검사 소홀
응용 프로그램을 보호하려면 코드 보안 문제를 공부하여 이를 확실하게 이해할 필요가 있습니다. Microsoft Press에서 출판한 Writing Secure Code와 Security Coding Guidelines 사이트(https://msdn2.microsoft.com/en-us/library/d55zzx87.aspx)는 훌륭한 자료입니다.
간과하지 말아야 할 또 한 가지 중요한 사실은 대부분의 보안 문제가 응용 프로그램에서 데이터 입력을 무조건 신뢰하는 결과로 발생한다는 점입니다. 응용 프로그램에 데이터가 전달되면 이를 사용하기 전에 데이터를 주의 깊게 조사하고 유효성을 검사하여 그 형식이 올바르고 신뢰할 수 있는지 확인해야 합니다.
자동화 보안 기능
이러한 지침을 준수하는 것 이외에도 Visual Studio 자동화에서 제공하는 몇 가지 간단하고 특별한 방법을 사용하여 시스템을 자동화 보안 공격으로부터 보호할 수 있습니다. 그러나 이러한 방법이 모든 보안 문제에 대한 만능 해결책은 될 수 없다는 사실을 명심해야 합니다. 이러한 기능을 출발점으로 삼아 더 강화된 보안을 구축해야 합니다. 자세한 내용은 추가 기능 보안을 참조하십시오.
자동화 응용 프로그램을 빌드하기 전에 먼저 .NET 보안 지침을 주의 깊게 읽고 준수하도록 하십시오.