[SW개발보안] SR1-1 DBMS 조회 및 결과 검증
SR1-1 DBMS 조회 및 결과 검증
⇒ SQL 삽입 보안약점
외부 입력값에 쿼리 조작 문자열 포함 여부를 확인하지 않고 쿼리문을 생성, 실행하는 경우, 쿼리의 구조와 의미가 변경되어서 실행되는 것
[예상 피해]
-
권한 밖의 데이터 접근이 가능
-
DBMS 제어권을 탈취
-
해당 쿼리 실행 통해서 제공하는 기능을 우회
[방어 대책]
-
외부 입력값에 쿼리 조작 문자열 포함 여부를 확인 후 사용
-
정적 쿼리 실행을 지원하는 프레임워크 또는 라이브러리를 사용 = 구조화된 쿼리를 실행 = 파라미터화된 쿼리 실행 ⇒ iBatis/myBatis/Hibernate, PreparedStatement
-
어플리케이션에서 사용하는 DB 사용자의 권한을 최소한으로 부여 → SQL 삽입 보안약점을 이용한 공격을 완화
-
오류 메시지에 시스템 주요 정보가 포함되지 않도록 한다. → Error Based SQL 삽입 공격을 완화
searchId.jsp
======================================================
String id = request.getParameter("id");
String query = "select * from users where id = " + id;
Statement stmt = connection.createStatement();
stmt.executeQuery(query);
[개발자가 원한 입력 = 안전한 입력 = 의도한 입력]
searchId.jsp?id=123
⇒ select * from users where id = 123
⇒ id 컬럼의 값이 123인 사용자 정보를 조회
[공격자가 조작한 입력 = 안전하지 입력 = 의도하지 않은 입력]
searchId.jsp?id=123 or 1=1
⇒ select * from users where id = 123 or 1=1
⇒ 모든 사용자 정보를 조회
[안전한 코드 예]
String id = request.getParameter("id");
// 쿼리의 구조를 정의
String query = "select * from users where id = ? ";
// 구조화된 쿼리를 실행하는 PreparedStatement 객체를 생성
PreparedStatement stmt = connection.prepareStatement(query);
// 정의한 쿼리 구조에 변수를 매핑
stmt.setInt(1, Integer.parseInt(id));
// 쿼리를 실행
stmt.executeQuery();
//EXCEPTION (에러 반환 혹은 정상적으로 실행 시키기)
메타문자와 이스케이프
String input = request.getParameter("input"); ⇐ a' or 'a' = 'a
String query = "select * from users where name = '" + input + "' ";
select * from users where name = 'a' or 'a' = 'a'
의미 문자(meta char) = 특수 문자
어떤 기능에서 특별한 용도(의미)를 포함하고 있는 문자
이스케이프
-
이스케이프 문자(\)를 사용
-
해당 기능에서 제공하는 방법을 적용
-
인코딩/디코딩 기법을 적용
SQL문에서 '(홑따움표) ⇒ 문자열 데이터의 시작과 끝
select * from users where name = 'John\'s 2nd'
select * from users where name = 'John''s 2nd'
URL주소에서 & ⇒ 파라미터와 파라미터를 구분하는 용도
search.jsp?vend_name=Bandi & Luce&address=gangname&...
search.jsp?vend_name=Bandi %26 Luce&address=gangname&...
'슈개's IT > SW개발보안' 카테고리의 다른 글
[SW개발보안] SR1-6. 웹 기반 중요기능 수행 요청 유효성 검증 (0) | 2021.01.23 |
---|---|
[SW개발보안] SR1-5. 웹 서비스 요청 및 결과 검증 (0) | 2021.01.23 |
[SW개발보안] SR1-4. 시스템 자원접근 및 명령어 수행 입력값 검증 (0) | 2021.01.23 |
[SW개발보안] SR1-3. 디렉터리 서비스 조회 및 결과 검증 (0) | 2021.01.23 |
[SW개발보안] SR1-2. XML 조회 및 결과 검증 (0) | 2021.01.23 |