OWASP Top 10 2013 - A7. Missing Function Level Access Control (기능 수준의 접근 통제 누락)
Wr4ith2014. 6. 3. 12:02
기능 수준의 접근 통제 누락
정의
OWASP 2007년부터 2010년까지는 URL 접근 제한 실패 항목이 확장 된 것이라 다소 낯설게 느껴질 수 있지만 기본적인 개념은 같다.
URL 접근 제한 실패는 URL에서의 접근 제한 실패이지만, 기능 수준이라는 것은 URL 이외의 모든 것들을 말한다.
(프로그램의 계정, ARP 스푸핑 등) 웹 어플리케이션이 페이지들에 접근될 때 마다 접근 통제 확인이 필요한데, 이러한 행위가 이루어지지 않을 경우에는 권한이 없는
용자가 접근할 수 있게 되는데 이를 접근 제한 실패 (접근 통제 누락)이라고 한다.
보안 취약점
취약점 원리의 이해를 돕기 위해 URL 측면에서 살펴보면 관리자가 페이지를 관리하기 위한 페이지 (admin_page.php)가 있다고 가정한다.
일반적으로 관리자 페이지에 접근하기 위해서는 관리자 권한이 있어야 하지만, 관리자 권한을 점검하지 않고, 단순히 그 페이지의 URL 주소를
숨기는 방식으로 소스가 코딩 되었다고 하면 공격자가 관리자 페이지의 URL를 찾아내는 순간 권한이 없음에도 불구하고 관리자 페이지 접근이
가능하다. 혹은, 관리자 페이지의 URL도 숨기고, 권한 체크를 한 더 하더라도 웹 서버에 적절한 보안 정책(특정 횟수의 로그인 실패 후 세션 끊음)이 설정되어 있지 않으면 공격자는 Brute Force Attack(무작위 대입 공격)을 통해 결국 관리자의 아이디와 비밀번호를 얻을 수 있게 된다.
본 시나리오는 관리자 URL을 스캔하는 프로그램으로 특정한 사이트를 스캔하여 관리자 URL이 나오는지 안 나오는지 판별하는 방식으로
진행되며, 아래의 프로그램은 펄(Perl)로 짜여진 간단한 스크립트 파일로 admin url로 가장 많이 사용되는 url들을 넣은 후
이것들과 URL을 일일이 비교하여 Found / Not Found들을 출력하는 프로그램이다.
* 위의 사진의 결과에서 보듯이 해당 도메인은 /admin/login.php 라는 관리자 전용 로그인 페이지가 존재한다.
클라이언트에서 사용되는 변수를 통한 접근 통제 구현
WebGoat을 사용하여 admin 권한을 가질 때만 접근이 가능한 메뉴를 접근하는 방식의 테스트로 이루어 진다. WebGoat의 메뉴에는 Remote Admin Access 라는 항목이 있는데, 이곳에서 admin 권한을 획득하면 다른 메뉴 (Admin Functions)에 admin 일 때만
접근이 가능해지는 메뉴가 생긴다.
지금은 admin 권한이 없기 때문에 그저 Report Card 같은 메뉴 밖에 없다. 그렇다면 Remote Admin Access 항목에서 admin 권한을
위의 URL에서 admin=true은 직관적인 변수명에서 알다 싶이 admin인지 아닌 판별하는 변수이다. 결국 첫 번째 URL은 admin=false와 동일한 것이고 두 번째 URL은 admin=true이기 때문에 관리자 권한 획득이 된 상태이다. 이제 Admin Functions을 눌러보면 다음의
사진과 같이 다른 항목들이 나타난다.
대응 방안
- 관리자 페이지 등 (민감 정보 액세스 URL) 페이지들은 별도의 인증 절차(이중 인증)을 요구하도록 만든다.