겉바속촉

[보안] 접근제어 (feat. 데이터레벨의 접근통제) 본문

IT 일기 (상반기)/네트워크 및 시스템 보안

[보안] 접근제어 (feat. 데이터레벨의 접근통제)

겉바속촉 2021. 2. 10. 23:05
728x90
반응형

 

 

 

지난 번에는 기능레벨의 접근통제에 대해서 알아봤습니다.

 

2021/02/08 - [IT 일기 (상반기)/네트워크 및 시스템 보안] - [보안] 접근제어 (feat. 기능레벨의 접근통제)

 

[보안] 접근제어 (feat. 기능레벨의 접근통제)

접근제어 (Access Control) 화면에서의 접근제어(Presentaion layer access control) ⇒ 권한 있는 사용자에게만 기능 버튼과 링크를 제공 기능 레벨에서의 접근제어(Business layer access control) ⇒ 권한 있는..

2-juhyun-2.tistory.com

 

작업중이던 환경들은 지난포스팅과 동일하게 진행하고 있습니다.

참고해주세요:)

 

 

 


 

 

 

 

이번에는 데이터레벨의 접근통제에 대해서 알아보겠습니다.

 

WebGoat 페이지에서 Access Control Flaws-LAB으로 가서 Stage3로 가보도록 하겠습니다.

 

 

 

Tom으로 로그인을 해준 후에 ViewProfile을 클릭한 상태입니다

 

Tom의 권한이 있기 때문에 저것이 가능하겠죠??

그럼 다시 전으로 넘어와서 버프슈트의 인터셉트를 on해주고 다시 ViewProfile을 클릭해보겠습니다.

employee_id=105

action=ViewProfile

이 전달되는 것을 확인했습니다:)

 

사번이 105인 것을 볼 수 있네요??

그렇다면 사번을 다른 번호로 바꿔준다면 어떻게 될까요!!

 

112번으로 고쳐주고 나서 다시 인터셉트를 풀어서 off로 바꾸도록 할게요.

 

 

 

그랬더니 다음과 같이 나왔습니다:)

분명히 Tom으로 로그인을 했는 데 프로필 정보는 Nevile에 대한 정보가 나왔습니다.

 

 

 

 

 

 


 

 

 

 

 

일반적으로 제공되는 서비스는 두가지입니다.

 

 

 

1. 목록형 서비스

 

동일한 형태의 데이터가 나열되어 있습니다.

 

 직원이름   부서   전화번호 

     :

     :

     :

 

위와 같은 형식으로 리스트가 나오는 것이죠!! 

 

 

 

2. 상세 서비스 (detal, view)

 

하나의 데이터를 상세하게 출력해냅니다.

 

 직원이름 : ___________

 부      서 : ___________

 전화번호 : ___________

 

위와 같은 형식으로 데이터가 나오는 것이죠!!

 

 

 

목록형 서비스에서 상세서비스로 넘어갈 때 전달해주는 값이 있습니다.

그것이 바로 유일키라는 것인데요.

 

 

DB에서 말하는 PK라는 것이 유일키를 의미하죠.

 

사람으로 치면 주민등록번호가 해당이 되겠네요?!

 

 

이 유일키가 상세 서비스로 넘어가면서

쿼리가 다음과 같은 형태로 생성이 되는 것입니다.

 

select * from 테이블 where 유일키 = 파라미터로 전달된 유일키

 

 

그럼 문제가 뭘까요??

 

넘어가는 유일키가 바뀌어버리면 출력되는 데이터가 바뀌게 되는 것입니다.

그래서 저런 형태의 쿼리가 만들어지면 안되는 것입니다ㅠㅠㅠ

 

 

상세서비스를 출력하는 기능을 만들 때

데이터를 식별하는 값을 유일키로만 조회되도록 하면 안된다는 결론이 나오죠!!!

 

 

 

그럼 통제를 해주어야합니다!!!

 

현재 쿼리문

: String query = "SELECT * FROM employee WHERE userid = " + subjectUserID;

 

통제 기능 추가한 쿼리문

: String query = "SELECT * FROM employee,ownership WHERE userid = ownership.employee_id and " + "ownership.employer_id = " + userId + " and ownership.employee_id = " + subjectUserId;

 

 

 

 

728x90
반응형