- 파일, 디렉터리와 같이 내부적으로 구현된 객체에 대해 개발자가 참조를 노출할 때 발생.
만약 접근 통제에 의한 확인이나 다른 보호가 없다면, 공격자는 데이터에 접근할 수 있음.
2. 취약점
- 애플리케이션은 웹 페이지를 생성할 때 종종 실제 이름이나 키 값을 사용 함.
게다가 사용자가 접근하려는 객체에 권한을 갖고 있는지 항상 검증하지 않음.
결과적으로 안전하지 않은 직접 객체 참조에 대한 결함에 노출되게 된다.
3. 공격 형태
- 허가된 시스템 사용자인 공격자는 시스템 객체에서 다른 객체에 직접적으로 접근할 수 있는 파라미터(parameter) 값을 계속 변경해 가면서 접근을 시도함.
4. 공격 시나리오 예
- 계정 정보에 접근하는 SQL 호출에 검증되지 않은 데이터를 사용하는 애플리케이션.
String query = "SELECT * FROM accts WHERE account = ?";
PreparedStatement pstmt = connection.prepareStatement(query , … );
pstmt.setString( 1, request.getParameter("acct"));
ResultSet results = pstmt.executeQuery( );
공격자는 자신의 브라우저에서 ‘acct’변수의 값을 다른 사람의 것으로 수정하여 전송할 수 있음.
만약 이러한 것이 검증되지 않는다면, 공격자는 다른 사용자의 계정에도 접근할 수 있음.
만약 접근 통제에 의한 확인이나 다른 보호가 없다면, 공격자는 데이터에 접근할 수 있음.
2. 취약점
- 애플리케이션은 웹 페이지를 생성할 때 종종 실제 이름이나 키 값을 사용 함.
게다가 사용자가 접근하려는 객체에 권한을 갖고 있는지 항상 검증하지 않음.
결과적으로 안전하지 않은 직접 객체 참조에 대한 결함에 노출되게 된다.
3. 공격 형태
- 허가된 시스템 사용자인 공격자는 시스템 객체에서 다른 객체에 직접적으로 접근할 수 있는 파라미터(parameter) 값을 계속 변경해 가면서 접근을 시도함.
4. 공격 시나리오 예
- 계정 정보에 접근하는 SQL 호출에 검증되지 않은 데이터를 사용하는 애플리케이션.
String query = "SELECT * FROM accts WHERE account = ?";
PreparedStatement pstmt = connection.prepareStatement(query , … );
pstmt.setString( 1, request.getParameter("acct"));
ResultSet results = pstmt.executeQuery( );
공격자는 자신의 브라우저에서 ‘acct’변수의 값을 다른 사람의 것으로 수정하여 전송할 수 있음.
만약 이러한 것이 검증되지 않는다면, 공격자는 다른 사용자의 계정에도 접근할 수 있음.
수정된 접근 URL : http://example.com/app/accountInfo?acct=notmyacct
- 보통 웹 페이지에서 링크에 마우스를 가져다 대면 화면 하단에 URL이 표시 됨.
http://test.com/admin으로 접근을 했을 때, "403 Forbidden: Access is denied" 표시 될수도 있지만 http://test.com/admin.asp 같이 입력하면 접근이 될 수도 있음.
admin 폴더에 접근 권한이 설정되어 있지만 admin.asp 파일에는 접근 권한이 설정 되지 않은 것을 이용한 것.
* 참고의 2번에 접속하면 자세한 과정이 나와있음.
5. 대응책
- 각 사용자들이 접근 가능한 객체를 보호하는 접근 방식의 선택이 요구 됨.(예: 객체 번호, 파일명 등)
- 사용자 혹은 세션당 간접 객체 참조를 사용.
공격자가 허가되지 않은 자원을 직접적으로 공격 목표로 삼는 것을 방지할 수 있음.
예를 들어 자원의 DB 키를 사용하는 대신에 허용된 자원에 대하여 드롭다운 리스트 메뉴를 사용하여
사용자가 선택하도록 허용된 자원 중에서 선택하도록 하는 방법을 사용.
애플리케이션은 사용자별 간접 참조를 서버 상의 실제 데이터베이스 키로 변환하게 됨.
- 접근에 대한 확인.
신뢰할 수 없는 것으로 부터 직접 객체 참조가 사용되면, 요청된 객체가 요청한 사용자에게 접근이 허용되었는지 반드시 확인하는 과정을 포함한다.
* 참고
1. OWASP TOP 10 2013
2. https://silnex.kro.kr/wordpress/2015/12/28/%EC%A0%9C-6%EA%B0%95-%EC%B7%A8%EC%95%BD%ED%95%9C-%EC%A7%81%EC%A0%91-%EA%B0%9D%EC%B2%B4-%EC%B0%B8%EC%A1%B0/
- 보통 웹 페이지에서 링크에 마우스를 가져다 대면 화면 하단에 URL이 표시 됨.
http://test.com/admin으로 접근을 했을 때, "403 Forbidden: Access is denied" 표시 될수도 있지만 http://test.com/admin.asp 같이 입력하면 접근이 될 수도 있음.
admin 폴더에 접근 권한이 설정되어 있지만 admin.asp 파일에는 접근 권한이 설정 되지 않은 것을 이용한 것.
* 참고의 2번에 접속하면 자세한 과정이 나와있음.
5. 대응책
- 각 사용자들이 접근 가능한 객체를 보호하는 접근 방식의 선택이 요구 됨.(예: 객체 번호, 파일명 등)
- 사용자 혹은 세션당 간접 객체 참조를 사용.
공격자가 허가되지 않은 자원을 직접적으로 공격 목표로 삼는 것을 방지할 수 있음.
예를 들어 자원의 DB 키를 사용하는 대신에 허용된 자원에 대하여 드롭다운 리스트 메뉴를 사용하여
사용자가 선택하도록 허용된 자원 중에서 선택하도록 하는 방법을 사용.
애플리케이션은 사용자별 간접 참조를 서버 상의 실제 데이터베이스 키로 변환하게 됨.
- 접근에 대한 확인.
신뢰할 수 없는 것으로 부터 직접 객체 참조가 사용되면, 요청된 객체가 요청한 사용자에게 접근이 허용되었는지 반드시 확인하는 과정을 포함한다.
* 참고
1. OWASP TOP 10 2013
2. https://silnex.kro.kr/wordpress/2015/12/28/%EC%A0%9C-6%EA%B0%95-%EC%B7%A8%EC%95%BD%ED%95%9C-%EC%A7%81%EC%A0%91-%EA%B0%9D%EC%B2%B4-%EC%B0%B8%EC%A1%B0/
댓글 없음:
댓글 쓰기