본문 바로가기
cs

[정보보안] Seven pernicious kingdoms: 소프트웨어 보안 에러의 분류

by 최연탄 2019. 2. 12.
728x90
반응형

참고: Seven pernicious kingdoms: a taxonomy of software security errors
참고: CWE VIEW: Seven Pernicious Kingdoms

소스코드 상의 보안 문제를 다룰 때 같은 종류의 문제끼리 범주화 하면 언제 발생할지 모를 피해를 최소화할 수 있고 소스코드 작성 시 발생할 수 있는 실수를 줄일 수 있습니다. 이 문제는 ieee 저널에 기고된 일곱가지 위협 분류를 통해 알아볼 수 있습니다.

Input Validation and Representation - 입력 데이터 검증 및 표현

메타문자, 대체인코딩 및 숫자표현으로 인해 입력 유효성 및 표현 문제가 발생합니다. 때로는 개발자들이 입력값 검증을 전혀 안하기도 하는데, 일단 검증을 할꺼라면 블랙리스트 대신 화이트리스트 기법을 사용해야합니다.

예: 버퍼 오버플로우, XSS, SQL 인젝션, 캐시 포이즌 공격

API Abuse - API 악용

API는 호출자와 수신자 간의 규칙입니다. API 오용의 대부분은 호출자가 규칙대로 행동하지 않았을 때 발생합니다. 예를들어 약속된 파라미터를 사용하지 않았다거나 리턴값을 규칙대로 처리하지 않았을 때 입니다.

예: 검증없이 DNS 신뢰, 안전하지 않은 함수사용, 리턴값 검사 누락

Security Features - 보안 기능

소프트웨어 보안이라는 용어는 보안 소프트웨어를 의미하지 않습니다. 세상 모든 암호화 관련 도구를 사용해도 코드를 100프로 안전하게 해주진 못하겠지만, 사용하지 않을 경우 기본적인 보안 기능을 망칠 수도 있습니다. 예를 들어 SSL을 쓰면 네트워크 전체 트래픽을 보호할 수 있을꺼라 생각하겠지만 그건 오산입니다. 네트워크 전체의 보안을 위해서는 SSL 뿐만 아니라 인증, 접근 제어, 기밀성, 암호화, 권한 관리 등을 고려해야합니다.

예: 인증 없이 API 사용, 중요정보 평문 저장, 취약한 암호화 알고리즘 사용, 중요 자원에 대한 잘못된 권한 설정

Time and State - 시간 및 상태

분산 컴퓨팅이라는 것은 시간과 상태에 관한 것입니다. 다시말해 둘 이상의 구성 요소가 상호작용하려면 시간이 좀 걸리지만 반드시 상태가 공유되어야 하는데 이 부분이 공격하기 좋은 포인트입니다. 대부분의 프로그래머는 다양한 모듈에 대한 예외처리 없이 일괄적으로 코딩하는 경향이 있습니다. 컴퓨터는 작업전환이 굉장히 빠르기 때문에 두개의 이벤트가 정확히 동시에 일어나는 경우도 있는데 이러한 예외들은 실제로 실행할 때 프로세스나 쓰레드간 예상치 못한 결함으로 나타납니다.

예: Deadlock, Race Condition

Errors - 에러 처리

오류처리와 관련된 보안상 결함은 매우 많습니다. API 오용과 마찬가지로 대부분 둘 중 하나입니다. 오류 처리를 전혀 안하거나(또는 대충하거나) 보기 힘들정도로 너무 많은 정보를 제공하거나 입니다.

예: 오류 대응 부재, 오류 메시지를 통한 정보 노출, 적절치 않은 예외 처리

Code Quality - 코드 품질

낮은 코드 품질은 예측불가능한 동작으로 이어지고 사용자 입장에서는 이러한 동작이 사용성 저하로 나타나기도 합니다. 낮은 품질은 공격자가 예상치 못한 방법으로 시스템에 무리를 줄 수 있는 기회를 제공합니다.

예: 널 포인터 역참조, 부적절한 자원 해제

Encapsulation - 캡슐화

캡슐화는 객체 사이에 강한 경계를 만들고 서로 침범하지 못하게 하는 것 입니다. 웹 브라우저에서 이는 모바일 코드가 임의로 하드디스크에 접근하지 못하도록 하는 것을 의미하고, 웹 서비스 서버의 경우 인증된 유효한 데이터와 어제 씹다 책상밑에 붙인 껌처럼 미스테리한 데이터를 구분하는 것을 의미할 수 있습니다.

예: 잘못된 세션에 의한 데이터 노출, public 메소드에서 리턴된 private 배열

반응형

댓글