다음을 통해 공유


Azure에서 보안 애플리케이션 개발

이 문서에서는 클라우드용 애플리케이션을 개발할 때 고려해야 할 보안 활동 및 컨트롤을 제공합니다. Microsoft SDL(보안 개발 수명 주기) 의 구현 및 확인 단계에서 고려해야 할 보안 질문 및 개념에 대해 설명합니다. 목표는 보다 안전한 애플리케이션을 개발하는 데 사용할 수 있는 활동 및 Azure 서비스를 정의하는 데 도움이 되는 것입니다.

이 문서에서 다루는 SDL 단계는 다음과 같습니다.

  • Implementation
  • Verification

Implementation

구현 단계의 초점은 조기 예방을 위한 모범 사례를 설정하고 코드에서 보안 문제를 감지하고 제거하는 것입니다. 애플리케이션이 의도하지 않은 방식으로 사용된다고 가정합니다. 이렇게 하면 애플리케이션의 우발적이거나 의도적인 오용을 방지할 수 있습니다.

코드 검토 수행

코드를 체크 인하기 전에 코드 검토를 수행하여 전체 코드 품질을 높이고 버그를 만들 위험을 줄입니다. You can use Visual Studio to manage the code review process.

정적 코드 분석 수행

정적 코드 분석 ( 소스 코드 분석이라고도 함)은 코드 검토의 일부로 수행됩니다. 정적 코드 분석은 일반적으로 실행하지 않는 코드에서 잠재적 취약성을 찾기 위해 정적 코드 분석 도구를 실행하는 것을 의미합니다. Static code analysis uses techniques like taint checking and data flow analysis.

Azure Marketplace offers developer tools that perform static code analysis and assist with code reviews.

애플리케이션에 대한 모든 입력을 유효성 검사하고 정제하십시오.

가장 일반적인 웹 애플리케이션 취약성으로부터 애플리케이션을 보호하기 위해 모든 입력을 신뢰할 수 없는 것으로 처리합니다. 신뢰할 수 없는 데이터는 삽입 공격을 위한 수단입니다. 애플리케이션에 대한 입력에는 URL의 매개 변수, 사용자의 입력, 데이터베이스 또는 API의 데이터 및 사용자가 잠재적으로 조작할 수 있는 모든 항목이 포함됩니다. An application should validate that data is syntactically and semantically valid before the application uses the data in any way (including displaying it back to the user).

데이터 흐름 초기에 입력의 유효성을 검사하여 올바르게 구성된 데이터만 워크플로에 들어가는지 확인합니다. 잘못된 형식의 데이터가 데이터베이스에 유지되거나 다운스트림 구성 요소에서 오작동을 트리거하지 않도록 합니다.

차단 목록 및 허용 목록은 입력 구문 유효성 검사를 수행하는 두 가지 일반적인 접근 방식입니다.

  • 차단 목록은 지정된 사용자 입력에 "악의적인 것으로 알려진" 콘텐츠가 포함되어 있지 않은지 확인하려고 시도합니다.

  • 허용 목록은 지정된 사용자 입력이 "정상으로 알려진" 입력 집합과 일치하는지 확인하려고 시도합니다. 문자 기반 허용 목록은 애플리케이션이 사용자 입력이 "알려진 안전한" 문자만 포함하는지 또는 입력이 알려진 형식과 일치하는지를 확인하는 허용 목록의 한 형태입니다.

    예를 들어 사용자 이름에 영숫자 문자만 포함하거나 정확히 두 개의 숫자가 포함되어 있는지 확인하는 작업이 포함될 수 있습니다.

허용 목록은 보안 소프트웨어를 빌드하는 데 선호되는 방법입니다. 차단 목록은 잠재적으로 잘못된 입력의 전체 목록을 생각할 수 없기 때문에 오류가 발생하기 쉽습니다.

클라이언트 쪽(또는 서버 및 클라이언트 쪽)이 아닌 서버에서 이 작업을 수행합니다.

애플리케이션의 출력 확인

시각적으로 또는 문서 내에 표시되는 모든 출력은 항상 인코딩되고 이스케이프되어야 합니다. Escaping, also known as output encoding, is used to help ensure that untrusted data isn't a vehicle for an injection attack. 이스케이프를 데이터 유효성 검사와 함께 사용하면 계층형 방어를 통해 시스템 보안을 전체적으로 강화할 수 있습니다.

