[Tech Report] 안전하지 않은 직접 객체 참조, 공격 위험과 예방법
안전하지 않은 직접 객체 참조, 공격 위험과 예방법
OWASP(Open Web Application Security Project)에서는 웹 애플리케이션 환경에서 가장 중요한 위험 10가지를 선정하여 발표하고 있다. 안철수연구소 ASEC Report에서는 OWASP Top 10에 대해 집중 소개할 예정이다. 이를 통해 고객들이 웹 애플리케이션 보안의 취약점을 인지하고 예방할 수 있기를 기대한다. 지금까지 인젝션(Injection), XSS(Cross Site Scripting, 이하 XSS), 인증과 세션 관리에 대해 알아보았다. 이번 호에서는 안전하지 않은 직접 객체 참조에 대해 집중 소개한다.
OWASP 2010 TOP 4
이번 호에서 다루는 안전하지 않은 직접 객체 참조는 OWASP 2010의 Top 4에 해당한다. 직접 객체 참조는 파일, 디렉터리, 데이터베이스 키와 같이 내부적으로 구현된 객체에 대해 개발자가 참조를 노출할 때 발생한다. 만약 접근 통제에 의한 확인이나 다른 보호가 없다면, 공격자는 이 참조를 권한 없는 데이터에 접근하기 위해 조작할 수 있다. 먼저 안전하지 않은 직접 객체 참조 공격의 주요 사항은 아래 [그림]을 통해 알 수 있다.
[그림] 안전하지 않은 직접 객체 참조 개괄
주요 내용
Threat Agents(공격자): 자신의 계정을 소유하고 있는 사용자이거나 타인의 계정을 훔치려는 익명의 외부 공격자, 자신의 행위를 숨기려고 하는 내부 사용자이다.
Attack Vectors(공격경로): 허가된 시스템 사용자인 공격자는 시스템 객체에서 다른 객체에 직접적으로 접근할 수 있는 파라미터(parameter) 값을 간단하게 변경한다. 이러한 것이 허가될 수 있는지를 확인해야 한다.
Security Weakness(보안 취약점): 애플리케이션은 웹 페이지를 생성할 때 종종 실제 이름이나 키 값을 사용한다. 애플리케이션은 사용자가 대상 객체에 대한 권한을 갖고 있는지 항상 검증하지 않는다. 결과적으로 안전하지 않은 직접 객체 참조에 대한 결함에 노출되게 된다. 이 취약점들을 탐지하기 위해 변수 값을 변경하는 테스트를 쉽게 할 수 있으며, 코드 분석을 통해 권한 부여가 적절한지를 신속하게 검증할 수 있다.
Technical Impacts(기술적 영향): 이 결함은 변수 값을 참조하는 모든 데이터를 위태롭게 할 수 있다. 변수 명명이 일반적이지 않다면, 공격자가 모든 가능한 데이터에 대해 쉽게 접근할 수 있다.
Business Impacts(비즈니스 영향): 노출되는 데이터의 비즈니스적 가치를 고려한다. 또한 취약점의 공개적 노출에 대한 비즈니스의 영향을 고려해야 한다.
공격 시나리오 예
계정 정보에 접근하는 SQL 호출에 검증되지 않은 데이터를 사용하는 애플리케이션이 있다.
공격자는 간단하게 자신의 브라우저에서 ‘acct’변수의 값을 수정하여 원하는 계정 번호로 전송할 수 있다. 만약 이러한 것이 검증되지 않는다면, 공격자는 해당 사용자뿐만 아니라 다른 어떠한 사용자의 계정에도 접근할 수 있다.
대응책
안전하지 않는 직접 객체 참조를 방지하려면, 각 사용자들이 접근 가능한 객체를 보호하는 접근 방식의 선택이 요구된다.(예: 객체 번호, 파일명 등)
- 사용자 혹은 세션 당 간접 객체 참조를 사용한다.
이를 통해 공격자가 허가되지 않은 자원을 직접적으로 공격 목표로 삼는 것을 방지할 수 있다. 예를 들어 자원의 데이터베이스 키를 사용하는 대신에 허용된 6개의 자원에 대하여 드롭다운 리스트 메뉴를 사용하여 현재 사용자가 선택하도록 허용된 1~6 중에서 선택하도록 하는 방법을 사용한다. 애플리케이션은 사용자별 간접 참조를 서버 상의 실제 데이터베이스 키로 변환한다. OWASP의 ESAPI에서는 개발자들이 직접 객체 참조를 제거할 수 있도록 순차적인 접근과 무작위 접근에 대한 예시를 제공한다.
- 접근을 확인한다.
신뢰할 수 없는 소스로부터 직접 객체 참조가 사용되면, 각각의 사용에 대해 요청한 객체가 사용자에게 접근이 허용되었는지 확인하기 위해 반드시 접근 통제 확인을 포함해야만 한다.@
[Reference]
OWASP
• OWASP Top 10-2007 안전하지 않은 직접객체참조
• ESAPI 접근 참조 맵 API
• ESAPI 접근 통제 API
- (isAuthorizedForData(), isAuthorizedForFile(), isAuthorizedForFunction() 참조)
External
• CWE 639 항목: 안전하지 않은 직접객체참조
• CWE 22 항목: Path Traversal(직접 객체 참조 공격의 예)
- 안철수연구소