위협 모델링: 아키텍처, 공격 시나리오, 통제
Sytance · 업데이트
위협 모델링은 제품이 어떤 방식으로 공격받을 수 있는지 식별하고 위험을 줄일 조치를 선택하는 체계적인 방법입니다. 제품 아키텍처에서 분석을 시작해 공격이 어떻게 성공할 수 있는지, 무엇에 영향을 주는지, 제안한 보호 조치를 어떻게 확인할지 설명합니다.
제품 버전 및 배포 환경
위협 모델은 특정 제품 버전과 배포 환경에 적용됩니다. 인터넷에 연결된 게이트웨이와 격리된 유지관리 네트워크에 연결된 동일한 게이트웨이는 진입점과 운영상 가정이 다를 수 있습니다.
아키텍처, 개발, 제품 사용, 보안에 대해 잘 아는 사람들을 참여시키세요. 회의 전에 정상 작동 과정을 처음부터 끝까지 설명할 수 있을 만큼 충분한 자료를 수집하세요.
- 릴리스, 지원되는 배포 환경, 의도된 사용자.
- 아키텍처, 외부 인터페이스, 교환되는 데이터.
- 각 사용자, 서비스, 로컬 프로세스의 권한.
- 보호해야 할 민감한 데이터, 자격 증명, 제품 기능.
- 기존 통제 및 확인이 필요한 가정.
데이터 흐름 및 신뢰 경계
데이터 흐름도(DFD)는 외부 엔터티, 프로세스, 데이터 저장소, 데이터 이동을 보여줍니다. 신뢰 경계는 신뢰 수준이나 권한이 달라지는 지점을 나타냅니다. 브라우저와 API 사이, 서로 다른 운영체제 계정 사이, 장치와 원격 서비스 사이에도 존재할 수 있습니다.
각 흐름의 방향, 데이터 설명, 보호 메커니즘을 명시하세요. 여러 서비스의 식별 정보와 권한이 다른데도 상자를 “클라우드”라고만 표시하면 너무 많은 정보가 감춰집니다. 그 차이에 따라 분석이 달라지면 상자를 분리하세요.
산업용 게이트웨이 예시에서는 운영자 브라우저, 게이트웨이 관리 API, 로컬 구성 저장소, 로컬 컨트롤러, 원격 측정 서비스, 업데이트 서비스부터 표현하세요. 관리와 원격 측정은 TLS 연결로 표시하세요. 구현 여부가 확인될 때까지 업데이트 서명 검증은 제안된 통제로 다루세요.
STRIDE 범주에서 공격 시나리오로
STRIDE는 위협을 스푸핑, 변조, 부인, 정보 노출, 서비스 거부, 권한 상승으로 분류합니다. 각 관련 프로세스와 흐름에 대해 질문을 떠올리는 데 이 범주를 사용하세요. 범주 이름만으로는 공격을 설명할 수 없습니다.
예를 들어 읽기 전용 권한을 가진 사용자가 관리 API에 직접 구성 변경 요청을 보냅니다. API가 로그인 여부는 확인하지만 작업 권한은 확인하지 않는다면 사용자가 게이트웨이 구성을 바꿀 수 있습니다. 이 예는 행위자, 진입점, 누락된 통제, 영향을 식별합니다.
각 시나리오를 다이어그램의 관련 인터페이스, 프로세스 또는 흐름에 연결하세요. 공격 조건이나 통제가 다르면 별도로 분석해야 합니다. 컨트롤러 인터페이스의 인증 여부처럼 조건을 모른다면 무엇을 확인해야 하는지 기록하세요.
위험 우선순위 및 보안 통제
위험 우선순위는 공격자에게 필요한 접근 권한과 역량, 성공 가능성, 제품에 미치는 결과에 따라 달라집니다. 합의된 위험 평가 방법을 사용하면 판단의 일관성이 높아집니다. 점수의 근거를 기록하면 다른 사람이 검토할 수 있습니다.
팀이 실행할 수 있는 대응책을 선택하세요. 구성 변경 시나리오의 경우 모든 쓰기 작업에서 API가 호출자의 권한을 확인하도록 요구하세요. 담당자, 목표 릴리스, 통제의 작동 여부를 확인할 방법을 지정하세요.
기존 TLS는 전송 연결을 보호하지만 로그인한 사용자에게 구성 변경 권한이 있는지를 확인해 주지는 않습니다. 통제가 막으려는 정확한 공격 단계를 기준으로 검토하세요. 팀이 잔여 위험을 수용한다면 그 이유와 해당 결정을 내릴 권한이 있는 사람을 기록하세요.
검증 및 모델 업데이트
제안된 통제와 검증된 통제는 상태가 다릅니다. 구현된 통제를 관련 변경 사항 및 검증 결과와 연결하세요. API 예시에서는 읽기 전용 사용자로 쓰기 요청을 보내 거부되는지와 구성이 변경되지 않는지를 모두 확인하세요.
인터페이스, 권한, 구성 요소, 배포 환경, 업데이트 메커니즘이 바뀌면 모델을 검토하세요. 새로운 취약점 정보에 따라 이전 가정이 무효화될 수도 있습니다. 특정 결정이 어떤 릴리스에 적용되었는지 설명할 수 있도록 이전 모델을 보존하세요.