Escaping makes sure that everything is displayed as output. Escaping also lets the interpreter know that the data isn't intended to be executed, and this prevents attacks from working. This is another common attack technique called cross-site scripting (XSS).

타사에서 웹 프레임워크를 사용하는 경우 OWASP XSS 방지 치트 시트를 사용하여 웹 사이트에서 출력 인코딩 옵션을 확인할 수 있습니다.

데이터베이스에 연결할 때 매개 변수가 있는 쿼리 사용

코드에서 "즉시" 인라인 데이터베이스 쿼리를 만들고 데이터베이스에 직접 보내지 마세요. 애플리케이션에 삽입된 악성 코드로 인해 데이터베이스가 도난, 초기화 또는 수정될 수 있습니다. 애플리케이션을 사용하여 데이터베이스를 호스트하는 운영 체제에서 악성 운영 체제 명령을 실행할 수도 있습니다.

대신 매개 변수가 있는 쿼리 또는 저장 프로시저를 사용합니다. 매개 변수가 있는 쿼리를 사용하는 경우 코드에서 프로시저를 안전하게 호출하고 쿼리 문의 일부로 처리될 것이라는 걱정 없이 문자열을 전달할 수 있습니다.

표준 서버 헤더 제거

서버, X-Powered-By 및 X-AspNet-Version 같은 헤더는 서버 및 기본 기술에 대한 정보를 표시합니다. 애플리케이션의 지문을 방지하려면 이러한 헤더를 표시하지 않는 것이 좋습니다. Azure 웹 사이트에서 표준 서버 헤더 제거를 참조하세요.

프로덕션 데이터 분리

프로덕션 데이터 또는 "실제" 데이터는 개발, 테스트 또는 비즈니스가 의도한 용도 이외의 용도로 사용하면 안 됩니다. A masked (anonymized) dataset should be used for all development and testing.

즉, 실제 데이터에 액세스할 수 있는 사람이 적어 공격 노출 영역이 줄어듭니다. 또한 개인 데이터를 보는 직원의 수가 줄어들어 기밀 유지에 대한 잠재적 위반이 제거됩니다.

강력한 암호 정책 구현

무차별 암호 대입 및 사전 기반 추측을 방지하려면 사용자가 복잡한 암호를 만들도록 강력한 암호 정책을 구현해야 합니다(예: 최소 길이 12자, 영숫자 및 특수 문자 필요).

외부 테넌트에서 Microsoft Entra 외부 ID는 셀프 서비스 암호 재설정 등을 제공하여 암호 관리에 도움이 됩니다.

기본 계정의 공격을 방어하려면 모든 키와 암호를 바꿀 수 있는지, 리소스를 설치한 후에 생성되거나 교체되었는지 확인합니다.

애플리케이션에서 암호를 자동으로 생성해야 하는 경우 생성된 암호가 임의이고 엔트로피가 높은지 확인합니다.

파일 업로드 유효성 검사

If your application allows file uploads, consider precautions that you can take for this risky activity. 많은 공격의 첫 번째 단계는 공격을 받고 있는 시스템에 일부 악성 코드를 가져오는 것입니다. 파일 업로드를 사용하면 공격자가 이 작업을 수행하는 데 도움이 됩니다. OWASP는 업로드하는 파일이 안전한지 확인하기 위해 파일의 유효성을 검사하는 솔루션을 제공합니다.

맬웨어 방지 보호는 바이러스, 스파이웨어 및 기타 악성 소프트웨어를 식별하고 제거하는 데 도움이 됩니다. You can install Microsoft Antimalware or a Microsoft partner's endpoint protection solution (Trend Micro, Broadcom, McAfee, Microsoft Defender Antivirus in Windows, and Endpoint Protection).

Microsoft Antimalware includes features like real-time protection, scheduled scanning, malware remediation, signature updates, engine updates, samples reporting, and exclusion event collection. 편리한 배포와 기본 제공 탐지(경고 및 인시던트)를 위해 클라우드용 Microsoft Defender와 Microsoft Antimalware 및 파트너 솔루션을 통합할 수 있습니다.

중요한 콘텐츠를 캐시하지 마세요.

브라우저에서 중요한 콘텐츠를 캐시하지 마세요. 브라우저는 캐싱 및 기록에 대한 정보를 저장할 수 있습니다. 캐시된 파일은 Internet Explorer의 경우 임시 인터넷 파일 폴더와 같은 폴더에 저장됩니다. 이러한 페이지를 다시 참조하면 브라우저는 캐시의 페이지를 표시합니다. If sensitive information (address, credit card details, Social security number, username) is displayed to the user, the information might be stored in the browser's cache and be retrievable by examining the browser's cache or by pressing the browser's Back button.

