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

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

이 문서에서는 다음 SDL 단계를 다룹니다.

  • 구현
  • 확인

구현

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

코드 검토 수행

코드에서 검사 전에 코드 검토를 수행하여 전체 코드 품질을 높이고 버그를 만들 위험을 줄입니다. Visual Studio를 사용하여 코드 검토 프로세스를 관리할 수 있습니다.

정적 코드 분석 수행

정적 코드 분석(소스 코드 분석이라고도 함)은 코드 검토의 일부로 수행됩니다. 정적 코드 분석은 일반적으로 실행하지 않는 코드에서 잠재적 취약성을 찾기 위해 정적 코드 분석 도구를 실행하는 것을 의미합니다. 정적 코드 분석은 taint 검사 및 데이터 흐름 분석같은 기술을 사용합니다.

Azure Marketplace는 정적 코드 분석을 수행하고 코드 검토를 지원하는 개발자 도구를 제공합니다.

애플리케이션에 대한 모든 입력의 유효성을 검사하고 정리

가장 일반적인 웹 애플리케이션 취약성으로부터 애플리케이션을 보호하기 위해 모든 입력을 신뢰할 수 없는 것으로 처리합니다. 신뢰할 수 없는 데이터는 삽입 공격을 위한 수단입니다. 애플리케이션에 대한 입력에는 URL의 매개 변수, 사용자의 입력, 데이터베이스 또는 API의 데이터 및 사용자가 잠재적으로 조작할 수 있는 모든 항목이 포함됩니다. 애플리케이션에서 데이터를 어떤 방식으로든 사용하기 전에(사용자에게 데이터를 다시 표시하는 것까지 포함) 데이터가 구문적으로, 의미적으로 올바른지 유효성을 검사해야 합니다.

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

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

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

  • 허용 목록은 지정된 사용자 입력이 "정상으로 알려진" 입력 집합과 일치하는지 검사 시도합니다. 문자 기반 허용 목록은 애플리케이션이 사용자 입력에 "알려진 양수" 문자만 포함하거나 입력이 알려진 형식과 일치하도록 검사 허용 목록의 한 형태입니다.

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

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

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

애플리케이션의 출력 확인

시각적으로 또는 문서 내에 표시되는 모든 출력은 항상 인코딩되고 이스케이프되어야 합니다. 출력 인코딩이라고도 하는 이스케이프는 신뢰할 수 없는 데이터가 주입 공격의 수단이 아닌지 확인하는 데 사용됩니다. 이스케이프를 데이터 유효성 검사와 함께 사용하면 계층형 방어를 통해 시스템 보안을 전체적으로 강화할 수 있습니다.

이스케이프를 사용하면 모든 항목이 출력으로 표시됩니다. 또한 이스케이프를 통해 인터프리터는 데이터가 실행될 의도가 없음을 알 수 있으며 이로 인해 공격이 작동하지 않습니다. 이것을 XSS(사이트 간 스크립팅)라고 하며 또 다른 형태의 일반적인 공격 기술입니다.

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

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

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

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

표준 서버 헤더 제거

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

프로덕션 데이터 분리

프로덕션 데이터 또는 "실제" 데이터는 개발, 테스트 또는 비즈니스가 의도한 용도 이외의 용도로 사용하면 안 됩니다. 마스킹된(익명화된) 데이터 세트는 모든 개발 및 테스트에 사용해야 합니다.

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

강력한 암호 정책 구현

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

Azure Active Directory B2C는 셀프 서비스 암호 재설정, 강제 암호 재설정 등을 제공하여 암호 관리를 도와줍니다.

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

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

파일 업로드 유효성 검사

애플리케이션에서 파일 업로드를 허용하는 경우 이 위험한 작업에 대해 수행할 수 있는 예방 조치를 생각해야 합니다. 많은 공격의 첫 번째 단계는 공격을 받고 있는 시스템에 일부 악성 코드를 가져오는 것입니다. 파일 업로드를 사용하면 공격자가 이 작업을 수행하는 데 도움이 됩니다. OWASP는 파일의 유효성을 검사하여 업로드하는 파일을 안전하게 보호하는 솔루션을 제공합니다.

