눈치 빠른 사람은 이미 짐작했겠지만, 요즘 다시 방법론, 프로젝트 매니지먼트, 또는 아키텍쳐 쪽에 집중하고 있다. 우선은 눈에 보이는 목표가 필요해서 MCAD 자격증을 MCSD 로 업그레이드하려고 한다. 즉, Microsoft Solution Framework 를 공부하고 있다. 애당초 자격증에 무슨 미련을 두는 인간이 아니지만, 회사 생활을 하다 보면 가시적인 목표없이 일을 진행하기 버거울 때가 있다. 오늘은 어플리케이션 보안 설계에 사용되는 STRIDE 위협모델이라는 것에 대해 알아볼 생각이다. Secure Systems Begin With Knowing Your Threats, Part 1라는 글을 내 마음대로 번역 및 개작, 심지어 변조까지 해서 아래 글이 탄생했다. 최근에 외국계 보험회사가 Risk management 라는 문서를 보내왔는데, ‘정말 제대로 일하는구나’라는 생각이 들었다. 다시 말해 아래에서 말하는 모델 등이 단순한 이론의 문제가 아니라는 것이다.
아키텍쳐 설계 단계에서 보안 이슈를 다루게 된다. 물론 설계 단계 이후에도 보안 이슈를 재점검하게 되기도 하지만, 문제를 조기에 발견할수록 비용이 적게 든다. 이때 고객과 보안 문제에 대해 이야기를 나누게 된다. 고객은 보안 문제를 중요하게 다뤄야 한다고 강조할 것이다. 그러나 예상되는 위협이 무엇인지 묻는다면, 전문가인 당신이 알아서 해야 하는 것 아니냐고 되묻기 마련이다. 이 단계에서는 예상되는 위협이 무엇인지 파악하는 것이 선결과제라고 할 수 있다.
어떤 위협 요소가 있는가?
다행스럽게도 위협요소를 파악하는 것은 간단하다.
- 각 기능 분야별 전문가를 한 두명씩 모은다.
- 한방에 피자를 올려놓고 앉는다. 한두시간 가량 각 기능 분야별로 예상되는 위협에 대해 브레인스토밍을 한다.
- 위협에 우선순위를 매긴다.
- 완화 계획(The mitigation plan)을 세운다.
- 완화 기술을 결정한다.
위의 과정을 여러번 반복해야 할지도 모른다. 단 한번의 시도로 모든 위협을 잡아내기란 쉽지 않다. 또한 상황은 시간이 흐름에 따라 변하기 마련이다. 새로운 이슈나 비즈니스 및 기술변화 등이 새로운 위협이 되기도 한다.
위협 분석 과정
위협 분석은 어려우면서 시간을 잡아먹는 일이다. 하지만 위협을 제대로 이해하지 못한다면, 안전한 어플리케이션을 만들 수는 없다.
STRIDE 모델 사용하기
위협을 분류하기 위한 모델 중에는 STRIDE가 있다. STRIDE는 위협을 다음과 같이 분류한다.
- Spoofing identity
- Tampering with data (also called integrity threats)
- Repudiation
- Information disclosure
- Denial of service
- Elevation of privilege
이제 각각을 좀더 자세히 알아보자.
Spoofing Identity
사용자의 아이디와 암호와 같은 정보에 불법적으로 접근하고 그것을 사용하는 것을 말한다.
Tampering with Data
데이터 변조를 뜻한다. 사용자나 외부 침입자가 데이터베이스에 들어있는 정보나, 인터넷 상의 통신 내용 등을 변경시킨다. 변경은 악의적 또는 우발적이다.
Repudiation
사용자가 어떤 작업을 수행했는지 시스템 관리자 또는 보안 대리인이 증명할 수 없다. 감사 또는 로그 등과 관련이 있다.
Information discloser
승인되지 않은 사용자 또는 침입자가 데이터베이스 등에 저장된 타인의 결제정보를 볼 수 있다.
Denial of Service
DoS 공격은 유효한 사용자가 서비스를 사용하지 못하게 막는다.
Elevation of Privilege
관리자가 의도했던 것보다 더 큰 권한을 얻고, 그럼으로써 전체 시스템을 변조하거나 파괴할 수 있다.
우선 순위 부여하기
우선순위 부여하기는 간단한 과정이다.
Risk = Criticality / Effort
Criticality 는 보호받을 자원의 중요도를 뜻한다. 그리고 Effort는 해당 리소스에 대한 공격을 막기 위해 필요한 노력의 정도이다. 이때 Criticality에는 문제가 발생했을 때 발생할 수 있는 기업의 이미지 실추 등도 고려해야 한다.
위의 공식에 대해 더 자세히 알고 싶으면 Edward Amoroso의 Fundamentals of Computer Security Technology를 참고하라. (역자주: 원저자 Michael Howard가 제공한 링크가 깨져 있다. 책 이름을 구글에서 검색하면 원하는 결과를 볼 수 있다.)
위협 추적하기
위협을 잘 분석하기 위해서는 최소한 다음의 정보는 기록해야 한다.
- 위협 이름
- STRIDE 모델에 따른 위협의 종류
- 공격을 막기 위해 필요한 노력의 정도 (1-10)
- 공격이 일어났을 때 입는 피해 정도 (1-10)
- 어떤 하부컴포넌트가 위협의 타겟이 되는가 (예, 데이터베이스의 데이터, 시스템 설정 데이터 등등)
- 공격 기술들
- 완화 기술들
결론
결론은 간단하다. 위협을 이해하지 않고는 안전한 시스템을 만들 수 없다. 일단 잠재적인 위협을 가려내기만 하면, 어떤 보안기술을 쓸 것인지 올바르게 선택할 수 있다.
방문하고 커멘트 남겨주셔서 감사합니다. 말씀하신 내용을 반영하여 제 블로그 우측에 RSS를 링크하여 놓았습니다. ^^*
바쁘실텐데 감사합니다.