Verification

확인 단계에는 코드가 이전 단계에서 설정된 보안 및 개인 정보 보호 테넌트를 충족하는지 확인하기 위한 포괄적인 노력이 포함됩니다.

애플리케이션 종속성에서 취약성 찾기 및 해결

애플리케이션 및 해당 종속 라이브러리를 검사하여 알려진 취약한 구성 요소를 식별합니다. 이 검사를 수행할 수 있는 제품에는 OWASP 종속성 검사, SnykBlack Duck이 포함됩니다.

운영 상태에서 애플리케이션 테스트

DAST(동적 애플리케이션 보안 테스트)는 운영 상태에서 애플리케이션을 테스트하여 보안 취약성을 찾는 프로세스입니다. DAST 도구는 실행 중인 프로그램을 분석하여 메모리 손상, 안전하지 않은 서버 구성, 사이트 간 스크립팅, 사용자 권한 문제, SQL 삽입 및 기타 중요한 보안 문제와 같은 보안 취약성을 찾습니다.

DAST는 SAST(정적 애플리케이션 보안 테스트)와 다릅니다. SAST 도구는 코드가 실행되지 않을 때 소스 코드 또는 컴파일된 버전의 코드를 분석하여 보안 결함을 찾습니다.

Perform DAST, preferably with the assistance of a security professional (a penetration tester or vulnerability assessor). 보안 전문가를 사용할 수 없는 경우 웹 프록시 스캐너 및 일부 교육을 사용하여 DAST를 직접 수행할 수 있습니다. DAST 스캐너를 초기에 연결하여 코드에 명백한 보안 문제가 발생하지 않도록 합니다. See the OWASP site for a list of web application vulnerability scanners.

퍼지 테스트 수행

In fuzz testing, you induce program failure by deliberately introducing malformed or random data to an application. 프로그램 오류를 유도하면 애플리케이션이 릴리스되기 전에 잠재적인 보안 문제를 파악할 수 있습니다.

보안 위험 검색 은 소프트웨어에서 보안에 중요한 버그를 찾기 위한 Microsoft 고유의 퍼지 테스트 서비스입니다.

공격 노출 영역 검토 수행

코드 완성 후 공격 표면을 검토하면 애플리케이션 또는 시스템에 대한 디자인 또는 구현 변경 내용을 고려하는 데 도움이 됩니다. 위협 모델을 포함하여 변경 내용의 결과로 생성된 새 공격 벡터가 검토되고 완화되었는지 확인하는 데 도움이 됩니다.

애플리케이션을 검사하여 공격 표면의 그림을 작성할 수 있습니다. Microsoft는 공격 표면 분석기라는 공격 표면 분석 도구를 제공합니다. OWASP 공격 Surface Detector, Arachniw3af를 비롯한 많은 상용 동적 테스트 및 취약성 검사 도구 또는 서비스 중에서 선택할 수 있습니다. 이러한 검사 도구는 앱을 크롤링하고 웹을 통해 액세스할 수 있는 애플리케이션의 부분을 매핑합니다. You can also search the Azure Marketplace for similar developer tools.

보안 침투 테스트 수행

애플리케이션의 보안을 보장하는 것은 다른 기능을 테스트하는 것만큼 중요합니다. Make penetration testing a standard part of the build and deployment process. 배포된 애플리케이션에서 보안 테스트 및 취약성 검사를 주기적으로 실시하고 열린 포트, 엔드포인트 및 공격을 모니터링하세요.

보안 확인 테스트 실행

AzSK(Secure DevOps Kit for Azure)의 AzTS(Azure 테넌트 보안 솔루션 )에는 Azure 플랫폼의 여러 서비스에 대한 SVT가 포함되어 있습니다. 이러한 SVT를 주기적으로 실행하여 Azure 구독 및 애플리케이션을 구성하는 다양한 리소스가 안전한 상태인지 확인합니다. 또한 SVT를 Visual Studio 확장으로 사용할 수 있도록 하는 AzSK의 CI/CD(연속 통합/지속적인 배포) 확장 기능을 사용하여 이러한 테스트를 자동화할 수 있습니다.

Next steps

다음 문서에서는 보안 애플리케이션을 디자인하고 배포하는 데 도움이 되는 보안 제어 및 활동을 권장합니다.