맬웨어 방지 보호는 바이러스, 스파이웨어 및 기타 악성 소프트웨어를 식별하고 제거하는 데 도움이 됩니다. Microsoft 맬웨어 방지 또는 Microsoft 파트너의 엔드포인트 보호 솔루션(추세 Micro, Broadcom, McAfee, Windows의 Microsoft Defender 바이러스 백신 및 Endpoint Protection)을 설치할 수 있습니다.

Microsoft 맬웨어 방지에는 실시간 보호, 예약된 검사, 맬웨어 수정, 서명 업데이트, 엔진 업데이트, 샘플 보고 및 제외 이벤트 수집과 같은 기능이 포함되어 있습니다. 편리한 배포와 기본 제공 탐지(경고 및 인시던트)를 위해 클라우드용 Microsoft Defender와 Microsoft Antimalware 및 파트너 솔루션을 통합할 수 있습니다.

중요한 콘텐츠를 캐시하지 말 것

브라우저에서 중요한 콘텐츠를 캐시하지 마세요. 브라우저는 캐싱 및 기록에 대한 정보를 저장할 수 있습니다. 캐시된 파일은 Internet Explorer의 경우 임시 인터넷 파일 폴더와 같은 폴더에 저장됩니다. 이러한 페이지를 다시 참조하면 브라우저는 캐시의 페이지를 표시합니다. 중요한 정보(주소, 크레딧 카드 세부 정보, 주민등록번호, 사용자 이름)가 사용자에게 표시되면 브라우저의 캐시에 정보가 저장되고 브라우저의 캐시를 검사하거나 브라우저의 뒤로 단추를 눌러 검색할 수 있습니다.

확인

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

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

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

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

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

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

가급적이면 보안 전문가(침투 테스터 또는 취약성 평가자)의 도움을 받아 DAST를 수행하세요. 보안 전문가를 사용할 수 없는 경우 웹 프록시 스캐너 및 일부 교육을 사용하여 DAST를 직접 수행할 수 있습니다. DAST 스캐너를 초기에 연결하여 코드에 명백한 보안 문제가 발생하지 않도록 합니다. 웹 애플리케이션 취약성 스캐너 목록은 OWASP 사이트를 참조하세요.

퍼지 테스트 수행

퍼지 테스트에서는 애플리케이션에 형식이 잘못되었거나 임의의 데이터를 의도적으로 도입하여 프로그램 오류를 유도합니다. 프로그램 오류를 유도하면 애플리케이션을 릴리스하기 전에 잠재적 보안 문제를 발견하는 데 도움이 됩니다.

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

공격 노출 영역 검토 수행

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

애플리케이션을 검사하여 공격 표면의 그림을 작성할 수 있습니다. Microsoft는 Attack Surface Analyzer라고 하는 공격 노출 영역 분석 도구를 제공합니다. OWASP 공격 Surface Detector, Arachni 및 w3af를 비롯한 많은 상용 동적 테스트 및 취약성 검사 도구 또는 서비스 중에서 선택할 수 있습니다. 이러한 검사 도구는 앱을 크롤링하고 웹을 통해 액세스할 수 있는 애플리케이션의 부분을 매핑합니다. Azure Marketplace에서 비슷한 개발자 도구를 검색할 수도 있습니다.

보안 침투 테스트 수행

애플리케이션의 보안을 보장하는 것은 다른 기능을 테스트하는 것만큼 중요합니다. 침투 테스트를 빌드 및 배포 프로세스의 표준 파트로 설정하세요. 배포된 애플리케이션에서 보안 테스트 및 취약성 검사를 주기적으로 실시하고 열린 포트, 엔드포인트 및 공격을 모니터링하세요.

보안 확인 테스트 실행

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

다음 단계

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