겉바속촉
[보안] 접근제어 (feat. 데이터레벨의 접근통제) 본문
지난 번에는 기능레벨의 접근통제에 대해서 알아봤습니다.
2021/02/08 - [IT 일기 (상반기)/네트워크 및 시스템 보안] - [보안] 접근제어 (feat. 기능레벨의 접근통제)
작업중이던 환경들은 지난포스팅과 동일하게 진행하고 있습니다.
참고해주세요:)
이번에는 데이터레벨의 접근통제에 대해서 알아보겠습니다.
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;
'IT 일기 (상반기) > 네트워크 및 시스템 보안' 카테고리의 다른 글
[보안] 파일 업로드 취약점 (1) | 2021.02.11 |
---|---|
[보안] Python SQL Injection (0) | 2021.02.11 |
[보안] 접근제어 (feat. 기능레벨의 접근통제) (0) | 2021.02.08 |
[보안] Bee-Box 설치 및 실행 (0) | 2021.02.08 |
[보안] 와이어샤크 파헤치기 (2) | 2021.02.08 |